Changeset 22278
- Timestamp:
- 11/28/17 09:35:48 (7 years ago)
- Location:
- issm/trunk-jpl/src/m/classes
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/hydrologydc.m
r21966 r22278 12 12 rel_tol = 0; 13 13 max_iter = 0; 14 steps_per_step = 0; 14 15 sedimentlimit_flag = 0; 15 16 sedimentlimit = 0; … … 18 19 leakage_factor = 0; 19 20 basal_moulin_input = NaN; 21 requested_outputs = {}; 20 22 21 23 spcsediment_head = NaN; … … 59 61 end 60 62 % }}} 63 function list = defaultoutputs(self,md) % {{{ 64 list = {'SedimentHead','SedimentHeadResidual','EffectivePressure'}; 65 if self.isefficientlayer, 66 list=[list,{'EplHead','HydrologydcMaskEplactiveNode', ... 67 'HydrologydcMaskEplactiveElt','EplHeadSlopeX','EplHeadSlopeY','HydrologydcEplThickness'}]; 68 end 69 if self.steps_per_step>1, 70 list = [list,'TimeAverageEffectivePressure']; 71 end 72 end % }}} 73 61 74 function self = initialize(self,md) % {{{ 62 75 if isnan(self.basal_moulin_input), … … 77 90 self.rel_tol = 1.0e-06; 78 91 self.max_iter = 100; 92 self.steps_per_step = 1; 79 93 self.sedimentlimit_flag = 0; 80 94 self.sedimentlimit = 0; … … 82 96 self.unconfined_flag = 0; 83 97 self.leakage_factor = 10.0; 98 self.requested_outputs = {'default'}; 99 84 100 85 101 self.sediment_compressibility = 1.0e-08; … … 113 129 md = checkfield(md,'fieldname','hydrology.rel_tol','>',0,'numel',1); 114 130 md = checkfield(md,'fieldname','hydrology.max_iter','>',0,'numel',1); 131 md = checkfield(md,'fieldname','hydrology.steps_per_step','>',0,'numel',1); 115 132 md = checkfield(md,'fieldname','hydrology.sedimentlimit_flag','numel',[1],'values',[0 1 2 3]); 116 133 md = checkfield(md,'fieldname','hydrology.transfer_flag','numel',[1],'values',[0 1]); 117 134 md = checkfield(md,'fieldname','hydrology.unconfined_flag','numel',[1],'values',[0 1]); 135 md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1); 118 136 if self.sedimentlimit_flag==1, 119 137 md = checkfield(md,'fieldname','hydrology.sedimentlimit','>',0,'numel',1); … … 159 177 fielddisplay(self,'rel_tol','tolerance of the nonlinear iteration for the transfer between layers [dimensionless]'); 160 178 fielddisplay(self,'max_iter','maximum number of nonlinear iteration'); 179 fielddisplay(self,'steps_per_step','number of hydrology steps per timestep'); 161 180 fielddisplay(self,'sedimentlimit_flag','what kind of upper limit is applied for the inefficient layer'); 162 181 disp(sprintf('%55s 0: no limit',' ')); … … 176 195 disp(sprintf('%55s 0: confined only',' ')); 177 196 disp(sprintf('%55s 1: confined unconfined')); 197 fielddisplay(self,'requested_outputs','additional outputs requested'); 178 198 fielddisplay(self,'basal_moulin_input','water flux at a given point [m3 s-1]'); 179 199 disp(sprintf(' - for the sediment layer')); … … 211 231 WriteData(fid,prefix,'object',self,'fieldname','rel_tol','format','Double'); 212 232 WriteData(fid,prefix,'object',self,'fieldname','max_iter','format','Integer'); 233 WriteData(fid,prefix,'object',self,'fieldname','steps_per_step','format','Integer'); 213 234 WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit_flag','format','Integer'); 214 235 WriteData(fid,prefix,'object',self,'fieldname','transfer_flag','format','Integer'); … … 240 261 WriteData(fid,prefix,'object',self,'fieldname','eplflip_lock','format','Integer'); 241 262 end 263 outputs = self.requested_outputs; 264 pos = find(ismember(outputs,'default')); 265 if ~isempty(pos), 266 outputs(pos) = []; %remove 'default' from outputs 267 outputs = [outputs defaultoutputs(self,md)]; %add defaults 268 end 269 WriteData(fid,prefix,'data',outputs,'name','md.hydrology.requested_outputs','format','StringArray'); 242 270 end 243 271 -
issm/trunk-jpl/src/m/classes/hydrologydc.py
r22270 r22278 20 20 self.rel_tol = 0 21 21 self.max_iter = 0 22 self.steps_per_step = 0 22 23 self.sedimentlimit_flag = 0 23 24 self.sedimentlimit = 0 … … 26 27 self.leakage_factor = 0 27 28 self.basal_moulin_input = float('NaN') 29 self.requested_outputs = [] 28 30 29 31 self.spcsediment_head = float('NaN') … … 32 34 self.sediment_porosity = 0 33 35 self.sediment_thickness = 0 34 35 36 36 37 self.spcepl_head = float('NaN') … … 57 58 string="%s\n%s"%(string,fielddisplay(self,'rel_tol','tolerance of the nonlinear iteration for the transfer between layers [dimensionless]')) 58 59 string="%s\n%s"%(string,fielddisplay(self,'max_iter','maximum number of nonlinear iteration')) 60 string="%s\n%s"%(string,fielddisplay(self,'steps_per_step','number of hydrology steps per time step')) 59 61 string="%s\n%s"%(string,fielddisplay(self,'basal_moulin_input','water flux at a given point [m3 s-1]')) 62 string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested')) 60 63 string="%s\n%s"%(string,fielddisplay(self,'sedimentlimit_flag','what kind of upper limit is applied for the inefficient layer')) 61 64 string="%s\n\t\t%s"%(string,'0: no limit') … … 109 112 #}}} 110 113 def setdefaultparameters(self): #{{{ 111 112 114 #Parameters from de Fleurian 2014 113 115 self.water_compressibility = 5.04e-10 … … 117 119 self.rel_tol = 1.0e-06 118 120 self.max_iter = 100 121 self.steps_per_step = 1 119 122 self.sedimentlimit_flag = 0 120 123 self.sedimentlimit = 0 … … 122 125 self.unconfined_flag = 0 123 126 self.leakage_factor = 10.0 127 self.requested_outputs = ['default'] 124 128 125 129 self.sediment_compressibility = 1.0e-08 … … 139 143 return self 140 144 # }}} 145 146 def defaultoutputs(self,md): # {{{ 147 list = ['SedimentHead','SedimentHeadResidual','EffectivePressure'] 148 if self.isefficientlayer==1: 149 list.extend(['EplHead','HydrologydcMaskEplactiveNode','HydrologydcMaskEplactiveElt','EplHeadSlopeX','EplHeadSlopeY','HydrologydcEplThickness']) 150 if self.steps_per_step>1: 151 list.extend(['TimeAverageEffectivePressure']) 152 153 return list 154 155 #}}} 156 141 157 def initialize(self,md): # {{{ 142 158 if np.all(np.isnan(self.basal_moulin_input)): … … 158 174 md = checkfield(md,'fieldname','hydrology.rel_tol','>',0.,'numel',[1]) 159 175 md = checkfield(md,'fieldname','hydrology.max_iter','>',0.,'numel',[1]) 176 md = checkfield(md,'fieldname','hydrology.steps_per_step','>',0.,'numel',[1]) 160 177 md = checkfield(md,'fieldname','hydrology.sedimentlimit_flag','numel',[1],'values',[0,1,2,3]) 161 178 md = checkfield(md,'fieldname','hydrology.transfer_flag','numel',[1],'values',[0,1]) 162 179 md = checkfield(md,'fieldname','hydrology.unconfined_flag','numel',[1],'values',[0,1]) 180 md = checkfield(md,'fieldname','hydrology.requested_outputs','stringrow',1); 163 181 164 182 if self.sedimentlimit_flag==1: … … 196 214 WriteData(fid,prefix,'object',self,'fieldname','rel_tol','format','Double') 197 215 WriteData(fid,prefix,'object',self,'fieldname','max_iter','format','Integer') 216 WriteData(fid,prefix,'object',self,'fieldname','steps_per_step','format','Integer') 198 217 WriteData(fid,prefix,'object',self,'fieldname','sedimentlimit_flag','format','Integer') 199 218 WriteData(fid,prefix,'object',self,'fieldname','transfer_flag','format','Integer') … … 223 242 WriteData(fid,prefix,'object',self,'fieldname','epl_conductivity','format','Double') 224 243 WriteData(fid,prefix,'object',self,'fieldname','eplflip_lock','format','Integer') 225 # }}} 244 245 #process requested outputs 246 outputs = self.requested_outputs 247 indices = [i for i, x in enumerate(outputs) if x == 'default'] 248 if len(indices) > 0: 249 outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:] 250 outputs =outputscopy 251 WriteData(fid,prefix,'data',outputs,'name','md.hydrology.requested_outputs','format','StringArray') 252 # }}}
Note:
See TracChangeset
for help on using the changeset viewer.