source: issm/trunk/src/c/objects/Numpar.cpp@ 2907

Last change on this file since 2907 was 2907, checked in by seroussi, 15 years ago

added Folds in objects

File size: 8.7 KB
Line 
1/*!\file Numpar.c
2 * \brief: implementation of the Numpar object
3 */
4
5#ifdef HAVE_CONFIG_H
6 #include "config.h"
7#else
8#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
9#endif
10
11#include "stdio.h"
12#include "./Numpar.h"
13#include <string.h>
14#include "../EnumDefinitions/EnumDefinitions.h"
15#include "../shared/shared.h"
16#include "../DataSet/DataSet.h"
17#include "../include/typedefs.h"
18
19
20/*Object constructors and destructor*/
21/*FUNCTION Numpar::constructor {{{1*/
22Numpar::Numpar(){
23 return;
24}
25/*}}}*/
26/*FUNCTION Numpar::creation {{{1*/
27Numpar::Numpar(int numpar_id){
28 id=numpar_id;
29
30 meanvel=UNDEF;
31 epsvel=UNDEF;
32 artdiff=UNDEF;
33 viscosity_overshoot=UNDEF;
34 stokesreconditioning=UNDEF;
35 control_type=NULL;
36 cm_noisedmp=UNDEF;
37 cm_mindmp_value=UNDEF;
38 cm_mindmp_slope=UNDEF;
39 cm_maxdmp_value=UNDEF;
40 cm_maxdmp_slope=UNDEF;
41
42 return;
43}
44/*}}}*/
45/*FUNCTION Numpar::destructor {{{1*/
46Numpar::~Numpar(){
47 return;
48}
49/*}}}*/
50
51/*Object marshall*/
52/*FUNCTION Numpar::Marshall {{{1*/
53void Numpar::Marshall(char** pmarshalled_dataset){
54
55 char* marshalled_dataset=NULL;
56 int enum_type=0;
57
58 /*recover marshalled_dataset: */
59 marshalled_dataset=*pmarshalled_dataset;
60
61 /*get enum type of Numpar: */
62 enum_type=NumparEnum();
63
64 /*marshall enum: */
65 memcpy(marshalled_dataset,&enum_type,sizeof(enum_type));marshalled_dataset+=sizeof(enum_type);
66
67 /*marshall Numpar data: */
68 memcpy(marshalled_dataset,&id,sizeof(id));marshalled_dataset+=sizeof(id);
69 memcpy(marshalled_dataset,&meanvel,sizeof(meanvel));marshalled_dataset+=sizeof(meanvel);
70 memcpy(marshalled_dataset,&epsvel,sizeof(epsvel));marshalled_dataset+=sizeof(epsvel);
71 memcpy(marshalled_dataset,&artdiff,sizeof(artdiff));marshalled_dataset+=sizeof(artdiff);
72 memcpy(marshalled_dataset,&viscosity_overshoot,sizeof(viscosity_overshoot));marshalled_dataset+=sizeof(viscosity_overshoot);
73 memcpy(marshalled_dataset,&stokesreconditioning,sizeof(stokesreconditioning));marshalled_dataset+=sizeof(stokesreconditioning);
74 memcpy(marshalled_dataset,&control_type,sizeof(control_type));marshalled_dataset+=sizeof(control_type);
75 memcpy(marshalled_dataset,&cm_noisedmp,sizeof(cm_noisedmp));marshalled_dataset+=sizeof(cm_noisedmp);
76 memcpy(marshalled_dataset,&cm_mindmp_value,sizeof(cm_mindmp_value));marshalled_dataset+=sizeof(cm_mindmp_value);
77 memcpy(marshalled_dataset,&cm_mindmp_slope,sizeof(cm_mindmp_slope));marshalled_dataset+=sizeof(cm_mindmp_slope);
78 memcpy(marshalled_dataset,&cm_maxdmp_value,sizeof(cm_maxdmp_value));marshalled_dataset+=sizeof(cm_maxdmp_value);
79 memcpy(marshalled_dataset,&cm_maxdmp_slope,sizeof(cm_maxdmp_slope));marshalled_dataset+=sizeof(cm_maxdmp_slope);
80
81 *pmarshalled_dataset=marshalled_dataset;
82 return;
83}
84/*}}}*/
85/*FUNCTION Numpar::MarshallSize{{{1*/
86int Numpar::MarshallSize(){
87 return sizeof(id)
88 +sizeof(meanvel)
89 +sizeof(epsvel)
90 +sizeof(artdiff)
91 +sizeof(viscosity_overshoot)
92 +sizeof(stokesreconditioning)
93 +sizeof(control_type)
94 +sizeof(cm_noisedmp)
95 +sizeof(cm_mindmp_value)
96 +sizeof(cm_mindmp_slope)
97 +sizeof(cm_maxdmp_value)
98 +sizeof(cm_maxdmp_slope)
99 +sizeof(int); //sizeof(int) for enum type
100}
101/*}}}*/
102/*FUNCTION Numpar::Demarshall {{{1*/
103void Numpar::Demarshall(char** pmarshalled_dataset){
104
105 char* marshalled_dataset=NULL;
106 int i;
107
108 /*recover marshalled_dataset: */
109 marshalled_dataset=*pmarshalled_dataset;
110
111 /*this time, no need to get enum type, the pointer directly points to the beginning of the
112 *object data (thanks to DataSet::Demarshall):*/
113
114 memcpy(&id,marshalled_dataset,sizeof(id));marshalled_dataset+=sizeof(id);
115 memcpy(&meanvel,marshalled_dataset,sizeof(meanvel));marshalled_dataset+=sizeof(meanvel);
116 memcpy(&epsvel,marshalled_dataset,sizeof(epsvel));marshalled_dataset+=sizeof(epsvel);
117 memcpy(&artdiff,marshalled_dataset,sizeof(artdiff));marshalled_dataset+=sizeof(artdiff);
118 memcpy(&viscosity_overshoot,marshalled_dataset,sizeof(viscosity_overshoot));marshalled_dataset+=sizeof(viscosity_overshoot);
119 memcpy(&stokesreconditioning,marshalled_dataset,sizeof(stokesreconditioning));marshalled_dataset+=sizeof(stokesreconditioning);
120 memcpy(&control_type,marshalled_dataset,sizeof(control_type));marshalled_dataset+=sizeof(control_type);
121 memcpy(&cm_noisedmp,marshalled_dataset,sizeof(cm_noisedmp));marshalled_dataset+=sizeof(cm_noisedmp);
122 memcpy(&cm_mindmp_value,marshalled_dataset,sizeof(cm_mindmp_value));marshalled_dataset+=sizeof(cm_mindmp_value);
123 memcpy(&cm_mindmp_slope,marshalled_dataset,sizeof(cm_mindmp_slope));marshalled_dataset+=sizeof(cm_mindmp_slope);
124 memcpy(&cm_maxdmp_value,marshalled_dataset,sizeof(cm_maxdmp_value));marshalled_dataset+=sizeof(cm_maxdmp_value);
125 memcpy(&cm_maxdmp_slope,marshalled_dataset,sizeof(cm_maxdmp_slope));marshalled_dataset+=sizeof(cm_maxdmp_slope);
126
127 /*return: */
128 *pmarshalled_dataset=marshalled_dataset;
129 return;
130}
131/*}}}*/
132
133/*Object functions*/
134/*FUNCTION Numpar::Configure {{{1*/
135#undef __FUNCT__
136#define __FUNCT__ "Numpar::Configure"
137void Numpar::Configure(void* pparametersin){
138
139 DataSet* parameters=NULL;
140
141 /*Recover virtual pointer:*/
142 parameters=(DataSet*)pparametersin;
143
144 /*Go through parameters dataset, and find the Param object corresponding to our fields,
145 * and update the fields: */
146 parameters->FindParam(&meanvel,"meanvel");
147 parameters->FindParam(&epsvel,"epsvel");
148 if(!parameters->FindParam(&artdiff,"artdiff"))throw ErrorException(__FUNCT__," error message: could not update artdiff field");
149 if(!parameters->FindParam(&viscosity_overshoot,"viscosity_overshoot"))throw ErrorException(__FUNCT__," error message: could not update viscosity_overshoot field");
150 if(!parameters->FindParam(&stokesreconditioning,"stokesreconditioning"))throw ErrorException(__FUNCT__," error message: could not update stokesreconditioning field");
151 xfree((void**)&control_type); parameters->FindParam(&control_type,"control_type");
152 parameters->FindParam(&cm_noisedmp,"cm_noisedmp");
153 parameters->FindParam(&cm_mindmp_value,"cm_mindmp_value");
154 parameters->FindParam(&cm_mindmp_slope,"cm_mindmp_slope");
155 parameters->FindParam(&cm_maxdmp_value,"cm_maxdmp_value");
156 parameters->FindParam(&cm_maxdmp_slope,"cm_maxdmp_slope");
157
158 return;
159}
160/*}}}*/
161/*FUNCTION Numpar::copy {{{1*/
162Object* Numpar::copy() {
163
164 return new Numpar(*this);
165
166}
167/*}}}*/
168/*FUNCTION Numpar::DeepEcho {{{1*/
169#undef __FUNCT__
170#define __FUNCT__ "Numpar::DeepEcho"
171void Numpar::DeepEcho(void){
172
173 printf("Numpar:\n");
174 printf(" id: %i\n",id);
175 printf(" meanvel: %g\n",meanvel);
176 printf(" epsvel: %g\n",epsvel);
177 printf(" artdiff: %i\n",artdiff);
178 printf(" viscosity_overshoot: %g\n",viscosity_overshoot);
179 printf(" stokesreconditioning: %g\n",stokesreconditioning);
180 printf(" control_type: %s\n",control_type);
181 printf(" cm_noisedmp: %g\n",cm_noisedmp);
182 printf(" cm_mindmp_value: %g\n",cm_mindmp_value);
183 printf(" cm_mindmp_slope: %g\n",cm_mindmp_slope);
184 printf(" cm_maxdmp_value: %g\n",cm_maxdmp_value);
185 printf(" cm_maxdmp_slope: %g\n",cm_maxdmp_slope);
186}
187/*}}}*/
188/*FUNCTION Numpar::Echo{{{1*/
189#undef __FUNCT__
190#define __FUNCT__ "Numpar::Echo"
191void Numpar::Echo(void){
192
193 printf("Numpar:\n");
194 printf(" id: %i\n",id);
195 printf(" meanvel: %g\n",meanvel);
196 printf(" epsvel: %g\n",epsvel);
197 printf(" artdiff: %i\n",artdiff);
198 printf(" viscosity_overshoot: %g\n",viscosity_overshoot);
199 printf(" stokesreconditioning: %g\n",stokesreconditioning);
200 printf(" control_type: %s\n",control_type);
201 printf(" cm_noisedmp: %g\n",cm_noisedmp);
202 printf(" cm_mindmp_value: %g\n",cm_mindmp_value);
203 printf(" cm_mindmp_slope: %g\n",cm_mindmp_slope);
204 printf(" cm_maxdmp_value: %g\n",cm_maxdmp_value);
205 printf(" cm_maxdmp_slope: %g\n",cm_maxdmp_slope);
206}
207/*}}}*/
208/*FUNCTION Numpar::Enum {{{1*/
209int Numpar::Enum(void){
210
211 return NumparEnum();
212
213}
214/*}}}*/
215/*FUNCTION Numpar::GetId {{{1*/
216int Numpar::GetId(void){ return id; }
217/*}}}*/
218/*FUNCTION Numpar::GetName {{{1*/
219char* Numpar::GetName(void){
220 return "beam";
221}
222/*}}}*/
223/*FUNCTION Numpar::MyRank {{{1*/
224int Numpar::MyRank(void){
225 extern int my_rank;
226 return my_rank;
227}
228/*}}}*/
229/*FUNCTION Numpar::UpdateFromInputs {{{1*/
230#undef __FUNCT__
231#define __FUNCT__ "Numpar::UpdateFromInputs"
232void Numpar::UpdateFromInputs(void* vinputs){
233
234 ParameterInputs* inputs=NULL;
235
236 /*recover pointers: */
237 inputs=(ParameterInputs*)vinputs;
238
239 /*Update internal data if inputs holds new values: */
240 inputs->Recover("meanvel",&meanvel);
241 inputs->Recover("epsvel",&epsvel);
242 inputs->Recover("artdiff",&artdiff);
243 inputs->Recover("viscosity_overshoot",&viscosity_overshoot);
244 inputs->Recover("stokesreconditioning",&stokesreconditioning);
245 inputs->Recover("control_type",&control_type);
246 inputs->Recover("cm_noisedmp",&cm_noisedmp);
247 inputs->Recover("cm_mindmp_value",&cm_mindmp_value);
248 inputs->Recover("cm_mindmp_slope",&cm_mindmp_slope);
249 inputs->Recover("cm_maxdmp_value",&cm_maxdmp_value);
250 inputs->Recover("cm_maxdmp_slope",&cm_maxdmp_slope);
251
252}
253/*}}}*/
Note: See TracBrowser for help on using the repository browser.