Changeset 22617
- Timestamp:
- 03/23/18 10:27:34 (7 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Dakota/IssmParallelDirectApplicInterface.cpp
r22551 r22617 45 45 } 46 46 /*}}}*/ 47 47 int IssmParallelDirectApplicInterface::derived_map_ac(const Dakota::String& ac_name){/*{{{*/ 48 48 49 FemModel* femmodel; 50 51 char **responses_descriptors = NULL; //these are ours! there are only numresponsedescriptors of them, not d_numresponses!!! 52 char *response_descriptor = NULL; 53 int numresponsedescriptors; 54 int solution_type; 55 bool control_analysis = false; 56 void (*solutioncore)(FemModel*) = NULL; 57 bool nodakotacore = true; 49 FemModel* femmodel; 58 50 59 int world_rank; 60 ISSM_MPI_Comm_rank(ISSM_MPI_COMM_WORLD,&world_rank); 51 char **responses_descriptors = NULL; //these are ours! there are only numresponsedescriptors of them, not d_numresponses!!! 52 char *response_descriptor = NULL; 53 int numresponsedescriptors; 54 int solution_type; 55 bool control_analysis = false; 56 void (*solutioncore)(FemModel*) = NULL; 57 bool nodakotacore = true; 61 58 62 /*Only have slaves work!:*/63 if(world_rank==0)return 0;59 int world_rank; 60 ISSM_MPI_Comm_rank(ISSM_MPI_COMM_WORLD,&world_rank); 64 61 65 #ifdef MPI_DEBUG 66 Cout << "eval server id" << evalServerId << " invoking " << ac_name << " within SIM::IssmParallelDirectApplicInterface." << std::endl; 67 #endif // MPI_DEBUG 62 /*Only have slaves work!:*/ 63 if(world_rank==0)return 0; 68 64 69 int i; 70 IssmDouble* variables=NULL; 71 char** variable_descriptors=NULL; 72 char* variable_descriptor=NULL; 73 IssmDouble* responses=NULL; 65 #ifdef MPI_DEBUG 66 Cout << "eval server id" << evalServerId << " invoking " << ac_name << " within SIM::IssmParallelDirectApplicInterface." << std::endl; 67 #endif // MPI_DEBUG 74 68 75 /*Before launching evaluation, we need to transfer the dakota inputs into Issm readable variables: */ 69 int i; 70 IssmDouble *variables = NULL; 71 char **variable_descriptors = NULL; 72 char *variable_descriptor = NULL; 73 IssmDouble *responses = NULL; 76 74 77 /*First, the variables: */ 78 variables=xNew<IssmDouble>(numACV); 79 for(i=0;i<numACV;i++){ 80 variables[i]=xC[i]; 81 } 82 /*The descriptors: */ 83 variable_descriptors=xNew<char*>(numACV); 84 for(i=0;i<numACV;i++){ 85 std::string label=xCLabels[i]; 86 variable_descriptor=xNew<char>(strlen(label.c_str())+1); 87 memcpy(variable_descriptor,label.c_str(),(strlen(label.c_str())+1)*sizeof(char)); 75 /*Before launching evaluation, we need to transfer the dakota inputs into Issm readable variables: */ 88 76 89 variable_descriptors[i]=variable_descriptor; 90 } 77 /*First, the variables: */ 78 variables=xNew<IssmDouble>(numACV); 79 for(i=0;i<numACV;i++){ 80 variables[i]=xC[i]; 81 } 82 /*The descriptors: */ 83 variable_descriptors=xNew<char*>(numACV); 84 for(i=0;i<numACV;i++){ 85 std::string label=xCLabels[i]; 86 variable_descriptor=xNew<char>(strlen(label.c_str())+1); 87 memcpy(variable_descriptor,label.c_str(),(strlen(label.c_str())+1)*sizeof(char)); 91 88 92 /*Initialize responses: */93 responses=xNewZeroInit<IssmDouble>(numFns);89 variable_descriptors[i]=variable_descriptor; 90 } 94 91 95 /*Make a copy of femmodel, so we start this new evaluation run for this specific sample with a brand96 * new copy of the model, which has not been tempered with by previous evaluation runs: */92 /*Initialize responses: */ 93 responses=xNewZeroInit<IssmDouble>(numFns); 97 94 98 femmodel=femmodel_init->copy(); 95 /*Make a copy of femmodel, so we start this new evaluation run for this specific sample with a brand 96 * new copy of the model, which has not been tempered with by previous evaluation runs: */ 97 femmodel=femmodel_init->copy(); 99 98 100 101 102 103 99 /*retrieve parameters: */ 100 femmodel->parameters->FindParam(&responses_descriptors,&numresponsedescriptors,QmuResponsedescriptorsEnum); 101 femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); 102 femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum); 104 103 105 106 104 /*Modify core inputs in objects contained in femmodel, to reflect the dakota variables inputs: */ 105 InputUpdateFromDakotax(femmodel,variables,variable_descriptors,numACV); 107 106 108 109 110 107 /*Determine solution sequence: */ 108 if(VerboseQmu()) _printf0_("Starting " << EnumToStringx(solution_type) << " core:\n"); 109 WrapperCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type,nodakotacore); 111 110 112 113 111 /*Run the core solution sequence: */ 112 solutioncore(femmodel); 114 113 115 116 117 114 /*compute responses: */ 115 if(VerboseQmu()) _printf0_("compute dakota responses:\n"); 116 femmodel->DakotaResponsesx(responses,responses_descriptors,numresponsedescriptors,numFns); 118 117 119 120 121 122 118 /*populate responses: */ 119 for(i=0;i<numFns;i++){ 120 fnVals[i]=responses[i]; 121 } 123 122 124 125 126 127 128 129 130 131 132 133 134 135 136 137 123 /*Free ressources:*/ 124 xDelete<IssmDouble>(variables); 125 for(i=0;i<numACV;i++){ 126 variable_descriptor=variable_descriptors[i]; 127 xDelete<char>(variable_descriptor); 128 } 129 xDelete<char*>(variable_descriptors); 130 for(i=0;i<numresponsedescriptors;i++){ 131 response_descriptor=responses_descriptors[i]; 132 xDelete<char>(response_descriptor); 133 } 134 if(responses_descriptors) xDelete<char*>(responses_descriptors); 135 xDelete<IssmDouble>(responses); 136 delete femmodel; 138 137 139 140 138 return 0; 139 }/*}}}*/ 141 140 } 142 141 #endif -
issm/trunk-jpl/src/c/classes/Params/Param.h
r22588 r22617 19 19 /*}}}*/ 20 20 21 class Param {21 class Param: public Object{ 22 22 23 23 public: -
issm/trunk-jpl/src/c/classes/Params/Parameters.cpp
r22588 r22617 64 64 /*Get index in array*/ 65 65 #ifdef _ISSM_DEBUG_ 66 if(param_enum<=ParametersSTARTEnum) _error_(" Enum "<<EnumToStringx(param_enum)<<" should appear after ParametersSTARTEnum");67 if(param_enum>=ParametersENDEnum) _error_(" Enum "<<EnumToStringx(param_enum)<<" should appear before ParametersENDEnum");66 if(param_enum<=ParametersSTARTEnum) _error_("Cannot add param: Enum "<<EnumToStringx(param_enum)<<" should appear after ParametersSTARTEnum"); 67 if(param_enum>=ParametersENDEnum) _error_("Cannot add param: Enum "<<EnumToStringx(param_enum)<<" should appear before ParametersENDEnum"); 68 68 #endif 69 69 int index = param_enum - ParametersSTARTEnum -1; … … 414 414 } 415 415 /*}}}*/ 416 void Parameters::FindParamInDataset(IssmDouble** pIssmDoublearray,int* pM,int* pN,int dataset_type,int enum_type){/*{{{*/ 417 _assert_(this); 418 419 _assert_(dataset_type>ParametersSTARTEnum); 420 _assert_(dataset_type<ParametersENDEnum); 421 422 int index = dataset_type - ParametersSTARTEnum -1; 423 if(!this->params[index]) _error_("Parameter " << EnumToStringx(dataset_type) <<" not set"); 424 if(this->params[index]->ObjectEnum()!=DataSetParamEnum) _error_("Parameter " << EnumToStringx(dataset_type) <<" is not a DataSetParam!"); 425 426 DataSetParam* dataset_param = xDynamicCast<DataSetParam*>(this->params[index]); 427 for( vector<Object*>::iterator object=dataset_param->value->objects.begin() ; object < dataset_param->value->objects.end(); object++ ){ 428 Param* param = xDynamicCast<Param*>(*object); 429 if(param->InstanceEnum()==enum_type){ 430 param->GetParameterValue(pIssmDoublearray,pM,pN); 431 return; 432 } 433 } 434 435 /*Error out if we reached this point*/ 436 _error_("Could not find Enum "<<EnumToStringx(enum_type)<<" in dataset param "<<EnumToStringx(dataset_type)); 437 } 438 /*}}}*/ 416 439 417 440 void Parameters::SetParam(bool boolean,int enum_type){/*{{{*/ … … 566 589 567 590 #ifdef _ISSM_DEBUG_ 568 if(param_enum<=ParametersSTARTEnum) _error_(" Enum "<<EnumToStringx(param_enum)<<" should appear after ParametersSTARTEnum");569 if(param_enum>=ParametersENDEnum) _error_(" Enum "<<EnumToStringx(param_enum)<<" should appear before ParametersENDEnum");591 if(param_enum<=ParametersSTARTEnum) _error_("Cannot find param: Enum "<<EnumToStringx(param_enum)<<" should appear after ParametersSTARTEnum"); 592 if(param_enum>=ParametersENDEnum) _error_("Cannot find param: Enum "<<EnumToStringx(param_enum)<<" should appear before ParametersENDEnum"); 570 593 #endif 571 594 -
issm/trunk-jpl/src/c/classes/Params/Parameters.h
r22559 r22617 51 51 void FindParam(FILE** pfid,int enum_type); 52 52 void FindParam(DataSet** pdataset, int enum_type); 53 void FindParamInDataset(IssmDouble** pIssmDoublearray,int* pM,int* pN,int dataset_type,int enum_type); 53 54 54 55 void SetParam(bool boolean,int enum_type); -
issm/trunk-jpl/src/c/modules/InputUpdateFromDakotax/InputUpdateFromDakotax.cpp
r15849 r22617 54 54 55 55 /*Now, pick up the parameter corresponding to root: */ 56 femmodel->parameters->FindParam (¶meter,&nrows,&ncols,StringToEnumx(root));56 femmodel->parameters->FindParamInDataset(¶meter,&nrows,&ncols,QmuVariableDescriptorsEnum,StringToEnumx(root)); 57 57 58 58 /*We've got the parameter, we need to update it using qmu_part (a partitioning vector), -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Dakota/CreateParametersDakota.cpp
r22611 r22617 79 79 80 80 /*Deal with data needed because of qmu variables*/ 81 DataSet* dataset_variable_descriptors = new DataSet(QmuVariableDescriptorsEnum); 81 82 for(i=0;i<numvariabledescriptors;i++){ 82 83 if (strncmp(variabledescriptors[i],"scaled_",7)==0){ … … 92 93 iomodel->FetchData(&dakota_parameter,&nrows,&ncols,fieldname); 93 94 if(nrows==iomodel->numberofvertices){ 94 parameters->AddObject(new DoubleMatParam(param_enum,dakota_parameter,nrows,ncols));95 dataset_variable_descriptors->AddObject(new DoubleMatParam(param_enum,dakota_parameter,nrows,ncols)); 95 96 } 96 97 else{ 97 parameters->AddObject(new DoubleTransientMatParam(param_enum,dakota_parameter,nrows,ncols));98 dataset_variable_descriptors->AddObject(new DoubleTransientMatParam(param_enum,dakota_parameter,nrows,ncols)); 98 99 } 99 100 xDelete<double>(dakota_parameter); … … 101 102 } 102 103 } 104 parameters->AddObject(new DataSetParam(QmuVariableDescriptorsEnum,dataset_variable_descriptors)); 105 delete dataset_variable_descriptors; 103 106 104 107 /*clean-up*/ -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r22612 r22617 214 214 QmuPartitionEnum, 215 215 QmuResponsedescriptorsEnum, 216 QmuVariableDescriptorsEnum, 216 217 RestartFileNameEnum, 217 218 ResultsEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r22612 r22617 222 222 case QmuPartitionEnum : return "QmuPartition"; 223 223 case QmuResponsedescriptorsEnum : return "QmuResponsedescriptors"; 224 case QmuVariableDescriptorsEnum : return "QmuVariableDescriptors"; 224 225 case RestartFileNameEnum : return "RestartFileName"; 225 226 case ResultsEnum : return "Results"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r22612 r22617 225 225 else if (strcmp(name,"QmuPartition")==0) return QmuPartitionEnum; 226 226 else if (strcmp(name,"QmuResponsedescriptors")==0) return QmuResponsedescriptorsEnum; 227 else if (strcmp(name,"QmuVariableDescriptors")==0) return QmuVariableDescriptorsEnum; 227 228 else if (strcmp(name,"RestartFileName")==0) return RestartFileNameEnum; 228 229 else if (strcmp(name,"Results")==0) return ResultsEnum; … … 259 260 else if (strcmp(name,"SmbCldFrac")==0) return SmbCldFracEnum; 260 261 else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum; 261 else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum; 265 if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum; 266 else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum; 266 267 else if (strcmp(name,"SmbDt")==0) return SmbDtEnum; 267 268 else if (strcmp(name,"Smb")==0) return SmbEnum; … … 382 383 else if (strcmp(name,"CalvingrateyAverage")==0) return CalvingrateyAverageEnum; 383 384 else if (strcmp(name,"Calvingratey")==0) return CalvingrateyEnum; 384 else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum; 388 if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum; 389 else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum; 389 390 else if (strcmp(name,"Converged")==0) return ConvergedEnum; 390 391 else if (strcmp(name,"CrevasseDepth")==0) return CrevasseDepthEnum; … … 505 506 else if (strcmp(name,"SmbDini")==0) return SmbDiniEnum; 506 507 else if (strcmp(name,"SmbDlwrf")==0) return SmbDlwrfEnum; 507 else if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"SmbDz")==0) return SmbDzEnum; 511 if (strcmp(name,"SmbDswrf")==0) return SmbDswrfEnum; 512 else if (strcmp(name,"SmbDz")==0) return SmbDzEnum; 512 513 else if (strcmp(name,"SmbDzini")==0) return SmbDziniEnum; 513 514 else if (strcmp(name,"SmbDzMin")==0) return SmbDzMinEnum; … … 628 629 else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum; 629 630 else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum; 630 else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum; 634 if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum; 635 else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum; 635 636 else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum; 636 637 else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum; … … 751 752 else if (strcmp(name,"HydrologyBasalFlux")==0) return HydrologyBasalFluxEnum; 752 753 else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum; 753 else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"HydrologydcEplColapseThickness")==0) return HydrologydcEplColapseThicknessEnum; 757 if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum; 758 else if (strcmp(name,"HydrologydcEplColapseThickness")==0) return HydrologydcEplColapseThicknessEnum; 758 759 else if (strcmp(name,"HydrologydcEplCompressibility")==0) return HydrologydcEplCompressibilityEnum; 759 760 else if (strcmp(name,"HydrologydcEplConductivity")==0) return HydrologydcEplConductivityEnum; … … 874 875 else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum; 875 876 else if (strcmp(name,"Mumps")==0) return MumpsEnum; 876 else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"Nodal")==0) return NodalEnum; 880 if (strcmp(name,"NewDamage")==0) return NewDamageEnum; 881 else if (strcmp(name,"Nodal")==0) return NodalEnum; 881 882 else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum; 882 883 else if (strcmp(name,"NodeSId")==0) return NodeSIdEnum; … … 997 998 else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum; 998 999 else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum; 999 else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"TransientInput")==0) return TransientInputEnum; 1003 if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum; 1004 else if (strcmp(name,"TransientInput")==0) return TransientInputEnum; 1004 1005 else if (strcmp(name,"TransientParam")==0) return TransientParamEnum; 1005 1006 else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum; … … 1120 1121 else if (strcmp(name,"Outputdefinition95")==0) return Outputdefinition95Enum; 1121 1122 else if (strcmp(name,"Outputdefinition96")==0) return Outputdefinition96Enum; 1122 else if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum; 1126 if (strcmp(name,"Outputdefinition97")==0) return Outputdefinition97Enum; 1127 else if (strcmp(name,"Outputdefinition98")==0) return Outputdefinition98Enum; 1127 1128 else if (strcmp(name,"Outputdefinition99")==0) return Outputdefinition99Enum; 1128 1129 else if (strcmp(name,"Outputdefinition9")==0) return Outputdefinition9Enum;
Note:
See TracChangeset
for help on using the changeset viewer.