Changeset 24061


Ignore:
Timestamp:
07/03/19 15:55:56 (6 years ago)
Author:
felicity
Message:

NEW: GlaDS option for user-defined basal melt rate (md.basalforcings.groundedice_melting_rate)

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

Legend:

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

    r24057 r24061  
    115115        iomodel->FetchDataToInput(elements,"md.geometry.bed",BedEnum);
    116116        iomodel->FetchDataToInput(elements,"md.basalforcings.geothermalflux",BasalforcingsGeothermalfluxEnum);
     117        iomodel->FetchDataToInput(elements,"md.basalforcings.groundedice_melting_rate",BasalforcingsGroundediceMeltingRateEnum);
    117118        if(iomodel->domaintype!=Domain2DhorizontalEnum){
    118119                iomodel->FetchDataToInput(elements,"md.mesh.vertexonbase",MeshVertexonbaseEnum);
     
    161162        parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.cavity_spacing",HydrologyCavitySpacingEnum));
    162163        parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.ischannels",HydrologyIschannelsEnum));
     164        parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.melt_flag",HydrologyMeltFlagEnum));
    163165        parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.channel_conductivity",HydrologyChannelConductivityEnum));
    164166        parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.channel_sheet_width",HydrologyChannelSheetWidthEnum));
     
    315317
    316318        /*Retrieve all inputs and parameters*/
     319        bool meltflag;
     320        element->FindParam(&meltflag,HydrologyMeltFlagEnum);
    317321        element->GetVerticesCoordinates(&xyz_list);
    318322        IssmDouble L         = element->FindParam(MaterialsLatentheatEnum);
     
    330334        Input* b_input      = element->GetInput(BedEnum); _assert_(b_input);
    331335        Input* G_input      = element->GetInput(BasalforcingsGeothermalfluxEnum);_assert_(G_input);
     336        Input* m_input      = element->GetInput(BasalforcingsGroundediceMeltingRateEnum);_assert_(G_input);
    332337        Input* B_input      = element->GetInput(MaterialsRheologyBEnum);         _assert_(B_input);
    333338        Input* n_input      = element->GetInput(MaterialsRheologyNEnum);         _assert_(n_input);
     
    357362                b_input->GetInputValue(&b,gauss);
    358363                H_input->GetInputValue(&H,gauss);
     364                m_input->GetInputValue(&m,gauss);
    359365
    360366                /*Get basal velocity*/
     
    370376
    371377                /*Compute melt*/
    372                 m = (G + frictionheat)/(rho_ice*L);
     378                if(!meltflag){
     379                        m = (G + frictionheat)/(rho_ice*L);
     380                }
    373381
    374382                /*Compute closing rate*/
  • issm/trunk-jpl/src/c/shared/Enum/Enum.vim

    r24060 r24061  
    162162syn keyword cConstant HydrologyEnglacialVoidRatioEnum
    163163syn keyword cConstant HydrologyIschannelsEnum
     164syn keyword cConstant HydrologyMeltFlagEnum
    164165syn keyword cConstant HydrologyModelEnum
    165166syn keyword cConstant HydrologyNumRequestedOutputsEnum
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r24060 r24061  
    156156        HydrologyEnglacialVoidRatioEnum,
    157157        HydrologyIschannelsEnum,
     158        HydrologyMeltFlagEnum,
    158159        HydrologyModelEnum,
    159160        HydrologyNumRequestedOutputsEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r24060 r24061  
    164164                case HydrologyEnglacialVoidRatioEnum : return "HydrologyEnglacialVoidRatio";
    165165                case HydrologyIschannelsEnum : return "HydrologyIschannels";
     166                case HydrologyMeltFlagEnum : return "HydrologyMeltFlag";
    166167                case HydrologyModelEnum : return "HydrologyModel";
    167168                case HydrologyNumRequestedOutputsEnum : return "HydrologyNumRequestedOutputs";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r24060 r24061  
    167167              else if (strcmp(name,"HydrologyEnglacialVoidRatio")==0) return HydrologyEnglacialVoidRatioEnum;
    168168              else if (strcmp(name,"HydrologyIschannels")==0) return HydrologyIschannelsEnum;
     169              else if (strcmp(name,"HydrologyMeltFlag")==0) return HydrologyMeltFlagEnum;
    169170              else if (strcmp(name,"HydrologyModel")==0) return HydrologyModelEnum;
    170171              else if (strcmp(name,"HydrologyNumRequestedOutputs")==0) return HydrologyNumRequestedOutputsEnum;
     
    259260              else if (strcmp(name,"MaterialsMantleShearModulus")==0) return MaterialsMantleShearModulusEnum;
    260261              else if (strcmp(name,"MaterialsMeltingpoint")==0) return MaterialsMeltingpointEnum;
    261               else if (strcmp(name,"MaterialsMixedLayerCapacity")==0) return MaterialsMixedLayerCapacityEnum;
    262262         else stage=3;
    263263   }
    264264   if(stage==3){
    265               if (strcmp(name,"MaterialsMuWater")==0) return MaterialsMuWaterEnum;
     265              if (strcmp(name,"MaterialsMixedLayerCapacity")==0) return MaterialsMixedLayerCapacityEnum;
     266              else if (strcmp(name,"MaterialsMuWater")==0) return MaterialsMuWaterEnum;
    266267              else if (strcmp(name,"MaterialsRheologyLaw")==0) return MaterialsRheologyLawEnum;
    267268              else if (strcmp(name,"MaterialsRhoFreshwater")==0) return MaterialsRhoFreshwaterEnum;
     
    382383              else if (strcmp(name,"SmbT0dry")==0) return SmbT0dryEnum;
    383384              else if (strcmp(name,"SmbT0wet")==0) return SmbT0wetEnum;
    384               else if (strcmp(name,"SmbTdiff")==0) return SmbTdiffEnum;
    385385         else stage=4;
    386386   }
    387387   if(stage==4){
    388               if (strcmp(name,"SmbThermoDeltaTScaling")==0) return SmbThermoDeltaTScalingEnum;
     388              if (strcmp(name,"SmbTdiff")==0) return SmbTdiffEnum;
     389              else if (strcmp(name,"SmbThermoDeltaTScaling")==0) return SmbThermoDeltaTScalingEnum;
    389390              else if (strcmp(name,"SmoothThicknessMultiplier")==0) return SmoothThicknessMultiplierEnum;
    390391              else if (strcmp(name,"SolutionType")==0) return SolutionTypeEnum;
     
    505506              else if (strcmp(name,"DeviatoricStressxy")==0) return DeviatoricStressxyEnum;
    506507              else if (strcmp(name,"DeviatoricStressxz")==0) return DeviatoricStressxzEnum;
    507               else if (strcmp(name,"DeviatoricStressyy")==0) return DeviatoricStressyyEnum;
    508508         else stage=5;
    509509   }
    510510   if(stage==5){
    511               if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
     511              if (strcmp(name,"DeviatoricStressyy")==0) return DeviatoricStressyyEnum;
     512              else if (strcmp(name,"DeviatoricStressyz")==0) return DeviatoricStressyzEnum;
    512513              else if (strcmp(name,"DeviatoricStresszz")==0) return DeviatoricStresszzEnum;
    513514              else if (strcmp(name,"DeviatoricStress1")==0) return DeviatoricStress1Enum;
     
    628629              else if (strcmp(name,"MeshVertexonboundary")==0) return MeshVertexonboundaryEnum;
    629630              else if (strcmp(name,"MeshVertexonsurface")==0) return MeshVertexonsurfaceEnum;
    630               else if (strcmp(name,"Misfit")==0) return MisfitEnum;
    631631         else stage=6;
    632632   }
    633633   if(stage==6){
    634               if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
     634              if (strcmp(name,"Misfit")==0) return MisfitEnum;
     635              else if (strcmp(name,"Neumannflux")==0) return NeumannfluxEnum;
    635636              else if (strcmp(name,"NewDamage")==0) return NewDamageEnum;
    636637              else if (strcmp(name,"Node")==0) return NodeEnum;
     
    751752              else if (strcmp(name,"SmbV")==0) return SmbVEnum;
    752753              else if (strcmp(name,"SmbVmean")==0) return SmbVmeanEnum;
    753               else if (strcmp(name,"SmbVz")==0) return SmbVzEnum;
    754754         else stage=7;
    755755   }
    756756   if(stage==7){
    757               if (strcmp(name,"SmbW")==0) return SmbWEnum;
     757              if (strcmp(name,"SmbVz")==0) return SmbVzEnum;
     758              else if (strcmp(name,"SmbW")==0) return SmbWEnum;
    758759              else if (strcmp(name,"SmbWini")==0) return SmbWiniEnum;
    759760              else if (strcmp(name,"SmbZMax")==0) return SmbZMaxEnum;
     
    874875              else if (strcmp(name,"Outputdefinition57")==0) return Outputdefinition57Enum;
    875876              else if (strcmp(name,"Outputdefinition58")==0) return Outputdefinition58Enum;
    876               else if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum;
    877877         else stage=8;
    878878   }
    879879   if(stage==8){
    880               if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
     880              if (strcmp(name,"Outputdefinition59")==0) return Outputdefinition59Enum;
     881              else if (strcmp(name,"Outputdefinition5")==0) return Outputdefinition5Enum;
    881882              else if (strcmp(name,"Outputdefinition60")==0) return Outputdefinition60Enum;
    882883              else if (strcmp(name,"Outputdefinition61")==0) return Outputdefinition61Enum;
     
    997998              else if (strcmp(name,"DoubleMatParam")==0) return DoubleMatParamEnum;
    998999              else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum;
    999               else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum;
    10001000         else stage=9;
    10011001   }
    10021002   if(stage==9){
    1003               if (strcmp(name,"Element")==0) return ElementEnum;
     1003              if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum;
     1004              else if (strcmp(name,"Element")==0) return ElementEnum;
    10041005              else if (strcmp(name,"ElementHook")==0) return ElementHookEnum;
    10051006              else if (strcmp(name,"ElementSId")==0) return ElementSIdEnum;
     
    11201121              else if (strcmp(name,"MatrixParam")==0) return MatrixParamEnum;
    11211122              else if (strcmp(name,"MaxAbsVx")==0) return MaxAbsVxEnum;
    1122               else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
    11231123         else stage=10;
    11241124   }
    11251125   if(stage==10){
    1126               if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
     1126              if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
     1127              else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
    11271128              else if (strcmp(name,"MaxDivergence")==0) return MaxDivergenceEnum;
    11281129              else if (strcmp(name,"MaxVel")==0) return MaxVelEnum;
     
    12431244              else if (strcmp(name,"SubelementMelt2")==0) return SubelementMelt2Enum;
    12441245              else if (strcmp(name,"SubelementMigration")==0) return SubelementMigrationEnum;
    1245               else if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
    12461246         else stage=11;
    12471247   }
    12481248   if(stage==11){
    1249               if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
     1249              if (strcmp(name,"SurfaceSlopeSolution")==0) return SurfaceSlopeSolutionEnum;
     1250              else if (strcmp(name,"TaylorHood")==0) return TaylorHoodEnum;
    12501251              else if (strcmp(name,"Tetra")==0) return TetraEnum;
    12511252              else if (strcmp(name,"TetraInput")==0) return TetraInputEnum;
  • issm/trunk-jpl/src/m/classes/hydrologyglads.m

    r23973 r24061  
    2323                englacial_void_ratio = 0.;
    2424                requested_outputs    = {};
     25                melt_flag            = 0;
    2526        end
    2627        methods
     
    5354                        self.englacial_void_ratio = 1.e-5;% Dow's default, Table from Werder et al. uses 1e-3;
    5455                        self.requested_outputs={'default'};
     56                        self.melt_flag=false;
    5557                end % }}}
    5658                function md = checkconsistency(self,md,solution,analyses) % {{{
     
    7880                        md = checkfield(md,'fieldname','hydrology.neumannflux','timeseries',1,'NaN',1,'Inf',1);
    7981                        md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1);
     82                        md = checkfield(md,'fieldname','hydrology.melt_flag','numel',[1],'values',[0 1]);
     83                        if self.melt_flag
     84                                md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1);
     85                        end
    8086                end % }}}
    8187                function disp(self) % {{{
     
    95101                        fielddisplay(self,'englacial_void_ratio','englacial void ratio (e_v)');
    96102                        fielddisplay(self,'requested_outputs','additional outputs requested');
     103                        fielddisplay(self,'melt_flag','User specified basal melt? 0: no (default), 1: use md.basalforcings.groundedice_melting_rate');
    97104                end % }}}
    98105                function marshall(self,prefix,md,fid) % {{{
     
    119126                        WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','moulin_input','format','DoubleMat','mattype',1);
    120127                        WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','englacial_void_ratio','format','Double');
     128                        WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','melt_flag','format','Boolean');
    121129                        outputs = self.requested_outputs;
    122130                        pos  = find(ismember(outputs,'default'));
Note: See TracChangeset for help on using the changeset viewer.