Changeset 25060


Ignore:
Timestamp:
06/18/20 00:05:28 (5 years ago)
Author:
Eric.Larour
Message:

CHG: added support for giamme class. Tested with qmu runs.

Location:
issm/trunk-jpl/src/c
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/analyses/SealevelriseAnalysis.cpp

    r24977 r25060  
    2424        int geodetic=0;
    2525        int dslmodel=0;
     26        int giamodel=0;
    2627
    2728        /*Update elements: */
     
    265266        } /*}}}*/
    266267        else _error_("Dsl model " << dslmodel << " not implemented yet!");
    267                        
     268               
     269        /*gia mme model: */
     270        iomodel->FetchData(&giamodel,"md.gia.model");
     271        if(giamodel==3){
     272                /*deal with Ngia and Ugia: */
     273                iomodel->FetchDataToDatasetInput(inputs2,elements,"md.gia.Ngia",GiaMmeNgiaEnum);
     274                iomodel->FetchDataToDatasetInput(inputs2,elements,"md.gia.Ugia",GiaMmeUgiaEnum);
     275        }
     276
    268277        /*Initialize cumdeltalthickness and sealevel rise rate input*/
    269278        InputUpdateFromConstantx(inputs2,elements,0.,SealevelriseCumDeltathicknessEnum);
     
    282291        IssmDouble* love_l=NULL;
    283292        int         dslmodel=0;
     293        int         giamodel=0;
    284294
    285295        IssmDouble* G_rigid = NULL;
     
    307317        /*some constant parameters: */
    308318        parameters->AddObject(iomodel->CopyConstantObject("md.dsl.model",DslModelEnum));
     319        parameters->AddObject(iomodel->CopyConstantObject("md.gia.model",GiaModelEnum));
    309320        parameters->AddObject(iomodel->CopyConstantObject("md.slr.geodetic_run_frequency",SealevelriseGeodeticRunFrequencyEnum));
    310321        parameters->AddObject(iomodel->CopyConstantObject("md.slr.reltol",SealevelriseReltolEnum));
     
    346357                if(modelid<=0 || modelid>nummodels)_error_("modelid field in dslmme object of md.dsl field should be between 1 and the number of ensemble runs!");
    347358        } /*}}}*/
     359        /*Deal with gia multi-model ensembles: {{{*/
     360        iomodel->FetchData(&giamodel,"md.gia.model");
     361        if(giamodel==3){
     362                IssmDouble modelid;
     363                int nummodels;
     364
     365                parameters->AddObject(iomodel->CopyConstantObject("md.gia.nummodels",GiaNummodelsEnum));
     366                iomodel->FetchData(&modelid,"md.gia.modelid");
     367                /*create double param, not int param, because Dakota will be updating it as
     368                 * a double potentially: */
     369                parameters->AddObject(new DoubleParam(GiaModelidEnum,modelid));
     370
     371                iomodel->FetchData(&nummodels,"md.gia.nummodels");
     372
     373                /*quick checks: */
     374                if(nummodels<=0)_error_("giamme object in  md.gia field should contain at least 1 ensemble model!");
     375                if(modelid<=0 || modelid>nummodels)_error_("modelid field in giamme object of md.gia field should be between 1 and the number of ensemble runs!");
     376        } /*}}}*/
    348377        /*Deal with elasticity {{{*/
    349378        /*love numbers: */
  • issm/trunk-jpl/src/c/cores/sealevelchange_core.cpp

    r24985 r25060  
    625625        /*parameters:*/
    626626        int                                     frequency;
     627        int                 giamodel;
     628        IssmDouble          modelid;
    627629        IssmDouble          dt;
    628630       
     
    632634        femmodel->parameters->FindParam(&frequency,SealevelriseGeodeticRunFrequencyEnum);
    633635        femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
    634 
     636        femmodel->parameters->FindParam(&giamodel,GiaModelEnum);
     637
     638        if(giamodel==3){
     639                /*need to actively get GIA from the MME ensemble, and plug it into
     640                 * the elements as inputs SealevelUGiaRateEnum and SealevelNGiaRateEnum :*/
     641                femmodel->parameters->FindParam(&modelid,GiaModelidEnum);
     642               
     643                modelid--; //from matlab
     644
     645                /*find the GiaMmeNgiaEnum dataset:*/
     646                DatasetInput2* dataset_input_ngia=femmodel->inputs2->GetDatasetInput2(GiaMmeNgiaEnum);
     647                DatasetInput2* dataset_input_ugia=femmodel->inputs2->GetDatasetInput2(GiaMmeUgiaEnum);
     648
     649                /*Go find the modelid'th input:*/
     650                TriaInput2* tria_input_ngia=dataset_input_ngia->GetTriaInputByOffset(modelid);
     651                TriaInput2* tria_input_ugia=dataset_input_ugia->GetTriaInputByOffset(modelid);
     652
     653                /*Plug into SealevelUGiaRate and SealevelNGiaRate inputs:*/
     654                Input2* tria_input_copy_ngia=tria_input_ngia->copy();
     655                Input2* tria_input_copy_ugia=tria_input_ugia->copy();
     656                tria_input_copy_ngia->ChangeEnum(SealevelNGiaRateEnum);
     657                tria_input_copy_ugia->ChangeEnum(SealevelUGiaRateEnum);
     658                femmodel->inputs2->AddInput(tria_input_copy_ngia);
     659                femmodel->inputs2->AddInput(tria_input_copy_ugia);
     660        }
     661       
    635662        /*recover GIA rates:*/
    636663        GetVectorFromInputsx(&U_gia,femmodel,SealevelUGiaRateEnum,VertexSIdEnum);
  • issm/trunk-jpl/src/c/shared/Enum/Enum.vim

    r25019 r25060  
    159159syn keyword cConstant FrontalForcingsNumberofBasinsEnum
    160160syn keyword cConstant FrontalForcingsParamEnum
     161syn keyword cConstant GiaModelEnum
     162syn keyword cConstant GiaModelidEnum
     163syn keyword cConstant GiaNummodelsEnum
    161164syn keyword cConstant GiaCrossSectionShapeEnum
    162165syn keyword cConstant GroundinglineFrictionInterpolationEnum
     
    539542syn keyword cConstant DslStericRateEnum
    540543syn keyword cConstant DslDynamicRateEnum
     544syn keyword cConstant GiaMmeNgiaEnum
     545syn keyword cConstant GiaMmeUgiaEnum
    541546syn keyword cConstant DummyEnum
    542547syn keyword cConstant EffectivePressureEnum
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r25019 r25060  
    153153        FrontalForcingsNumberofBasinsEnum,
    154154        FrontalForcingsParamEnum,
     155        GiaModelEnum,
     156        GiaModelidEnum,
     157        GiaNummodelsEnum,
    155158        GiaCrossSectionShapeEnum,
    156159        GroundinglineFrictionInterpolationEnum,
     
    536539        DslStericRateEnum,
    537540        DslDynamicRateEnum,
     541        GiaMmeNgiaEnum,
     542        GiaMmeUgiaEnum,
    538543        DummyEnum,
    539544   EffectivePressureEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r25019 r25060  
    161161                case FrontalForcingsNumberofBasinsEnum : return "FrontalForcingsNumberofBasins";
    162162                case FrontalForcingsParamEnum : return "FrontalForcingsParam";
     163                case GiaModelEnum : return "GiaModel";
     164                case GiaModelidEnum : return "GiaModelid";
     165                case GiaNummodelsEnum : return "GiaNummodels";
    163166                case GiaCrossSectionShapeEnum : return "GiaCrossSectionShape";
    164167                case GroundinglineFrictionInterpolationEnum : return "GroundinglineFrictionInterpolation";
     
    541544                case DslStericRateEnum : return "DslStericRate";
    542545                case DslDynamicRateEnum : return "DslDynamicRate";
     546                case GiaMmeNgiaEnum : return "GiaMmeNgia";
     547                case GiaMmeUgiaEnum : return "GiaMmeUgia";
    543548                case DummyEnum : return "Dummy";
    544549                case EffectivePressureEnum : return "EffectivePressure";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r25019 r25060  
    164164              else if (strcmp(name,"FrontalForcingsNumberofBasins")==0) return FrontalForcingsNumberofBasinsEnum;
    165165              else if (strcmp(name,"FrontalForcingsParam")==0) return FrontalForcingsParamEnum;
     166              else if (strcmp(name,"GiaModel")==0) return GiaModelEnum;
     167              else if (strcmp(name,"GiaModelid")==0) return GiaModelidEnum;
     168              else if (strcmp(name,"GiaNummodels")==0) return GiaNummodelsEnum;
    166169              else if (strcmp(name,"GiaCrossSectionShape")==0) return GiaCrossSectionShapeEnum;
    167170              else if (strcmp(name,"GroundinglineFrictionInterpolation")==0) return GroundinglineFrictionInterpolationEnum;
     
    257260              else if (strcmp(name,"MasstransportStabilization")==0) return MasstransportStabilizationEnum;
    258261              else if (strcmp(name,"MaterialsBeta")==0) return MaterialsBetaEnum;
    259               else if (strcmp(name,"MaterialsEarthDensity")==0) return MaterialsEarthDensityEnum;
    260               else if (strcmp(name,"MaterialsEffectiveconductivityAveraging")==0) return MaterialsEffectiveconductivityAveragingEnum;
    261               else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"MaterialsLatentheat")==0) return MaterialsLatentheatEnum;
     265              if (strcmp(name,"MaterialsEarthDensity")==0) return MaterialsEarthDensityEnum;
     266              else if (strcmp(name,"MaterialsEffectiveconductivityAveraging")==0) return MaterialsEffectiveconductivityAveragingEnum;
     267              else if (strcmp(name,"MaterialsHeatcapacity")==0) return MaterialsHeatcapacityEnum;
     268              else if (strcmp(name,"MaterialsLatentheat")==0) return MaterialsLatentheatEnum;
    266269              else if (strcmp(name,"MaterialsLithosphereDensity")==0) return MaterialsLithosphereDensityEnum;
    267270              else if (strcmp(name,"MaterialsLithosphereShearModulus")==0) return MaterialsLithosphereShearModulusEnum;
     
    380383              else if (strcmp(name,"SmbIssetpddfac")==0) return SmbIssetpddfacEnum;
    381384              else if (strcmp(name,"SmbIsshortwave")==0) return SmbIsshortwaveEnum;
    382               else if (strcmp(name,"SmbIstemperaturescaled")==0) return SmbIstemperaturescaledEnum;
    383               else if (strcmp(name,"SmbIsthermal")==0) return SmbIsthermalEnum;
    384               else if (strcmp(name,"SmbIsturbulentflux")==0) return SmbIsturbulentfluxEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"SmbK")==0) return SmbKEnum;
     388              if (strcmp(name,"SmbIstemperaturescaled")==0) return SmbIstemperaturescaledEnum;
     389              else if (strcmp(name,"SmbIsthermal")==0) return SmbIsthermalEnum;
     390              else if (strcmp(name,"SmbIsturbulentflux")==0) return SmbIsturbulentfluxEnum;
     391              else if (strcmp(name,"SmbK")==0) return SmbKEnum;
    389392              else if (strcmp(name,"SmbNumRequestedOutputs")==0) return SmbNumRequestedOutputsEnum;
    390393              else if (strcmp(name,"SmbPfac")==0) return SmbPfacEnum;
     
    503506              else if (strcmp(name,"Base")==0) return BaseEnum;
    504507              else if (strcmp(name,"BaseOld")==0) return BaseOldEnum;
    505               else if (strcmp(name,"BaseSlopeX")==0) return BaseSlopeXEnum;
    506               else if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum;
    507               else if (strcmp(name,"Bed")==0) return BedEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
     511              if (strcmp(name,"BaseSlopeX")==0) return BaseSlopeXEnum;
     512              else if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum;
     513              else if (strcmp(name,"Bed")==0) return BedEnum;
     514              else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum;
    512515              else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum;
    513516              else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;
     
    553556              else if (strcmp(name,"DslStericRate")==0) return DslStericRateEnum;
    554557              else if (strcmp(name,"DslDynamicRate")==0) return DslDynamicRateEnum;
     558              else if (strcmp(name,"GiaMmeNgia")==0) return GiaMmeNgiaEnum;
     559              else if (strcmp(name,"GiaMmeUgia")==0) return GiaMmeUgiaEnum;
    555560              else if (strcmp(name,"Dummy")==0) return DummyEnum;
    556561              else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum;
     
    624629              else if (strcmp(name,"HydrologyNeumannflux")==0) return HydrologyNeumannfluxEnum;
    625630              else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum;
    626               else if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum;
     631         else stage=6;
     632   }
     633   if(stage==6){
     634              if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum;
    627635              else if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum;
    628636              else if (strcmp(name,"HydrologySheetThicknessOld")==0) return HydrologySheetThicknessOldEnum;
    629637              else if (strcmp(name,"HydrologyWatercolumnMax")==0) return HydrologyWatercolumnMaxEnum;
    630638              else if (strcmp(name,"HydrologyWaterVx")==0) return HydrologyWaterVxEnum;
    631          else stage=6;
    632    }
    633    if(stage==6){
    634               if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
     639              else if (strcmp(name,"HydrologyWaterVy")==0) return HydrologyWaterVyEnum;
    635640              else if (strcmp(name,"Ice")==0) return IceEnum;
    636641              else if (strcmp(name,"IceMaskNodeActivation")==0) return IceMaskNodeActivationEnum;
     
    747752              else if (strcmp(name,"SmbEC")==0) return SmbECEnum;
    748753              else if (strcmp(name,"SmbECDt")==0) return SmbECDtEnum;
    749               else if (strcmp(name,"SmbECini")==0) return SmbECiniEnum;
     754         else stage=7;
     755   }
     756   if(stage==7){
     757              if (strcmp(name,"SmbECini")==0) return SmbECiniEnum;
    750758              else if (strcmp(name,"SmbEla")==0) return SmbElaEnum;
    751759              else if (strcmp(name,"SmbEvaporation")==0) return SmbEvaporationEnum;
    752760              else if (strcmp(name,"SmbFAC")==0) return SmbFACEnum;
    753761              else if (strcmp(name,"SmbGdn")==0) return SmbGdnEnum;
    754          else stage=7;
    755    }
    756    if(stage==7){
    757               if (strcmp(name,"SmbGdnini")==0) return SmbGdniniEnum;
     762              else if (strcmp(name,"SmbGdnini")==0) return SmbGdniniEnum;
    758763              else if (strcmp(name,"SmbGsp")==0) return SmbGspEnum;
    759764              else if (strcmp(name,"SmbGspini")==0) return SmbGspiniEnum;
     
    870875              else if (strcmp(name,"VzHO")==0) return VzHOEnum;
    871876              else if (strcmp(name,"VzMesh")==0) return VzMeshEnum;
    872               else if (strcmp(name,"VzSSA")==0) return VzSSAEnum;
     877         else stage=8;
     878   }
     879   if(stage==8){
     880              if (strcmp(name,"VzSSA")==0) return VzSSAEnum;
    873881              else if (strcmp(name,"WaterColumnOld")==0) return WaterColumnOldEnum;
    874882              else if (strcmp(name,"Watercolumn")==0) return WatercolumnEnum;
    875883              else if (strcmp(name,"WaterfractionDrainage")==0) return WaterfractionDrainageEnum;
    876884              else if (strcmp(name,"WaterfractionDrainageIntegrated")==0) return WaterfractionDrainageIntegratedEnum;
    877          else stage=8;
    878    }
    879    if(stage==8){
    880               if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
     885              else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum;
    881886              else if (strcmp(name,"Waterheight")==0) return WaterheightEnum;
    882887              else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum;
     
    993998              else if (strcmp(name,"Arrhenius")==0) return ArrheniusEnum;
    994999              else if (strcmp(name,"AutodiffJacobian")==0) return AutodiffJacobianEnum;
    995               else if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
     1000         else stage=9;
     1001   }
     1002   if(stage==9){
     1003              if (strcmp(name,"Balancethickness2Analysis")==0) return Balancethickness2AnalysisEnum;
    9961004              else if (strcmp(name,"Balancethickness2Solution")==0) return Balancethickness2SolutionEnum;
    9971005              else if (strcmp(name,"BalancethicknessAnalysis")==0) return BalancethicknessAnalysisEnum;
    9981006              else if (strcmp(name,"BalancethicknessApparentMassbalance")==0) return BalancethicknessApparentMassbalanceEnum;
    9991007              else if (strcmp(name,"BalancethicknessSoftAnalysis")==0) return BalancethicknessSoftAnalysisEnum;
    1000          else stage=9;
    1001    }
    1002    if(stage==9){
    1003               if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
     1008              else if (strcmp(name,"BalancethicknessSoftSolution")==0) return BalancethicknessSoftSolutionEnum;
    10041009              else if (strcmp(name,"BalancethicknessSolution")==0) return BalancethicknessSolutionEnum;
    10051010              else if (strcmp(name,"BalancethicknessSpcthickness")==0) return BalancethicknessSpcthicknessEnum;
     
    11161121              else if (strcmp(name,"Hook")==0) return HookEnum;
    11171122              else if (strcmp(name,"HydrologyDCEfficientAnalysis")==0) return HydrologyDCEfficientAnalysisEnum;
    1118               else if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
     1123         else stage=10;
     1124   }
     1125   if(stage==10){
     1126              if (strcmp(name,"HydrologyDCInefficientAnalysis")==0) return HydrologyDCInefficientAnalysisEnum;
    11191127              else if (strcmp(name,"HydrologyGlaDSAnalysis")==0) return HydrologyGlaDSAnalysisEnum;
    11201128              else if (strcmp(name,"HydrologyGlaDS")==0) return HydrologyGlaDSEnum;
    11211129              else if (strcmp(name,"HydrologyPismAnalysis")==0) return HydrologyPismAnalysisEnum;
    11221130              else if (strcmp(name,"HydrologyShaktiAnalysis")==0) return HydrologyShaktiAnalysisEnum;
    1123          else stage=10;
    1124    }
    1125    if(stage==10){
    1126               if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
     1131              else if (strcmp(name,"HydrologyShreveAnalysis")==0) return HydrologyShreveAnalysisEnum;
    11271132              else if (strcmp(name,"HydrologySolution")==0) return HydrologySolutionEnum;
    11281133              else if (strcmp(name,"Hydrologydc")==0) return HydrologydcEnum;
     
    12391244              else if (strcmp(name,"P1P1GLS")==0) return P1P1GLSEnum;
    12401245              else if (strcmp(name,"P1bubble")==0) return P1bubbleEnum;
    1241               else if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
     1246         else stage=11;
     1247   }
     1248   if(stage==11){
     1249              if (strcmp(name,"P1bubblecondensed")==0) return P1bubblecondensedEnum;
    12421250              else if (strcmp(name,"P1xP2")==0) return P1xP2Enum;
    12431251              else if (strcmp(name,"P1xP3")==0) return P1xP3Enum;
    12441252              else if (strcmp(name,"P1xP4")==0) return P1xP4Enum;
    12451253              else if (strcmp(name,"P2")==0) return P2Enum;
    1246          else stage=11;
    1247    }
    1248    if(stage==11){
    1249               if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
     1254              else if (strcmp(name,"P2bubble")==0) return P2bubbleEnum;
    12501255              else if (strcmp(name,"P2bubblecondensed")==0) return P2bubblecondensedEnum;
    12511256              else if (strcmp(name,"P2xP1")==0) return P2xP1Enum;
     
    13621367              else if (strcmp(name,"EtaAbsGradient")==0) return EtaAbsGradientEnum;
    13631368              else if (strcmp(name,"MeshZ")==0) return MeshZEnum;
    1364               else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
     1369         else stage=12;
     1370   }
     1371   if(stage==12){
     1372              if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
    13651373              else if (strcmp(name,"OutputdefinitionList")==0) return OutputdefinitionListEnum;
    13661374              else if (strcmp(name,"SealevelObs")==0) return SealevelObsEnum;
    13671375              else if (strcmp(name,"SealevelWeights")==0) return SealevelWeightsEnum;
    13681376              else if (strcmp(name,"StrainRate")==0) return StrainRateEnum;
    1369          else stage=12;
    1370    }
    1371    if(stage==12){
    1372               if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
     1377              else if (strcmp(name,"StressTensor")==0) return StressTensorEnum;
    13731378              else if (strcmp(name,"StressbalanceViscosityOvershoot")==0) return StressbalanceViscosityOvershootEnum;
    13741379              else if (strcmp(name,"SubelementMigration4")==0) return SubelementMigration4Enum;
Note: See TracChangeset for help on using the changeset viewer.