source: issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp@ 3732

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

Bulk of solutions

File size: 3.2 KB
Line 
1/*!\file: CreateParametersControl.cpp
2 * \brief driver for creating parameters dataset, for control analysis.
3 */
4
5#include "../../DataSet/DataSet.h"
6#include "../../toolkits/toolkits.h"
7#include "../../io/io.h"
8#include "../../EnumDefinitions/EnumDefinitions.h"
9#include "../../objects/objects.h"
10#include "../../shared/shared.h"
11#include "../../include/macros.h"
12#include "../ModelProcessorx.h"
13
14void CreateParametersControl(Parameters** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
15
16 int i;
17 double* control_parameter=NULL;
18
19 Parameters* parameters=NULL;
20
21 /*Get parameters: */
22 parameters=*pparameters;
23
24 parameters->AddObject(new BoolParam(ControlAnalysisEnum,iomodel->control_analysis));
25 if(iomodel->control_analysis){
26
27 if (strcmp(iomodel->control_type,"drag")==0){
28 parameters->AddObject(new BoolParam(ExtrudeParamEnum,false));
29 parameters->AddObject(new IntParam(ControlTypeEnum,DragCoefficientEnum));
30 }
31 else if (strcmp(iomodel->control_type,"B")==0){
32 parameters->AddObject(new BoolParam(ExtrudeParamEnum,true));
33 parameters->AddObject(new IntParam(ControlTypeEnum,RheologyBEnum));
34 }
35 else
36 ISSMERROR("control_type %s not supported yet!",iomodel->control_type);
37
38 parameters->AddObject(new BoolParam(ControlSteadyEnum,false));
39 parameters->AddObject(new IntParam(NStepsEnum,iomodel->nsteps));
40 parameters->AddObject(new DoubleParam(TolXEnum,iomodel->tolx));
41 parameters->AddObject(new DoubleParam(EpsCmEnum,iomodel->eps_cm));
42 parameters->AddObject(new DoubleParam(MeanVelEnum,iomodel->meanvel));
43 parameters->AddObject(new DoubleParam(CmNoiseDmpEnum,iomodel->cm_noisedmp));
44 parameters->AddObject(new DoubleParam(CmMinDmpValueEnum,iomodel->cm_mindmp_value));
45 parameters->AddObject(new DoubleParam(CmMinDmpSlopeEnum,iomodel->cm_mindmp_slope));
46 parameters->AddObject(new DoubleParam(CmMaxDmpValueEnum,iomodel->cm_maxdmp_value));
47 parameters->AddObject(new DoubleParam(CmMaxDmpSlopeEnum,iomodel->cm_maxdmp_slope));
48 parameters->AddObject(new DoubleParam(CmMinEnum,iomodel->cm_min));
49 parameters->AddObject(new DoubleParam(CmMaxEnum,iomodel->cm_max));
50 parameters->AddObject(new BoolParam(CmGradientEnum,iomodel->cm_gradient));
51
52 /*Now, recover fit, optscal and maxiter as vectors: */
53 IoModelFetchData(&iomodel->fit,NULL,NULL,iomodel_handle,"fit");
54 IoModelFetchData(&iomodel->cm_jump,NULL,NULL,iomodel_handle,"cm_jump");
55 IoModelFetchData(&iomodel->optscal,NULL,NULL,iomodel_handle,"optscal");
56 IoModelFetchData(&iomodel->maxiter,NULL,NULL,iomodel_handle,"maxiter");
57
58 parameters->AddObject(new DoubleVecParam(FitEnum,iomodel->fit,iomodel->nsteps));
59 parameters->AddObject(new DoubleVecParam(CmJumpEnum,iomodel->cm_jump,iomodel->nsteps));
60 parameters->AddObject(new DoubleVecParam(OptScalEnum,iomodel->optscal,iomodel->nsteps));
61 parameters->AddObject(new DoubleVecParam(MaxIterEnum,iomodel->maxiter,iomodel->nsteps));
62
63 xfree((void**)&iomodel->fit);
64 xfree((void**)&iomodel->cm_jump);
65 xfree((void**)&iomodel->optscal);
66 xfree((void**)&iomodel->maxiter);
67
68 IoModelFetchData(&control_parameter,NULL,NULL,iomodel_handle,iomodel->control_type);
69 parameters->AddObject(new DoubleVecParam(ControlParameterEnum,control_parameter,iomodel->nsteps));
70 xfree((void**)&control_parameter);
71 }
72
73 /*Assign output pointer: */
74 *pparameters=parameters;
75}
Note: See TracBrowser for help on using the repository browser.