Changeset 27278
- Timestamp:
- 09/10/22 08:38:49 (3 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
r27102 r27278 125 125 break; 126 126 case BeckmannGoosseFloatingMeltRateEnum: 127 bool isthermalforcing; 128 iomodel->FindConstant(&isthermalforcing,"md.basalforcings.isthermalforcing"); 127 129 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.meltrate_factor",BasalforcingsMeltrateFactorEnum); 128 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum); 129 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum); 130 if(isthermalforcing==0){ 131 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum); 132 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum); 133 } 134 else{ 135 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_thermalforcing",FrontalForcingsAndBasalforcingsThermalForcingEnum); 136 } 130 137 break; 131 138 default: -
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r27261 r27278 150 150 case FrontalForcingsRignotEnum: 151 151 /*Retrieve thermal forcing only in the case of non-arma FrontalForcingsRignot*/ 152 iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.thermalforcing",FrontalForcings ThermalForcingEnum);152 iomodel->FetchDataToInput(inputs,elements,"md.frontalforcings.thermalforcing",FrontalForcingsAndBasalforcingsThermalForcingEnum); 153 153 /* Do not break here, still retrieve basin_ID,subglacial_discharge, etc.*/ 154 154 case FrontalForcingsRignotarmaEnum: -
issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
r27250 r27278 215 215 break; 216 216 case BeckmannGoosseFloatingMeltRateEnum: 217 bool isthermalforcing; 218 iomodel->FindConstant(&isthermalforcing,"md.basalforcings.isthermalforcing"); 217 219 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.meltrate_factor",BasalforcingsMeltrateFactorEnum); 218 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum); 219 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum); 220 if(isthermalforcing==0){ 221 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum); 222 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum); 223 } 224 else{ 225 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_thermalforcing",FrontalForcingsAndBasalforcingsThermalForcingEnum); 226 } 220 227 break; 221 228 case LinearFloatingMeltRatearmaEnum: -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r27102 r27278 853 853 break; 854 854 case BeckmannGoosseFloatingMeltRateEnum: 855 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum); 856 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum); 857 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum); 855 bool isthermalforcing; 856 iomodel->FindConstant(&isthermalforcing,"md.basalforcings.isthermalforcing"); 857 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.meltrate_factor",BasalforcingsMeltrateFactorEnum); 858 if(isthermalforcing==0){ 859 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum); 860 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum); 861 } 862 else{ 863 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_thermalforcing",FrontalForcingsAndBasalforcingsThermalForcingEnum); 864 } 858 865 break; 859 866 default: -
issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
r27102 r27278 155 155 break; 156 156 case BeckmannGoosseFloatingMeltRateEnum: 157 bool isthermalforcing; 158 iomodel->FindConstant(&isthermalforcing,"md.basalforcings.isthermalforcing"); 157 159 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.meltrate_factor",BasalforcingsMeltrateFactorEnum); 158 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum); 159 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum); 160 if(isthermalforcing==0){ 161 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum); 162 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum); 163 } 164 else{ 165 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.ocean_thermalforcing",FrontalForcingsAndBasalforcingsThermalForcingEnum); 166 } 160 167 break; 161 168 default: -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r27260 r27278 86 86 basinenum_type = FrontalForcingsBasinIdEnum; 87 87 noiseenum_type = ThermalforcingARMANoiseEnum; 88 outenum_type = FrontalForcings ThermalForcingEnum;88 outenum_type = FrontalForcingsAndBasalforcingsThermalForcingEnum; 89 89 break; 90 90 case(BasalforcingsDeepwaterMeltingRatearmaEnum): … … 195 195 basinenum_type = FrontalForcingsBasinIdEnum; 196 196 noiseenum_type = ThermalforcingARMANoiseEnum; 197 outenum_type = FrontalForcings ThermalForcingEnum;197 outenum_type = FrontalForcingsAndBasalforcingsThermalForcingEnum; 198 198 break; 199 199 case(BasalforcingsDeepwaterMeltingRatearmaEnum): … … 2777 2777 void Element::BeckmannGoosseFloatingiceMeltingRate(){/*{{{*/ 2778 2778 2779 int numvertices = this->GetNumberOfVertices(); 2780 IssmDouble T_f,ocean_heat_flux; 2781 IssmDouble rho_water = this->FindParam(MaterialsRhoSeawaterEnum); 2782 IssmDouble rho_ice = this->FindParam(MaterialsRhoIceEnum); 2783 IssmDouble latentheat = this->FindParam(MaterialsLatentheatEnum); 2779 bool isthermalforcing; 2780 int numvertices = this->GetNumberOfVertices(); 2781 IssmDouble T_fr,T_forcing,ocean_heat_flux; 2782 /*Material properties*/ 2783 IssmDouble rho_water = this->FindParam(MaterialsRhoSeawaterEnum); 2784 IssmDouble rho_ice = this->FindParam(MaterialsRhoIceEnum); 2785 IssmDouble latentheat = this->FindParam(MaterialsLatentheatEnum); 2784 2786 IssmDouble mixed_layer_capacity = this->FindParam(MaterialsMixedLayerCapacityEnum); 2785 2787 IssmDouble thermal_exchange_vel = this->FindParam(MaterialsThermalExchangeVelocityEnum); … … 2789 2791 IssmDouble oceansalinity [MAXVERTICES]; 2790 2792 IssmDouble oceantemp[MAXVERTICES]; 2793 IssmDouble oceanthermalforcing[MAXVERTICES]; 2791 2794 IssmDouble meltratefactor[MAXVERTICES]; 2792 2795 2796 /*Determine if we use temperature-and-salinity or thermal forcing*/ 2797 this->parameters->FindParam(&isthermalforcing,BasalforcingsIsThermalForcingEnum); 2798 /*Retrieve Inputs*/ 2793 2799 this->GetInputListOnVertices(base,BaseEnum); 2794 this->GetInputListOnVertices(oceansalinity,BasalforcingsOceanSalinityEnum);2795 this->GetInputListOnVertices(oceantemp,BasalforcingsOceanTempEnum);2796 2800 this->GetInputListOnVertices(meltratefactor,BasalforcingsMeltrateFactorEnum); 2801 if(isthermalforcing==false){ 2802 this->GetInputListOnVertices(oceansalinity,BasalforcingsOceanSalinityEnum); 2803 this->GetInputListOnVertices(oceantemp,BasalforcingsOceanTempEnum); 2804 } 2805 else{ 2806 this->GetInputListOnVertices(oceanthermalforcing,FrontalForcingsAndBasalforcingsThermalForcingEnum); 2807 } 2797 2808 2798 2809 Gauss* gauss=this->NewGauss(); 2799 2810 for(int i=0;i<numvertices;i++){ 2800 T_f=(0.0939 - 0.057 * oceansalinity[i] + 7.64e-4 * base[i]); //degC 2801 2802 // compute ocean_heat_flux according to beckmann_goosse2003 2803 // positive, if T_oc > T_ice ==> heat flux FROM ocean TO ice 2804 ocean_heat_flux = meltratefactor[i] * rho_water * mixed_layer_capacity * thermal_exchange_vel * (oceantemp[i] - T_f); // in W/m^2 2805 2806 // shelfbmassflux is positive if ice is freezing on; here it is always negative: 2807 // same sign as ocean_heat_flux (positive if massflux FROM ice TO ocean) 2808 values[i] = ocean_heat_flux / (latentheat * rho_ice); // m s-1 2809 } 2810 2811 /*Case of temperature-and-salinity inputs*/ 2812 if(isthermalforcing==false){ 2813 T_fr = (0.0939-0.057*oceansalinity[i]+7.64e-4*base[i]); //freezing point [degC] 2814 T_forcing = oceantemp[i]-T_fr; //thermal forcing [K] 2815 } 2816 /*Case of thermal forcing input*/ 2817 else{ 2818 T_forcing = oceanthermalforcing[i]; 2819 } 2820 /*Compute heat flux from (Beckmann and Goosse, 2003) (>0 means heat flux from ocean to ice)*/ 2821 ocean_heat_flux = meltratefactor[i]*rho_water*mixed_layer_capacity*thermal_exchange_vel*T_forcing; // ocean-to-ice heat flux [W/m^2] 2822 /*Save melt values [m/s]*/ 2823 values[i] = ocean_heat_flux/(latentheat*rho_ice); 2824 } 2811 2825 this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum); 2812 2826 delete gauss; … … 3799 3813 Input* bed_input = this->GetInput(BedEnum); _assert_(bed_input); 3800 3814 Input* qsg_input = this->GetInput(FrontalForcingsSubglacialDischargeEnum); _assert_(qsg_input); 3801 Input* TF_input = this->GetInput(FrontalForcings ThermalForcingEnum); _assert_(TF_input);3815 Input* TF_input = this->GetInput(FrontalForcingsAndBasalforcingsThermalForcingEnum); _assert_(TF_input); 3802 3816 3803 3817 this->FindParam(&yts, ConstantsYtsEnum); -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp
r27250 r27278 253 253 break; 254 254 case BeckmannGoosseFloatingMeltRateEnum: 255 parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.isthermalforcing",BasalforcingsIsThermalForcingEnum)); 255 256 break; 256 257 case LinearFloatingMeltRatearmaEnum: -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r27260 r27278 92 92 syn keyword cConstant BasalforcingsARMAarlagcoefsEnum 93 93 syn keyword cConstant BasalforcingsARMAmalagcoefsEnum 94 syn keyword cConstant BasalforcingsIsThermalForcingEnum 94 95 syn keyword cConstant BasalforcingsPicoAverageOverturningEnum 95 96 syn keyword cConstant BasalforcingsPicoAverageSalinityEnum … … 775 776 syn keyword cConstant FrontalForcingsBasinIdEnum 776 777 syn keyword cConstant FrontalForcingsSubglacialDischargeEnum 777 syn keyword cConstant FrontalForcings ThermalForcingEnum778 syn keyword cConstant FrontalForcingsAndBasalforcingsThermalForcingEnum 778 779 syn keyword cConstant GeometryHydrostaticRatioEnum 779 780 syn keyword cConstant NGiaEnum -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r27260 r27278 86 86 BasalforcingsARMAarlagcoefsEnum, 87 87 BasalforcingsARMAmalagcoefsEnum, 88 BasalforcingsIsThermalForcingEnum, 88 89 BasalforcingsPicoAverageOverturningEnum, 89 90 BasalforcingsPicoAverageSalinityEnum, … … 771 772 FrontalForcingsBasinIdEnum, 772 773 FrontalForcingsSubglacialDischargeEnum, 773 FrontalForcings ThermalForcingEnum,774 FrontalForcingsAndBasalforcingsThermalForcingEnum, 774 775 GeometryHydrostaticRatioEnum, 775 776 NGiaEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r27260 r27278 94 94 case BasalforcingsARMAarlagcoefsEnum : return "BasalforcingsARMAarlagcoefs"; 95 95 case BasalforcingsARMAmalagcoefsEnum : return "BasalforcingsARMAmalagcoefs"; 96 case BasalforcingsIsThermalForcingEnum : return "BasalforcingsIsThermalForcing"; 96 97 case BasalforcingsPicoAverageOverturningEnum : return "BasalforcingsPicoAverageOverturning"; 97 98 case BasalforcingsPicoAverageSalinityEnum : return "BasalforcingsPicoAverageSalinity"; … … 777 778 case FrontalForcingsBasinIdEnum : return "FrontalForcingsBasinId"; 778 779 case FrontalForcingsSubglacialDischargeEnum : return "FrontalForcingsSubglacialDischarge"; 779 case FrontalForcings ThermalForcingEnum : return "FrontalForcingsThermalForcing";780 case FrontalForcingsAndBasalforcingsThermalForcingEnum : return "FrontalForcingsAndBasalforcingsThermalForcing"; 780 781 case GeometryHydrostaticRatioEnum : return "GeometryHydrostaticRatio"; 781 782 case NGiaEnum : return "NGia"; -
issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
r27260 r27278 85 85 syn keyword juliaConstC BasalforcingsARMAarlagcoefsEnum 86 86 syn keyword juliaConstC BasalforcingsARMAmalagcoefsEnum 87 syn keyword juliaConstC BasalforcingsIsThermalForcingEnum 87 88 syn keyword juliaConstC BasalforcingsPicoAverageOverturningEnum 88 89 syn keyword juliaConstC BasalforcingsPicoAverageSalinityEnum … … 768 769 syn keyword juliaConstC FrontalForcingsBasinIdEnum 769 770 syn keyword juliaConstC FrontalForcingsSubglacialDischargeEnum 770 syn keyword juliaConstC FrontalForcings ThermalForcingEnum771 syn keyword juliaConstC FrontalForcingsAndBasalforcingsThermalForcingEnum 771 772 syn keyword juliaConstC GeometryHydrostaticRatioEnum 772 773 syn keyword juliaConstC NGiaEnum -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r27260 r27278 94 94 else if (strcmp(name,"BasalforcingsARMAarlagcoefs")==0) return BasalforcingsARMAarlagcoefsEnum; 95 95 else if (strcmp(name,"BasalforcingsARMAmalagcoefs")==0) return BasalforcingsARMAmalagcoefsEnum; 96 else if (strcmp(name,"BasalforcingsIsThermalForcing")==0) return BasalforcingsIsThermalForcingEnum; 96 97 else if (strcmp(name,"BasalforcingsPicoAverageOverturning")==0) return BasalforcingsPicoAverageOverturningEnum; 97 98 else if (strcmp(name,"BasalforcingsPicoAverageSalinity")==0) return BasalforcingsPicoAverageSalinityEnum; … … 136 137 else if (strcmp(name,"ConstantsYts")==0) return ConstantsYtsEnum; 137 138 else if (strcmp(name,"ControlInputSizeM")==0) return ControlInputSizeMEnum; 138 else if (strcmp(name,"ControlInputSizeN")==0) return ControlInputSizeNEnum;139 139 else stage=2; 140 140 } 141 141 if(stage==2){ 142 if (strcmp(name,"ControlInputInterpolation")==0) return ControlInputInterpolationEnum; 142 if (strcmp(name,"ControlInputSizeN")==0) return ControlInputSizeNEnum; 143 else if (strcmp(name,"ControlInputInterpolation")==0) return ControlInputInterpolationEnum; 143 144 else if (strcmp(name,"CumBslc")==0) return CumBslcEnum; 144 145 else if (strcmp(name,"CumBslcIce")==0) return CumBslcIceEnum; … … 259 260 else if (strcmp(name,"HydrologydcTransferFlag")==0) return HydrologydcTransferFlagEnum; 260 261 else if (strcmp(name,"HydrologydcUnconfinedFlag")==0) return HydrologydcUnconfinedFlagEnum; 261 else if (strcmp(name,"HydrologyshreveStabilization")==0) return HydrologyshreveStabilizationEnum;262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"IcecapToEarthComm")==0) return IcecapToEarthCommEnum; 265 if (strcmp(name,"HydrologyshreveStabilization")==0) return HydrologyshreveStabilizationEnum; 266 else if (strcmp(name,"IcecapToEarthComm")==0) return IcecapToEarthCommEnum; 266 267 else if (strcmp(name,"Index")==0) return IndexEnum; 267 268 else if (strcmp(name,"InputFileName")==0) return InputFileNameEnum; … … 382 383 else if (strcmp(name,"QmuVariablePartitions")==0) return QmuVariablePartitionsEnum; 383 384 else if (strcmp(name,"QmuVariablePartitionsNpart")==0) return QmuVariablePartitionsNpartEnum; 384 else if (strcmp(name,"QmuVariablePartitionsNt")==0) return QmuVariablePartitionsNtEnum;385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"QmuResponsePartitions")==0) return QmuResponsePartitionsEnum; 388 if (strcmp(name,"QmuVariablePartitionsNt")==0) return QmuVariablePartitionsNtEnum; 389 else if (strcmp(name,"QmuResponsePartitions")==0) return QmuResponsePartitionsEnum; 389 390 else if (strcmp(name,"QmuResponsePartitionsNpart")==0) return QmuResponsePartitionsNpartEnum; 390 391 else if (strcmp(name,"QmuStatistics")==0) return QmuStatisticsEnum; … … 505 506 else if (strcmp(name,"SmbDelta18o")==0) return SmbDelta18oEnum; 506 507 else if (strcmp(name,"SmbDelta18oSurface")==0) return SmbDelta18oSurfaceEnum; 507 else if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum;508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"SmbDt")==0) return SmbDtEnum; 511 if (strcmp(name,"SmbDenIdx")==0) return SmbDenIdxEnum; 512 else if (strcmp(name,"SmbDt")==0) return SmbDtEnum; 512 513 else if (strcmp(name,"Smb")==0) return SmbEnum; 513 514 else if (strcmp(name,"SmbEIdx")==0) return SmbEIdxEnum; … … 628 629 else if (strcmp(name,"Yye")==0) return YyeEnum; 629 630 else if (strcmp(name,"Zze")==0) return ZzeEnum; 630 else if (strcmp(name,"Areae")==0) return AreaeEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"WorldComm")==0) return WorldCommEnum; 634 if (strcmp(name,"Areae")==0) return AreaeEnum; 635 else if (strcmp(name,"WorldComm")==0) return WorldCommEnum; 635 636 else if (strcmp(name,"ParametersEND")==0) return ParametersENDEnum; 636 637 else if (strcmp(name,"InputsSTART")==0) return InputsSTARTEnum; … … 751 752 else if (strcmp(name,"DrivingStressY")==0) return DrivingStressYEnum; 752 753 else if (strcmp(name,"Dummy")==0) return DummyEnum; 753 else if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"EffectivePressureSubstep")==0) return EffectivePressureSubstepEnum; 757 if (strcmp(name,"EffectivePressure")==0) return EffectivePressureEnum; 758 else if (strcmp(name,"EffectivePressureSubstep")==0) return EffectivePressureSubstepEnum; 758 759 else if (strcmp(name,"EffectivePressureTransient")==0) return EffectivePressureTransientEnum; 759 760 else if (strcmp(name,"Enthalpy")==0) return EnthalpyEnum; … … 795 796 else if (strcmp(name,"FrontalForcingsBasinId")==0) return FrontalForcingsBasinIdEnum; 796 797 else if (strcmp(name,"FrontalForcingsSubglacialDischarge")==0) return FrontalForcingsSubglacialDischargeEnum; 797 else if (strcmp(name,"FrontalForcings ThermalForcing")==0) return FrontalForcingsThermalForcingEnum;798 else if (strcmp(name,"FrontalForcingsAndBasalforcingsThermalForcing")==0) return FrontalForcingsAndBasalforcingsThermalForcingEnum; 798 799 else if (strcmp(name,"GeometryHydrostaticRatio")==0) return GeometryHydrostaticRatioEnum; 799 800 else if (strcmp(name,"NGia")==0) return NGiaEnum; … … 874 875 else if (strcmp(name,"MovingFrontalVx")==0) return MovingFrontalVxEnum; 875 876 else if (strcmp(name,"MovingFrontalVy")==0) return MovingFrontalVyEnum; 876 else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"NewDamage")==0) return NewDamageEnum; 880 if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum; 881 else if (strcmp(name,"NewDamage")==0) return NewDamageEnum; 881 882 else if (strcmp(name,"Node")==0) return NodeEnum; 882 883 else if (strcmp(name,"OmegaAbsGradient")==0) return OmegaAbsGradientEnum; … … 997 998 else if (strcmp(name,"SmbCotValue")==0) return SmbCotValueEnum; 998 999 else if (strcmp(name,"SmbD")==0) return SmbDEnum; 999 else if (strcmp(name,"SmbDailyairdensity")==0) return SmbDailyairdensityEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"SmbDailyairhumidity")==0) return SmbDailyairhumidityEnum; 1003 if (strcmp(name,"SmbDailyairdensity")==0) return SmbDailyairdensityEnum; 1004 else if (strcmp(name,"SmbDailyairhumidity")==0) return SmbDailyairhumidityEnum; 1004 1005 else if (strcmp(name,"SmbDailydlradiation")==0) return SmbDailydlradiationEnum; 1005 1006 else if (strcmp(name,"SmbDailydsradiation")==0) return SmbDailydsradiationEnum; … … 1120 1121 else if (strcmp(name,"SurfaceOld")==0) return SurfaceOldEnum; 1121 1122 else if (strcmp(name,"SurfaceLogVelMisfit")==0) return SurfaceLogVelMisfitEnum; 1122 else if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum; 1126 if (strcmp(name,"SurfaceLogVxVyMisfit")==0) return SurfaceLogVxVyMisfitEnum; 1127 else if (strcmp(name,"SurfaceObservation")==0) return SurfaceObservationEnum; 1127 1128 else if (strcmp(name,"SurfaceRelVelMisfit")==0) return SurfaceRelVelMisfitEnum; 1128 1129 else if (strcmp(name,"SurfaceSlopeX")==0) return SurfaceSlopeXEnum; … … 1243 1244 else if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum; 1244 1245 else if (strcmp(name,"Outputdefinition70")==0) return Outputdefinition70Enum; 1245 else if (strcmp(name,"Outputdefinition71")==0) return Outputdefinition71Enum;1246 1246 else stage=11; 1247 1247 } 1248 1248 if(stage==11){ 1249 if (strcmp(name,"Outputdefinition72")==0) return Outputdefinition72Enum; 1249 if (strcmp(name,"Outputdefinition71")==0) return Outputdefinition71Enum; 1250 else if (strcmp(name,"Outputdefinition72")==0) return Outputdefinition72Enum; 1250 1251 else if (strcmp(name,"Outputdefinition73")==0) return Outputdefinition73Enum; 1251 1252 else if (strcmp(name,"Outputdefinition74")==0) return Outputdefinition74Enum; … … 1366 1367 else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum; 1367 1368 else if (strcmp(name,"EnthalpyAnalysis")==0) return EnthalpyAnalysisEnum; 1368 else if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum;1369 1369 else stage=12; 1370 1370 } 1371 1371 if(stage==12){ 1372 if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum; 1372 if (strcmp(name,"EsaAnalysis")==0) return EsaAnalysisEnum; 1373 else if (strcmp(name,"EsaSolution")==0) return EsaSolutionEnum; 1373 1374 else if (strcmp(name,"EsaTransitions")==0) return EsaTransitionsEnum; 1374 1375 else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum; … … 1489 1490 else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum; 1490 1491 else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum; 1491 else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;1492 1492 else stage=13; 1493 1493 } 1494 1494 if(stage==13){ 1495 if (strcmp(name,"Matenhancedice")==0) return MatenhancediceEnum; 1495 if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum; 1496 else if (strcmp(name,"Matenhancedice")==0) return MatenhancediceEnum; 1496 1497 else if (strcmp(name,"Materials")==0) return MaterialsEnum; 1497 1498 else if (strcmp(name,"Matestar")==0) return MatestarEnum; … … 1612 1613 else if (strcmp(name,"SpatialLinearFloatingMeltRate")==0) return SpatialLinearFloatingMeltRateEnum; 1613 1614 else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum; 1614 else if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum;1615 1615 else stage=14; 1616 1616 } 1617 1617 if(stage==14){ 1618 if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum; 1618 if (strcmp(name,"SpcStatic")==0) return SpcStaticEnum; 1619 else if (strcmp(name,"SpcTransient")==0) return SpcTransientEnum; 1619 1620 else if (strcmp(name,"Sset")==0) return SsetEnum; 1620 1621 else if (strcmp(name,"StatisticsSolution")==0) return StatisticsSolutionEnum; -
issm/trunk-jpl/src/m/classes/basalforcingsbeckmanngoosse.m
r25777 r27278 11 11 ocean_temp = 0.; 12 12 ocean_salinity = NaN; 13 ocean_thermalforcing = NaN; 14 isthermalforcing = 0; 13 15 end 14 16 methods … … 20 22 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="ocean_temp" type="',class(self.ocean_temp),'" default="',num2str(self.ocean_temp),'">',' <section name="basalforcings" />',' <help> ocean_temp [degC] </help>','</parameter>'); 21 23 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="ocean_salinity" type="',class(self.ocean_salinity),'" default="',num2str(self.ocean_salinity),'">',' <section name="basalforcings" />',' <help> ocean_salinity [psu] </help>','</parameter>'); 24 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="ocean_thermalforcing" type="',class(self.ocean_thermalforcing),'" default="',num2str(self.ocean_thermalforcing),'">',' <section name="basalforcings" />',' <help> ocean_thermalforcing [K] </help>','</parameter>'); 22 25 end % }}} 23 26 function self = extrude(self,md) % {{{ … … 60 63 function md = checkconsistency(self,md,solution,analyses) % {{{ 61 64 65 if(self.isthermalforcing==0) 66 if(any(~isnan(self.ocean_thermalforcing))) 67 error('basalforcingsbeckmanngoosse has isthermalforcing=0 but has specified entries for ocean_thermalforcing (should be unused)'); 68 end 69 elseif(self.isthermalforcing==1) 70 if(any(self.ocean_temp~=0) || any(~isnan(self.ocean_salinity))) 71 error('basalforcingsbeckmanngoosse has isthermalforcing=1 but has specified entries for ocean_temp or ocean_salinity (should be unused)'); 72 end 73 if(strcmp(class(md.frontalforcings),'frontalforcingsrignot') && ~isequal(md.frontalforcings.thermalforcing,self.ocean_thermalforcing)) 74 error('basalforcing.ocean_thermalforcing is not consistent with frontalforcings.thermalforcing') 75 end 76 if(strcmp(class(md.frontalforcings),'frontalforcingsrignotarma') && any(~isnan(self.ocean_thermalforcing))) 77 error('basalforcings has specified entries for ocean_thermalforcing, but frontalforcingsrignotarma already calculates thermalforcing internally') 78 end 79 end 80 81 62 82 if ismember('MasstransportAnalysis',analyses) & ~(solution=='TransientSolution' & md.transient.ismasstransport==0), 63 83 md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1); 64 md = checkfield(md,'fieldname','basalforcings.ocean_temp','NaN',1,'Inf',1,'timeseries',1);65 md = checkfield(md,'fieldname','basalforcings.ocean_salinity','NaN',1,'Inf',1,'timeseries',1);66 84 md = checkfield(md,'fieldname','basalforcings.meltrate_factor','>=',0,'universal',1,'NaN',1,'Inf',1); 85 md = checkfield(md,'fieldname','basalforcings.isthermalforcing','values',[0 1]); 86 if(self.isthermalforcing==0) 87 md = checkfield(md,'fieldname','basalforcings.ocean_temp','NaN',1,'Inf',1,'timeseries',1); 88 md = checkfield(md,'fieldname','basalforcings.ocean_salinity','NaN',1,'Inf',1,'timeseries',1); 89 elseif(self.isthermalforcing==1 && ~strcmp(class(md.frontalforcings),'frontalforcingsrignotarma')) 90 md = checkfield(md,'fieldname','basalforcings.ocean_thermalforcing','NaN',1,'Inf',1,'timeseries',1); 91 end 67 92 end 68 93 if ismember('BalancethicknessAnalysis',analyses), 69 94 md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices 1]); 70 md = checkfield(md,'fieldname','basalforcings.ocean_temp','NaN',1,'Inf',1,'timeseries',1);71 md = checkfield(md,'fieldname','basalforcings.ocean_salinity','NaN',1,'Inf',1,'timeseries',1);72 95 md = checkfield(md,'fieldname','basalforcings.meltrate_factor','>=',0,'universal',1,'NaN',1,'Inf',1); 96 md = checkfield(md,'fieldname','basalforcings.isthermalforcing','values',[0 1]); 97 if(self.isthermalforcing==0) 98 md = checkfield(md,'fieldname','basalforcings.ocean_temp','NaN',1,'Inf',1,'timeseries',1); 99 md = checkfield(md,'fieldname','basalforcings.ocean_salinity','NaN',1,'Inf',1,'timeseries',1); 100 elseif(self.isthermalforcing==1 && ~strcmp(class(md.frontalforcings),'frontalforcingsrignotarma')) 101 md = checkfield(md,'fieldname','basalforcings.ocean_thermalforcing','NaN',1,'Inf',1,'timeseries',1); 102 end 73 103 end 74 104 if ismember('ThermalAnalysis',analyses) & ~(solution=='TransientSolution' & md.transient.isthermal==0), … … 84 114 fielddisplay(self,'geothermalflux','geothermal heat flux (W/m^2)'); 85 115 fielddisplay(self,'meltrate_factor','Melt-rate rate factor'); 116 fielddisplay(self,'isthermalforcing','whether to use ocean_temp and ocean_salinity (0) or ocean_thermalforcing (1) (default:0)'); 86 117 fielddisplay(self,'ocean_temp','ocean temperature (degC)'); 87 fielddisplay(self,'ocean_salinity','ocean ocean_salinity (psu)'); 118 fielddisplay(self,'ocean_salinity','ocean salinity (psu)'); 119 fielddisplay(self,'ocean_thermalforcing','ocean thermalforcing (K)'); 88 120 89 121 end % }}} … … 99 131 100 132 WriteData(fid,prefix,'name','md.basalforcings.model','data',8,'format','Integer'); 101 WriteData(fid,prefix,'data',floatingice_melting_rate,'format','DoubleMat','name','md.basalforcings.floatingice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)102 133 WriteData(fid,prefix,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','name','md.basalforcings.groundedice_melting_rate','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1) 103 134 WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 104 135 WriteData(fid,prefix,'object',self,'fieldname','meltrate_factor','format','DoubleMat','mattype',1,'name','md.basalforcings.meltrate_factor'); 105 WriteData(fid,prefix,'object',self,'fieldname','ocean_temp','format','DoubleMat','name','md.basalforcings.ocean_temp','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 106 WriteData(fid,prefix,'object',self,'fieldname','ocean_salinity','format','DoubleMat','name','md.basalforcings.ocean_salinity','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 107 136 WriteData(fid,prefix,'object',self,'fieldname','isthermalforcing','format','Boolean'); 137 if(self.isthermalforcing==0) 138 WriteData(fid,prefix,'object',self,'fieldname','ocean_temp','format','DoubleMat','name','md.basalforcings.ocean_temp','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 139 WriteData(fid,prefix,'object',self,'fieldname','ocean_salinity','format','DoubleMat','name','md.basalforcings.ocean_salinity','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 140 elseif(self.isthermalforcing==1) 141 WriteData(fid,prefix,'object',self,'fieldname','ocean_thermalforcing','format','DoubleMat','name','md.basalforcings.ocean_thermalforcing','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 142 end 108 143 end % }}} 109 144 end
Note:
See TracChangeset
for help on using the changeset viewer.