Changeset 27665
- Timestamp:
- 03/29/23 11:42:57 (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
r23066 r27665 29 29 30 30 switch(inversiontype){ 31 {32 31 case 0:/*Brent Search*/ 33 32 case 1:/*TAO*/ 34 33 case 2:/*M1QN3*/ 35 34 case 3:/*Validation*/ 35 { 36 36 /*How many controls and how many responses?*/ 37 37 parameters->AddObject(iomodel->CopyConstantObject("md.inversion.num_control_parameters",InversionNumControlParametersEnum)); … … 63 63 64 64 break; 65 }65 } 66 66 case 4:/*AD M1QN3*/ 67 {68 /*Intermediaries*/69 int 70 char** names= NULL;67 { 68 /*Intermediaries*/ 69 int num_independent_objects,M; 70 char** names = NULL; 71 71 72 73 74 72 /*this is done somewhere else*/ 73 parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.num_independent_objects",InversionNumControlParametersEnum)); 74 parameters->AddObject(iomodel->CopyConstantObject("md.autodiff.num_dependent_objects",InversionNumCostFunctionsEnum)); 75 75 76 /*Step1: create controls (independents)*/ 77 iomodel->FetchData(&num_independent_objects,"md.autodiff.num_independent_objects"); 78 _assert_(num_independent_objects>0); 79 iomodel->FetchData(&names,&M,"md.autodiff.independent_object_names"); 80 _assert_(M==num_independent_objects); 81 int* ind_enums=xNew<int>(num_independent_objects); 82 for(int i=0;i<num_independent_objects;i++){ 83 ind_enums[i]=StringToEnumx(names[i]); 84 xDelete<char>(names[i]); 85 } 76 /*Step 1: create controls (independents)*/ 77 iomodel->FetchData(&num_independent_objects,"md.autodiff.num_independent_objects"); _assert_(num_independent_objects>0); 78 iomodel->FetchData(&names,&M,"md.autodiff.independent_object_names"); _assert_(M==num_independent_objects); 79 int* ind_enums=xNew<int>(num_independent_objects); 80 for(int i=0;i<num_independent_objects;i++){ 81 ind_enums[i]=StringToEnumx(names[i]); 82 xDelete<char>(names[i]); 83 } 84 xDelete<char*>(names); 85 parameters->AddObject(new IntVecParam(InversionControlParametersEnum,ind_enums,num_independent_objects)); 86 xDelete<int>(ind_enums); 86 87 87 parameters->AddObject(new IntVecParam(InversionControlParametersEnum,ind_enums,num_independent_objects)); 88 iomodel->FindConstant(&cm_responses,&num_costfunc,"md.autodiff.dependent_object_names"); 89 _assert_(num_costfunc>0); 90 if(num_costfunc<1) _error_ ("no cost functions found"); 91 int* costfunc_enums=xNew<int>(num_costfunc); 92 for(int i=0;i<num_costfunc;i++){ 93 costfunc_enums[i]=StringToEnumx(cm_responses[i]); 94 xDelete<char>(cm_responses[i]); 95 } 96 xDelete<char*>(cm_responses); 97 parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,costfunc_enums,num_costfunc)); 88 iomodel->FetchData(&control_scaling_factors,NULL,NULL,"md.autodiff.independent_scaling_factors"); 89 parameters->AddObject(new DoubleVecParam(InversionControlScalingFactorsEnum,control_scaling_factors,num_independent_objects)); 98 90 99 iomodel->FetchData(&control_scaling_factors,NULL,NULL,"md.autodiff.independent_scaling_factors"); 100 parameters->AddObject(new DoubleVecParam(InversionControlScalingFactorsEnum,control_scaling_factors,num_independent_objects)); 91 /*Step 2: create cost functions (dependent)*/ 92 iomodel->FindConstant(&cm_responses,&num_costfunc,"md.autodiff.dependent_object_names"); 93 if(num_costfunc<1) _error_ ("no cost functions found"); 94 int* costfunc_enums=xNew<int>(num_costfunc); 95 for(int i=0;i<num_costfunc;i++){ 96 costfunc_enums[i]=StringToEnumx(cm_responses[i]); 97 xDelete<char>(cm_responses[i]); 98 } 99 xDelete<char*>(cm_responses); 100 parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,costfunc_enums,num_costfunc)); 101 xDelete<int>(costfunc_enums); 101 102 102 /*cleanup*/ 103 for(int i=0;i<num_independent_objects;i++){ 104 xDelete<char>(names[i]); 105 } 106 xDelete<char*>(names); 107 xDelete<int>(ind_enums); 108 xDelete<int>(costfunc_enums); 109 break; 103 break; 110 104 } 111 105 default:
Note:
See TracChangeset
for help on using the changeset viewer.