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 |
|
---|
14 | void 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 | }
|
---|