Changeset 26640
- Timestamp:
- 11/18/21 06:34:31 (3 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 1 deleted
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/FreeSurfaceBaseAnalysis.cpp
r26090 r26640 88 88 89 89 /*Get what we need for ocean-induced basal melting*/ 90 bool isstochastic; 90 91 int basalforcing_model; 91 92 iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model"); 93 iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing"); 92 94 switch(basalforcing_model){ 93 95 case FloatingMeltRateEnum: 94 96 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum); 97 if(isstochastic){ 98 iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum); 99 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BaselineBasalforcingsFloatingiceMeltingRateEnum); 100 } 95 101 break; 96 102 case LinearFloatingMeltRateEnum: -
issm/trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp
r26615 r26640 91 91 iomodel->FetchDataToInput(inputs,elements,"md.calving.calvingrate",CalvingCalvingrateEnum); 92 92 if(isstochastic){ 93 93 iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum); 94 94 iomodel->FetchDataToInput(inputs,elements,"md.calving.calvingrate",BaselineCalvingCalvingrateEnum); 95 95 } -
issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
r26468 r26640 161 161 162 162 /*Get what we need for ocean-induced basal melting*/ 163 bool isstochastic; 163 164 int basalforcing_model; 164 165 iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model"); 166 iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing"); 165 167 switch(basalforcing_model){ 166 168 case FloatingMeltRateEnum: 167 169 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum); 170 if(isstochastic){ 171 iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum); 172 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BaselineBasalforcingsFloatingiceMeltingRateEnum); 173 } 168 174 break; 169 175 case LinearFloatingMeltRateEnum: -
issm/trunk-jpl/src/c/analyses/StressbalanceAnalysis.cpp
r26555 r26640 816 816 817 817 /*Add basal forcings to compute melt rate*/ 818 bool isstochastic; 818 819 int basalforcing_model; 819 820 iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model"); 821 iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing"); 820 822 switch(basalforcing_model){ 821 823 case FloatingMeltRateEnum: 822 824 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum); 825 if(isstochastic){ 826 iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum); 827 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BaselineBasalforcingsFloatingiceMeltingRateEnum); 828 } 823 829 break; 824 830 case LinearFloatingMeltRateEnum: -
issm/trunk-jpl/src/c/analyses/StressbalanceVerticalAnalysis.cpp
r26468 r26640 119 119 120 120 /*Add basal forcings to compute melt rate*/ 121 bool isstochastic; 121 122 int basalforcing_model; 122 123 iomodel->FindConstant(&basalforcing_model,"md.basalforcings.model"); 124 iomodel->FindConstant(&isstochastic,"md.stochasticforcing.isstochasticforcing"); 123 125 switch(basalforcing_model){ 124 126 case FloatingMeltRateEnum: 125 127 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BasalforcingsFloatingiceMeltingRateEnum); 128 if(isstochastic){ 129 iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum); 130 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.floatingice_melting_rate",BaselineBasalforcingsFloatingiceMeltingRateEnum); 131 } 126 132 break; 127 133 case LinearFloatingMeltRateEnum: -
issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp
r26615 r26640 9 9 10 10 void StochasticForcingx(FemModel* femmodel){/*{{{*/ 11 12 13 //VV testing (12Nov) 14 /* 15 IssmDouble timeVV,dtVV,starttimeVV; 16 femmodel->parameters->FindParam(&timeVV,TimeEnum); 17 femmodel->parameters->FindParam(&dtVV,TimesteppingTimeStepEnum); 18 femmodel->parameters->FindParam(&starttimeVV,TimesteppingStartTimeEnum); 19 IssmDouble valMean = 0; 20 IssmDouble valSdev = 0.5; 21 int seed; 22 //seed = reCast<int,IssmDouble>((timeVV-starttimeVV)/dtVV); 23 seed = -1; 24 IssmDouble rdmVV; 25 univariateNormal_test0(&rdmVV,valMean,valSdev,seed); 26 _printf_("VV rdmVV: "<<rdmVV<<'\n'); 27 */ 11 28 12 29 /*Retrieve parameters*/ … … 103 120 } 104 121 break; 122 case FloatingMeltRateEnum: 123 /*Delete BasalforcingsFloatingiceMeltingRateEnum at previous time step (required if it is transient)*/ 124 femmodel->inputs->DeleteInput(BasalforcingsFloatingiceMeltingRateEnum); 125 for(Object* &object:femmodel->elements->objects){ 126 Element* element = xDynamicCast<Element*>(object); 127 int numvertices = element->GetNumberOfVertices(); 128 IssmDouble baselinefloatingicemeltrate; 129 IssmDouble floatingicemeltrate_tot[numvertices]; 130 Input* baselinefloatingicemeltrate_input = NULL; 131 baselinefloatingicemeltrate_input = element->GetInput(BaselineBasalforcingsFloatingiceMeltingRateEnum); _assert_(baselinefloatingicemeltrate_input); 132 element->GetInputValue(&dimensionid,StochasticForcingDefaultIdEnum); 133 Gauss* gauss = element->NewGauss(); 134 for(int i=0;i<numvertices;i++){ 135 gauss->GaussVertex(i); 136 baselinefloatingicemeltrate_input->GetInputValue(&baselinefloatingicemeltrate,gauss); 137 floatingicemeltrate_tot[i] = max(0.0,baselinefloatingicemeltrate+noisefield[dimensionid]); 138 } 139 element->AddInput(BasalforcingsFloatingiceMeltingRateEnum,&floatingicemeltrate_tot[0],P1DGEnum); 140 delete gauss; 141 } 142 break; 105 143 default: 106 144 _error_("Field "<<EnumToStringx(fields[j])<<" does not support stochasticity yet."); -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r26615 r26640 601 601 syn keyword cConstant BaseSlopeXEnum 602 602 syn keyword cConstant BaseSlopeYEnum 603 syn keyword cConstant BaselineBasalforcingsFloatingiceMeltingRateEnum 603 604 syn keyword cConstant BaselineCalvingCalvingrateEnum 604 605 syn keyword cConstant BedEnum -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r26615 r26640 597 597 BaseSlopeXEnum, 598 598 BaseSlopeYEnum, 599 BaselineBasalforcingsFloatingiceMeltingRateEnum, 599 600 BaselineCalvingCalvingrateEnum, 600 601 BedEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r26615 r26640 603 603 case BaseSlopeXEnum : return "BaseSlopeX"; 604 604 case BaseSlopeYEnum : return "BaseSlopeY"; 605 case BaselineBasalforcingsFloatingiceMeltingRateEnum : return "BaselineBasalforcingsFloatingiceMeltingRate"; 605 606 case BaselineCalvingCalvingrateEnum : return "BaselineCalvingCalvingrate"; 606 607 case BedEnum : return "Bed"; -
issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
r26615 r26640 594 594 syn keyword juliaConstC BaseSlopeXEnum 595 595 syn keyword juliaConstC BaseSlopeYEnum 596 syn keyword juliaConstC BaselineBasalforcingsFloatingiceMeltingRateEnum 596 597 syn keyword juliaConstC BaselineCalvingCalvingrateEnum 597 598 syn keyword juliaConstC BedEnum -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r26615 r26640 615 615 else if (strcmp(name,"BaseSlopeX")==0) return BaseSlopeXEnum; 616 616 else if (strcmp(name,"BaseSlopeY")==0) return BaseSlopeYEnum; 617 else if (strcmp(name,"BaselineBasalforcingsFloatingiceMeltingRate")==0) return BaselineBasalforcingsFloatingiceMeltingRateEnum; 617 618 else if (strcmp(name,"BaselineCalvingCalvingrate")==0) return BaselineCalvingCalvingrateEnum; 618 619 else if (strcmp(name,"Bed")==0) return BedEnum; … … 628 629 else if (strcmp(name,"CalvingCalvingrate")==0) return CalvingCalvingrateEnum; 629 630 else if (strcmp(name,"CalvingHabFraction")==0) return CalvingHabFractionEnum; 630 else if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum;631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum; 634 if (strcmp(name,"CalvingMeltingrate")==0) return CalvingMeltingrateEnum; 635 else if (strcmp(name,"CalvingStressThresholdFloatingice")==0) return CalvingStressThresholdFloatingiceEnum; 635 636 else if (strcmp(name,"CalvingStressThresholdGroundedice")==0) return CalvingStressThresholdGroundediceEnum; 636 637 else if (strcmp(name,"CalvinglevermannCoeff")==0) return CalvinglevermannCoeffEnum; … … 751 752 else if (strcmp(name,"HydrologyReynolds")==0) return HydrologyReynoldsEnum; 752 753 else if (strcmp(name,"HydrologySheetConductivity")==0) return HydrologySheetConductivityEnum; 753 else if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum;754 754 else stage=7; 755 755 } 756 756 if(stage==7){ 757 if (strcmp(name,"HydrologySheetThicknessOld")==0) return HydrologySheetThicknessOldEnum; 757 if (strcmp(name,"HydrologySheetThickness")==0) return HydrologySheetThicknessEnum; 758 else if (strcmp(name,"HydrologySheetThicknessOld")==0) return HydrologySheetThicknessOldEnum; 758 759 else if (strcmp(name,"HydrologyTws")==0) return HydrologyTwsEnum; 759 760 else if (strcmp(name,"HydrologyTwsSpc")==0) return HydrologyTwsSpcEnum; … … 874 875 else if (strcmp(name,"SealevelUNorthEsa")==0) return SealevelUNorthEsaEnum; 875 876 else if (strcmp(name,"SealevelchangeIndices")==0) return SealevelchangeIndicesEnum; 876 else if (strcmp(name,"SealevelchangeG")==0) return SealevelchangeGEnum;877 877 else stage=8; 878 878 } 879 879 if(stage==8){ 880 if (strcmp(name,"SealevelchangeGU")==0) return SealevelchangeGUEnum; 880 if (strcmp(name,"SealevelchangeG")==0) return SealevelchangeGEnum; 881 else if (strcmp(name,"SealevelchangeGU")==0) return SealevelchangeGUEnum; 881 882 else if (strcmp(name,"SealevelchangeGE")==0) return SealevelchangeGEEnum; 882 883 else if (strcmp(name,"SealevelchangeGN")==0) return SealevelchangeGNEnum; … … 997 998 else if (strcmp(name,"SmbSzaValue")==0) return SmbSzaValueEnum; 998 999 else if (strcmp(name,"SmbT")==0) return SmbTEnum; 999 else if (strcmp(name,"SmbTa")==0) return SmbTaEnum;1000 1000 else stage=9; 1001 1001 } 1002 1002 if(stage==9){ 1003 if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum; 1003 if (strcmp(name,"SmbTa")==0) return SmbTaEnum; 1004 else if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum; 1004 1005 else if (strcmp(name,"SmbTemperaturesAnomaly")==0) return SmbTemperaturesAnomalyEnum; 1005 1006 else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum; … … 1120 1121 else if (strcmp(name,"Outputdefinition24")==0) return Outputdefinition24Enum; 1121 1122 else if (strcmp(name,"Outputdefinition25")==0) return Outputdefinition25Enum; 1122 else if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum;1123 1123 else stage=10; 1124 1124 } 1125 1125 if(stage==10){ 1126 if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum; 1126 if (strcmp(name,"Outputdefinition26")==0) return Outputdefinition26Enum; 1127 else if (strcmp(name,"Outputdefinition27")==0) return Outputdefinition27Enum; 1127 1128 else if (strcmp(name,"Outputdefinition28")==0) return Outputdefinition28Enum; 1128 1129 else if (strcmp(name,"Outputdefinition29")==0) return Outputdefinition29Enum; … … 1243 1244 else if (strcmp(name,"CalvingVonmises")==0) return CalvingVonmisesEnum; 1244 1245 else if (strcmp(name,"Cfdragcoeffabsgrad")==0) return CfdragcoeffabsgradEnum; 1245 else if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum;1246 1246 else stage=11; 1247 1247 } 1248 1248 if(stage==11){ 1249 if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum; 1249 if (strcmp(name,"Cfsurfacelogvel")==0) return CfsurfacelogvelEnum; 1250 else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum; 1250 1251 else if (strcmp(name,"Cflevelsetmisfit")==0) return CflevelsetmisfitEnum; 1251 1252 else if (strcmp(name,"Channel")==0) return ChannelEnum; … … 1366 1367 else if (strcmp(name,"IntParam")==0) return IntParamEnum; 1367 1368 else if (strcmp(name,"IntVecParam")==0) return IntVecParamEnum; 1368 else if (strcmp(name,"Inputs")==0) return InputsEnum;1369 1369 else stage=12; 1370 1370 } 1371 1371 if(stage==12){ 1372 if (strcmp(name,"Internal")==0) return InternalEnum; 1372 if (strcmp(name,"Inputs")==0) return InputsEnum; 1373 else if (strcmp(name,"Internal")==0) return InternalEnum; 1373 1374 else if (strcmp(name,"Intersect")==0) return IntersectEnum; 1374 1375 else if (strcmp(name,"InversionVzObs")==0) return InversionVzObsEnum; … … 1489 1490 else if (strcmp(name,"SMBcomponents")==0) return SMBcomponentsEnum; 1490 1491 else if (strcmp(name,"SMBd18opdd")==0) return SMBd18opddEnum; 1491 else if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum;1492 1492 else stage=13; 1493 1493 } 1494 1494 if(stage==13){ 1495 if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum; 1495 if (strcmp(name,"SMBforcing")==0) return SMBforcingEnum; 1496 else if (strcmp(name,"SMBgcm")==0) return SMBgcmEnum; 1496 1497 else if (strcmp(name,"SMBgemb")==0) return SMBgembEnum; 1497 1498 else if (strcmp(name,"SMBgradients")==0) return SMBgradientsEnum; -
issm/trunk-jpl/src/m/classes/stochasticforcing.m
r26620 r26640 45 45 %Check that all fields agree with the corresponding md class and if any field needs the default params 46 46 checkdefaults = false; %need to check defaults only if one of the field does not have its own dimensionality 47 structstoch = structstochforcing(); 47 48 for field=self.fields 48 49 %Checking agreement of classes 49 50 if(contains(field,'SMB')) 50 if~(isequal(class(md.smb),char(field))) 51 mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field)))); 52 if~(isequal(class(md.smb),char(mdname))) 51 53 error('md.smb does not agree with stochasticforcing field %s', char(field)); 52 54 end 53 55 end 54 if(contains(field,'frontalforcings')) 55 if~(isequal(class(md.frontalforcings),char(field))) 56 if(contains(field,'FrontalForcings')) 57 mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field)))); 58 if~(isequal(class(md.frontalforcings),char(mdname))) 56 59 error('md.frontalforcings does not agree with stochasticforcing field %s', char(field)); 60 end 61 end 62 if(contains(field,'Calving')) 63 mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field)))); 64 if~(isequal(class(md.calving),char(mdname))) 65 error('md.calving does not agree with stochasticforcing field %s', char(field)); 66 end 67 end 68 if(contains(field,'BasalforcingsFloatingice')) 69 mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field)))); 70 if~(isequal(class(md.basalforcings),char(mdname))) 71 error('md.basalforcings does not agree with stochasticforcing field %s', char(field)); 57 72 end 58 73 end … … 129 144 130 145 %Scaling covariance matrix (scale column-by-column and row-by-row) 131 scaledfields = {'DefaultCalving',' SMBautoregression'}; %list of fields that need scaling *1/yts146 scaledfields = {'DefaultCalving','FloatingMeltRate','SMBautoregression'}; %list of fields that need scaling *1/yts 132 147 tempcovariance = self.covariance; %copy of covariance to avoid writing back in member variable 133 148 for i=1:num_fields … … 161 176 % by the class md.stochasticforcing 162 177 163 list = {... 178 list = structstochforcing(); 179 list = list.fields; 180 end % }}} 181 function structure = structstochforcing() % {{{ 182 % Defines structure with list of fields 183 % supported and corresponding md names 184 structure.fields = {... 164 185 'DefaultCalving',... 165 'FrontalForcingsRignotAutoregression',... 186 'FloatingMeltRate',... 187 'FrontalForcingsRignotAutoregression',... 166 188 'SMBautoregression' 167 189 }; 190 structure.mdnames = {... 191 'calving',... 192 'basalforcings',... 193 'frontalforcingsrignotautoregression',... 194 'SMBautoregression' 195 }; 168 196 end % }}} 197 198 199 200 -
issm/trunk-jpl/src/m/classes/stochasticforcing.py
r26635 r26640 60 60 # Check that all fields agree with the corresponding md class 61 61 checkdefaults = False 62 structstoch = stochasticforcing.structstochforcing() 62 63 for field in self.fields: 63 64 if 'SMB' in field: 64 if type(md.smb).__name__ != field: 65 mdname = structstoch['mdnames'][structstoch['fields']==field] 66 if type(md.smb).__name__ != mdname: 65 67 raise TypeError('md.smb does not agree with stochasticforcing field {}'.format(field)) 66 if 'frontalforcings' in field: 67 if type(md.frontalforcings).__name__ != field: 68 if 'FrontalForcings' in field: 69 mdname = structstoch['mdnames'][structstoch['fields']==field] 70 if type(md.frontalforcings).__name__ != mdname: 68 71 raise TypeError('md.frontalforcings does not agree with stochasticforcing field {}'.format(field)) 69 #Checking for specific dimensions 72 if 'Calving' in field: 73 mdname = structstoch['mdnames'][structstoch['fields']==field] 74 if type(md.calving).__name__ != mdname: 75 raise TypeError('md.calving does not agree with stochasticforcing field {}'.format(field)) 76 if 'BasalforcingsFloatingice' in field: 77 mdname = structstoch['mdnames'][structstoch['fields']==field] 78 if type(md.basalforcings).__name__ != mdname: 79 raise TypeError('md.basalforcings does not agree with stochasticforcing field {}'.format(field))#Checking for specific dimensions 70 80 if not (field == 'SMBautoregression' or field == 'FrontalForcingsRignotAutoregression'): 71 81 checkdefaults = True #field with non-specific dimensionality … … 80 90 if ('FrontalForcingsRignotAutoregression' in self.fields): 81 91 size_tot = size_tot - self.defaultdimension + md.frontalforcings.num_basins 82 ind SMBar= self.fields.index('FrontalForcingsRignotAutoregression')92 indTFar = self.fields.index('FrontalForcingsRignotAutoregression') 83 93 if (indSMBar != -1 and indTFar != -1): 84 94 covsum = self.covariance[np.sum(self.defaultdimensions[0:indSMBar]).astype(int):np.sum(self.defaultdimensions[0:indSMBar + 1]).astype(int), np.sum(self.defaultdimensions[0:indTFar]).astype(int):np.sum(self.defaultdimensions[0:indTFar + 1]).astype(int)] … … 87 97 88 98 md = checkfield(md, 'fieldname', 'stochasticforcing.isstochasticforcing', 'values', [0, 1]) 89 md = checkfield(md, 'fieldname', 'stochasticforcing.fields', 'numel', num_fields, 'cell', 1, 'values', s upportedstochforcings())99 md = checkfield(md, 'fieldname', 'stochasticforcing.fields', 'numel', num_fields, 'cell', 1, 'values', stochasticforcing.supportedstochforcings()) 90 100 #md = checkfield(md, 'fieldname', 'stochasticforcing.dimensions', 'NaN', 1, 'Inf', 1, '>', 0, 'size', [num_fields]) # specific dimension for each field; NOTE: As opposed to MATLAB implementation, pass list 91 101 md = checkfield(md, 'fieldname', 'stochasticforcing.covariance', 'NaN', 1, 'Inf', 1, 'size', [size_tot, size_tot]) # global covariance matrix … … 141 151 # }}} 142 152 153 def supportedstochforcings(): # {{{ 154 """Defines list of fields supported by the class md.stochasticforcing 155 """ 156 list1 = stochasticforcing.structstochforcing() 157 list1 = list1['fields'] 158 return(list1) #}}} 143 159 144 def supportedstochforcings(): 145 """ Defines list of fields supported by the class stochasticforcings 146 """ 147 return [ 148 'DefaultCalving', 149 'FrontalForcingsRignotAutoregression', 150 'SMBautoregression' 151 ] 160 def structstochforcing(): # {{{ 161 """Defines dictionary with list of fields 162 supported and corresponding md names 163 """ 164 structure = dict({ 165 'fields': 166 ['DefaultCalving', 167 'FloatingMeltRate', 168 'FrontalForcingsRignotAutoregression', 169 'SMBautoregression'], 170 171 'mdnames': 172 ['calving', 173 'basalforcings', 174 'frontalforcingsrignotautoregression', 175 'SMBautoregression']}) 176 return(structure) # }}} 177
Note:
See TracChangeset
for help on using the changeset viewer.