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

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

meanvel, epsvel, cm_noisedamping, etc ... whatever appears
in Numpar, should be in the general CreateParameters routine, otherwise we
run the risk of not finding it when UpdateFromInputs tries to update the
Numpar fields.

File size: 5.0 KB
Line 
1/*!\file: CreateParametersControl.cpp
2 * \brief driver for creating parameters dataset, for control analysis.
3 */
4
5#undef __FUNCT__
6#define __FUNCT__ "CreateParameters"
7
8#include "../../DataSet/DataSet.h"
9#include "../../toolkits/toolkits.h"
10#include "../../EnumDefinitions/EnumDefinitions.h"
11#include "../../objects/objects.h"
12#include "../../shared/shared.h"
13#include "../IoModel.h"
14
15void CreateParametersControl(DataSet** pparameters,IoModel* iomodel,ConstDataHandle iomodel_handle){
16
17 int i;
18
19 DataSet* parameters=NULL;
20 Param* param = NULL;
21 int count;
22 int analysis_type;
23 int numberofdofspernode;
24
25 double* fit=NULL;
26 double* cm_jump=NULL;
27 double* optscal=NULL;
28 double* maxiter=NULL;
29 double* control_parameter=NULL;
30 double* param_g=NULL;
31
32 double* vx_obs=NULL;
33 double* vy_obs=NULL;
34 double* u_g_obs=NULL;
35
36 double* vx=NULL;
37 double* vy=NULL;
38 double* vz=NULL;
39
40 /*Get parameters: */
41 parameters=*pparameters;
42 count=parameters->Size();
43
44 //control analysis?
45 count++;
46 param= new Param(count,"control_analysis",DOUBLE);
47 param->SetDouble(iomodel->control_analysis);
48 parameters->AddObject(param);
49
50 if(iomodel->control_analysis){
51 /*control_type: */
52 count++;
53 param= new Param(count,"control_type",STRING);
54 param->SetString(iomodel->control_type);
55 parameters->AddObject(param);
56
57 /*extrude_param: */
58 count++;
59 param= new Param(count,"extrude_param",DOUBLE);
60 if (strcmp(iomodel->control_type,"drag")==0) param->SetDouble(0);
61 else if (strcmp(iomodel->control_type,"B")==0) param->SetDouble(1);
62 else throw ErrorException(__FUNCT__,exprintf("control_type %s not supported yet!",iomodel->control_type));
63 parameters->AddObject(param);
64
65 /*control_steady: */
66 count++;
67 param= new Param(count,"control_steady",DOUBLE);
68 param->SetDouble(0);
69 parameters->AddObject(param);
70
71 /*nsteps: */
72 count++;
73 param= new Param(count,"nsteps",DOUBLE);
74 param->SetDouble(iomodel->nsteps);
75 parameters->AddObject(param);
76
77 /*tolx: */
78 count++;
79 param= new Param(count,"tolx",DOUBLE);
80 param->SetDouble(iomodel->tolx);
81 parameters->AddObject(param);
82
83 /*eps_cm: */
84 count++;
85 param= new Param(count,"eps_cm",DOUBLE);
86 param->SetDouble(iomodel->eps_cm);
87 parameters->AddObject(param);
88
89
90 /*mincontrolconstraint: */
91 count++;
92 param= new Param(count,"mincontrolconstraint",DOUBLE);
93 param->SetDouble(iomodel->mincontrolconstraint);
94 parameters->AddObject(param);
95
96 /*maxcontrolconstraint: */
97 count++;
98 param= new Param(count,"maxcontrolconstraint",DOUBLE);
99 param->SetDouble(iomodel->maxcontrolconstraint);
100 parameters->AddObject(param);
101
102
103
104 /*Now, recover fit, optscal and maxiter as vectors: */
105 IoModelFetchData(&iomodel->fit,NULL,NULL,iomodel_handle,"fit");
106 IoModelFetchData(&iomodel->cm_jump,NULL,NULL,iomodel_handle,"cm_jump");
107 IoModelFetchData(&iomodel->optscal,NULL,NULL,iomodel_handle,"optscal");
108 IoModelFetchData(&iomodel->maxiter,NULL,NULL,iomodel_handle,"maxiter");
109
110 count++;
111 param= new Param(count,"fit",DOUBLEVEC);
112 param->SetDoubleVec(iomodel->fit,iomodel->nsteps);
113 parameters->AddObject(param);
114
115 count++;
116 param= new Param(count,"cm_jump",DOUBLEVEC);
117 param->SetDoubleVec(iomodel->cm_jump,iomodel->nsteps);
118 parameters->AddObject(param);
119
120 count++;
121 param= new Param(count,"optscal",DOUBLEVEC);
122 param->SetDoubleVec(iomodel->optscal,iomodel->nsteps);
123 parameters->AddObject(param);
124
125 count++;
126 param= new Param(count,"maxiter",DOUBLEVEC);
127 param->SetDoubleVec(iomodel->maxiter,iomodel->nsteps);
128 parameters->AddObject(param);
129
130 xfree((void**)&iomodel->fit);
131 xfree((void**)&iomodel->cm_jump);
132 xfree((void**)&iomodel->optscal);
133 xfree((void**)&iomodel->maxiter);
134
135 /*Get vx, vx_obs, vy, vy_obs, and the parameter value: */
136 IoModelFetchData(&vx,NULL,NULL,iomodel_handle,"vx");
137 IoModelFetchData(&vy,NULL,NULL,iomodel_handle,"vy");
138 IoModelFetchData(&vz,NULL,NULL,iomodel_handle,"vz");
139 IoModelFetchData(&vx_obs,NULL,NULL,iomodel_handle,"vx_obs");
140 IoModelFetchData(&vy_obs,NULL,NULL,iomodel_handle,"vy_obs");
141 IoModelFetchData(&control_parameter,NULL,NULL,iomodel_handle,iomodel->control_type);
142
143 u_g_obs=(double*)xcalloc(iomodel->numberofnodes*2,sizeof(double));
144 if(vx_obs)for(i=0;i<iomodel->numberofnodes;i++)u_g_obs[2*i+0]=vx_obs[i]/iomodel->yts;
145 if(vy_obs)for(i=0;i<iomodel->numberofnodes;i++)u_g_obs[2*i+1]=vy_obs[i]/iomodel->yts;
146
147 count++;
148 param= new Param(count,"u_g_obs",DOUBLEVEC);
149 param->SetDoubleVec(u_g_obs,2*iomodel->numberofnodes,2);
150 parameters->AddObject(param);
151
152 param_g=(double*)xcalloc(iomodel->numberofnodes,sizeof(double));
153 for(i=0;i<iomodel->numberofnodes;i++)param_g[i]=control_parameter[i];
154
155 count++;
156 param= new Param(count,"param_g",DOUBLEVEC);
157 param->SetDoubleVec(param_g,iomodel->numberofnodes,1);
158 parameters->AddObject(param);
159
160 xfree((void**)&vx);
161 xfree((void**)&vy);
162 xfree((void**)&vz);
163 xfree((void**)&vx_obs);
164 xfree((void**)&vy_obs);
165 xfree((void**)&u_g_obs);
166 xfree((void**)&param_g);
167 xfree((void**)&control_parameter);
168 }
169
170 /*Assign output pointer: */
171 *pparameters=parameters;
172}
Note: See TracBrowser for help on using the repository browser.