Changeset 23937
- Timestamp:
- 05/28/19 11:03:06 (6 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/HydrologyGlaDSAnalysis.cpp
r23936 r23937 14 14 if(hydrology_model!=HydrologyGlaDSEnum) return; 15 15 16 _error_("Not implemented"); 17 //IoModelToConstraintsx(constraints,iomodel,"md.hydrology.spchead",HydrologyGlaDSAnalysisEnum,P1Enum); 16 IoModelToConstraintsx(constraints,iomodel,"md.hydrology.spcphi",HydrologyGlaDSAnalysisEnum,P1Enum); 18 17 19 18 }/*}}}*/ … … 27 26 if(hydrology_model!=HydrologyGlaDSEnum) return; 28 27 29 _error_("Not implemented"); 30 31 /*Create discrete loads for Moulins*/ 32 CreateSingleNodeToElementConnectivity(iomodel); 33 for(int i=0;i<iomodel->numberofvertices;i++){ 34 if (iomodel->domaintype!=Domain3DEnum){ 35 /*keep only this partition's nodes:*/ 36 if(iomodel->my_vertices[i]){ 37 loads->AddObject(new Moulin(i+1,i,iomodel,HydrologyGlaDSAnalysisEnum)); 38 } 39 } 40 else if(reCast<int>(iomodel->Data("md.mesh.vertexonbase")[i])){ 41 if(iomodel->my_vertices[i]){ 42 loads->AddObject(new Moulin(i+1,i,iomodel,HydrologyGlaDSAnalysisEnum)); 43 } 44 } 45 } 46 iomodel->DeleteData(1,"md.mesh.vertexonbase"); 47 48 /*Deal with Neumann BC*/ 49 int M,N; 50 int *segments = NULL; 51 iomodel->FetchData(&segments,&M,&N,"md.mesh.segments"); 52 53 /*Check that the size seem right*/ 54 _assert_(N==3); _assert_(M>=3); 55 for(int i=0;i<M;i++){ 56 if(iomodel->my_elements[segments[i*3+2]-1]){ 57 loads->AddObject(new Neumannflux(i+1,i,iomodel,segments,HydrologyGlaDSAnalysisEnum)); 58 } 59 } 60 61 xDelete<int>(segments); 62 28 /*No extra loads*/ 63 29 }/*}}}*/ 64 30 void HydrologyGlaDSAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel,bool isamr){/*{{{*/ … … 70 36 /*Now, do we really want GlaDS?*/ 71 37 if(hydrology_model!=HydrologyGlaDSEnum) return; 72 73 _error_("Not implemented");74 38 75 39 if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface"); … … 107 71 iomodel->FetchDataToInput(elements,"md.mask.ice_levelset",MaskIceLevelsetEnum); 108 72 109 _error_("not impelemented yet");73 iomodel->FetchDataToInput(elements,"md.hydrology.sheet_conductivity",HydrologySheetConductivityEnum); 110 74 }/*}}}*/ 111 75 void HydrologyGlaDSAnalysis::UpdateParameters(Parameters* parameters,IoModel* iomodel,int solution_enum,int analysis_enum){/*{{{*/ … … 121 85 122 86 parameters->AddObject(new IntParam(HydrologyModelEnum,hydrology_model)); 123 //parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.storage",HydrologyStorageEnum)); 124 _error_("not implemented"); 87 parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.pressure_melt_coefficient",HydrologyPressureMeltCoefficientEnum)); 88 parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.cavity_spacing",HydrologyCavitySpacingEnum)); 89 parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.bump_height",HydrologyBumpHeightEnum)); 90 parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.ischannels",HydrologyIschannelsEnum)); 91 parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.channel_conductivity",HydrologyChannelConductivityEnum)); 92 parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.channel_sheet_width",HydrologyChannelSheetWidthEnum)); 93 parameters->AddObject(iomodel->CopyConstantObject("md.hydrology.englacial_void_ratio",HydrologyEnglacialVoidRatioEnum)); 125 94 126 95 /*Requested outputs*/ -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r23936 r23937 547 547 HydrologydcMaskThawedNodeEnum, 548 548 HydrologydcSedimentTransmitivityEnum, 549 HydrologySheetConductivityEnum, 550 HydrologyPressureMeltCoefficientEnum, 551 HydrologyCavitySpacingEnum, 552 HydrologyIschannelsEnum, 553 HydrologyChannelConductivityEnum, 554 HydrologyChannelSheetWidthEnum, 555 HydrologyEnglacialVoidRatioEnum, 549 556 HydrologyEnglacialInputEnum, 550 557 HydrologydcEplThicknessStackedEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r23936 r23937 553 553 case HydrologydcMaskThawedNodeEnum : return "HydrologydcMaskThawedNode"; 554 554 case HydrologydcSedimentTransmitivityEnum : return "HydrologydcSedimentTransmitivity"; 555 case HydrologySheetConductivityEnum : return "HydrologySheetConductivity"; 556 case HydrologyPressureMeltCoefficientEnum : return "HydrologyPressureMeltCoefficient"; 557 case HydrologyCavitySpacingEnum : return "HydrologyCavitySpacing"; 558 case HydrologyIschannelsEnum : return "HydrologyIschannels"; 559 case HydrologyChannelConductivityEnum : return "HydrologyChannelConductivity"; 560 case HydrologyChannelSheetWidthEnum : return "HydrologyChannelSheetWidth"; 561 case HydrologyEnglacialVoidRatioEnum : return "HydrologyEnglacialVoidRatio"; 555 562 case HydrologyEnglacialInputEnum : return "HydrologyEnglacialInput"; 556 563 case HydrologydcEplThicknessStackedEnum : return "HydrologydcEplThicknessStacked"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r23936 r23937 565 565 else if (strcmp(name,"HydrologydcMaskThawedNode")==0) return HydrologydcMaskThawedNodeEnum; 566 566 else if (strcmp(name,"HydrologydcSedimentTransmitivity")==0) return HydrologydcSedimentTransmitivityEnum; 567 else if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum; 568 else if (strcmp(name,"HydrologyPressureMeltCoefficient")==0) return HydrologyPressureMeltCoefficientEnum; 569 else if (strcmp(name,"HydrologyCavitySpacing")==0) return HydrologyCavitySpacingEnum; 570 else if (strcmp(name,"HydrologyIschannels")==0) return HydrologyIschannelsEnum; 571 else if (strcmp(name,"HydrologyChannelConductivity")==0) return HydrologyChannelConductivityEnum; 572 else if (strcmp(name,"HydrologyChannelSheetWidth")==0) return HydrologyChannelSheetWidthEnum; 573 else if (strcmp(name,"HydrologyEnglacialVoidRatio")==0) return HydrologyEnglacialVoidRatioEnum; 567 574 else if (strcmp(name,"HydrologyEnglacialInput")==0) return HydrologyEnglacialInputEnum; 568 575 else if (strcmp(name,"HydrologydcEplThicknessStacked")==0) return HydrologydcEplThicknessStackedEnum; … … 622 629 else if (strcmp(name,"RheologyBInitialguess")==0) return RheologyBInitialguessEnum; 623 630 else if (strcmp(name,"Sealevel")==0) return SealevelEnum; 624 else if (strcmp(name,"SealevelEustaticMask")==0) return SealevelEustaticMaskEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"SealevelEustaticMask")==0) return SealevelEustaticMaskEnum; 625 635 else if (strcmp(name,"SealevelriseCumDeltathickness")==0) return SealevelriseCumDeltathicknessEnum; 626 636 else if (strcmp(name,"SealevelriseDeltathickness")==0) return SealevelriseDeltathicknessEnum; … … 629 639 else if (strcmp(name,"SealevelRSLRate")==0) return SealevelRSLRateEnum; 630 640 else if (strcmp(name,"SealevelUEsa")==0) return SealevelUEsaEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"SealevelRSLEustaticRate")==0) return SealevelRSLEustaticRateEnum; 641 else if (strcmp(name,"SealevelRSLEustaticRate")==0) return SealevelRSLEustaticRateEnum; 635 642 else if (strcmp(name,"SealevelriseSpcthickness")==0) return SealevelriseSpcthicknessEnum; 636 643 else if (strcmp(name,"SealevelriseStericRate")==0) return SealevelriseStericRateEnum; … … 745 752 else if (strcmp(name,"StrainRatexy")==0) return StrainRatexyEnum; 746 753 else if (strcmp(name,"StrainRatexz")==0) return StrainRatexzEnum; 747 else if (strcmp(name,"StrainRateyy")==0) return StrainRateyyEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"StrainRateyy")==0) return StrainRateyyEnum; 748 758 else if (strcmp(name,"StrainRateyz")==0) return StrainRateyzEnum; 749 759 else if (strcmp(name,"StrainRatezz")==0) return StrainRatezzEnum; … … 752 762 else if (strcmp(name,"StressTensorxy")==0) return StressTensorxyEnum; 753 763 else if (strcmp(name,"StressTensorxz")==0) return StressTensorxzEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum; 764 else if (strcmp(name,"StressTensoryy")==0) return StressTensoryyEnum; 758 765 else if (strcmp(name,"StressTensoryz")==0) return StressTensoryzEnum; 759 766 else if (strcmp(name,"StressTensorzz")==0) return StressTensorzzEnum; … … 868 875 else if (strcmp(name,"Outputdefinition69")==0) return Outputdefinition69Enum; 869 876 else if (strcmp(name,"Outputdefinition6")==0) return Outputdefinition6Enum; 870 else if (strcmp(name,"Outputdefinition70")==0) return Outputdefinition70Enum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"Outputdefinition70")==0) return Outputdefinition70Enum; 871 881 else if (strcmp(name,"Outputdefinition71")==0) return Outputdefinition71Enum; 872 882 else if (strcmp(name,"Outputdefinition72")==0) return Outputdefinition72Enum; … … 875 885 else if (strcmp(name,"Outputdefinition75")==0) return Outputdefinition75Enum; 876 886 else if (strcmp(name,"Outputdefinition76")==0) return Outputdefinition76Enum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"Outputdefinition77")==0) return Outputdefinition77Enum; 887 else if (strcmp(name,"Outputdefinition77")==0) return Outputdefinition77Enum; 881 888 else if (strcmp(name,"Outputdefinition78")==0) return Outputdefinition78Enum; 882 889 else if (strcmp(name,"Outputdefinition79")==0) return Outputdefinition79Enum; … … 991 998 else if (strcmp(name,"FileParam")==0) return FileParamEnum; 992 999 else if (strcmp(name,"FixedTimestepping")==0) return FixedTimesteppingEnum; 993 else if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"FloatingArea")==0) return FloatingAreaEnum; 994 1004 else if (strcmp(name,"FloatingAreaScaled")==0) return FloatingAreaScaledEnum; 995 1005 else if (strcmp(name,"FloatingMeltRate")==0) return FloatingMeltRateEnum; … … 998 1008 else if (strcmp(name,"FreeSurfaceTopAnalysis")==0) return FreeSurfaceTopAnalysisEnum; 999 1009 else if (strcmp(name,"FrontalForcingsDefault")==0) return FrontalForcingsDefaultEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"FrontalForcingsRignot")==0) return FrontalForcingsRignotEnum; 1010 else if (strcmp(name,"FrontalForcingsRignot")==0) return FrontalForcingsRignotEnum; 1004 1011 else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum; 1005 1012 else if (strcmp(name,"Fset")==0) return FsetEnum; … … 1114 1121 else if (strcmp(name,"MinVel")==0) return MinVelEnum; 1115 1122 else if (strcmp(name,"MinVx")==0) return MinVxEnum; 1116 else if (strcmp(name,"MinVy")==0) return MinVyEnum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"MinVy")==0) return MinVyEnum; 1117 1127 else if (strcmp(name,"MinVz")==0) return MinVzEnum; 1118 1128 else if (strcmp(name,"MismipFloatingMeltRate")==0) return MismipFloatingMeltRateEnum; … … 1121 1131 else if (strcmp(name,"Mpi")==0) return MpiEnum; 1122 1132 else if (strcmp(name,"MpiSparse")==0) return MpiSparseEnum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"Mumps")==0) return MumpsEnum; 1133 else if (strcmp(name,"Mumps")==0) return MumpsEnum; 1127 1134 else if (strcmp(name,"Nodal")==0) return NodalEnum; 1128 1135 else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum; … … 1237 1244 else if (strcmp(name,"TransientParam")==0) return TransientParamEnum; 1238 1245 else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum; 1239 else if (strcmp(name,"Tria")==0) return TriaEnum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"Tria")==0) return TriaEnum; 1240 1250 else if (strcmp(name,"TriaInput")==0) return TriaInputEnum; 1241 1251 else if (strcmp(name,"UzawaPressureAnalysis")==0) return UzawaPressureAnalysisEnum; … … 1244 1254 else if (strcmp(name,"VertexPId")==0) return VertexPIdEnum; 1245 1255 else if (strcmp(name,"VertexSId")==0) return VertexSIdEnum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"VertexLId")==0) return VertexLIdEnum; 1256 else if (strcmp(name,"VertexLId")==0) return VertexLIdEnum; 1250 1257 else if (strcmp(name,"Vertices")==0) return VerticesEnum; 1251 1258 else if (strcmp(name,"ViscousHeating")==0) return ViscousHeatingEnum; -
issm/trunk-jpl/src/m/classes/hydrologyglads.m
r23936 r23937 7 7 properties (SetAccess=public) 8 8 %Sheet 9 pressure_melt_coefficient = 0.; %c_t 9 pressure_melt_coefficient = 0.; 10 sheet_conductivity = NaN; 11 cavity_spacing = 0.; 12 bump_height = 0.; 10 13 11 14 %Channels 12 ischannels = 0; 15 ischannels = 0; 16 channel_conductivity = 0.; 17 channel_sheet_width = 0.; 13 18 14 19 %Other 15 requested_outputs = {}; 20 spcphi = NaN; 21 englacial_void_ratio = 0.; 22 moulin_input = NaN; 23 requested_outputs = {}; 16 24 end 17 25 methods … … 34 42 %Sheet parameters 35 43 self.pressure_melt_coefficient = 7.5e-8; %K/Pa (See table 1 in Erder et al. 2013) 44 self.cavity_spacing = 2.; %m 45 self.bump_height = .1; %m 36 46 37 47 %Channel parameters 38 48 self.ischannels=false; 49 self.channel_conductivity = 5.e-2; %Dow's default, Table uses 0.1 50 self.channel_sheet_width = 2.; %m 39 51 40 52 %Other 53 self.englacial_void_ratio = 1.e-5;% Dow's default, Table from Werder et al. uses 1e-3; 41 54 self.requested_outputs={'default'}; 42 55 end % }}} … … 50 63 %Sheet 51 64 md = checkfield(md,'fieldname','hydrology.pressure_melt_coefficient','numel',[1],'>=',0); 65 md = checkfield(md,'fieldname','hydrology.sheet_conductivity','size',[md.mesh.numberofvertices 1],'>',0,'NaN',1,'Inf',1); 66 md = checkfield(md,'fieldname','hydrology.cavity_spacing','numel',[1],'>',0); 67 md = checkfield(md,'fieldname','hydrology.bump_height','numel',[1],'>',0); 52 68 53 69 %Channels 54 70 md = checkfield(md,'fieldname','hydrology.ischannels','numel',[1],'values',[0 1]); 71 md = checkfield(md,'fieldname','hydrology.channel_conductivity','numel',[1],'>',0); 72 md = checkfield(md,'fieldname','hydrology.channel_sheet_width','numel',[1],'>=',0); 55 73 56 74 %Other 75 md = checkfield(md,'fieldname','hydrology.spcphi','Inf',1,'timeseries',1); 76 md = checkfield(md,'fieldname','hydrology.englacial_void_ratio','numel',[1],'>=',0); 77 md = checkfield(md,'fieldname','hydrology.moulin_input','size',[md.mesh.numberofvertices 1],'>=',0,'NaN',1,'Inf',1); 57 78 md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1); 58 79 end % }}} … … 61 82 disp(sprintf(' SHEET')); 62 83 fielddisplay(self,'pressure_melt_coefficient','Pressure melt coefficient (c_t) [K Pa^-1]'); 84 fielddisplay(self,'sheet_conductivity','sheet conductivity (k) [m^(7/4) kg^(-1/2)]'); 85 fielddisplay(self,'cavity_spacing','cavity spacing (l_r) [m]'); 86 fielddisplay(self,'bump_height','typical bump height (h_r) [m]'); 63 87 disp(sprintf(' CHANNELS')); 64 88 fielddisplay(self,'ischannels','Do we allow for channels? 1: yes, 0: no'); 89 fielddisplay(self,'channel_conductivity','channel conductivity (k_c) [m^(3/2) kg^(-1/2)]'); 65 90 disp(sprintf(' OTHER')); 91 fielddisplay(self,'spcphi','Hydraulic potential Dirichlet constraints [Pa]'); 92 fielddisplay(self,'englacial_void_ratio','englacial void ratio (e_v)'); 93 fielddisplay(self,'moulin_input','moulin input (Q_s) [m^3/s]'); 66 94 fielddisplay(self,'requested_outputs','additional outputs requested'); 67 95 end % }}} … … 75 103 %Sheet 76 104 WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','pressure_melt_coefficient','format','Double'); 105 WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','sheet_conductivity','DoubleMat','mattype',1); 106 WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','cavity_spacing','format','Double'); 107 WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','bump_height','format','Double'); 77 108 78 109 %Channels 79 110 WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','ischannels','format','Boolean'); 111 WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','channel_conductivity','format','Double'); 112 WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','channel_sheet_width','format','Double'); 80 113 81 114 %Others 115 WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','spcphi','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 116 WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','englacial_void_ratio','format','Double'); 117 WriteData(fid,prefix,'object',self,'class','hydrology','fieldname','moulin_input','format','DoubleMat','mattype',1); 82 118 outputs = self.requested_outputs; 83 119 pos = find(ismember(outputs,'default')); … … 90 126 end 91 127 end 92
Note:
See TracChangeset
for help on using the changeset viewer.