Changeset 26789
- Timestamp:
- 01/17/22 10:32:37 (3 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
r26640 r26789 108 108 break; 109 109 case SpatialLinearFloatingMeltRateEnum: 110 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum); 111 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum); 112 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum); 110 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsSpatialDeepwaterMeltingRateEnum); 111 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_elevation",BasalforcingsSpatialDeepwaterElevationEnum); 112 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_melting_rate",BasalforcingsSpatialUpperwaterMeltingRateEnum); 113 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsSpatialUpperwaterElevationEnum); 113 114 break; 114 115 case BasalforcingsPicoEnum: -
issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
r26640 r26789 182 182 break; 183 183 case SpatialLinearFloatingMeltRateEnum: 184 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum); 185 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum); 186 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum); 184 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsSpatialDeepwaterMeltingRateEnum); 185 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_elevation",BasalforcingsSpatialDeepwaterElevationEnum); 186 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_melting_rate",BasalforcingsSpatialUpperwaterMeltingRateEnum); 187 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsSpatialUpperwaterElevationEnum); 188 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.perturbation_melting_rate",BasalforcingsPerturbationMeltingRateEnum,0.); 187 189 break; 188 190 case BasalforcingsPicoEnum: -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r26640 r26789 836 836 break; 837 837 case SpatialLinearFloatingMeltRateEnum: 838 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum); 839 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum); 840 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum); 838 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsSpatialDeepwaterMeltingRateEnum); 839 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_elevation",BasalforcingsSpatialDeepwaterElevationEnum); 840 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_melting_rate",BasalforcingsSpatialUpperwaterMeltingRateEnum); 841 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsSpatialUpperwaterElevationEnum); 841 842 break; 842 843 case BasalforcingsPicoEnum: -
issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
r26640 r26789 139 139 break; 140 140 case SpatialLinearFloatingMeltRateEnum: 141 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsDeepwaterMeltingRateEnum); 142 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_elevation",BasalforcingsDeepwaterElevationEnum); 143 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsUpperwaterElevationEnum); 141 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_melting_rate",BasalforcingsSpatialDeepwaterMeltingRateEnum); 142 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.deepwater_elevation",BasalforcingsSpatialDeepwaterElevationEnum); 143 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_melting_rate",BasalforcingsSpatialUpperwaterMeltingRateEnum); 144 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.upperwater_elevation",BasalforcingsSpatialUpperwaterElevationEnum); 144 145 break; 145 146 case BasalforcingsPicoEnum: -
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r26615 r26789 2298 2298 const int NUM_VERTICES = this->GetNumberOfVertices(); 2299 2299 2300 IssmDouble alpha; 2300 2301 IssmDouble deepwatermelt[MAXVERTICES]; 2301 IssmDouble deepwaterel[MAXVERTICES];; 2302 IssmDouble deepwaterel[MAXVERTICES]; 2303 IssmDouble upperwatermelt[MAXVERTICES]; 2302 2304 IssmDouble upperwaterel[MAXVERTICES]; 2305 IssmDouble perturbation[MAXVERTICES]; 2303 2306 IssmDouble base[MAXVERTICES]; 2304 2307 IssmDouble values[MAXVERTICES]; 2305 2308 2306 2309 this->GetInputListOnVertices(&base[0],BaseEnum); 2307 this->GetInputListOnVertices(&deepwatermelt[0],BasalforcingsDeepwaterMeltingRateEnum); 2308 this->GetInputListOnVertices(&deepwaterel[0],BasalforcingsDeepwaterElevationEnum); 2309 this->GetInputListOnVertices(&upperwaterel[0],BasalforcingsUpperwaterElevationEnum); 2310 this->GetInputListOnVertices(&deepwatermelt[0],BasalforcingsSpatialDeepwaterMeltingRateEnum); 2311 this->GetInputListOnVertices(&deepwaterel[0],BasalforcingsSpatialDeepwaterElevationEnum); 2312 this->GetInputListOnVertices(&upperwatermelt[0],BasalforcingsSpatialUpperwaterMeltingRateEnum); 2313 this->GetInputListOnVertices(&upperwaterel[0],BasalforcingsSpatialUpperwaterElevationEnum); 2314 this->GetInputListOnVertices(&perturbation[0],BasalforcingsPerturbationMeltingRateEnum); 2310 2315 2311 2316 for(int i=0;i<NUM_VERTICES;i++){ 2312 if(base[i]>upperwaterel[i]) values[i]=0; 2313 else if (base[i]<deepwaterel[i]) values[i]=deepwatermelt[i]; 2314 else values[i]=deepwatermelt[i]*(base[i]-upperwaterel[i])/(deepwaterel[i]-upperwaterel[i]); 2317 if(base[i]>=upperwaterel[i]){ 2318 values[i]=upperwatermelt[i]; 2319 } 2320 else if (base[i]<deepwaterel[i]){ 2321 values[i]=deepwatermelt[i]; 2322 } 2323 else{ 2324 alpha = (base[i]-upperwaterel[i])/(deepwaterel[i]-upperwaterel[i]); 2325 values[i]=deepwatermelt[i]*alpha+(1.-alpha)*upperwatermelt[i]; 2326 } 2327 values[i] += perturbation[i]; 2315 2328 } 2316 2329 -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r26784 r26789 582 582 syn keyword cConstant BasalforcingsGroundediceMeltingRateEnum 583 583 syn keyword cConstant BasalforcingsPerturbationMeltingRateEnum 584 syn keyword cConstant BasalforcingsSpatialDeepwaterElevationEnum 585 syn keyword cConstant BasalforcingsSpatialDeepwaterMeltingRateEnum 586 syn keyword cConstant BasalforcingsSpatialUpperwaterElevationEnum 587 syn keyword cConstant BasalforcingsSpatialUpperwaterMeltingRateEnum 584 588 syn keyword cConstant BasalforcingsIsmip6BasinIdEnum 585 589 syn keyword cConstant BasalforcingsIsmip6TfEnum -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r26784 r26789 578 578 BasalforcingsGroundediceMeltingRateEnum, 579 579 BasalforcingsPerturbationMeltingRateEnum, 580 BasalforcingsSpatialDeepwaterElevationEnum, 581 BasalforcingsSpatialDeepwaterMeltingRateEnum, 582 BasalforcingsSpatialUpperwaterElevationEnum, 583 BasalforcingsSpatialUpperwaterMeltingRateEnum, 580 584 BasalforcingsIsmip6BasinIdEnum, 581 585 BasalforcingsIsmip6TfEnum, -
issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
r26784 r26789 575 575 syn keyword juliaConstC BasalforcingsGroundediceMeltingRateEnum 576 576 syn keyword juliaConstC BasalforcingsPerturbationMeltingRateEnum 577 syn keyword juliaConstC BasalforcingsSpatialDeepwaterElevationEnum 578 syn keyword juliaConstC BasalforcingsSpatialDeepwaterMeltingRateEnum 579 syn keyword juliaConstC BasalforcingsSpatialUpperwaterElevationEnum 580 syn keyword juliaConstC BasalforcingsSpatialUpperwaterMeltingRateEnum 577 581 syn keyword juliaConstC BasalforcingsIsmip6BasinIdEnum 578 582 syn keyword juliaConstC BasalforcingsIsmip6TfEnum -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r26750 r26789 595 595 else if (strcmp(name,"BasalforcingsGroundediceMeltingRate")==0) return BasalforcingsGroundediceMeltingRateEnum; 596 596 else if (strcmp(name,"BasalforcingsPerturbationMeltingRate")==0) return BasalforcingsPerturbationMeltingRateEnum; 597 else if (strcmp(name,"BasalforcingsSpatialDeepwaterElevation")==0) return BasalforcingsSpatialDeepwaterElevationEnum; 598 else if (strcmp(name,"BasalforcingsSpatialDeepwaterMeltingRate")==0) return BasalforcingsSpatialDeepwaterMeltingRateEnum; 599 else if (strcmp(name,"BasalforcingsSpatialUpperwaterElevation")==0) return BasalforcingsSpatialUpperwaterElevationEnum; 600 else if (strcmp(name,"BasalforcingsSpatialUpperwaterMeltingRate")==0) return BasalforcingsSpatialUpperwaterMeltingRateEnum; 597 601 else if (strcmp(name,"BasalforcingsIsmip6BasinId")==0) return BasalforcingsIsmip6BasinIdEnum; 598 602 else if (strcmp(name,"BasalforcingsIsmip6Tf")==0) return BasalforcingsIsmip6TfEnum; … … 625 629 else if (strcmp(name,"BedNorth")==0) return BedNorthEnum; 626 630 else if (strcmp(name,"BedNorthGRD")==0) return BedNorthGRDEnum; 627 else if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"BedSlopeX")==0) return BedSlopeXEnum; 628 635 else if (strcmp(name,"BedSlopeY")==0) return BedSlopeYEnum; 629 636 else if (strcmp(name,"BottomPressure")==0) return BottomPressureEnum; 630 637 else if (strcmp(name,"BottomPressureOld")==0) return BottomPressureOldEnum; 631 else stage=6; 632 } 633 if(stage==6){ 634 if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum; 638 else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum; 635 639 else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum; 636 640 else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum; … … 748 752 else if (strcmp(name,"HydrologyGapHeightY")==0) return HydrologyGapHeightYEnum; 749 753 else if (strcmp(name,"HydrologyGapHeightYY")==0) return HydrologyGapHeightYYEnum; 750 else if (strcmp(name,"HydrologyHead")==0) return HydrologyHeadEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"HydrologyHead")==0) return HydrologyHeadEnum; 751 758 else if (strcmp(name,"HydrologyHeadOld")==0) return HydrologyHeadOldEnum; 752 759 else if (strcmp(name,"HydrologyMoulinInput")==0) return HydrologyMoulinInputEnum; 753 760 else if (strcmp(name,"HydrologyNeumannflux")==0) return HydrologyNeumannfluxEnum; 754 else stage=7; 755 } 756 if(stage==7){ 757 if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum; 761 else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum; 758 762 else if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum; 759 763 else if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum; … … 871 875 else if (strcmp(name,"SealevelGNrotm2")==0) return SealevelGNrotm2Enum; 872 876 else if (strcmp(name,"SealevelGNrotm3")==0) return SealevelGNrotm3Enum; 873 else if (strcmp(name,"SealevelGErotm1")==0) return SealevelGErotm1Enum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"SealevelGErotm1")==0) return SealevelGErotm1Enum; 874 881 else if (strcmp(name,"SealevelGErotm2")==0) return SealevelGErotm2Enum; 875 882 else if (strcmp(name,"SealevelGErotm3")==0) return SealevelGErotm3Enum; 876 883 else if (strcmp(name,"SealevelRSLBarystatic")==0) return SealevelRSLBarystaticEnum; 877 else stage=8; 878 } 879 if(stage==8){ 880 if (strcmp(name,"SealevelRSLRate")==0) return SealevelRSLRateEnum; 884 else if (strcmp(name,"SealevelRSLRate")==0) return SealevelRSLRateEnum; 881 885 else if (strcmp(name,"SealevelUGrd")==0) return SealevelUGrdEnum; 882 886 else if (strcmp(name,"SealevelNGrd")==0) return SealevelNGrdEnum; … … 994 998 else if (strcmp(name,"SmbReini")==0) return SmbReiniEnum; 995 999 else if (strcmp(name,"SmbRunoff")==0) return SmbRunoffEnum; 996 else if (strcmp(name,"SmbRunoffSubstep")==0) return SmbRunoffSubstepEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"SmbRunoffSubstep")==0) return SmbRunoffSubstepEnum; 997 1004 else if (strcmp(name,"SmbRunoffTransient")==0) return SmbRunoffTransientEnum; 998 1005 else if (strcmp(name,"SmbS0gcm")==0) return SmbS0gcmEnum; 999 1006 else if (strcmp(name,"SmbS0p")==0) return SmbS0pEnum; 1000 else stage=9; 1001 } 1002 if(stage==9){ 1003 if (strcmp(name,"SmbS0t")==0) return SmbS0tEnum; 1007 else if (strcmp(name,"SmbS0t")==0) return SmbS0tEnum; 1004 1008 else if (strcmp(name,"SmbSizeini")==0) return SmbSizeiniEnum; 1005 1009 else if (strcmp(name,"SmbSmbCorr")==0) return SmbSmbCorrEnum; … … 1117 1121 else if (strcmp(name,"Outputdefinition12")==0) return Outputdefinition12Enum; 1118 1122 else if (strcmp(name,"Outputdefinition13")==0) return Outputdefinition13Enum; 1119 else if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"Outputdefinition14")==0) return Outputdefinition14Enum; 1120 1127 else if (strcmp(name,"Outputdefinition15")==0) return Outputdefinition15Enum; 1121 1128 else if (strcmp(name,"Outputdefinition16")==0) return Outputdefinition16Enum; 1122 1129 else if (strcmp(name,"Outputdefinition17")==0) return Outputdefinition17Enum; 1123 else stage=10; 1124 } 1125 if(stage==10){ 1126 if (strcmp(name,"Outputdefinition18")==0) return Outputdefinition18Enum; 1130 else if (strcmp(name,"Outputdefinition18")==0) return Outputdefinition18Enum; 1127 1131 else if (strcmp(name,"Outputdefinition19")==0) return Outputdefinition19Enum; 1128 1132 else if (strcmp(name,"Outputdefinition20")==0) return Outputdefinition20Enum; … … 1240 1244 else if (strcmp(name,"BeckmannGoosseFloatingMeltRate")==0) return BeckmannGoosseFloatingMeltRateEnum; 1241 1245 else if (strcmp(name,"BedSlopeSolution")==0) return BedSlopeSolutionEnum; 1242 else if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"BoolExternalResult")==0) return BoolExternalResultEnum; 1243 1250 else if (strcmp(name,"BoolInput")==0) return BoolInputEnum; 1244 1251 else if (strcmp(name,"IntInput")==0) return IntInputEnum; 1245 1252 else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum; 1246 else stage=11; 1247 } 1248 if(stage==11){ 1249 if (strcmp(name,"BoolParam")==0) return BoolParamEnum; 1253 else if (strcmp(name,"BoolParam")==0) return BoolParamEnum; 1250 1254 else if (strcmp(name,"Boundary")==0) return BoundaryEnum; 1251 1255 else if (strcmp(name,"BuddJacka")==0) return BuddJackaEnum; … … 1363 1367 else if (strcmp(name,"IceVolumeAboveFloatation")==0) return IceVolumeAboveFloatationEnum; 1364 1368 else if (strcmp(name,"IceVolumeAboveFloatationScaled")==0) return IceVolumeAboveFloatationScaledEnum; 1365 else if (strcmp(name,"IceVolume")==0) return IceVolumeEnum; 1369 else stage=12; 1370 } 1371 if(stage==12){ 1372 if (strcmp(name,"IceVolume")==0) return IceVolumeEnum; 1366 1373 else if (strcmp(name,"IceVolumeScaled")==0) return IceVolumeScaledEnum; 1367 1374 else if (strcmp(name,"IcefrontMassFlux")==0) return IcefrontMassFluxEnum; 1368 1375 else if (strcmp(name,"IcefrontMassFluxLevelset")==0) return IcefrontMassFluxLevelsetEnum; 1369 else stage=12; 1370 } 1371 if(stage==12){ 1372 if (strcmp(name,"Incremental")==0) return IncrementalEnum; 1376 else if (strcmp(name,"Incremental")==0) return IncrementalEnum; 1373 1377 else if (strcmp(name,"Indexed")==0) return IndexedEnum; 1374 1378 else if (strcmp(name,"IntExternalResult")==0) return IntExternalResultEnum; … … 1486 1490 else if (strcmp(name,"Profiler")==0) return ProfilerEnum; 1487 1491 else if (strcmp(name,"ProfilingCurrentFlops")==0) return ProfilingCurrentFlopsEnum; 1488 else if (strcmp(name,"ProfilingCurrentMem")==0) return ProfilingCurrentMemEnum; 1492 else stage=13; 1493 } 1494 if(stage==13){ 1495 if (strcmp(name,"ProfilingCurrentMem")==0) return ProfilingCurrentMemEnum; 1489 1496 else if (strcmp(name,"ProfilingSolutionTime")==0) return ProfilingSolutionTimeEnum; 1490 1497 else if (strcmp(name,"Regionaloutput")==0) return RegionaloutputEnum; 1491 1498 else if (strcmp(name,"Regular")==0) return RegularEnum; 1492 else stage=13; 1493 } 1494 if(stage==13){ 1495 if (strcmp(name,"RecoveryAnalysis")==0) return RecoveryAnalysisEnum; 1499 else if (strcmp(name,"RecoveryAnalysis")==0) return RecoveryAnalysisEnum; 1496 1500 else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum; 1497 1501 else if (strcmp(name,"SamplingAnalysis")==0) return SamplingAnalysisEnum; -
issm/trunk-jpl/src/m/classes/spatiallinearbasalforcings.m
r25688 r26789 9 9 deepwater_melting_rate = NaN; 10 10 deepwater_elevation = NaN; 11 upperwater_melting_rate = NaN; 11 12 upperwater_elevation = NaN; 13 perturbation_melting_rate = NaN; 12 14 geothermalflux = NaN; 13 15 end … … 25 27 self.deepwater_elevation=lb.deepwater_elevation*ones(nvertices,1); 26 28 self.deepwater_melting_rate=lb.deepwater_melting_rate*ones(nvertices,1); 29 self.upperwater_melting_rate=lb.upperwater_melting_rate*ones(nvertices,1); 27 30 self.upperwater_elevation=lb.upperwater_elevation*ones(nvertices,1); 31 self.perturbation_melting_rate=lb.perturbation_melting_rate*ones(nvertices,1); 28 32 else 29 33 self=structtoobj(spatiallinearbasalforcings(),varargin{1}); … … 37 41 self.deepwater_melting_rate=project3d(md,'vector',self.deepwater_melting_rate,'type','node','layer',1); 38 42 self.deepwater_elevation=project3d(md,'vector',self.deepwater_elevation,'type','node','layer',1); 43 self.upperwater_melting_rate=project3d(md,'vector',self.upperwater_melting_rate,'type','node','layer',1); 39 44 self.upperwater_elevation=project3d(md,'vector',self.upperwater_elevation,'type','node','layer',1); 40 45 self.geothermalflux=project3d(md,'vector',self.geothermalflux,'type','node','layer',1); %bedrock only gets geothermal flux 46 self.perturbation_melting_rate=project3d(md,'vector',self.perturbation_melting_rate,'type','node','layer',1); 41 47 end % }}} 42 48 function self = initialize(self,md) % {{{ … … 58 64 function md = checkconsistency(self,md,solution,analyses) % {{{ 59 65 66 if numel(md.basalforcings.perturbation_melting_rate)>1 67 md = checkfield(md,'fieldname','basalforcings.perturbation_melting_rate','NaN',1,'Inf',1,'timeseries',1); 68 end 69 60 70 if ismember('MasstransportAnalysis',analyses) & ~(strcmp(solution,'TransientSolution') & md.transient.ismasstransport==0), 61 71 md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1); 62 72 md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','NaN',1,'Inf',1,'timeseries',1,'>=',0); 63 73 md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','NaN',1,'Inf',1,'timeseries',1); 74 md = checkfield(md,'fieldname','basalforcings.upperwater_melting_rate','NaN',1,'Inf',1,'timeseries',1,'>=',0); 64 75 md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','NaN',1,'Inf',1,'timeseries',1,'<',0); 65 76 end … … 69 80 md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0,'numel',1); 70 81 md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<','basalforcings.upperwater_elevation','numel',1); 82 md = checkfield(md,'fieldname','basalforcings.upperwater_melting_rate','>=',0,'numel',1); 71 83 md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<=',0,'numel',1); 72 84 end … … 76 88 md = checkfield(md,'fieldname','basalforcings.deepwater_melting_rate','>=',0,'numel',1); 77 89 md = checkfield(md,'fieldname','basalforcings.deepwater_elevation','<','basalforcings.upperwater_elevation','numel',1); 90 md = checkfield(md,'fieldname','basalforcings.upperwater_melting_rate','>=',0,'numel',1); 78 91 md = checkfield(md,'fieldname','basalforcings.upperwater_elevation','<',0,'numel',1); 79 92 md = checkfield(md,'fieldname','basalforcings.geothermalflux','NaN',1,'Inf',1,'timeseries',1,'>=',0); … … 86 99 fielddisplay(self,'deepwater_melting_rate','basal melting rate (positive if melting applied for floating ice whith base < deepwater_elevation) [m/yr]'); 87 100 fielddisplay(self,'deepwater_elevation','elevation of ocean deepwater [m]'); 101 fielddisplay(self,'upperwater_melting_rate','basal melting rate (positive if melting applied for floating ice whith base >= upperwater_elevation) [m/yr]'); 88 102 fielddisplay(self,'upperwater_elevation','elevation of ocean upperwater [m]'); 103 fielddisplay(self,'perturbation_melting_rate','basal melting rate perturbation added to computed melting rate (positive if melting) [m/yr]'); 89 104 fielddisplay(self,'geothermalflux','geothermal heat flux [W/m^2]'); 90 105 … … 94 109 yts=md.constants.yts; 95 110 96 floatingice_melting_rate=zeros(md.mesh.numberofvertices,1);97 pos=find(md.geometry.base<=md.basalforcings.deepwater_elevation);98 floatingice_melting_rate(pos)=md.basalforcings.deepwater_melting_rate(pos);99 pos=find(md.geometry.base>md.basalforcings.deepwater_elevation & md.geometry.base<md.basalforcings.upperwater_elevation);100 floatingice_melting_rate(pos)=md.basalforcings.deepwater_melting_rate(pos).*(md.geometry.base(pos)-md.basalforcings.upperwater_elevation(pos))./(md.basalforcings.deepwater_elevation(pos)-md.basalforcings.upperwater_elevation(pos));101 111 WriteData(fid,prefix,'name','md.basalforcings.model','data',6,'format','Integer'); 102 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,'yts',md.constants.yts);103 112 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,'yts',md.constants.yts); 104 113 WriteData(fid,prefix,'object',self,'fieldname','geothermalflux','name','md.basalforcings.geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 105 114 WriteData(fid,prefix,'object',self,'fieldname','deepwater_melting_rate','format','DoubleMat','name','md.basalforcings.deepwater_melting_rate','scale',1./yts,'mattype',1); 106 115 WriteData(fid,prefix,'object',self,'fieldname','deepwater_elevation','format','DoubleMat','name','md.basalforcings.deepwater_elevation','mattype',1); 116 WriteData(fid,prefix,'object',self,'fieldname','upperwater_melting_rate','format','DoubleMat','name','md.basalforcings.upperwater_melting_rate','scale',1./yts,'mattype',1); 107 117 WriteData(fid,prefix,'object',self,'fieldname','upperwater_elevation','format','DoubleMat','name','md.basalforcings.upperwater_elevation','mattype',1); 118 WriteData(fid,prefix,'object',self,'fieldname','perturbation_melting_rate','format','DoubleMat','name','md.basalforcings.perturbation_melting_rate','scale',1./yts,'mattype',1); 108 119 end % }}} 109 120 end -
issm/trunk-jpl/src/m/classes/spatiallinearbasalforcings.py
r25762 r26789 21 21 self.deepwater_melting_rate = np.nan 22 22 self.deepwater_elevation = np.nan 23 self.upperwater_melting_rate = np.nan 23 24 self.upperwater_elevation = np.nan 24 25 self.geothermalflux = np.nan 26 self.perturbation_melting_rate = np.nan 25 27 26 28 self.setdefaultparameters() … … 30 32 nvertices = len(lb.groundedice_melting_rate) 31 33 self.groundedice_melting_rate = lb.groundedice_melting_rate 32 self. deepwater_melting_rate= lb.geothermalflux34 self.geothermalflux = lb.geothermalflux 33 35 self.deepwater_elevation = lb.deepwater_elevation * np.ones((nvertices, )) 34 self.upperwater_elevation = lb.deepwater_melting_rate * np.ones((nvertices, )) 35 self.geothermalflux = lb.upperwater_elevation * np.ones((nvertices, )) 36 self.deepwater_melting_rate = lb.deepwater_melting_rate * np.ones((nvertices, )) 37 self.upperwater_melting_rate = lb.upperwater_melting_rate * np.ones((nvertices, )) 38 self.upperwater_elevation = lb.upperwater_elevation * np.ones((nvertices, )) 39 self.perturbation_melting_rate = lb.perturbation_melting_rate * np.ones((nvertices, )) 36 40 else: 37 41 # TODO: This has not been tested … … 46 50 s += '{}\n'.format(fielddisplay(self, 'deepwater_melting_rate', 'basal melting rate (positive if melting applied for floating ice whith base < deepwater_elevation) [m/yr]')) 47 51 s += '{}\n'.format(fielddisplay(self, 'deepwater_elevation', 'elevation of ocean deepwater [m]')) 52 s += '{}\n'.format(fielddisplay(self, 'upperwater_melting_rate', 'basal melting rate (positive if melting applied for floating ice whith base >= upperwater_elevation) [m/yr]')) 48 53 s += '{}\n'.format(fielddisplay(self, 'upperwater_elevation', 'elevation of ocean upperwater [m]')) 54 s += '{}\n'.format(fielddisplay(self, 'perturbation_melting_rate', 'basal melting rate perturbation added to computed melting rate (positive if melting) [m/yr]')) 49 55 s += '{}\n'.format(fielddisplay(self, 'geothermalflux', 'geothermal heat flux [W/m^2]')) 50 56 return s … … 55 61 self.deepwater_melting_rate = project3d(md, 'vector', self.deepwater_melting_rate, 'type', 'node', 'layer', 1) 56 62 self.deepwater_elevation = project3d(md, 'vector', self.deepwater_elevation, 'type', 'node', 'layer', 1) 63 self.upperwater_melting_rate = project3d(md, 'vector', self.upperwater_melting_rate, 'type', 'node', 'layer', 1) 57 64 self.upperwater_elevation = project3d(md, 'vector', self.upperwater_elevation, 'type', 'node', 'layer', 1) 58 65 self.geothermalflux = project3d(md, 'vector', self.geothermalflux, 'type', 'node', 'layer', 1) # Bedrock only gets geothermal flux 66 self.perturbation_melting_rate = project3d(md, 'vector', self.upperwater_melting_rate, 'type', 'node', 'layer', 1) 59 67 return self 60 68 #}}} … … 72 80 73 81 def checkconsistency(self, md, solution, analyses): #{{{ 82 if not np.all(np.isnan(self.perturbation_melting_rate)): 83 md = checkfield(md, 'fieldname', 'basalforcings.perturbation_melting_rate', 'NaN', 1, 'Inf', 1, 'timeseries', 1) 74 84 if 'MasstransportAnalysis' in analyses and not solution == 'TransientSolution' and not md.transient.ismasstransport: 75 85 md = checkfield(md, 'fieldname', 'basalforcings.groundedice_melting_rate', 'NaN', 1, 'Inf', 1, 'timeseries', 1) 76 86 md = checkfield(md, 'fieldname', 'basalforcings.deepwater_melting_rate', 'NaN', 1, 'Inf', 1, 'timeseries', 1, '>=', 0) 77 87 md = checkfield(md, 'fieldname', 'basalforcings.deepwater_elevation', 'NaN', 1, 'Inf', 1, 'timeseries', 1) 88 md = checkfield(md, 'fieldname', 'basalforcings.upperwater_melting_rate', 'NaN', 1, 'Inf', 1, 'timeseries', 1, '>=', 0) 78 89 md = checkfield(md, 'fieldname', 'basalforcings.upperwater_elevation', 'NaN', 1, 'Inf', 1, 'timeseries', 1, '<', 0) 79 90 if 'BalancethicknessAnalysis' in analyses: … … 82 93 md = checkfield(md, 'fieldname', 'basalforcings.deepwater_melting_rate', '>=', 0, 'numel', 1) 83 94 md = checkfield(md, 'fieldname', 'basalforcings.deepwater_elevation', '<', 'basalforcings.upperwater_elevation', 'numel', 1) 95 md = checkfield(md, 'fieldname', 'basalforcings.upperwater_melting_rate', '>=', 0, 'numel', 1) 84 96 md = checkfield(md, 'fieldname', 'basalforcings.upperwater_elevation', '<=', 0, 'numel', 1) 85 97 if 'ThermalAnalysis' in analyses and not solution == 'TransientSolution' and not md.transient.isthermal: … … 89 101 md = checkfield(md, 'fieldname', 'basalforcings.deepwater_elevation', '<', 'basalforcings.upperwater_elevation', 'numel', 1) 90 102 md = checkfield(md, 'fieldname', 'basalforcings.upperwater_elevation', '<', 0, 'numel', 1) 103 md = checkfield(md, 'fieldname', 'basalforcings.deepwater_melting_rate', '>=', 0, 'numel', 1) 91 104 md = checkfield(md, 'fieldname', 'basalforcings.geothermalflux', 'NaN', 1, 'Inf', 1, 'timeseries', 1, '>=', 0) 92 105 return md … … 96 109 yts = md.constants.yts 97 110 98 floatingice_melting_rate = np.zeros((md.mesh.numberofvertices, ))99 pos = np.where(md.geometry.base <= md.basalforcings.deepwater_elevation)[0]100 floatingice_melting_rate[pos] = md.basalforcings.deepwater_melting_rate[pos]101 pos = np.where(np.logical_and.reduce(md.geometry.base > md.basalforcings.deepwater_elevation, md.geometry.base < md.basalforcings.upperwater_elevation))102 floatingice_melting_rate[pos] = md.basalforcings.deepwater_melting_rate[pos] * (md.geometry.base[pos] - md.basalforcings.upperwater_elevation[pos]) / (md.basalforcings.deepwater_elevation[pos] - md.basalforcings.upperwater_elevation[pos])103 111 WriteData(fid, prefix, 'name', 'md.basalforcings.model', 'data', 6, 'format', 'Integer') 104 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, 'yts', md.constants.yts)105 112 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,'yts', md.constants.yts) 106 113 WriteData(fid, prefix,'object', self, 'fieldname', 'geothermalflux', 'name', 'md.basalforcings.geothermalflux', 'format', 'DoubleMat', 'mattype', 1,'timeserieslength', md.mesh.numberofvertices + 1, 'yts', md.constants.yts) 107 114 WriteData(fid, prefix, 'object', self, 'fieldname', 'deepwater_melting_rate', 'format', 'DoubleMat', 'name', 'md.basalforcings.deepwater_melting_rate', 'scale', 1. / yts, 'mattype', 1) 108 115 WriteData(fid, prefix, 'object', self, 'fieldname', 'deepwater_elevation', 'format', 'DoubleMat', 'name', 'md.basalforcings.deepwater_elevation', 'mattype', 1) 116 WriteData(fid, prefix, 'object', self, 'fieldname', 'upperwater_melting_rate', 'format', 'DoubleMat', 'name', 'md.basalforcings.upperwater_melting_rate', 'scale', 1. / yts, 'mattype', 1) 109 117 WriteData(fid, prefix, 'object', self, 'fieldname', 'upperwater_elevation', 'format', 'DoubleMat', 'name', 'md.basalforcings.upperwater_elevation', 'mattype', 1) 118 WriteData(fid, prefix, 'object', self, 'fieldname', 'perturbation_melting_rate', 'format', 'DoubleMat', 'name', 'md.basalforcings.perturbation_melting_rate', 'scale', 1. / yts, 'mattype', 1) 110 119 #}}}
Note:
See TracChangeset
for help on using the changeset viewer.