source: issm/trunk/src/c/Container/Parameters.cpp@ 10522

Last change on this file since 10522 was 10522, checked in by Mathieu Morlighem, 13 years ago

Simplified constructors of classes derived from Dataset

File size: 13.1 KB
RevLine 
[3702]1/*
2 * \file Parameters.c
3 * \brief: implementation of the Parameters class, derived from DataSet class
4 */
5
6/*Headers: {{{1*/
7#ifdef HAVE_CONFIG_H
[9320]8 #include <config.h>
[3702]9#else
10#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
11#endif
12
13#include <vector>
14#include <functional>
15#include <algorithm>
16#include <iostream>
17
18#include "./DataSet.h"
19#include "../shared/shared.h"
[3775]20#include "../include/include.h"
[3702]21#include "../EnumDefinitions/EnumDefinitions.h"
22
23using namespace std;
24/*}}}*/
25
26/*Object constructors and destructor*/
[3766]27/*FUNCTION Parameters::Parameters(){{{1*/
[3702]28Parameters::Parameters(){
[10522]29 enum_type=ParametersEnum;
[3702]30 return;
31}
32/*}}}*/
[3766]33/*FUNCTION Parameters::~Parameters(){{{1*/
[3702]34Parameters::~Parameters(){
35 return;
36}
37/*}}}*/
38
39/*Object management*/
[8263]40/*FUNCTION Parameters::Exist{{{1*/
41bool Parameters::Exist(int enum_type){
42
43 vector<Object*>::iterator object;
44 Param* param=NULL;
45
46 for ( object=objects.begin() ; object < objects.end(); object++ ){
47 param=(Param*)(*object);
[9883]48 if(param->InstanceEnum()==enum_type) return true;
[8263]49 }
50 return false;
51}
52/*}}}*/
[3766]53/*FUNCTION Parameters::FindParam(bool* pbool,int enum_type){{{1*/
[8376]54void Parameters::FindParam(bool* pbool,int enum_type){ _assert_(this);
[3702]55
56 vector<Object*>::iterator object;
57 Param* param=NULL;
58
59 for ( object=objects.begin() ; object < objects.end(); object++ ){
60
[3766]61 param=(Param*)(*object);
[9883]62 if(param->InstanceEnum()==enum_type){
[3766]63 param->GetParameterValue(pbool);
[8263]64 return;
[3702]65 }
66 }
[8263]67 _error_("could not find parameter %s",EnumToStringx(enum_type));
[3702]68}
69/*}}}*/
[3766]70/*FUNCTION Parameters::FindParam(int* pinteger,int enum_type){{{1*/
[8376]71void Parameters::FindParam(int* pinteger,int enum_type){ _assert_(this);
[3702]72
73 vector<Object*>::iterator object;
74 Param* param=NULL;
75
76 for ( object=objects.begin() ; object < objects.end(); object++ ){
77
[3766]78 param=(Param*)(*object);
[9883]79 if(param->InstanceEnum()==enum_type){
[3766]80 param->GetParameterValue(pinteger);
[8263]81 return;
[3702]82 }
83 }
[8263]84 _error_("could not find parameter %s",EnumToStringx(enum_type));
[3702]85}
86/*}}}*/
[3766]87/*FUNCTION Parameters::FindParam(double* pscalar, int enum_type){{{1*/
[8376]88void Parameters::FindParam(double* pscalar, int enum_type){ _assert_(this);
[3732]89
90 vector<Object*>::iterator object;
91 Param* param=NULL;
92
93 for ( object=objects.begin() ; object < objects.end(); object++ ){
94
[3766]95 param=(Param*)(*object);
[9883]96 if(param->InstanceEnum()==enum_type){
[3766]97 param->GetParameterValue(pscalar);
[8263]98 return;
[3732]99 }
100 }
[8263]101 _error_("could not find parameter %s",EnumToStringx(enum_type));
[3732]102}
103/*}}}*/
[3766]104/*FUNCTION Parameters::FindParam(char** pstring,int enum_type){{{1*/
[8376]105void Parameters::FindParam(char** pstring,int enum_type){ _assert_(this);
[3702]106
107 vector<Object*>::iterator object;
108 Param* param=NULL;
109
110 for ( object=objects.begin() ; object < objects.end(); object++ ){
111
[3766]112 param=(Param*)(*object);
[9883]113 if(param->InstanceEnum()==enum_type){
[3766]114 param->GetParameterValue(pstring);
[8263]115 return;
[3702]116 }
117 }
[8263]118 _error_("could not find parameter %s",EnumToStringx(enum_type));
[3702]119
120}
121/*}}}*/
[3766]122/*FUNCTION Parameters::FindParam(char*** pstringarray,int* pM,int enum_type){{{1*/
[8376]123void Parameters::FindParam(char*** pstringarray,int* pM,int enum_type){ _assert_(this);
[3702]124
125 vector<Object*>::iterator object;
126 Param* param=NULL;
127
128 for ( object=objects.begin() ; object < objects.end(); object++ ){
129
[3766]130 param=(Param*)(*object);
[9883]131 if(param->InstanceEnum()==enum_type){
[3766]132 param->GetParameterValue(pstringarray,pM);
[8263]133 return;
[3702]134 }
135 }
[8263]136 _error_("could not find parameter %s",EnumToStringx(enum_type));
[3702]137
138}
139/*}}}*/
[6213]140/*FUNCTION Parameters::FindParam(int** pintarray,int* pM,int enum_type){{{1*/
[8376]141void Parameters::FindParam(int** pintarray,int* pM, int enum_type){ _assert_(this);
[6213]142
143 vector<Object*>::iterator object;
144 Param* param=NULL;
145
146 for ( object=objects.begin() ; object < objects.end(); object++ ){
147
148 param=(Param*)(*object);
[9883]149 if(param->InstanceEnum()==enum_type){
[6213]150 param->GetParameterValue(pintarray,pM);
[8263]151 return;
[6213]152 }
153 }
[8263]154 _error_("could not find parameter %s",EnumToStringx(enum_type));
[6213]155
156}
157/*}}}*/
[8600]158/*FUNCTION Parameters::FindParam(int** pintarray,int* pM,int* pN,int enum_type){{{1*/
159void Parameters::FindParam(int** pintarray,int* pM,int *pN,int enum_type){ _assert_(this);
160
161 vector<Object*>::iterator object;
162 Param* param=NULL;
163
164 for ( object=objects.begin() ; object < objects.end(); object++ ){
165
166 param=(Param*)(*object);
[9883]167 if(param->InstanceEnum()==enum_type){
[8600]168 param->GetParameterValue(pintarray,pM,pN);
169 return;
170 }
171 }
172 _error_("could not find parameter %s",EnumToStringx(enum_type));
173
174}
175/*}}}*/
[3766]176/*FUNCTION Parameters::FindParam(double** pdoublearray,int* pM,int enum_type){{{1*/
[8376]177void Parameters::FindParam(double** pdoublearray,int* pM, int enum_type){ _assert_(this);
[8263]178
[3702]179 vector<Object*>::iterator object;
180 Param* param=NULL;
181
182 for ( object=objects.begin() ; object < objects.end(); object++ ){
183
[3766]184 param=(Param*)(*object);
[9883]185 if(param->InstanceEnum()==enum_type){
[3766]186 param->GetParameterValue(pdoublearray,pM);
[8263]187 return;
[3702]188 }
189 }
[8263]190 _error_("could not find parameter %s",EnumToStringx(enum_type));
[3702]191
192}
193/*}}}*/
[3766]194/*FUNCTION Parameters::FindParam(double** pdoublearray,int* pM, int* pN,int enum_type){{{1*/
[8376]195void Parameters::FindParam(double** pdoublearray,int* pM, int* pN,int enum_type){ _assert_(this);
[8263]196
[3702]197 vector<Object*>::iterator object;
198 Param* param=NULL;
199
200 for ( object=objects.begin() ; object < objects.end(); object++ ){
201
[3766]202 param=(Param*)(*object);
[9883]203 if(param->InstanceEnum()==enum_type){
[3766]204 param->GetParameterValue(pdoublearray,pM,pN);
[8263]205 return;
[3702]206 }
207 }
[8263]208 _error_("could not find parameter %s",EnumToStringx(enum_type));
[3702]209
210}
211/*}}}*/
[4855]212/*FUNCTION Parameters::FindParam(double*** parray,int* pM,int** pmdims_array,int** pndims_array,int enum_type){{{1*/
[8376]213void Parameters::FindParam(double*** parray,int* pM,int** pmdims_array,int** pndims_array,int enum_type){ _assert_(this);
[4855]214
215 vector<Object*>::iterator object;
216 Param* param=NULL;
217
218 for ( object=objects.begin() ; object < objects.end(); object++ ){
219
220 param=(Param*)(*object);
[9883]221 if(param->InstanceEnum()==enum_type){
[4855]222 param->GetParameterValue(parray,pM,pmdims_array,pndims_array);
[8263]223 return;
[4855]224 }
225 }
[8263]226 _error_("could not find parameter %s",EnumToStringx(enum_type));
[4855]227}
228/*}}}*/
[3766]229/*FUNCTION Parameters::FindParam(Vec* pvec,int enum_type){{{1*/
[8376]230void Parameters::FindParam(Vec* pvec,int enum_type){ _assert_(this);
[3702]231
232 vector<Object*>::iterator object;
233 Param* param=NULL;
234
235 for ( object=objects.begin() ; object < objects.end(); object++ ){
236
[3766]237 param=(Param*)(*object);
[9883]238 if(param->InstanceEnum()==enum_type){
[3766]239 param->GetParameterValue(pvec);
[8263]240 return;
[3702]241 }
242 }
[8263]243 _error_("could not find parameter %s",EnumToStringx(enum_type));
[3702]244
245}
246/*}}}*/
[4059]247/*FUNCTION Parameters::FindParam(Mat* pmat,int enum_type){{{1*/
[8376]248void Parameters::FindParam(Mat* pmat,int enum_type){ _assert_(this);
[3702]249
250 vector<Object*>::iterator object;
251 Param* param=NULL;
252
253 for ( object=objects.begin() ; object < objects.end(); object++ ){
254
[3766]255 param=(Param*)(*object);
[9883]256 if(param->InstanceEnum()==enum_type){
[3766]257 param->GetParameterValue(pmat);
[8263]258 return;
[3702]259 }
260 }
[8263]261 _error_("could not find parameter %s",EnumToStringx(enum_type));
[3702]262
263}
264/*}}}*/
[4873]265/*FUNCTION Parameters::FindParam(FILE** pfid,int enum_type){{{1*/
[8376]266void Parameters::FindParam(FILE** pfid,int enum_type){ _assert_(this);
[4059]267
[4873]268 vector<Object*>::iterator object;
269 Param* param=NULL;
270
271 for ( object=objects.begin() ; object < objects.end(); object++ ){
272
273 param=(Param*)(*object);
[9883]274 if(param->InstanceEnum()==enum_type){
[4873]275 param->GetParameterValue(pfid);
[8263]276 return;
[4873]277 }
278 }
[8263]279 _error_("could not find parameter %s",EnumToStringx(enum_type));
[4873]280}
281/*}}}*/
282
[4059]283/*FUNCTION Parameters::SetParam(bool boolean,int enum_type);{{{1*/
284void Parameters::SetParam(bool boolean,int enum_type){
285
286 Param* param=NULL;
287
288 /*first, figure out if the param has already been created: */
289 param=(Param*)this->FindParamObject(enum_type);
290
291 if(param) param->SetValue(boolean); //already exists, just set it.
292 else this->AddObject(new BoolParam(enum_type,boolean)); //just add the new parameter.
293}
294/*}}}*/
295/*FUNCTION Parameters::SetParam(int integer,int enum_type);{{{1*/
296void Parameters::SetParam(int integer,int enum_type){
297
298 Param* param=NULL;
299
300 /*first, figure out if the param has already been created: */
301 param=(Param*)this->FindParamObject(enum_type);
302
303 if(param) param->SetValue(integer); //already exists, just set it.
304 else this->AddObject(new IntParam(enum_type,integer)); //just add the new parameter.
305}
306/*}}}*/
307/*FUNCTION Parameters::SetParam(double scalar,int enum_type);{{{1*/
308void Parameters::SetParam(double scalar,int enum_type){
309
310 Param* param=NULL;
311
312 /*first, figure out if the param has already been created: */
313 param=(Param*)this->FindParamObject(enum_type);
314
315 if(param) param->SetValue(scalar); //already exists, just set it.
316 else this->AddObject(new DoubleParam(enum_type,scalar)); //just add the new parameter.
317}
318/*}}}*/
319/*FUNCTION Parameters::SetParam(char* string,int enum_type);{{{1*/
320void Parameters::SetParam(char* string,int enum_type){
321
322 Param* param=NULL;
323
324 /*first, figure out if the param has already been created: */
325 param=(Param*)this->FindParamObject(enum_type);
326
327 if(param) param->SetValue(string); //already exists, just set it.
328 else this->AddObject(new StringParam(enum_type,string)); //just add the new parameter.
329}
330/*}}}*/
331/*FUNCTION Parameters::SetParam(char** stringarray,int M, int enum_type);{{{1*/
332void Parameters::SetParam(char** stringarray,int M, int enum_type){
333
334 Param* param=NULL;
335
336 /*first, figure out if the param has already been created: */
337 param=(Param*)this->FindParamObject(enum_type);
338
339 if(param) param->SetValue(stringarray,M); //already exists, just set it.
340 else this->AddObject(new StringArrayParam(enum_type,stringarray,M)); //just add the new parameter.
341}
342/*}}}*/
343/*FUNCTION Parameters::SetParam(double* doublearray,int M,int enum_type);{{{1*/
344void Parameters::SetParam(double* doublearray,int M, int enum_type){
345
346 Param* param=NULL;
347
348 /*first, figure out if the param has already been created: */
349 param=(Param*)this->FindParamObject(enum_type);
350
351 if(param) param->SetValue(doublearray,M); //already exists, just set it.
352 else this->AddObject(new DoubleVecParam(enum_type,doublearray,M)); //just add the new parameter.
353}
354/*}}}*/
355/*FUNCTION Parameters::SetParam(double* doublearray,int M,int N, int enum_type);{{{1*/
356void Parameters::SetParam(double* doublearray,int M, int N, int enum_type){
357
358 Param* param=NULL;
359
360 /*first, figure out if the param has already been created: */
361 param=(Param*)this->FindParamObject(enum_type);
362
363 if(param) param->SetValue(doublearray,M,N); //already exists, just set it.
364 else this->AddObject(new DoubleMatParam(enum_type,doublearray,M,N)); //just add the new parameter.
365}
366/*}}}*/
[8600]367/*FUNCTION Parameters::SetParam(int* intarray,int M,int enum_type);{{{1*/
368void Parameters::SetParam(int* intarray,int M, int enum_type){
369
370 Param* param=NULL;
371
372 /*first, figure out if the param has already been created: */
373 param=(Param*)this->FindParamObject(enum_type);
374
375 if(param) param->SetValue(intarray,M); //already exists, just set it.
376 else this->AddObject(new IntVecParam(enum_type,intarray,M)); //just add the new parameter.
377}
378/*}}}*/
379/*FUNCTION Parameters::SetParam(int* intarray,int M,int N, int enum_type);{{{1*/
380void Parameters::SetParam(int* intarray,int M, int N, int enum_type){
381
382 Param* param=NULL;
383
384 /*first, figure out if the param has already been created: */
385 param=(Param*)this->FindParamObject(enum_type);
386
387 if(param) param->SetValue(intarray,M,N); //already exists, just set it.
388 else this->AddObject(new IntMatParam(enum_type,intarray,M,N)); //just add the new parameter.
389}
390/*}}}*/
[4059]391/*FUNCTION Parameters::SetParam(Vec vector,int enum_type);{{{1*/
392void Parameters::SetParam(Vec vector,int enum_type){
393
394 Param* param=NULL;
395
396 /*first, figure out if the param has already been created: */
397 param=(Param*)this->FindParamObject(enum_type);
398
399 if(param) param->SetValue(vector); //already exists, just set it.
400 else this->AddObject(new PetscVecParam(enum_type,vector)); //just add the new parameter.
401}
402/*}}}*/
403/*FUNCTION Parameters::SetParam(Mat matrix,int enum_type);{{{1*/
404void Parameters::SetParam(Mat matrix,int enum_type){
405
406 Param* param=NULL;
407
408 /*first, figure out if the param has already been created: */
409 param=(Param*)this->FindParamObject(enum_type);
410
411 if(param) param->SetValue(matrix); //already exists, just set it.
412 else this->AddObject(new PetscMatParam(enum_type,matrix)); //just add the new parameter.
413}
414/*}}}*/
[4873]415/*FUNCTION Parameters::SetParam(FILE* fid,int enum_type);{{{1*/
416void Parameters::SetParam(FILE* fid,int enum_type){
[4059]417
[4873]418 Param* param=NULL;
419
420 /*first, figure out if the param has already been created: */
421 param=(Param*)this->FindParamObject(enum_type);
422
423 if(param) param->SetValue(fid); //already exists, just set it.
424 else this->AddObject(new FileParam(enum_type,fid)); //just add the new parameter.
425}
426/*}}}*/
[9356]427/*FUNCTION Parameters::UnitConversion(int direction_enum);{{{1*/
428void Parameters::UnitConversion(int direction_enum){
[4873]429
[9356]430 vector<Object*>::iterator object;
431 Param* param=NULL;
432
433 for ( object=objects.begin() ; object < objects.end(); object++ ){
434 param=(Param*)(*object);
435 param->UnitConversion(direction_enum);
436 }
437
438}
439/*}}}*/
440
[3766]441/*FUNCTION Parameters::FindParamObject{{{1*/
[3702]442Object* Parameters::FindParamObject(int enum_type){
443
444 vector<Object*>::iterator object;
445 Param* param=NULL;
446
447 for ( object=objects.begin() ; object < objects.end(); object++ ){
448
[3766]449 param=(Param*)(*object);
[9883]450 if(param->InstanceEnum()==enum_type){
[3766]451 return (*object);
[3702]452 }
453 }
454 return NULL;
455}
456/*}}}*/
Note: See TracBrowser for help on using the repository browser.