12 bool control_analysis;
17 char** controls = NULL;
19 char** cm_responses = NULL;
25 iomodel->
FindConstant(&control_analysis,
"md.inversion.iscontrol");
26 iomodel->
FindConstant(&inversiontype,
"md.inversion.type");
30 switch(inversiontype){
41 iomodel->
FindConstant(&controls,&num_controls,
"md.inversion.control_parameters");
42 if(num_controls<1)
_error_(
"no controls found");
43 int* control_enums=xNew<int>(num_controls);
44 for(
int i=0;i<num_controls;i++){
46 xDelete<char>(controls[i]);
48 xDelete<char*>(controls);
51 iomodel->
FindConstant(&cm_responses,&num_costfunc,
"md.inversion.cost_functions");
52 if(num_costfunc<1)
_error_ (
"no cost functions found");
53 int* costfunc_enums=xNew<int>(num_costfunc);
54 for(
int i=0;i<num_costfunc;i++){
56 xDelete<char>(cm_responses[i]);
58 xDelete<char*>(cm_responses);
61 xDelete<int>(control_enums);
62 xDelete<int>(costfunc_enums);
69 int num_independent_objects,M;
77 iomodel->
FetchData(&num_independent_objects,
"md.autodiff.num_independent_objects");
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++){
84 xDelete<char>(names[i]);
88 iomodel->
FindConstant(&cm_responses,&num_costfunc,
"md.autodiff.dependent_object_names");
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++){
94 xDelete<char>(cm_responses[i]);
96 xDelete<char*>(cm_responses);
99 iomodel->
FetchData(&control_scaling_factors,NULL,NULL,
"md.autodiff.independent_scaling_factors");
103 for(
int i=0;i<num_independent_objects;i++){
104 xDelete<char>(names[i]);
106 xDelete<char*>(names);
107 xDelete<int>(ind_enums);
108 xDelete<int>(costfunc_enums);
116 switch(inversiontype){
120 iomodel->
FetchData(&cm_jump,&nsteps,NULL,
"md.inversion.step_threshold");
121 iomodel->
FetchData(&optscal,NULL,NULL,
"md.inversion.gradient_scaling");
122 iomodel->
FetchData(&maxiter,NULL,NULL,
"md.inversion.maxiter_per_step");
142 iomodel->
FetchData(&control_scaling_factors,NULL,NULL,
"md.inversion.control_scaling_factors");
147 iomodel->
FetchData(&control_scaling_factors,NULL,NULL,
"md.inversion.control_scaling_factors");
160 xDelete<int>(maxiter);
161 xDelete<IssmDouble>(control_scaling_factors);
162 iomodel->
DeleteData(cm_jump,
"md.inversion.step_threshold");
163 iomodel->
DeleteData(optscal,
"md.inversion.gradient_scaling");