Changeset 27666
- Timestamp:
- 03/29/23 12:25:50 (2 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/IoModel.cpp
r27490 r27666 480 480 this->FetchData(&num_independent_objects,"md.autodiff.num_independent_objects"); 481 481 if(num_independent_objects){ 482 this->FetchData(&names,&temp,"md.autodiff.independent_object_names"); 483 _assert_(temp==num_independent_objects); 484 this->FetchData(&types,NULL,NULL,"md.autodiff.independent_object_types"); 482 this->FetchMultipleData(&names,&temp,"md.autodiff.independent_name"); _assert_(temp==num_independent_objects); 483 this->FetchMultipleData(&types,NULL,"md.autodiff.independent_type"); 485 484 486 485 /*create independent objects, and at the same time, fetch the corresponding independent variables, -
issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp
r27387 r27666 475 475 476 476 /*Retrieve objective functions independently*/ 477 _printf0_("f(x) = "<<setw( 12)<<setprecision(7)<<*pf<<" | ");477 _printf0_("f(x) = "<<setw(9)<<setprecision(4)<<*pf<<" | "); 478 478 _printf0_(" N/A |\n"); 479 for(int i=0;i<num_responses;i++) _printf0_(" "<<setw( 12)<<setprecision(7)<<Jlist[(*Jlisti)*JlistN+i]);479 for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(8)<<setprecision(3)<<Jlist[(*Jlisti)*JlistN+i]); 480 480 _printf0_("\n"); 481 481 -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
r27665 r27666 75 75 76 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); 77 iomodel->FetchData(&num_independent_objects,"md.autodiff.num_independent_objects"); _assert_(num_independent_objects>0); 78 iomodel->FetchMultipleData(&names,&M,"md.autodiff.independent_name"); _assert_(M==num_independent_objects); 79 iomodel->FetchMultipleData(&control_scaling_factors,&M,"md.autodiff.independent_scaling_factor"); _assert_(M==num_independent_objects); 79 80 int* ind_enums=xNew<int>(num_independent_objects); 80 81 for(int i=0;i<num_independent_objects;i++){ … … 83 84 } 84 85 xDelete<char*>(names); 86 parameters->AddObject(new DoubleVecParam(InversionControlScalingFactorsEnum,control_scaling_factors,num_independent_objects)); 85 87 parameters->AddObject(new IntVecParam(InversionControlParametersEnum,ind_enums,num_independent_objects)); 86 88 xDelete<int>(ind_enums); 87 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));90 89 91 90 /*Step 2: create cost functions (dependent)*/ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/UpdateElementsAndMaterialsControl.cpp
r26468 r27666 211 211 #if defined(_HAVE_AD_) 212 212 /*Intermediaries*/ 213 int num_independent_objects,M,N,M_par,N_par;214 char ** names= NULL;215 int * types= NULL;216 int * control_sizes= NULL;217 IssmDouble * independent= NULL;218 IssmDouble * independents_fullmin= NULL;219 IssmDouble * independents_fullmax= NULL;220 bool control_analysis =false;213 int num_independent_objects,M,N; 214 char **names = NULL; 215 int *types = NULL; 216 int *control_sizes = NULL; 217 IssmDouble *independent = NULL; 218 IssmDouble **independents_fullmin = NULL; 219 IssmDouble **independents_fullmax = NULL; 220 bool control_analysis = false; 221 221 222 222 iomodel->FindConstant(&control_analysis,"md.inversion.iscontrol"); … … 226 226 227 227 /*Step1: create controls (independents)*/ 228 iomodel->FetchData(&num_independent_objects,"md.autodiff.num_independent_objects"); 229 _assert_(num_independent_objects>0); 230 iomodel->FetchData(&names,&M,"md.autodiff.independent_object_names"); 231 _assert_(M==num_independent_objects); 232 iomodel->FetchData(&types,NULL,NULL,"md.autodiff.independent_object_types"); 228 iomodel->FetchData(&num_independent_objects,"md.autodiff.num_independent_objects"); _assert_(num_independent_objects>0); 229 iomodel->FetchMultipleData(&names,&M,"md.autodiff.independent_name"); _assert_(M==num_independent_objects); 230 iomodel->FetchMultipleData(&types,&M,"md.autodiff.independent_type"); _assert_(M==num_independent_objects); 233 231 234 232 int* M_all = xNew<int>(num_independent_objects); … … 238 236 /*create independent objects, and at the same time, fetch the corresponding independent variables, 239 237 *and declare them as such in ADOLC: */ 240 iomodel->FetchData(&independents_fullmin,&M_par,&N_par,"md.autodiff.independent_min_parameters"); 241 iomodel->FetchData(&independents_fullmax,&M_par,&N_par,"md.autodiff.independent_max_parameters"); 242 iomodel->FetchData(&control_sizes,NULL,NULL,"md.autodiff.independent_control_sizes"); 243 244 int* start_point = NULL; 245 start_point = xNew<int>(num_independent_objects); 246 int counter = 0; 247 for(int i=0;i<num_independent_objects;i++){ 248 start_point[i]=counter; 249 counter+=control_sizes[i]; 250 } 238 iomodel->FetchMultipleData(&independents_fullmin,&M_all,&N_all,&M,"md.autodiff.independent_min_parameters"); _assert_(M==num_independent_objects); 239 iomodel->FetchMultipleData(&independents_fullmax,NULL ,NULL ,&M,"md.autodiff.independent_max_parameters"); _assert_(M==num_independent_objects); 240 iomodel->FetchMultipleData(&control_sizes,&M,"md.autodiff.independent_control_size"); _assert_(M==num_independent_objects); 251 241 252 242 for(int i=0;i<num_independent_objects;i++){ … … 257 247 char* iofieldname = NULL; 258 248 int input_enum; 259 IssmDouble* independents_min= NULL;260 IssmDouble* independents_max= NULL;249 IssmDouble* independents_min = NULL; 250 IssmDouble* independents_max = NULL; 261 251 262 252 FieldAndEnumFromCode(&input_enum,&iofieldname,names[i]); … … 264 254 /*Fetch required data*/ 265 255 iomodel->FetchData(&independent,&M,&N,iofieldname); 266 _assert_(independent); 267 _assert_(N==control_sizes[i]); 256 _assert_(independent && N==control_sizes[i]); 268 257 269 258 independents_min = NULL; independents_min = xNew<IssmDouble>(M*N); … … 271 260 for(int m=0;m<M;m++){ 272 261 for(int n=0;n<N;n++){ 273 independents_min[N*m+n]=independents_fullmin[ N_par*m+start_point[i]+n];274 independents_max[N*m+n]=independents_fullmax[ N_par*m+start_point[i]+n];262 independents_min[N*m+n]=independents_fullmin[i][N*m+n]; 263 independents_max[N*m+n]=independents_fullmax[i][N*m+n]; 275 264 } 276 265 } 277 266 if(N!=1) M_all[i]=M-1; 278 else M_all[i]=M;279 267 280 268 if(M_all[i]==iomodel->numberofvertices){ … … 287 275 _error_("Control size not supported"); 288 276 } 289 N_all[i] = N;290 277 291 278 for(Object* & object : elements->objects){ … … 318 305 xDelete<IssmDouble>(independents_fullmin); 319 306 xDelete<IssmDouble>(independents_fullmax); 320 xDelete<int>(start_point);321 307 xDelete<int>(control_sizes); 322 /*Step2: create cost functions (dependents)*/323 308 324 309 return; -
issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp
r27593 r27666 26 26 const char* field = "md.materials.rheology_B"; 27 27 input_enum = MaterialsRheologyBEnum; 28 fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1)); 29 } 30 else if(strcmp(string_in,"MaterialsRheologyN")==0){ 31 const char* field = "md.materials.rheology_n"; 32 input_enum = MaterialsRheologyNEnum; 28 33 fieldname=xNew<char>((strlen(field)+1)); xMemCpy<char>(fieldname,field,(strlen(field)+1)); 29 34 } -
issm/trunk-jpl/src/m/classes/autodiff.m
r27662 r27666 130 130 num_independent_objects=numel(self.independents); 131 131 WriteData(fid,prefix,'data',num_independent_objects,'name','md.autodiff.num_independent_objects','format','Integer'); 132 133 if(num_independent_objects), 134 names=cell(num_independent_objects,1); 135 types=zeros(num_independent_objects,1); 136 137 max_parameters_pre = []; 138 min_parameters_pre = []; 139 M_size = false; 140 for i=1:num_independent_objects, 141 indep=self.independents{i}; 142 if M_size == false && indep.control_size>1 143 M_size = true; 144 end 145 end 146 147 for i=1:num_independent_objects, 148 indep=self.independents{i}; 149 150 names{i}=indep.name; 151 types(i)=indep.typetoscalar(); 152 153 if indep.control_size == 1 && M_size == true 154 indep.min_parameters = [indep.min_parameters;NaN]; 155 indep.max_parameters = [indep.max_parameters;NaN]; 156 end 157 min_parameters_pre=[min_parameters_pre,indep.min_parameters]; 158 max_parameters_pre=[max_parameters_pre,indep.max_parameters]; 159 scaling_factors(i)=indep.control_scaling_factor; 160 control_sizes(i) = indep.control_size; 161 162 end 163 164 max_parameters=reshape(max_parameters_pre,size(max_parameters_pre,1),sum(control_sizes)); 165 min_parameters=reshape(min_parameters_pre,size(min_parameters_pre,1),sum(control_sizes)); 166 167 WriteData(fid,prefix,'data',names,'name','md.autodiff.independent_object_names','format','StringArray'); 168 WriteData(fid,prefix,'data',types,'name','md.autodiff.independent_object_types','format','IntMat','mattype',3); 169 WriteData(fid,prefix,'data',min_parameters,'name','md.autodiff.independent_min_parameters','format','DoubleMat','mattype',3); 170 WriteData(fid,prefix,'data',max_parameters,'name','md.autodiff.independent_max_parameters','format','DoubleMat','mattype',3); 171 WriteData(fid,prefix,'data',scaling_factors,'name','md.autodiff.independent_scaling_factors','format','IntMat','mattype',3); 172 WriteData(fid,prefix,'data',control_sizes,'name','md.autodiff.independent_control_sizes','format','IntMat','mattype',3); 173 132 for i=1:num_independent_objects 133 indep=self.independents{i}; 134 WriteData(fid,prefix,'data',indep.name,'name','md.autodiff.independent_name','format','String'); 135 WriteData(fid,prefix,'data',indep.typetoscalar(),'name','md.autodiff.independent_type','format','Integer'); 136 WriteData(fid,prefix,'data',indep.min_parameters,'name','md.autodiff.independent_min_parameters','format','DoubleMat','mattype',3); 137 WriteData(fid,prefix,'data',indep.max_parameters,'name','md.autodiff.independent_max_parameters','format','DoubleMat','mattype',3); 138 WriteData(fid,prefix,'data',indep.control_scaling_factor,'name','md.autodiff.independent_scaling_factor','format','Double'); 139 WriteData(fid,prefix,'data',indep.control_size,'name','md.autodiff.independent_control_size','format','Integer'); 174 140 end 175 141 %}}}
Note:
See TracChangeset
for help on using the changeset viewer.