Changeset 26837
- Timestamp:
- 01/29/22 12:15:51 (3 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 2 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
r26836 r26837 221 221 case AutoregressionLinearFloatingMeltRateEnum: 222 222 iomodel->FetchDataToInput(inputs,elements,"md.basalforcings.basin_id",BasalforcingsLinearBasinIdEnum); 223 if(isstochastic) iomodel->FetchDataToInput(inputs,elements,"md.stochasticforcing.default_id",StochasticForcingDefaultIdEnum); 223 224 break; 224 225 default: -
issm/trunk-jpl/src/c/modules/StochasticForcingx/StochasticForcingx.cpp
r26825 r26837 11 11 void StochasticForcingx(FemModel* femmodel){/*{{{*/ 12 12 13 14 //VV testing (12Nov)15 /*16 IssmDouble timeVV,dtVV,starttimeVV;17 femmodel->parameters->FindParam(&timeVV,TimeEnum);18 femmodel->parameters->FindParam(&dtVV,TimesteppingTimeStepEnum);19 femmodel->parameters->FindParam(&starttimeVV,TimesteppingStartTimeEnum);20 IssmDouble valMean = 0;21 IssmDouble valSdev = 0.5;22 int seed;23 //seed = reCast<int,IssmDouble>((timeVV-starttimeVV)/dtVV);24 seed = -1;25 IssmDouble rdmVV;26 univariateNormal_test0(&rdmVV,valMean,valSdev,seed);27 _printf_("VV rdmVV: "<<rdmVV<<'\n');28 */29 13 30 14 /*Retrieve parameters*/ … … 73 57 74 58 /*Deal with the autoregressive models*/ 75 if(fields[j]==SMBautoregressionEnum || fields[j]==FrontalForcingsRignotAutoregressionEnum ){59 if(fields[j]==SMBautoregressionEnum || fields[j]==FrontalForcingsRignotAutoregressionEnum || fields[j]==BasalforcingsDeepwaterMeltingRateAutoregressionEnum){ 76 60 switch(fields[j]){ 77 61 case SMBautoregressionEnum: … … 82 66 dimenum_type = FrontalForcingsBasinIdEnum; 83 67 noiseenum_type = ThermalforcingAutoregressionNoiseEnum; 68 break; 69 case BasalforcingsDeepwaterMeltingRateAutoregressionEnum: 70 dimenum_type = BasalforcingsLinearBasinIdEnum; 71 noiseenum_type = BasalforcingsDeepwaterMeltingRateNoiseEnum; 84 72 break; 85 73 } … … 98 86 case SMBautoregressionEnum: 99 87 case FrontalForcingsRignotAutoregressionEnum: 88 case BasalforcingsDeepwaterMeltingRateAutoregressionEnum: 100 89 /*Already done above*/ 101 90 break; … … 185 174 } 186 175 break; 187 //VV working(29Nov2021)188 176 case FrictionWaterPressureEnum: 189 177 /*Specify that WaterPressure is stochastic*/ … … 208 196 } 209 197 break; 210 211 /*212 case FrictionEffectivePressureEnum:213 femmodel->parameters->SetParam(true,StochasticForcingIsEffectivePressureEnum);214 for(Object* &object:femmodel->elements->objects){215 Element* element = xDynamicCast<Element*>(object);216 int numvertices = element->GetNumberOfVertices();217 IssmDouble Neff[numvertices];218 element->GetInputValue(&dimensionid,StochasticForcingDefaultIdEnum);219 Gauss* gauss=element->NewGauss();220 Friction* friction = new Friction(element);221 for(int i=0;i<numvertices;i++){222 gauss->GaussVertex(i);223 Neff[i] = friction->EffectivePressure(gauss);224 Neff[i] = Neff[i]+noisefield[dimensionid];225 }226 element->AddInput(FrictionEffectivePressureEnum,Neff,P1DGEnum);227 delete gauss;228 delete friction;229 }230 break;231 */232 233 198 default: 234 199 _error_("Field "<<EnumToStringx(fields[j])<<" does not support stochasticity yet."); -
issm/trunk-jpl/src/c/shared/Enum/Enum.vim
r26836 r26837 73 73 syn keyword cConstant BasalforcingsDeepwaterElevationEnum 74 74 syn keyword cConstant BasalforcingsDeepwaterMeltingRateEnum 75 syn keyword cConstant BasalforcingsDeepwaterMeltingRateNoiseEnum76 75 syn keyword cConstant BasalforcingsDtbgEnum 77 76 syn keyword cConstant BasalforcingsEnum … … 603 602 syn keyword cConstant BasalCrevasseEnum 604 603 syn keyword cConstant BasalforcingsDeepwaterMeltingRateAutoregressionEnum 604 syn keyword cConstant BasalforcingsDeepwaterMeltingRateNoiseEnum 605 605 syn keyword cConstant BasalforcingsDeepwaterMeltingRateValuesAutoregressionEnum 606 606 syn keyword cConstant BasalforcingsFloatingiceMeltingRateEnum -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r26836 r26837 67 67 BasalforcingsDeepwaterElevationEnum, 68 68 BasalforcingsDeepwaterMeltingRateEnum, 69 BasalforcingsDeepwaterMeltingRateNoiseEnum,70 69 BasalforcingsDtbgEnum, 71 70 BasalforcingsEnum, … … 599 598 BasalCrevasseEnum, 600 599 BasalforcingsDeepwaterMeltingRateAutoregressionEnum, 600 BasalforcingsDeepwaterMeltingRateNoiseEnum, 601 601 BasalforcingsDeepwaterMeltingRateValuesAutoregressionEnum, 602 602 BasalforcingsFloatingiceMeltingRateEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r26836 r26837 75 75 case BasalforcingsDeepwaterElevationEnum : return "BasalforcingsDeepwaterElevation"; 76 76 case BasalforcingsDeepwaterMeltingRateEnum : return "BasalforcingsDeepwaterMeltingRate"; 77 case BasalforcingsDeepwaterMeltingRateNoiseEnum : return "BasalforcingsDeepwaterMeltingRateNoise";78 77 case BasalforcingsDtbgEnum : return "BasalforcingsDtbg"; 79 78 case BasalforcingsEnum : return "Basalforcings"; … … 605 604 case BasalCrevasseEnum : return "BasalCrevasse"; 606 605 case BasalforcingsDeepwaterMeltingRateAutoregressionEnum : return "BasalforcingsDeepwaterMeltingRateAutoregression"; 606 case BasalforcingsDeepwaterMeltingRateNoiseEnum : return "BasalforcingsDeepwaterMeltingRateNoise"; 607 607 case BasalforcingsDeepwaterMeltingRateValuesAutoregressionEnum : return "BasalforcingsDeepwaterMeltingRateValuesAutoregression"; 608 608 case BasalforcingsFloatingiceMeltingRateEnum : return "BasalforcingsFloatingiceMeltingRate"; -
issm/trunk-jpl/src/c/shared/Enum/Enumjl.vim
r26836 r26837 66 66 syn keyword juliaConstC BasalforcingsDeepwaterElevationEnum 67 67 syn keyword juliaConstC BasalforcingsDeepwaterMeltingRateEnum 68 syn keyword juliaConstC BasalforcingsDeepwaterMeltingRateNoiseEnum69 68 syn keyword juliaConstC BasalforcingsDtbgEnum 70 69 syn keyword juliaConstC BasalforcingsEnum … … 596 595 syn keyword juliaConstC BasalCrevasseEnum 597 596 syn keyword juliaConstC BasalforcingsDeepwaterMeltingRateAutoregressionEnum 597 syn keyword juliaConstC BasalforcingsDeepwaterMeltingRateNoiseEnum 598 598 syn keyword juliaConstC BasalforcingsDeepwaterMeltingRateValuesAutoregressionEnum 599 599 syn keyword juliaConstC BasalforcingsFloatingiceMeltingRateEnum -
issm/trunk-jpl/src/m/classes/stochasticforcing.m
r26825 r26837 84 84 end 85 85 end 86 if(contains(field,'BasalforcingsDeepwaterMeltingRateAutoregression')) 87 mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field)))); 88 if~(isequal(class(md.basalforcings),char(mdname))) 89 error('md.basalforcings does not agree with stochasticforcing field %s', char(field)); 90 end 91 end 86 92 if(contains(field,'WaterPressure')) 87 93 mdname = structstoch.mdnames(find(strcmp(structstoch.fields,char(field)))); … … 97 103 end 98 104 %Checking for specific dimensions 99 if ~(strcmp(field,'SMBautoregression') || strcmp(field,'FrontalForcingsRignotAutoregression') )105 if ~(strcmp(field,'SMBautoregression') || strcmp(field,'FrontalForcingsRignotAutoregression') || strcmp(field,'BasalforcingsDeepwaterMeltingRateAutoregression')) 100 106 checkdefaults = true; %field with non-specific dimensionality 101 107 end 102 108 end 103 109 104 %Retrieve sum of all the field dimensionalities 105 size_tot = self.defaultdimension*num_fields; 106 indSMBar = -1; %about to check for index of SMBautoregression 107 indTFar = -1; %about to check for index of FrontalForcingsRignotAutoregression 110 %Retrieve all the field dimensionalities 111 dimensions = self.defaultdimension*ones(1,num_fields); 112 indSMBar = -1; %about to check for index of SMBautoregression 113 indTFar = -1; %about to check for index of FrontalForcingsRignotAutoregression 114 indBDWar = -1; %about to check for index of BasalforcingsDeepwaterMeltingRateAutoregression 108 115 if any(contains(self.fields,'SMBautoregression')) 109 size_tot = size_tot-self.defaultdimension+md.smb.num_basins;110 indSMBar = find(contains(self.fields,'SMBautoregression')); %index of SMBar, now check for consistency with TFar timestep (08Nov2021)116 indSMBar = find(contains(self.fields,'SMBautoregression')); %index of SMBar, now check for consistency with other ar timesteps 117 dimensions(indSMBar) = md.smb.num_basins; 111 118 end 112 119 if any(contains(self.fields,'FrontalForcingsRignotAutoregression')) 113 size_tot = size_tot-self.defaultdimension+md.frontalforcings.num_basins; 114 indTFar = find(contains(self.fields,'FrontalForcingsRignotAutoregression')); %index of TFar, now check for consistency with SMBar timestep (08Nov2021) 115 end 120 indTFar = find(contains(self.fields,'FrontalForcingsRignotAutoregression')); %index of TFar, now check for consistency with other ar timesteps 121 dimensions(indTFar) = md.frontalforcings.num_basins; 122 end 123 if any(contains(self.fields,'BasalforcingsDeepwaterMeltingRateAutoregression')) 124 indBDWar = find(contains(self.fields,'BasalforcingsDeepwaterMeltingRateAutoregression')); %index of BDWar, now check for consistency with other ar timesteps 125 dimensions(indBDWar) = md.basalforcings.num_basins; 126 end 127 size_tot = sum(dimensions); 116 128 117 129 if(indSMBar~=-1 && indTFar~=-1) %both autoregressive models are used: check autoregressive time step consistency 118 if((md.smb.ar_timestep~=md.frontalforcings.ar_timestep) && any(self.covariance(1+sum( self.dimensions(1:indSMBar-1)):sum(self.dimensions(1:indSMBar)),1+sum(self.dimensions(1:indTFar-1)):sum(self.dimensions(1:indTFar))))~=0)130 if((md.smb.ar_timestep~=md.frontalforcings.ar_timestep) && any(self.covariance(1+sum(dimensions(1:indSMBar-1)):sum(dimensions(1:indSMBar)),1+sum(dimensions(1:indTFar-1)):sum(dimensions(1:indTFar))),'all')~=0) 119 131 error('SMBautoregression and FrontalForcingsRignotAutoregression have different ar_timestep and non-zero covariance'); 120 132 end 121 133 end 122 134 if(indSMBar~=-1 && indBDWar~=-1) %both autoregressive models are used: check autoregressive time step consistency 135 if((md.smb.ar_timestep~=md.basalforcings.ar_timestep) && any(self.covariance(1+sum(dimensions(1:indSMBar-1)):sum(dimensions(1:indSMBar)),1+sum(dimensions(1:indBDWar-1)):sum(dimensions(1:indBDWar))),'all')~=0) 136 error('SMBautoregression and BasalforcingsDeepwaterMeltingRateAutoregression have different ar_timestep and non-zero covariance'); 137 end 138 end 139 if(indTFar~=-1 && indBDWar~=-1) %both autoregressive models are used: check autoregressive time step consistency 140 if((md.frontalforcings.ar_timestep~=md.basalforcings.ar_timestep) && any(self.covariance(1+sum(dimensions(1:indTFar-1)):sum(dimensions(1:indTFar)),1+sum(dimensions(1:indBDWar-1)):sum(dimensions(1:indBDWar))),'all')~=0) 141 error('FrontalForcingsRignotAutoregression and BasalforcingsDeepwaterMeltingRateAutoregression have different ar_timestep and non-zero covariance'); 142 end 143 end 123 144 md = checkfield(md,'fieldname','stochasticforcing.isstochasticforcing','values',[0 1]); 124 145 md = checkfield(md,'fieldname','stochasticforcing.fields','numel',num_fields,'cell',1,'values',supportedstochforcings()); … … 164 185 dimensions(ind) = md.frontalforcings.num_basins; 165 186 end 187 if(strcmp(field,'BasalforcingsDeepwaterMeltingRateAutoregression')) 188 dimensions(ind) = md.basalforcings.num_basins; 189 end 166 190 ind = ind+1; 167 191 end 168 192 169 193 %Scaling covariance matrix (scale column-by-column and row-by-row) 170 scaledfields = {'Basalforcings SpatialDeepwaterMeltingRate','DefaultCalving','FloatingMeltRate','SMBautoregression','SMBforcing'}; %list of fields that need scaling *1/yts194 scaledfields = {'BasalforcingsDeepwaterMeltingRateAutoregression','BasalforcingsSpatialDeepwaterMeltingRate','DefaultCalving','FloatingMeltRate','SMBautoregression','SMBforcing'}; %list of fields that need scaling *1/yts 171 195 tempcovariance = self.covariance; %copy of covariance to avoid writing back in member variable 172 196 for i=1:num_fields … … 185 209 self.default_id = zeros(md.mesh.numberofelements,1); 186 210 end 211 187 212 WriteData(fid,prefix,'data',num_fields,'name','md.stochasticforcing.num_fields','format','Integer'); 188 213 WriteData(fid,prefix,'object',self,'fieldname','fields','format','StringArray'); … … 207 232 % supported and corresponding md names 208 233 structure.fields = {... 234 'BasalforcingsDeepwaterMeltingRateAutoregression',... 209 235 'BasalforcingsSpatialDeepwaterMeltingRate',... 210 236 'DefaultCalving',... … … 216 242 }; 217 243 structure.mdnames = {... 244 'autoregressionlinearbasalforcings',... 218 245 'spatiallinearbasalforcings',... 219 246 'calving',... -
issm/trunk-jpl/src/m/classes/stochasticforcing.py
r26825 r26837 90 90 if (type(md.basalforcings).__name__ != mdname): 91 91 raise TypeError('md.basalforcings does not agree with stochasticforcing field {}'.format(field)) 92 if 'BasalforcingsDpatialDeepwaterMeltingRate' in field: 92 if 'BasalforcingsSpatialDeepwaterMeltingRate' in field: 93 mdname = structstoch[field] 94 if (type(md.basalforcings).__name__ != mdname): 95 raise TypeError('md.basalforcings does not agree with stochasticforcing field {}'.format(field)) 96 if 'BasalforcingsDeepwaterMeltingRateAutoregression' in field: 93 97 mdname = structstoch[field] 94 98 if (type(md.basalforcings).__name__ != mdname): … … 104 108 105 109 # Checking for specific dimensions 106 if field not in['SMBautoregression', 'FrontalForcingsRignotAutoregression' ]:110 if field not in['SMBautoregression', 'FrontalForcingsRignotAutoregression','BasalforcingsDeepwaterMeltingRateAutoregression']: 107 111 checkdefaults = True # field with non-specific dimensionality 108 112 109 113 # Retrieve sum of all the field dimensionalities 110 size_tot = self.defaultdimension * num_fields 111 indSMBar = -1 # About to check for index of SMBautoregression 112 indTFar = -1 # About to check for index of FrontalForcingsRignotAutoregression 114 dimensions = self.defaultdimension*np.ones((num_fields)) 115 indSMBar = -1 # About to check for index of SMBautoregression 116 indTFar = -1 # About to check for index of FrontalForcingsRignotAutoregression 117 indBDWar = -1 # About to check for index of BasalforcingsDeepwaterMeltingRateAutoregression 113 118 if ('SMBautoregression' in self.fields): 114 size_tot = size_tot - self.defaultdimension + md.smb.num_basins115 indSMBar = self.fields.index('SMBautoregression') # Index of SMBar, now check for consistency with TFar timestep (08Nov2021)119 indSMBar = self.fields.index('SMBautoregression') # Index of SMBar, now check for consistency with other timesteps 120 dimensions[indSMBar] = md.smb.num_basins 116 121 if ('FrontalForcingsRignotAutoregression' in self.fields): 117 size_tot = size_tot - self.defaultdimension + md.frontalforcings.num_basins 118 indTFar = self.fields.index('FrontalForcingsRignotAutoregression') # Index of TFar, now check for consistency with SMBar timestep (08Nov2021) 122 indTFar = self.fields.index('FrontalForcingsRignotAutoregression') # Index of TFar, now check for consistency with other timesteps 123 dimensions[indTFar] = md.frontalforcings.num_basins 124 if ('BasalforcingsDeepwaterMeltingRateAutoregression' in self.fields): 125 indBDWar = self.fields.index('BasalforcingsDeepwaterMeltingRateAutoregression') # Index of BDWar, now check for consistency with other timesteps 126 dimensions[indTFar] = md.basalforcings.num_basins 127 size_tot = np.sum(dimensions) 128 119 129 if (indSMBar != -1 and indTFar != -1): # Both autoregressive models are used: check autoregressive time step consistency 120 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)]130 covsum = self.covariance[np.sum(dimensions[0:indSMBar]).astype(int):np.sum(dimensions[0:indSMBar + 1]).astype(int), np.sum(dimensions[0:indTFar]).astype(int):np.sum(dimensions[0:indTFar + 1]).astype(int)] 121 131 if((md.smb.ar_timestep != md.frontalforcings.ar_timestep) and np.any(covsum != 0)): 122 132 raise IOError('SMBautoregression and FrontalForcingsRignotAutoregression have different ar_timestep and non-zero covariance') 133 if (indSMBar != -1 and indBDWar != -1): # Both autoregressive models are used: check autoregressive time step consistency 134 covsum = self.covariance[np.sum(dimensions[0:indSMBar]).astype(int):np.sum(dimensions[0:indSMBar + 1]).astype(int), np.sum(dimensions[0:indBDWar]).astype(int):np.sum(dimensions[0:indBDWar + 1]).astype(int)] 135 if((md.smb.ar_timestep != md.basalforcings.ar_timestep) and np.any(covsum != 0)): 136 raise IOError('SMBautoregression and BasalforcingsDeepwaterMeltingRateAutoregression have different ar_timestep and non-zero covariance') 137 if (indTFar != -1 and indBDWar != -1): # Both autoregressive models are used: check autoregressive time step consistency 138 covsum = self.covariance[np.sum(dimensions[0:indTFar]).astype(int):np.sum(dimensions[0:indTFar + 1]).astype(int), np.sum(dimensions[0:indBDWar]).astype(int):np.sum(dimensions[0:indBDWar + 1]).astype(int)] 139 if((md.frontalforcings.ar_timestep != md.basalforcings.ar_timestep) and np.any(covsum != 0)): 140 raise IOError('FrontalForcingsRignotAutoregression and BasalforcingsDeepwaterMeltingRateAutoregression have different ar_timestep and non-zero covariance') 123 141 124 142 md = checkfield(md, 'fieldname', 'stochasticforcing.isstochasticforcing', 'values', [0, 1]) … … 153 171 if (field == 'FrontalForcingsRignotAutoregression'): 154 172 dimensions[ind] = md.frontalforcings.num_basins 173 if (field == 'BasalforcingsDeepwaterMeltingRateAutoregression'): 174 dimensions[ind] = md.basalforcings.num_basins 155 175 156 176 # Scaling covariance matrix (scale column-by-column and row-by-row) 157 scaledfields = ['Basalforcings SpatialDeepwaterMeltingRate','DefaultCalving', 'FloatingMeltRate', 'SMBautoregression', 'SMBforcing'] # list of fields that need scaling * 1/yts177 scaledfields = ['BasalforcingsDeepwaterMeltingRateAutoregression','BasalforcingsSpatialDeepwaterMeltingRate','DefaultCalving', 'FloatingMeltRate', 'SMBautoregression', 'SMBforcing'] # list of fields that need scaling * 1/yts 158 178 tempcovariance = np.copy(self.covariance) 159 179 for i in range(num_fields): … … 191 211 supported and corresponding md names 192 212 """ 193 structure = {'BasalforcingsSpatialDeepwaterMeltingRate': 'spatiallinearbasalforcings', 213 structure = {'BasalforcingsDeepwaterMeltingRateAutoregression': 'autoregressionlinearbasalforcings', 214 'BasalforcingsSpatialDeepwaterMeltingRate': 'spatiallinearbasalforcings', 194 215 'DefaultCalving': 'calving', 195 216 'FloatingMeltRate': 'basalforcings',
Note:
See TracChangeset
for help on using the changeset viewer.