Changeset 26676
- Timestamp:
- 11/30/21 05:29:36 (3 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 3 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Loads/Friction.cpp
r26601 r26676 545 545 546 546 /*Get effective pressure and basal velocity*/ 547 IssmDouble Neff = EffectivePressure(gauss);548 547 IssmDouble vmag = VelMag(gauss); 548 549 bool ispwStochastic; 550 IssmDouble Neff; 551 element->parameters->FindParam(&ispwStochastic,StochasticForcingIsWaterPressureEnum); 552 if(ispwStochastic){ 553 /*Retrieve stochastic water pressure and compute ice pressure*/ 554 IssmDouble p_ice,p_water,Neff_limit; 555 element->GetInputValue(&p_water,gauss,FrictionWaterPressureEnum); 556 element->parameters->FindParam(&Neff_limit,FrictionEffectivePressureLimitEnum); 557 p_ice = IcePressure(gauss); 558 Neff = max(Neff_limit*p_ice, p_ice - p_water); 559 } 560 else{ 561 /*Compute effective pressure directly*/ 562 Neff = EffectivePressure(gauss); 563 } 549 564 550 565 /*Check to prevent dividing by zero if vmag==0*/ … … 845 860 element->parameters->FindParam(&Neff_limit,FrictionEffectivePressureLimitEnum); 846 861 862 /*Compute ice pressure*/ 863 p_ice = IcePressure(gauss); 864 847 865 /*From base and thickness, compute effective pressure when drag is viscous, or get Neff from forcing:*/ 848 866 switch(coupled_flag){ 849 867 case 0:{ 850 element->GetInputValue(&thickness, gauss,ThicknessEnum);851 868 element->GetInputValue(&base, gauss,BaseEnum); 852 869 element->GetInputValue(&sealevel, gauss,SealevelEnum); 853 870 IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum); 854 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum);855 871 IssmDouble gravity = element->FindParam(ConstantsGEnum); 856 p_ice = gravity*rho_ice*thickness;857 872 p_water = rho_water*gravity*(sealevel-base); 858 873 Neff = p_ice - p_water; … … 860 875 break; 861 876 case 1:{ 862 element->GetInputValue(&thickness, gauss,ThicknessEnum);863 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum);864 IssmDouble gravity = element->FindParam(ConstantsGEnum);865 p_ice = gravity*rho_ice*thickness;866 877 p_water = 0.; 867 878 Neff = p_ice - p_water; … … 869 880 break; 870 881 case 2:{ 871 element->GetInputValue(&thickness, gauss,ThicknessEnum);872 882 element->GetInputValue(&base, gauss,BaseEnum); 873 883 element->GetInputValue(&sealevel, gauss,SealevelEnum); 874 884 IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum); 875 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum);876 885 IssmDouble gravity = element->FindParam(ConstantsGEnum); 877 p_ice = gravity*rho_ice*thickness;878 886 p_water = max(0.,rho_water*gravity*(sealevel-base)); 879 887 Neff = p_ice - p_water; … … 882 890 case 3:{ 883 891 element->GetInputValue(&Neff,gauss,FrictionEffectivePressureEnum); 884 element->GetInputValue(&thickness, gauss,ThicknessEnum);885 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum);886 IssmDouble gravity = element->FindParam(ConstantsGEnum);887 p_ice = gravity*rho_ice*thickness;888 892 } 889 893 break; 890 894 case 4:{ 891 895 element->GetInputValue(&Neff,gauss,EffectivePressureEnum); 892 element->GetInputValue(&thickness, gauss,ThicknessEnum);893 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum);894 IssmDouble gravity = element->FindParam(ConstantsGEnum);895 p_ice = gravity*rho_ice*thickness;896 896 } 897 897 break; … … 905 905 /*Return effective pressure*/ 906 906 return Neff; 907 908 }/*}}}*/ 909 IssmDouble Friction::IcePressure(Gauss* gauss){/*{{{*/ 910 /*Get ice pressure*/ 911 912 IssmDouble thickness,p_ice; 913 /*Recover Inputs and Parameters*/ 914 element->GetInputValue(&thickness, gauss,ThicknessEnum); 915 IssmDouble rho_ice = element->FindParam(MaterialsRhoIceEnum); 916 IssmDouble gravity = element->FindParam(ConstantsGEnum); 917 918 /*Compute*/ 919 p_ice = gravity*rho_ice*thickness; 920 921 /*Return ice pressure*/ 922 return p_ice; 923 924 }/*}}}*/ 925 IssmDouble Friction::SubglacialWaterPressure(Gauss* gauss){/*{{{*/ 926 /*Get water pressure as a function of flag */ 927 928 int coupled_flag; 929 IssmDouble base,sealevel,p_water; 930 931 /*Recover parameters: */ 932 element->parameters->FindParam(&coupled_flag,FrictionCouplingEnum); 933 934 switch(coupled_flag){ 935 case 0:{ 936 element->GetInputValue(&base, gauss,BaseEnum); 937 element->GetInputValue(&sealevel, gauss,SealevelEnum); 938 IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum); 939 IssmDouble gravity = element->FindParam(ConstantsGEnum); 940 p_water = rho_water*gravity*(sealevel-base); 941 } 942 break; 943 case 1:{ 944 p_water = 0.; 945 } 946 break; 947 case 2:{ 948 element->GetInputValue(&base, gauss,BaseEnum); 949 element->GetInputValue(&sealevel, gauss,SealevelEnum); 950 IssmDouble rho_water = element->FindParam(MaterialsRhoSeawaterEnum); 951 IssmDouble gravity = element->FindParam(ConstantsGEnum); 952 p_water = max(0.,rho_water*gravity*(sealevel-base)); 953 } 954 break; 955 case 3:{ 956 _error_("water pressure not computed for coupling==3 in friction law"); 957 } 958 break; 959 case 4:{ 960 _error_("water pressure not computed for coupling==4 in friction law"); 961 } 962 break; 963 default: 964 _error_("not supported"); 965 } 966 967 /*Return water pressure*/ 968 return p_water; 907 969 908 970 }/*}}}*/ -
issm/trunk-jpl/src/c/classes/Loads/Friction.h
r26470 r26676 52 52 53 53 IssmDouble EffectivePressure(Gauss* gauss); 54 IssmDouble IcePressure(Gauss* gauss); 55 IssmDouble SubglacialWaterPressure(Gauss* gauss); 54 56 IssmDouble VelMag(Gauss* gauss); 55 57 void GetBasalSlidingSpeeds(IssmDouble* pvx, Gauss* gauss); -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
r26615 r26676 501 501 bool isstochasticforcing; 502 502 parameters->FindParam(&isstochasticforcing,StochasticForcingIsStochasticForcingEnum); 503 /*Stochastic Effective Pressure false by default*/ 504 parameters->AddObject(new BoolParam(StochasticForcingIsWaterPressureEnum,false)); 503 505 if(isstochasticforcing){ 504 506 int num_fields,stochastic_dim; -
issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp
r26640 r26676 4 4 5 5 #include "./StochasticForcingx.h" 6 #include "../../classes/Loads/Friction.h" 6 7 #include "../../shared/shared.h" 7 8 #include "../../toolkits/toolkits.h" … … 141 142 } 142 143 break; 144 //VV working(29Nov2021) 145 case FrictionWaterPressureEnum: 146 /*Specify that WaterPressure is stochastic*/ 147 femmodel->parameters->SetParam(true,StochasticForcingIsWaterPressureEnum); 148 for(Object* &object:femmodel->elements->objects){ 149 Element* element = xDynamicCast<Element*>(object); 150 int numvertices = element->GetNumberOfVertices(); 151 IssmDouble p_water_deterministic[numvertices]; 152 IssmDouble p_water[numvertices]; 153 element->GetInputValue(&dimensionid,StochasticForcingDefaultIdEnum); 154 Gauss* gauss=element->NewGauss(); 155 Friction* friction = new Friction(element); 156 for(int i=0;i<numvertices;i++){ 157 gauss->GaussVertex(i); 158 p_water_deterministic[i] = friction->SubglacialWaterPressure(gauss); 159 p_water[i] = p_water_deterministic[i] + noisefield[dimensionid]; //make sure positive (29Nov2021) 160 p_water[i] = max(0.0,p_water[i]); 161 } 162 element->AddInput(FrictionWaterPressureEnum,p_water,P1DGEnum); 163 delete gauss; 164 delete friction; 165 } 166 break; 167 168 /* 169 case FrictionEffectivePressureEnum: 170 femmodel->parameters->SetParam(true,StochasticForcingIsEffectivePressureEnum); 171 for(Object* &object:femmodel->elements->objects){ 172 Element* element = xDynamicCast<Element*>(object); 173 int numvertices = element->GetNumberOfVertices(); 174 IssmDouble Neff[numvertices]; 175 element->GetInputValue(&dimensionid,StochasticForcingDefaultIdEnum); 176 Gauss* gauss=element->NewGauss(); 177 Friction* friction = new Friction(element); 178 for(int i=0;i<numvertices;i++){ 179 gauss->GaussVertex(i); 180 Neff[i] = friction->EffectivePressure(gauss); 181 Neff[i] = Neff[i]+noisefield[dimensionid]; 182 } 183 element->AddInput(FrictionEffectivePressureEnum,Neff,P1DGEnum); 184 delete gauss; 185 delete friction; 186 } 187 break; 188 */ 189 143 190 default: 144 191 _error_("Field "<<EnumToStringx(fields[j])<<" does not support stochasticity yet."); -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r26640 r26676 401 401 syn keyword cConstant StochasticForcingDimensionsEnum 402 402 syn keyword cConstant StochasticForcingFieldsEnum 403 syn keyword cConstant StochasticForcingIsEffectivePressureEnum 403 404 syn keyword cConstant StochasticForcingIsStochasticForcingEnum 405 syn keyword cConstant StochasticForcingIsWaterPressureEnum 404 406 syn keyword cConstant StochasticForcingNumFieldsEnum 405 407 syn keyword cConstant StochasticForcingRandomflagEnum … … 603 605 syn keyword cConstant BaselineBasalforcingsFloatingiceMeltingRateEnum 604 606 syn keyword cConstant BaselineCalvingCalvingrateEnum 607 syn keyword cConstant BaselineFrictionEffectivePressureEnum 605 608 syn keyword cConstant BedEnum 606 609 syn keyword cConstant BedGRDEnum … … 1073 1076 syn keyword cConstant WaterfractionEnum 1074 1077 syn keyword cConstant WaterheightEnum 1078 syn keyword cConstant FrictionWaterPressureEnum 1079 syn keyword cConstant FrictionWaterPressureNoiseEnum 1075 1080 syn keyword cConstant WeightsLevelsetObservationEnum 1076 1081 syn keyword cConstant WeightsSurfaceObservationEnum -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r26640 r26676 395 395 StochasticForcingDimensionsEnum, 396 396 StochasticForcingFieldsEnum, 397 StochasticForcingIsEffectivePressureEnum, 397 398 StochasticForcingIsStochasticForcingEnum, 399 StochasticForcingIsWaterPressureEnum, 398 400 StochasticForcingNumFieldsEnum, 399 401 StochasticForcingRandomflagEnum, … … 599 601 BaselineBasalforcingsFloatingiceMeltingRateEnum, 600 602 BaselineCalvingCalvingrateEnum, 603 BaselineFrictionEffectivePressureEnum, 601 604 BedEnum, 602 605 BedGRDEnum, … … 1070 1073 WaterfractionEnum, 1071 1074 WaterheightEnum, 1075 FrictionWaterPressureEnum, 1076 FrictionWaterPressureNoiseEnum, 1072 1077 WeightsLevelsetObservationEnum, 1073 1078 WeightsSurfaceObservationEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r26640 r26676 403 403 case StochasticForcingDimensionsEnum : return "StochasticForcingDimensions"; 404 404 case StochasticForcingFieldsEnum : return "StochasticForcingFields"; 405 case StochasticForcingIsEffectivePressureEnum : return "StochasticForcingIsEffectivePressure"; 405 406 case StochasticForcingIsStochasticForcingEnum : return "StochasticForcingIsStochasticForcing"; 407 case StochasticForcingIsWaterPressureEnum : return "StochasticForcingIsWaterPressure"; 406 408 case StochasticForcingNumFieldsEnum : return "StochasticForcingNumFields"; 407 409 case StochasticForcingRandomflagEnum : return "StochasticForcingRandomflag"; … … 605 607 case BaselineBasalforcingsFloatingiceMeltingRateEnum : return "BaselineBasalforcingsFloatingiceMeltingRate"; 606 608 case BaselineCalvingCalvingrateEnum : return "BaselineCalvingCalvingrate"; 609 case BaselineFrictionEffectivePressureEnum : return "BaselineFrictionEffectivePressure"; 607 610 case BedEnum : return "Bed"; 608 611 case BedGRDEnum : return "BedGRD"; … … 1075 1078 case WaterfractionEnum : return "Waterfraction"; 1076 1079 case WaterheightEnum : return "Waterheight"; 1080 case FrictionWaterPressureEnum : return "FrictionWaterPressure"; 1081 case FrictionWaterPressureNoiseEnum : return "FrictionWaterPressureNoise"; 1077 1082 case WeightsLevelsetObservationEnum : return "WeightsLevelsetObservation"; 1078 1083 case WeightsSurfaceObservationEnum : return "WeightsSurfaceObservation"; -
issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
r26640 r26676 394 394 syn keyword juliaConstC StochasticForcingDimensionsEnum 395 395 syn keyword juliaConstC StochasticForcingFieldsEnum 396 syn keyword juliaConstC StochasticForcingIsEffectivePressureEnum 396 397 syn keyword juliaConstC StochasticForcingIsStochasticForcingEnum 398 syn keyword juliaConstC StochasticForcingIsWaterPressureEnum 397 399 syn keyword juliaConstC StochasticForcingNumFieldsEnum 398 400 syn keyword juliaConstC StochasticForcingRandomflagEnum … … 596 598 syn keyword juliaConstC BaselineBasalforcingsFloatingiceMeltingRateEnum 597 599 syn keyword juliaConstC BaselineCalvingCalvingrateEnum 600 syn keyword juliaConstC BaselineFrictionEffectivePressureEnum 598 601 syn keyword juliaConstC BedEnum 599 602 syn keyword juliaConstC BedGRDEnum … … 1066 1069 syn keyword juliaConstC WaterfractionEnum 1067 1070 syn keyword juliaConstC WaterheightEnum 1071 syn keyword juliaConstC FrictionWaterPressureEnum 1072 syn keyword juliaConstC FrictionWaterPressureNoiseEnum 1068 1073 syn keyword juliaConstC WeightsLevelsetObservationEnum 1069 1074 syn keyword juliaConstC WeightsSurfaceObservationEnum -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r26640 r26676 412 412 else if (strcmp(name,"StochasticForcingDimensions")==0) return StochasticForcingDimensionsEnum; 413 413 else if (strcmp(name,"StochasticForcingFields")==0) return StochasticForcingFieldsEnum; 414 else if (strcmp(name,"StochasticForcingIsEffectivePressure")==0) return StochasticForcingIsEffectivePressureEnum; 414 415 else if (strcmp(name,"StochasticForcingIsStochasticForcing")==0) return StochasticForcingIsStochasticForcingEnum; 416 else if (strcmp(name,"StochasticForcingIsWaterPressure")==0) return StochasticForcingIsWaterPressureEnum; 415 417 else if (strcmp(name,"StochasticForcingNumFields")==0) return StochasticForcingNumFieldsEnum; 416 418 else if (strcmp(name,"StochasticForcingRandomflag")==0) return StochasticForcingRandomflagEnum; … … 504 506 else if (strcmp(name,"Step")==0) return StepEnum; 505 507 else if (strcmp(name,"Steps")==0) return StepsEnum; 506 else if (strcmp(name,"StressbalanceAbstol")==0) return StressbalanceAbstolEnum;507 else if (strcmp(name,"StressbalanceFSreconditioning")==0) return StressbalanceFSreconditioningEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"StressbalanceIsnewton")==0) return StressbalanceIsnewtonEnum; 511 if (strcmp(name,"StressbalanceAbstol")==0) return StressbalanceAbstolEnum; 512 else if (strcmp(name,"StressbalanceFSreconditioning")==0) return StressbalanceFSreconditioningEnum; 513 else if (strcmp(name,"StressbalanceIsnewton")==0) return StressbalanceIsnewtonEnum; 512 514 else if (strcmp(name,"StressbalanceMaxiter")==0) return StressbalanceMaxiterEnum; 513 515 else if (strcmp(name,"StressbalanceNumRequestedOutputs")==0) return StressbalanceNumRequestedOutputsEnum; … … 617 619 else if (strcmp(name,"BaselineBasalforcingsFloatingiceMeltingRate")==0) return BaselineBasalforcingsFloatingiceMeltingRateEnum; 618 620 else if (strcmp(name,"BaselineCalvingCalvingrate")==0) return BaselineCalvingCalvingrateEnum; 621 else if (strcmp(name,"BaselineFrictionEffectivePressure")==0) return BaselineFrictionEffectivePressureEnum; 619 622 else if (strcmp(name,"Bed")==0) return BedEnum; 620 623 else if (strcmp(name,"BedGRD")==0) return BedGRDEnum; … … 626 629 else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum; 627 630 else if (strcmp(name,"BottomPressure")==0) return BottomPressureEnum; 628 else if (strcmp(name,"BottomPressureOld")==0) return BottomPressureOldEnum;629 else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum;630 else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum; 634 if (strcmp(name,"BottomPressureOld")==0) return BottomPressureOldEnum; 635 else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum; 636 else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum; 637 else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum; 635 638 else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum; 636 639 else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum; … … 749 752 else if (strcmp(name,"HydrologyHeadOld")==0) return HydrologyHeadOldEnum; 750 753 else if (strcmp(name,"HydrologyMoulinInput")==0) return HydrologyMoulinInputEnum; 751 else if (strcmp(name,"HydrologyNeumannflux")==0) return HydrologyNeumannfluxEnum;752 else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum;753 else if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum; 757 if (strcmp(name,"HydrologyNeumannflux")==0) return HydrologyNeumannfluxEnum; 758 else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum; 759 else if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum; 760 else if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum; 758 761 else if (strcmp(name,"HydrologySheetThicknessOld")==0) return HydrologySheetThicknessOldEnum; 759 762 else if (strcmp(name,"HydrologyTws")==0) return HydrologyTwsEnum; … … 872 875 else if (strcmp(name,"SealevelUGrd")==0) return SealevelUGrdEnum; 873 876 else if (strcmp(name,"SealevelNGrd")==0) return SealevelNGrdEnum; 874 else if (strcmp(name,"SealevelUEastEsa")==0) return SealevelUEastEsaEnum;875 else if (strcmp(name,"SealevelUNorthEsa")==0) return SealevelUNorthEsaEnum;876 else if (strcmp(name,"SealevelchangeIndices")==0) return SealevelchangeIndicesEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"SealevelchangeG")==0) return SealevelchangeGEnum; 880 if (strcmp(name,"SealevelUEastEsa")==0) return SealevelUEastEsaEnum; 881 else if (strcmp(name,"SealevelUNorthEsa")==0) return SealevelUNorthEsaEnum; 882 else if (strcmp(name,"SealevelchangeIndices")==0) return SealevelchangeIndicesEnum; 883 else if (strcmp(name,"SealevelchangeG")==0) return SealevelchangeGEnum; 881 884 else if (strcmp(name,"SealevelchangeGU")==0) return SealevelchangeGUEnum; 882 885 else if (strcmp(name,"SealevelchangeGE")==0) return SealevelchangeGEEnum; … … 995 998 else if (strcmp(name,"SmbSizeini")==0) return SmbSizeiniEnum; 996 999 else if (strcmp(name,"SmbSmbCorr")==0) return SmbSmbCorrEnum; 997 else if (strcmp(name,"SmbSmbref")==0) return SmbSmbrefEnum;998 else if (strcmp(name,"SmbSzaValue")==0) return SmbSzaValueEnum;999 else if (strcmp(name,"SmbT")==0) return SmbTEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"SmbTa")==0) return SmbTaEnum; 1003 if (strcmp(name,"SmbSmbref")==0) return SmbSmbrefEnum; 1004 else if (strcmp(name,"SmbSzaValue")==0) return SmbSzaValueEnum; 1005 else if (strcmp(name,"SmbT")==0) return SmbTEnum; 1006 else if (strcmp(name,"SmbTa")==0) return SmbTaEnum; 1004 1007 else if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum; 1005 1008 else if (strcmp(name,"SmbTemperaturesAnomaly")==0) return SmbTemperaturesAnomalyEnum; … … 1099 1102 else if (strcmp(name,"Waterfraction")==0) return WaterfractionEnum; 1100 1103 else if (strcmp(name,"Waterheight")==0) return WaterheightEnum; 1104 else if (strcmp(name,"FrictionWaterPressure")==0) return FrictionWaterPressureEnum; 1105 else if (strcmp(name,"FrictionWaterPressureNoise")==0) return FrictionWaterPressureNoiseEnum; 1101 1106 else if (strcmp(name,"WeightsLevelsetObservation")==0) return WeightsLevelsetObservationEnum; 1102 1107 else if (strcmp(name,"WeightsSurfaceObservation")==0) return WeightsSurfaceObservationEnum; … … 1116 1121 else if (strcmp(name,"Outputdefinition19")==0) return Outputdefinition19Enum; 1117 1122 else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum; 1118 else if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"Outputdefinition21")==0) return Outputdefinition21Enum; 1119 1127 else if (strcmp(name,"Outputdefinition22")==0) return Outputdefinition22Enum; 1120 1128 else if (strcmp(name,"Outputdefinition23")==0) return Outputdefinition23Enum; 1121 1129 else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum; 1122 1130 else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum; 1131 else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum; 1127 1132 else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum; 1128 1133 else if (strcmp(name,"Outputdefinition28")==0) return Outputdefinition28Enum; … … 1239 1244 else if (strcmp(name,"Boundary")==0) return BoundaryEnum; 1240 1245 else if (strcmp(name,"BuddJacka")==0) return BuddJackaEnum; 1241 else if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"CalvingDev2")==0) return CalvingDev2Enum; 1242 1250 else if (strcmp(name,"CalvingHab")==0) return CalvingHabEnum; 1243 1251 else if (strcmp(name,"CalvingLevermann")==0) return CalvingLevermannEnum; 1244 1252 else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum; 1245 1253 else if (strcmp(name,"Cfdragcoeffabsgrad")==0) return CfdragcoeffabsgradEnum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum; 1254 else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum; 1250 1255 else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum; 1251 1256 else if (strcmp(name,"Cflevelsetmisfit")==0) return CflevelsetmisfitEnum; … … 1362 1367 else if (strcmp(name,"Indexed")==0) return IndexedEnum; 1363 1368 else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum; 1364 else if (strcmp(name,"ElementInput")==0) return ElementInputEnum; 1369 else stage=12; 1370 } 1371 if(stage==12){ 1372 if (strcmp(name,"ElementInput")==0) return ElementInputEnum; 1365 1373 else if (strcmp(name,"IntMatExternalResult")==0) return IntMatExternalResultEnum; 1366 1374 else if (strcmp(name,"IntMatParam")==0) return IntMatParamEnum; 1367 1375 else if (strcmp(name,"IntParam")==0) return IntParamEnum; 1368 1376 else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum; 1369 else stage=12; 1370 } 1371 if(stage==12){ 1372 if (strcmp(name,"Inputs")==0) return InputsEnum; 1377 else if (strcmp(name,"Inputs")==0) return InputsEnum; 1373 1378 else if (strcmp(name,"Internal")==0) return InternalEnum; 1374 1379 else if (strcmp(name,"Intersect")==0) return IntersectEnum; … … 1485 1490 else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum; 1486 1491 else if (strcmp(name,"SamplingAnalysis")==0) return SamplingAnalysisEnum; 1487 else if (strcmp(name,"SamplingSolution")==0) return SamplingSolutionEnum; 1492 else stage=13; 1493 } 1494 if(stage==13){ 1495 if (strcmp(name,"SamplingSolution")==0) return SamplingSolutionEnum; 1488 1496 else if (strcmp(name,"SIAApproximation")==0) return SIAApproximationEnum; 1489 1497 else if (strcmp(name,"SMBautoregression")==0) return SMBautoregressionEnum; 1490 1498 else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum; 1491 1499 else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum; 1492 else stage=13; 1493 } 1494 if(stage==13){ 1495 if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum; 1500 else if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum; 1496 1501 else if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum; 1497 1502 else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum; -
issm/trunk-jpl/src/m/classes/stochasticforcing.m
r26660 r26676 72 72 end 73 73 end 74 if(contains(field,'WaterPressure')) 75 mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field)))); 76 if~(isequal(class(md.friction),char(mdname))) 77 error('stochasticforcing field %s is only implemented for default friction', char(field)); 78 end 79 if(md.friction.coupling~=0 && md.friction.coupling~=1 && md.friction.coupling~=2) 80 error('stochasticforcing field %s is only implemented for cases md.friction.coupling 0 or 1 or 2', char(field)); 81 end 82 if(any(md.friction.q==0)) 83 error('stochasticforcing field %s requires non-zero q exponent',char(field)); 84 end 85 end 74 86 %Checking for specific dimensions 75 87 if ~(strcmp(field,'SMBautoregression') || strcmp(field,'FrontalForcingsRignotAutoregression')) … … 185 197 'DefaultCalving',... 186 198 'FloatingMeltRate',... 199 'FrictionWaterPressure',... 187 200 'FrontalForcingsRignotAutoregression',... 188 201 'SMBautoregression' … … 191 204 'calving',... 192 205 'basalforcings',... 206 'friction',... 193 207 'frontalforcingsrignotautoregression',... 194 208 'SMBautoregression' -
issm/trunk-jpl/src/m/classes/stochasticforcing.py
r26674 r26676 70 70 mdname = structstoch[field] 71 71 if (type(md.smb).__name__ != mdname): 72 raise TypeError('md.smb does not agree with stochasticforcing field {}'.format( mdname))72 raise TypeError('md.smb does not agree with stochasticforcing field {}'.format(field)) 73 73 if 'FrontalForcings' in field: 74 74 mdname = structstoch[field] 75 75 if (type(md.frontalforcings).__name__ != mdname): 76 raise TypeError('md.frontalforcings does not agree with stochasticforcing field {}'.format( mdname))76 raise TypeError('md.frontalforcings does not agree with stochasticforcing field {}'.format(field)) 77 77 if 'Calving' in field: 78 78 mdname = structstoch[field] 79 79 if (type(md.calving).__name__ != mdname): 80 raise TypeError('md.calving does not agree with stochasticforcing field {}'.format( mdname))80 raise TypeError('md.calving does not agree with stochasticforcing field {}'.format(field)) 81 81 if 'BasalforcingsFloatingice' in field: 82 82 mdname = structstoch[field] 83 83 if (type(md.basalforcings).__name__ != mdname): 84 raise TypeError('md.basalforcings does not agree with stochasticforcing field {}'.format(mdname)) 84 raise TypeError('md.basalforcings does not agree with stochasticforcing field {}'.format(field)) 85 if 'WaterPressure' in field: 86 mdname = structstoch[field] 87 if (type(md.friction).__name__ != mdname): 88 raise TypeError('stochasticforcing field {} is only implemented for default friction'.format(field)) 89 if (md.friction.coupling!=0 and md.friction.coupling!=1 and md.friction.coupling!=2): 90 raise TypeError('stochasticforcing field {} is only implemented for cases md.friction.coupling 0 or 1 or 2'.format(field)) 91 if (np.any(md.friction.q==0): 92 raise TypeError('stochasticforcing field {} requires non-zero q exponent'.format(field)) 93 85 94 # Checking for specific dimensions 86 95 if not (field == 'SMBautoregression' or field == 'FrontalForcingsRignotAutoregression'): … … 173 182 structure = {'DefaultCalving': 'calving', 174 183 'FloatingMeltRate': 'basalforcings', 184 'FrictionWaterPressure': 'friction', 175 185 'FrontalForcingsRignotAutoregression': 'frontalforcingsrignotautoregression', 176 186 'SMBautoregression': 'SMBautoregression'}
Note:
See TracChangeset
for help on using the changeset viewer.