source: issm/trunk/src/c/ProcessParamsx/ProcessParamsx.cpp@ 202

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

Elements types now in setelementstype.m routine. New partitioning (independent of number of dofs

File size: 4.1 KB
Line 
1/*!\file ProcessParamsx
2 * \brief: process parameters using partitioning vector
3 */
4
5#include "./ProcessParamsx.h"
6
7#undef __FUNCT__
8#define __FUNCT__ "ProcessParamsx"
9
10#include "../shared/shared.h"
11#include "../include/macros.h"
12#include "../toolkits/toolkits.h"
13#include "../EnumDefinitions/EnumDefinitions.h"
14
15void ProcessParamsx( DataSet* parameters, Vec part){
16
17 int i;
18
19 double* partition=NULL;
20 Param* param=NULL;
21
22 /*diagnostic: */
23 Vec vec_vx=NULL;
24 Vec vec_vy=NULL;
25 Vec vec_vz=NULL;
26
27 double* vx=NULL;
28 double* vy=NULL;
29 double* vz=NULL;
30
31 double* u_g=NULL;
32
33 /*control: */
34 Vec vec_vx_obs=NULL;
35 Vec vec_vy_obs=NULL;
36 Vec vec_control_parameter=NULL;
37
38 double* vx_obs=NULL;
39 double* vy_obs=NULL;
40 double* control_parameter=NULL;
41
42 double* u_g_obs=NULL;
43 double* p_g=NULL;
44
45
46 /*diverse: */
47 int numberofnodes;
48 int analysis_type;
49 int count;
50
51 parameters->FindParam((void*)&analysis_type,"analysis_type");
52 count=parameters->Size();
53
54 parameters->FindParam((void*)&numberofnodes,"numberofnodes");
55
56 /*First serialize partition vector: */
57 VecToMPISerial(&partition,part);
58
59
60 if ( (analysis_type==ControlAnalysisEnum()) ||
61 (analysis_type==DiagnosticHorizAnalysisEnum()) ||
62 (analysis_type==DiagnosticVertAnalysisEnum()) ||
63 (analysis_type==DiagnosticStokesAnalysisEnum())
64 ){
65
66 parameters->FindParam((void*)&vec_vx,"vx");
67 parameters->FindParam((void*)&vec_vy,"vy");
68 parameters->FindParam((void*)&vec_vz,"vz");
69
70 if(vec_vx)VecToMPISerial(&vx,vec_vx);
71 if(vec_vy)VecToMPISerial(&vy,vec_vy);
72 if(vec_vz)VecToMPISerial(&vz,vec_vz);
73
74 u_g=(double*)xcalloc(numberofnodes*3,sizeof(double));
75
76 if(vx){
77 for(i=0;i<numberofnodes;i++){
78 u_g[(int)(3*partition[i]+0)]=vx[i];
79 }
80 }
81
82 if(vy){
83 for(i=0;i<numberofnodes;i++){
84 u_g[(int)(3*partition[i]+1)]=vy[i];
85 }
86 }
87
88 if(vz){
89 for(i=0;i<numberofnodes;i++){
90 u_g[(int)(3*partition[i]+2)]=vz[i];
91 }
92 }
93
94
95 /*Now, create new parameters: */
96 count++;
97 param= new Param(count,"u_g",DOUBLEVEC);
98 param->SetDoubleVec(u_g,3*numberofnodes);
99 parameters->AddObject(param);
100
101 /*erase old parameters: */
102 param=(Param*)parameters->FindParamObject("vx");
103 parameters->DeleteObject((Object*)param);
104
105 param=(Param*)parameters->FindParamObject("vy");
106 parameters->DeleteObject((Object*)param);
107
108 param=(Param*)parameters->FindParamObject("vz");
109 parameters->DeleteObject((Object*)param);
110
111 }
112
113
114 if(analysis_type==ControlAnalysisEnum()){
115
116 parameters->FindParam((void*)&vec_vx_obs,"vx_obs");
117 parameters->FindParam((void*)&vec_vy_obs,"vy_obs");
118 parameters->FindParam((void*)&vec_control_parameter,"control_parameter");
119
120 /*Now, from vx_obs and vy_obs, build u_g_obs, correctly partitioned: */
121 VecToMPISerial(&vx_obs,vec_vx_obs);
122 VecToMPISerial(&vy_obs,vec_vy_obs);
123 VecToMPISerial(&control_parameter,vec_control_parameter);
124
125 u_g_obs=(double*)xcalloc(numberofnodes*2,sizeof(double));
126 p_g=(double*)xcalloc(numberofnodes*2,sizeof(double));
127
128 for(i=0;i<numberofnodes;i++){
129 u_g_obs[(int)(2*partition[i]+0)]=vx_obs[i];
130 u_g_obs[(int)(2*partition[i]+1)]=vy_obs[i];
131 p_g[(int)(2*partition[i]+0)]=control_parameter[i];
132 }
133
134 /*Now, create new parameters: */
135 count++;
136 param= new Param(count,"u_g_obs",DOUBLEVEC);
137 param->SetDoubleVec(u_g_obs,2*numberofnodes);
138 parameters->AddObject(param);
139
140 count++;
141 param= new Param(count,"p_g",DOUBLEVEC);
142 param->SetDoubleVec(p_g,numberofnodes);
143 parameters->AddObject(param);
144
145 /*erase old parameter: */
146 param=(Param*)parameters->FindParamObject("vx_obs");
147 parameters->DeleteObject((Object*)param);
148
149 param=(Param*)parameters->FindParamObject("vy_obs");
150 parameters->DeleteObject((Object*)param);
151
152 param=(Param*)parameters->FindParamObject("control_parameter");
153 parameters->DeleteObject((Object*)param);
154
155 }
156
157 xfree((void**)&partition);
158
159 xfree((void**)&vx);
160 xfree((void**)&vy);
161 xfree((void**)&vz);
162 VecFree(&vec_vx);
163 VecFree(&vec_vy);
164 VecFree(&vec_vz);
165 xfree((void**)&u_g);
166
167 xfree((void**)&vx_obs);
168 xfree((void**)&vy_obs);
169 VecFree(&vec_vx_obs);
170 VecFree(&vec_vy_obs);
171 VecFree(&vec_control_parameter);
172 xfree((void**)&control_parameter);
173 xfree((void**)&u_g_obs);
174 xfree((void**)&p_g);
175
176}
Note: See TracBrowser for help on using the repository browser.