Changeset 209
- Timestamp:
- 05/04/09 11:53:43 (16 years ago)
- Location:
- issm/trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp
r202 r209 25 25 double* optscal=NULL; 26 26 double* maxiter=NULL; 27 Veccontrol_parameter=NULL;28 Vecvx_obs=NULL;29 Vecvy_obs=NULL;27 double* control_parameter=NULL; 28 double* vx_obs=NULL; 29 double* vy_obs=NULL; 30 30 31 31 /*Get counter : */ … … 100 100 101 101 /*Get vx_obs, vy_obs, and the parameter value: */ 102 ModelFetchData((void**)&vx_obs,NULL,NULL,model_handle,"vx_obs"," Vector",NULL);103 ModelFetchData((void**)&vy_obs,NULL,NULL,model_handle,"vy_obs"," Vector",NULL);104 ModelFetchData((void**)&control_parameter,NULL,NULL,model_handle,model->control_type," Vector",NULL);102 ModelFetchData((void**)&vx_obs,NULL,NULL,model_handle,"vx_obs","Matrix","Mat"); 103 ModelFetchData((void**)&vy_obs,NULL,NULL,model_handle,"vy_obs","Matrix","Mat"); 104 ModelFetchData((void**)&control_parameter,NULL,NULL,model_handle,model->control_type,"Matrix","Mat"); 105 105 106 VecScale(vx_obs,1.0/model->yts);107 VecScale(vy_obs,1.0/model->yts);106 if(vx_obs)for(i=0;i<model->numberofnodes;i++)vx_obs[i]=vx_obs[i]/model->yts; 107 if(vy_obs)for(i=0;i<model->numberofnodes;i++)vy_obs[i]=vy_obs[i]/model->yts; 108 108 109 109 count++; 110 param= new Param(count,"vx_obs",PETSCVEC); 111 param->SetVec(vx_obs); 110 param= new Param(count,"vx_obs",DOUBLEVEC); 111 if(vx_obs) param->SetDoubleVec(vx_obs,model->numberofnodes); 112 else param->SetDoubleVec(vx_obs,0); 112 113 parameters->AddObject(param); 113 114 114 115 count++; 115 param= new Param(count,"vy_obs",PETSCVEC); 116 param->SetVec(vy_obs); 116 param= new Param(count,"vy_obs",DOUBLEVEC); 117 if(vy_obs) param->SetDoubleVec(vy_obs,model->numberofnodes); 118 else param->SetDoubleVec(vy_obs,0); 117 119 parameters->AddObject(param); 118 120 119 121 count++; 120 param= new Param(count,"control_parameter",PETSCVEC); 121 param->SetVec(control_parameter); 122 param= new Param(count,"control_parameter",DOUBLEVEC); 123 if(control_parameter) param->SetDoubleVec(control_parameter,model->numberofnodes); 124 else param->SetDoubleVec(control_parameter,0); 122 125 parameters->AddObject(param); 123 124 VecFree(&vx_obs); 125 VecFree(&vy_obs); 126 VecFree(&control_parameter); 126 127 128 xfree((void**)&vx_obs); 129 xfree((void**)&vy_obs); 130 xfree((void**)&control_parameter); 127 131 128 132 -
issm/trunk/src/c/ModelProcessorx/CreateParameters.cpp
r202 r209 27 27 double* maxiter=NULL; 28 28 double* control_parameter=NULL; 29 Vecvx=NULL;30 Vecvy=NULL;31 Vecvz=NULL;29 double* vx=NULL; 30 double* vy=NULL; 31 double* vz=NULL; 32 32 33 33 /*Initialize dataset: */ … … 177 177 /*Diagnostic: */ 178 178 /*Get vx and vy: */ 179 ModelFetchData((void**)&vx,NULL,NULL,model_handle,"vx","Vector",NULL); 180 ModelFetchData((void**)&vy,NULL,NULL,model_handle,"vy","Vector",NULL); 181 ModelFetchData((void**)&vz,NULL,NULL,model_handle,"vz","Vector",NULL); 182 183 if(vx)VecScale(vx,1.0/model->yts); 184 if(vy)VecScale(vy,1.0/model->yts); 185 if(vz)VecScale(vz,1.0/model->yts); 186 187 count++; 188 param= new Param(count,"vx",PETSCVEC); 189 param->SetVec(vx); 190 parameters->AddObject(param); 191 192 count++; 193 param= new Param(count,"vy",PETSCVEC); 194 param->SetVec(vy); 195 parameters->AddObject(param); 196 197 count++; 198 param= new Param(count,"vz",PETSCVEC); 199 param->SetVec(vz); 200 parameters->AddObject(param); 201 202 VecFree(&vx); 203 VecFree(&vy); 204 VecFree(&vz); 179 ModelFetchData((void**)&vx,NULL,NULL,model_handle,"vx","Matrix","Mat"); 180 ModelFetchData((void**)&vy,NULL,NULL,model_handle,"vy","Matrix","Mat"); 181 ModelFetchData((void**)&vz,NULL,NULL,model_handle,"vz","Matrix","Mat"); 182 183 if(vx) for(i=0;i<model->numberofnodes;i++)vx[i]=vx[i]/model->yts; 184 if(vy) for(i=0;i<model->numberofnodes;i++)vy[i]=vy[i]/model->yts; 185 if(vz) for(i=0;i<model->numberofnodes;i++)vz[i]=vz[i]/model->yts; 186 187 count++; 188 param= new Param(count,"vx",DOUBLEVEC); 189 if(vx) param->SetDoubleVec(vx,model->numberofnodes); 190 else param->SetDoubleVec(vx,0); 191 parameters->AddObject(param); 192 193 count++; 194 param= new Param(count,"vy",DOUBLEVEC); 195 if(vy) param->SetDoubleVec(vy,model->numberofnodes); 196 else param->SetDoubleVec(vy,0); 197 parameters->AddObject(param); 198 199 count++; 200 param= new Param(count,"vz",DOUBLEVEC); 201 if(vz) param->SetDoubleVec(vz,model->numberofnodes); 202 else param->SetDoubleVec(vz,0); 203 parameters->AddObject(param); 204 205 xfree((void**)&vx); 206 xfree((void**)&vy); 207 xfree((void**)&vz); 205 208 206 209 /*All our datasets are already ordered by ids. Set presort flag so that later on, when sorting is requested on these -
issm/trunk/src/c/ProcessParamsx/ProcessParamsx.cpp
r202 r209 21 21 22 22 /*diagnostic: */ 23 Vec vec_vx=NULL;24 Vec vec_vy=NULL;25 Vec vec_vz=NULL;26 27 23 double* vx=NULL; 28 24 double* vy=NULL; … … 64 60 ){ 65 61 66 parameters->FindParam((void*)&v ec_vx,"vx");67 parameters->FindParam((void*)&v ec_vy,"vy");68 parameters->FindParam((void*)&v ec_vz,"vz");62 parameters->FindParam((void*)&vx,"vx"); 63 parameters->FindParam((void*)&vy,"vy"); 64 parameters->FindParam((void*)&vz,"vz"); 69 65 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 66 u_g=(double*)xcalloc(numberofnodes*3,sizeof(double)); 75 67 … … 114 106 if(analysis_type==ControlAnalysisEnum()){ 115 107 116 parameters->FindParam((void*)&v ec_vx_obs,"vx_obs");117 parameters->FindParam((void*)&v ec_vy_obs,"vy_obs");118 parameters->FindParam((void*)& vec_control_parameter,"control_parameter");108 parameters->FindParam((void*)&vx_obs,"vx_obs"); 109 parameters->FindParam((void*)&vy_obs,"vy_obs"); 110 parameters->FindParam((void*)&control_parameter,"control_parameter"); 119 111 120 112 /*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 113 125 114 u_g_obs=(double*)xcalloc(numberofnodes*2,sizeof(double)); … … 160 149 xfree((void**)&vy); 161 150 xfree((void**)&vz); 162 VecFree(&vec_vx);163 VecFree(&vec_vy);164 VecFree(&vec_vz);165 151 xfree((void**)&u_g); 166 152 167 153 xfree((void**)&vx_obs); 168 154 xfree((void**)&vy_obs); 169 VecFree(&vec_vx_obs);170 VecFree(&vec_vy_obs);171 VecFree(&vec_control_parameter);172 155 xfree((void**)&control_parameter); 173 156 xfree((void**)&u_g_obs); -
issm/trunk/src/c/objects/Param.cpp
r202 r209 19 19 20 20 Param::Param(){ 21 doublevec=NULL; 22 doublemat=NULL; 23 vec=NULL; 24 mat=NULL; 25 21 26 return; 22 27 } … … 34 39 throw ErrorException(__FUNCT__,exprintf("%s%i"," unknow parameter type ",param_type)); 35 40 } 41 doublevec=NULL; 42 doublemat=NULL; 43 vec=NULL; 44 mat=NULL; 45 36 46 } 37 47 … … 159 169 case DOUBLEVEC: 160 170 memcpy(marshalled_dataset,&M,sizeof(M));marshalled_dataset+=sizeof(M); 161 memcpy(marshalled_dataset,doublevec,M*sizeof(double));marshalled_dataset+=(M*sizeof(double)); 171 if(M){ 172 memcpy(marshalled_dataset,doublevec,M*sizeof(double)); 173 marshalled_dataset+=(M*sizeof(double)); 174 } 162 175 break; 163 176 … … 165 178 memcpy(marshalled_dataset,&M,sizeof(M));marshalled_dataset+=sizeof(M); 166 179 memcpy(marshalled_dataset,&N,sizeof(N));marshalled_dataset+=sizeof(N); 167 memcpy(marshalled_dataset,doublevec,M*N*sizeof(double));marshalled_dataset+=(M*N*sizeof(double)); 180 if(M*N){ 181 memcpy(marshalled_dataset,doublevec,M*N*sizeof(double)); 182 marshalled_dataset+=(M*N*sizeof(double)); 183 } 168 184 break; 169 185 … … 294 310 295 311 memcpy(&M,marshalled_dataset,sizeof(M));marshalled_dataset+=sizeof(M); 296 doublevec=(double*)xmalloc(M*sizeof(double)); 297 memcpy(doublevec,marshalled_dataset,M*sizeof(double));marshalled_dataset+=(M*sizeof(double)); 312 if(M){ 313 doublevec=(double*)xmalloc(M*sizeof(double)); 314 memcpy(doublevec,marshalled_dataset,M*sizeof(double));marshalled_dataset+=(M*sizeof(double)); 315 } 298 316 break; 299 317 … … 301 319 memcpy(&M,marshalled_dataset,sizeof(M));marshalled_dataset+=sizeof(M); 302 320 memcpy(&N,marshalled_dataset,sizeof(N));marshalled_dataset+=sizeof(N); 303 doublemat=(double*)xmalloc(M*N*sizeof(double)); 304 memcpy(doublemat,marshalled_dataset,M*N*sizeof(double));marshalled_dataset+=(M*N*sizeof(double)); 321 if(M*N){ 322 doublemat=(double*)xmalloc(M*N*sizeof(double)); 323 memcpy(doublemat,marshalled_dataset,M*N*sizeof(double));marshalled_dataset+=(M*N*sizeof(double)); 324 } 305 325 break; 306 326 … … 390 410 double** pdoublevec=(double**)pvalue; 391 411 double* outdoublevec=NULL; 392 outdoublevec=(double*)xmalloc(M*sizeof(double)); 393 memcpy(outdoublevec,doublevec,M*sizeof(double)); 412 if(M){ 413 outdoublevec=(double*)xmalloc(M*sizeof(double)); 414 memcpy(outdoublevec,doublevec,M*sizeof(double)); 415 } 394 416 *pdoublevec=outdoublevec; 395 417 } … … 397 419 double** pdoublemat=(double**)pvalue; 398 420 double* outdoublemat=NULL; 399 outdoublemat=(double*)xmalloc(M*N*sizeof(double)); 400 memcpy(outdoublemat,doublemat,M*N*sizeof(double)); 421 if(M*N){ 422 outdoublemat=(double*)xmalloc(M*N*sizeof(double)); 423 memcpy(outdoublemat,doublemat,M*N*sizeof(double)); 424 } 401 425 *pdoublemat=outdoublemat; 402 426 } … … 478 502 479 503 M=size; 480 doublevec=(double*)xmalloc(M*sizeof(double)); 481 memcpy(doublevec,value,M*sizeof(double)); 504 if(M){ 505 doublevec=(double*)xmalloc(M*sizeof(double)); 506 memcpy(doublevec,value,M*sizeof(double)); 507 } 482 508 483 509 } -
issm/trunk/src/c/parallel/OutputControl.cpp
r85 r209 25 25 int one=1; 26 26 int gsize; 27 int nods; 27 28 28 29 /*serialize outputs: */ … … 31 32 VecShift(partition_shifted,1.0); //matlab indexing starts at 1 32 33 VecToMPISerial(&serial_partition,partition_shifted); 34 VecGetSize(partition,&nods); 33 35 34 36 VecToMPISerial(&serial_ug,u_g); … … 53 55 54 56 /*Write parameter to disk: */ 55 WriteDataToDisk(p_g,& gsize,&one,"Mat",fid);57 WriteDataToDisk(p_g,&nods,&one,"Mat",fid); 56 58 57 59 /*Write J to disk: */ -
issm/trunk/src/c/parallel/OutputDiagnostic.cpp
r85 r209 27 27 int one=1; 28 28 int gsize; 29 int nods; 29 30 30 31 /*serialize outputs: */ … … 33 34 VecShift(partition_shifted,1.0); //matlab indexing starts at 1 34 35 VecToMPISerial(&serial_partition,partition_shifted); 36 VecGetSize(partition,&nods); 35 37 36 38 VecToMPISerial(&serial_ug,u_g); … … 49 51 50 52 /*Write partition: */ 51 WriteDataToDisk(serial_partition,& gsize,&one,"Mat",fid);53 WriteDataToDisk(serial_partition,&nods,&one,"Mat",fid); 52 54 53 55 /*Write solution to disk: */ -
issm/trunk/src/m/classes/public/loadresultsfromdisk.m
r122 r209 31 31 32 32 %Used to recover velocities 33 indx=part(1:2:end); 34 indy=part(2:2:end); 33 indx=1:2:gsize; 34 indy=2:2:gsize; 35 indx=indx(part); 36 indy=indy(part); 35 37 36 38 %Recover velocity -
issm/trunk/src/mex/ModelProcessor/ModelProcessor.cpp
r202 r209 41 41 42 42 /*Create parameters: */ 43 44 43 CreateParameters(¶meters,model,MODEL); 45 44 -
issm/trunk/todo
r197 r209 3 3 Define default cluster in /etc/cielo.rc 4 4 VelocityExtrude: debug 5 Add vx and vy as input parameters to diagnostic.6 5 FindParam(vx) then DeleteParam("vx")? Should vx be a Vec? Can we find a way of partionting vx with partition, and staying in parallel?
Note:
See TracChangeset
for help on using the changeset viewer.