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

Last change on this file since 3612 was 3612, checked in by Eric.Larour, 15 years ago

First new interface with new inputs

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