Changeset 22409
- Timestamp:
- 02/08/18 09:07:18 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
r22385 r22409 276 276 /*Deal with regional output: {{{*/ 277 277 278 /* massconvariables: */278 /*regional output variables: */ 279 279 int numout; 280 280 char** reg_name_s = NULL; … … 292 292 for(j=0;j<numout;j++){ 293 293 294 /*Create a massconobject: */294 /*Create a regional output object: */ 295 295 output_definitions->AddObject(new Regionaloutput(reg_name_s[j],StringToEnumx(reg_definitionstring_s[j]),reg_outputnamestring_s[j],reg_mask_s[j],reg_mask_M_s[j])); 296 296 … … 313 313 xDelete<char*>(reg_outputnamestring_s); 314 314 xDelete<char*>(reg_definitionstring_s); 315 }316 315 /*}}}*/ 317 else _error_("output definition enum " << output_definition_enums[i] << " not supported yet!"); 316 } 317 else if (output_definition_enums[i]==NumberedcostfunctionEnum){ 318 /*Deal with numbered cost function: {{{*/ 319 320 /*Intermediary*/ 321 int numout; 322 char **ncf_name_s = NULL; 323 char **ncf_definitionstring_s = NULL; 324 int cost_function ,domaintype; 325 int num_cost_functions; 326 char **cost_functions = NULL; 327 int num_costfunc; 328 char **cm_responses = NULL; 329 330 /*Process cost functions and convert from string to enums*/ 331 iomodel->FindConstant(&num_cost_functions,"md.numberedcostfunction.num_cost_functions"); 332 iomodel->FindConstant(&cost_functions,&num_cost_functions,"md.numberedcostfunction.cost_functions"); 333 if(num_cost_functions<1) _error_("No cost functions found"); 334 int* cost_function_enums=xNew<int>(num_cost_functions); 335 for(int i=0;i<num_cost_functions;++i){ 336 cost_function_enums[i]=StringToEnumx(cost_functions[i]); 337 } 338 339 iomodel->FetchData(1,"md.numberedcostfunction.cost_functions_coefficients"); 340 341 iomodel->FetchMultipleData(&ncf_name_s,&numout,"md.numberedcostfunction.name"); 342 iomodel->FetchMultipleData(&ncf_definitionstring_s,&numout,"md.numberedcostfunction.definitionstring"); 343 if(numout>1) _error_("not implemented yet, check code here"); 344 345 /*Fetch Observations */ 346 iomodel->FindConstant(&domaintype,"md.mesh.domain_type"); 347 for(int i=0;i<num_cost_functions;i++){ 348 cost_function=cost_function_enums[i]; 349 if( cost_function==ThicknessAbsMisfitEnum) iomodel->FetchDataToInput(elements,"md.numberedcostfunction.thickness_obs",InversionThicknessObsEnum); 350 else if(cost_function==SurfaceAbsMisfitEnum) iomodel->FetchDataToInput(elements,"md.numberedcostfunction.surface_obs",InversionSurfaceObsEnum); 351 else if(cost_function==SurfaceAbsVelMisfitEnum 352 || cost_function==SurfaceRelVelMisfitEnum 353 || cost_function==SurfaceLogVelMisfitEnum 354 || cost_function==SurfaceLogVxVyMisfitEnum 355 || cost_function==SurfaceAverageVelMisfitEnum){ 356 iomodel->FetchDataToInput(elements,"md.numberedcostfunction.vx_obs",InversionVxObsEnum); 357 if(domaintype!=Domain2DverticalEnum) iomodel->FetchDataToInput(elements,"md.numberedcostfunction.vy_obs",InversionVyObsEnum); 358 } 359 360 } 361 362 for(j=0;j<numout;j++){ 363 364 output_definitions->AddObject(new Numberedcostfunction(ncf_name_s[j],StringToEnumx(ncf_definitionstring_s[j]),num_costfunc,cost_function_enums)); 365 366 } 367 368 parameters->AddObject(iomodel->CopyConstantObject("md.inversion.num_cost_functions",InversionNumCostFunctionsEnum)); 369 370 iomodel->FindConstant(&cm_responses,&num_costfunc,"md.inversion.cost_functions"); 371 //if(num_costfunc<1) error ("no cost functions found"); 372 int* costfunc_enums=xNew<int>(num_costfunc); 373 for(int i=0;i<num_costfunc;i++){ 374 costfunc_enums[i]=StringToEnumx(cm_responses[i]); 375 xDelete<char>(cm_responses[i]); 376 } 377 xDelete<char*>(cm_responses); 378 379 parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,costfunc_enums,num_costfunc)); 380 xDelete<int>(costfunc_enums); 381 382 /*Free data: */ 383 iomodel->DeleteData(1,"md.inversion.cost_functions_coefficients"); 384 xDelete<int>(cost_function_enums); 385 for(int i=0;i<num_cost_functions;i++) xDelete<char>(cost_functions[i]); 386 xDelete<char*>(cost_functions); 387 } 388 /*}}}*/ 389 else _error_("output definition enum " << EnumToStringx(output_definition_enums[i]) << " not supported yet!"); 318 390 } 319 391 } … … 323 395 delete output_definitions; 324 396 xDelete<int>(output_definition_enums); 397 325 398 }
Note:
See TracChangeset
for help on using the changeset viewer.