Changeset 24145


Ignore:
Timestamp:
09/16/19 00:00:54 (6 years ago)
Author:
rueckamp
Message:

NEW: Added BeckmannGoose parameterization for calculating basal melt rates of floating ice

Location:
issm/trunk-jpl
Files:
3 added
14 edited

Legend:

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

    r24045 r24145  
    110110                case BasalforcingsIsmip6Enum:
    111111                        iomodel->FetchDataToInput(elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);
     112                        break;
     113                case BeckmannGoosseFloatingMeltRateEnum:
     114                        iomodel->FetchDataToInput(elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
     115                        iomodel->FetchDataToInput(elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
    112116                        break;
    113117                default:
  • TabularUnified issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp

    r24139 r24145  
    198198                        xDelete<IssmDouble*>(array3d);
    199199                        }
     200                        break;
     201                case BeckmannGoosseFloatingMeltRateEnum:
     202                        iomodel->FetchDataToInput(elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
     203                        iomodel->FetchDataToInput(elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
    200204                        break;
    201205                default:
  • TabularUnified issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp

    r24045 r24145  
    786786                                iomodel->FetchDataToInput(elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);
    787787                                break;
     788                        case BeckmannGoosseFloatingMeltRateEnum:
     789                                iomodel->FetchDataToInput(elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
     790                                iomodel->FetchDataToInput(elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
     791                                break;
    788792                        default:
    789793                                _error_("Basal forcing model "<<EnumToStringx(basalforcing_model)<<" not supported yet");
  • TabularUnified issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp

    r24045 r24145  
    138138                        iomodel->FetchDataToInput(elements,"md.basalforcings.basin_id",BasalforcingsIsmip6BasinIdEnum);
    139139                        break;
    140 
     140                case BeckmannGoosseFloatingMeltRateEnum:
     141                        iomodel->FetchDataToInput(elements,"md.basalforcings.ocean_salinity",BasalforcingsOceanSalinityEnum);
     142                        iomodel->FetchDataToInput(elements,"md.basalforcings.ocean_temp",BasalforcingsOceanTempEnum);
     143                        break;
    141144                default:
    142145                        _error_("Basal forcing model "<<EnumToStringx(basalforcing_model)<<" not supported yet");
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Element.cpp

    r24094 r24145  
    25052505        xDelete<IssmDouble>(values);
    25062506
     2507}/*}}}*/
     2508void       Element::BeckmannGoosseFloatingiceMeltingRate(){/*{{{*/
     2509
     2510        int numvertices      = this->GetNumberOfVertices();
     2511        IssmDouble meltratefactor,T_f,ocean_heat_flux;
     2512        IssmDouble rho_water    = this->FindParam(MaterialsRhoSeawaterEnum);
     2513        IssmDouble rho_ice      = this->FindParam(MaterialsRhoIceEnum);
     2514        IssmDouble latentheat   = this->FindParam(MaterialsLatentheatEnum);
     2515        IssmDouble mixed_layer_capacity = this->FindParam(MaterialsMixedLayerCapacityEnum);
     2516        IssmDouble thermal_exchange_vel = this->FindParam(MaterialsThermalExchangeVelocityEnum);
     2517
     2518        IssmDouble* base    = xNew<IssmDouble>(numvertices);
     2519        IssmDouble* values  = xNew<IssmDouble>(numvertices);
     2520        IssmDouble* oceansalinity   = xNew<IssmDouble>(numvertices);
     2521        IssmDouble* oceantemp       = xNew<IssmDouble>(numvertices);
     2522
     2523        this->GetInputListOnVertices(base,BaseEnum);
     2524        this->GetInputListOnVertices(oceansalinity,BasalforcingsOceanSalinityEnum);
     2525        this->GetInputListOnVertices(oceantemp,BasalforcingsOceanTempEnum);
     2526        parameters->FindParam(&meltratefactor,BasalforcingsMeltrateFactorEnum);
     2527
     2528        Gauss* gauss=this->NewGauss();
     2529        for(int i=0;i<numvertices;i++){
     2530                T_f=(0.0939 - 0.057 * oceansalinity[i] + 7.64e-4 * base[i]); //degC
     2531
     2532                // compute ocean_heat_flux according to beckmann_goosse2003
     2533                // positive, if T_oc > T_ice ==> heat flux FROM ocean TO ice
     2534                ocean_heat_flux = meltratefactor * rho_water * mixed_layer_capacity * thermal_exchange_vel * (oceantemp[i] - T_f); // in W/m^2
     2535
     2536                // shelfbmassflux is positive if ice is freezing on; here it is always negative:
     2537                // same sign as ocean_heat_flux (positive if massflux FROM ice TO ocean)
     2538                values[i] = ocean_heat_flux / (latentheat * rho_ice); // m s-1
     2539        }
     2540
     2541        this->AddInput(BasalforcingsFloatingiceMeltingRateEnum,values,P1Enum);
     2542        xDelete<IssmDouble>(base);
     2543        xDelete<IssmDouble>(values);
     2544        xDelete<IssmDouble>(oceantemp);
     2545        xDelete<IssmDouble>(oceansalinity);
     2546        delete gauss;
    25072547}/*}}}*/
    25082548void       Element::MungsmtpParameterization(void){/*{{{*/
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Element.h

    r24137 r24145  
    144144                void               MigrateGroundingLine(IssmDouble* sheet_ungrounding);
    145145                void               MismipFloatingiceMeltingRate();
     146                void               BeckmannGoosseFloatingiceMeltingRate();
    146147                void               MungsmtpParameterization(void);
    147148                ElementMatrix*     NewElementMatrix(int approximation_enum=NoneApproximationEnum);
    148149                ElementMatrix*     NewElementMatrixCoupling(int number_nodes,int approximation_enum=NoneApproximationEnum);
    149150                ElementVector*     NewElementVector(int approximation_enum=NoneApproximationEnum);
    150       void               PicoUpdateBoxid(int* pmax_boxid_basin);
     151                void               PicoUpdateBoxid(int* pmax_boxid_basin);
    151152                void               PicoUpdateBox(int loopboxid);
    152153                void               PicoComputeBasalMelt();
  • TabularUnified issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.cpp

    r24045 r24145  
    4040                        if(VerboseSolution())_printf0_("   call ISMIP 6 Floating melting rate module\n");
    4141                        FloatingiceMeltingRateIsmip6x(femmodel);
     42                        break;
     43                case BeckmannGoosseFloatingMeltRateEnum:
     44                        if(VerboseSolution())_printf0_("        call BeckmannGoosse Floating melting rate module\n");
     45                        BeckmannGoosseFloatingiceMeltingRatex(femmodel);
    4246                        break;
    4347                default:
     
    193197}
    194198/*}}}*/
     199void BeckmannGoosseFloatingiceMeltingRatex(FemModel* femmodel){/*{{{*/
     200
     201        for(int i=0;i<femmodel->elements->Size();i++){
     202                Element* element=xDynamicCast<Element*>(femmodel->elements->GetObjectByOffset(i));
     203                element->BeckmannGoosseFloatingiceMeltingRate();
     204        }
     205}
     206/*}}}*/
  • TabularUnified issm/trunk-jpl/src/c/modules/FloatingiceMeltingRatex/FloatingiceMeltingRatex.h

    r23782 r24145  
    1515void MismipFloatingiceMeltingRatex(FemModel* femmodel);
    1616void FloatingiceMeltingRateIsmip6x(FemModel* femmodel);
     17void BeckmannGoosseFloatingiceMeltingRatex(FemModel* femmodel);
    1718
    1819#endif  /* _FloatingiceMeltingRatex_H*/
  • TabularUnified issm/trunk-jpl/src/c/modules/GeothermalFluxx/GeothermalFluxx.cpp

    r24016 r24145  
    2828                        MantlePlumeGeothermalFluxx(femmodel);
    2929                        break;
     30                case BeckmannGoosseFloatingMeltRateEnum:
     31                        /*Nothing to be done*/
     32                        break;
    3033                default:
    3134                        _error_("Basal forcing model "<<EnumToStringx(basalforcing_model)<<" not supported yet");
  • TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateParameters.cpp

    r24045 r24145  
    238238                        parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.num_basins",BasalforcingsIsmip6NumBasinsEnum));
    239239                        parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.gamma_0",BasalforcingsIsmip6Gamma0Enum));
    240                    parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.islocal",BasalforcingsIsmip6IsLocalEnum));       
     240                        parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.islocal",BasalforcingsIsmip6IsLocalEnum)); 
    241241                        iomodel->FetchData(&transparam,&M,&N,"md.basalforcings.delta_t");
    242242                        parameters->AddObject(new DoubleVecParam(BasalforcingsIsmip6DeltaTEnum,transparam,N));
     
    245245                        parameters->AddObject(new DoubleVecParam(BasalforcingsIsmip6TfDepthsEnum,transparam,N));
    246246                        xDelete<IssmDouble>(transparam);
     247                        break;
     248                case BeckmannGoosseFloatingMeltRateEnum:
     249                        parameters->AddObject(iomodel->CopyConstantObject("md.basalforcings.meltrate_factor",BasalforcingsMeltrateFactorEnum));
    247250                        break;
    248251                default:
  • TabularUnified issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r24140 r24145  
    457457        BasalforcingsIsmip6TfShelfEnum,
    458458        BasalforcingsIsmip6MeltAnomalyEnum,
     459        BasalforcingsOceanSalinityEnum,
     460        BasalforcingsOceanTempEnum,
    459461        BasalforcingsPicoBasinIdEnum,
    460462        BasalforcingsPicoBoxIdEnum,
     
    929931        BasalforcingsIsmip6Enum,
    930932        BasalforcingsPicoEnum,
     933        BeckmannGoosseFloatingMeltRateEnum,     
    931934        BedSlopeSolutionEnum,
    932935        BoolExternalResultEnum,
  • TabularUnified issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r24140 r24145  
    463463                case BasalforcingsIsmip6TfShelfEnum : return "BasalforcingsIsmip6TfShelf";
    464464                case BasalforcingsIsmip6MeltAnomalyEnum : return "BasalforcingsIsmip6MeltAnomaly";
     465                case BasalforcingsOceanSalinityEnum : return "BasalforcingsOceanSalinity";
     466                case BasalforcingsOceanTempEnum : return "BasalforcingsOceanTemp";
    465467                case BasalforcingsPicoBasinIdEnum : return "BasalforcingsPicoBasinId";
    466468                case BasalforcingsPicoBoxIdEnum : return "BasalforcingsPicoBoxId";
     
    933935                case BasalforcingsIsmip6Enum : return "BasalforcingsIsmip6";
    934936                case BasalforcingsPicoEnum : return "BasalforcingsPico";
     937                case BeckmannGoosseFloatingMeltRateEnum : return "BeckmannGoosseFloatingMeltRate";
    935938                case BedSlopeSolutionEnum : return "BedSlopeSolution";
    936939                case BoolExternalResultEnum : return "BoolExternalResult";
  • TabularUnified issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r24140 r24145  
    472472              else if (strcmp(name,"BasalforcingsIsmip6TfShelf")==0) return BasalforcingsIsmip6TfShelfEnum;
    473473              else if (strcmp(name,"BasalforcingsIsmip6MeltAnomaly")==0) return BasalforcingsIsmip6MeltAnomalyEnum;
     474              else if (strcmp(name,"BasalforcingsOceanSalinity")==0) return BasalforcingsOceanSalinityEnum;
     475              else if (strcmp(name,"BasalforcingsOceanTemp")==0) return BasalforcingsOceanTempEnum;
    474476              else if (strcmp(name,"BasalforcingsPicoBasinId")==0) return BasalforcingsPicoBasinIdEnum;
    475477              else if (strcmp(name,"BasalforcingsPicoBoxId")==0) return BasalforcingsPicoBoxIdEnum;
     
    504506              else if (strcmp(name,"DamageF")==0) return DamageFEnum;
    505507              else if (strcmp(name,"DegreeOfChannelization")==0) return DegreeOfChannelizationEnum;
    506               else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
    507               else if (strcmp(name,"DeviatoricStressxx")==0) return DeviatoricStressxxEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"DeviatoricStressxy")==0) return DeviatoricStressxyEnum;
     511              if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
     512              else if (strcmp(name,"DeviatoricStressxx")==0) return DeviatoricStressxxEnum;
     513              else if (strcmp(name,"DeviatoricStressxy")==0) return DeviatoricStressxyEnum;
    512514              else if (strcmp(name,"DeviatoricStressxz")==0) return DeviatoricStressxzEnum;
    513515              else if (strcmp(name,"DeviatoricStressyy")==0) return DeviatoricStressyyEnum;
     
    627629              else if (strcmp(name,"MaterialsRheologyEs")==0) return MaterialsRheologyEsEnum;
    628630              else if (strcmp(name,"MaterialsRheologyEsbar")==0) return MaterialsRheologyEsbarEnum;
    629               else if (strcmp(name,"MaterialsRheologyN")==0) return MaterialsRheologyNEnum;
    630               else if (strcmp(name,"MeshScaleFactor")==0) return MeshScaleFactorEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"MeshVertexonbase")==0) return MeshVertexonbaseEnum;
     634              if (strcmp(name,"MaterialsRheologyN")==0) return MaterialsRheologyNEnum;
     635              else if (strcmp(name,"MeshScaleFactor")==0) return MeshScaleFactorEnum;
     636              else if (strcmp(name,"MeshVertexonbase")==0) return MeshVertexonbaseEnum;
    635637              else if (strcmp(name,"MeshVertexonboundary")==0) return MeshVertexonboundaryEnum;
    636638              else if (strcmp(name,"MeshVertexonsurface")==0) return MeshVertexonsurfaceEnum;
     
    750752              else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
    751753              else if (strcmp(name,"SmbTemperaturesReconstructed")==0) return SmbTemperaturesReconstructedEnum;
    752               else if (strcmp(name,"SmbTini")==0) return SmbTiniEnum;
    753               else if (strcmp(name,"SmbTmean")==0) return SmbTmeanEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"SmbTz")==0) return SmbTzEnum;
     757              if (strcmp(name,"SmbTini")==0) return SmbTiniEnum;
     758              else if (strcmp(name,"SmbTmean")==0) return SmbTmeanEnum;
     759              else if (strcmp(name,"SmbTz")==0) return SmbTzEnum;
    758760              else if (strcmp(name,"SmbV")==0) return SmbVEnum;
    759761              else if (strcmp(name,"SmbVmean")==0) return SmbVmeanEnum;
     
    873875              else if (strcmp(name,"Outputdefinition50")==0) return Outputdefinition50Enum;
    874876              else if (strcmp(name,"Outputdefinition51")==0) return Outputdefinition51Enum;
    875               else if (strcmp(name,"Outputdefinition52")==0) return Outputdefinition52Enum;
    876               else if (strcmp(name,"Outputdefinition53")==0) return Outputdefinition53Enum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"Outputdefinition54")==0) return Outputdefinition54Enum;
     880              if (strcmp(name,"Outputdefinition52")==0) return Outputdefinition52Enum;
     881              else if (strcmp(name,"Outputdefinition53")==0) return Outputdefinition53Enum;
     882              else if (strcmp(name,"Outputdefinition54")==0) return Outputdefinition54Enum;
    881883              else if (strcmp(name,"Outputdefinition55")==0) return Outputdefinition55Enum;
    882884              else if (strcmp(name,"Outputdefinition56")==0) return Outputdefinition56Enum;
     
    954956              else if (strcmp(name,"BasalforcingsIsmip6")==0) return BasalforcingsIsmip6Enum;
    955957              else if (strcmp(name,"BasalforcingsPico")==0) return BasalforcingsPicoEnum;
     958              else if (strcmp(name,"BeckmannGoosseFloatingMeltRate")==0) return BeckmannGoosseFloatingMeltRateEnum;
    956959              else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum;
    957960              else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum;
     
    995998              else if (strcmp(name,"DepthAverageAnalysis")==0) return DepthAverageAnalysisEnum;
    996999              else if (strcmp(name,"DeviatoricStressErrorEstimator")==0) return DeviatoricStressErrorEstimatorEnum;
    997               else if (strcmp(name,"Divergence")==0) return DivergenceEnum;
    998               else if (strcmp(name,"Domain3Dsurface")==0) return Domain3DsurfaceEnum;
    999               else if (strcmp(name,"DoubleArrayInput")==0) return DoubleArrayInputEnum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
     1003              if (strcmp(name,"Divergence")==0) return DivergenceEnum;
     1004              else if (strcmp(name,"Domain3Dsurface")==0) return Domain3DsurfaceEnum;
     1005              else if (strcmp(name,"DoubleArrayInput")==0) return DoubleArrayInputEnum;
     1006              else if (strcmp(name,"DoubleExternalResult")==0) return DoubleExternalResultEnum;
    10041007              else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum;
    10051008              else if (strcmp(name,"DoubleMatArrayParam")==0) return DoubleMatArrayParamEnum;
     
    11181121              else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
    11191122              else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
    1120               else if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
    1121               else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;
    1122               else if (strcmp(name,"Matenhancedice")==0) return MatenhancediceEnum;
    11231123         else stage=10;
    11241124   }
    11251125   if(stage==10){
    1126               if (strcmp(name,"Materials")==0) return MaterialsEnum;
     1126              if (strcmp(name,"MasstransportSolution")==0) return MasstransportSolutionEnum;
     1127              else if (strcmp(name,"Matdamageice")==0) return MatdamageiceEnum;
     1128              else if (strcmp(name,"Matenhancedice")==0) return MatenhancediceEnum;
     1129              else if (strcmp(name,"Materials")==0) return MaterialsEnum;
    11271130              else if (strcmp(name,"Matestar")==0) return MatestarEnum;
    11281131              else if (strcmp(name,"Matice")==0) return MaticeEnum;
     
    12411244              else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
    12421245              else if (strcmp(name,"StressbalanceConvergenceNumSteps")==0) return StressbalanceConvergenceNumStepsEnum;
    1243               else if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
    1244               else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
    1245               else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
    12461246         else stage=11;
    12471247   }
    12481248   if(stage==11){
    1249               if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
     1249              if (strcmp(name,"StressbalanceSIAAnalysis")==0) return StressbalanceSIAAnalysisEnum;
     1250              else if (strcmp(name,"StressbalanceSolution")==0) return StressbalanceSolutionEnum;
     1251              else if (strcmp(name,"StressbalanceVerticalAnalysis")==0) return StressbalanceVerticalAnalysisEnum;
     1252              else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
    12501253              else if (strcmp(name,"StringExternalResult")==0) return StringExternalResultEnum;
    12511254              else if (strcmp(name,"StringParam")==0) return StringParamEnum;
  • TabularUnified issm/trunk-jpl/src/c/shared/io/Marshalling/IoCodeConversions.cpp

    r23936 r24145  
    198198                case 6: return SpatialLinearFloatingMeltRateEnum;
    199199                case 7: return BasalforcingsIsmip6Enum;
     200                case 8: return BeckmannGoosseFloatingMeltRateEnum;
    200201                default: _error_("Marshalled Basal Forcings code \""<<enum_in<<"\" not supported yet");
    201202        }
Note: See TracChangeset for help on using the changeset viewer.