Changeset 26553
- Timestamp:
- 11/08/21 11:59:05 (3 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 4 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/SMBautoregression.py
r26486 r26553 7 7 8 8 9 class SMB components(object):9 class SMBautoregression(object): 10 10 """SMBAUTOREGRESSION class definition 11 11 … … 22 22 self.ar_timestep = 0 23 23 self.phi = np.nan 24 self.covmat = np.nan25 24 self.basin_id = np.nan 26 self.randomflag = 127 25 self.steps_per_step = 1 28 26 self.averaging = 0 … … 59 57 def setdefaultparameters(self): #{{{ 60 58 self.ar_order = 0.0 # Autoregression model of order 0 61 self.randomflag = 162 59 # }}} 63 60 … … 87 84 self.phi = np.zeros((self.num_basins, self.ar_order)) # Autoregression model of order 0 88 85 print(' smb.phi (lag coefficients) not specified: order of autoregressive model set to 0') 89 if np.all(np.isnan(self.covmat)):90 self.covmat = 1e-21 * np.eye(self.num_basins) # No stochasticity and no covariance91 print(' smb.covmat not specified: stochasticity set to 0')92 86 return self 93 87 # }}} … … 98 92 md = checkfield(md, 'fieldname', 'smb.basin_id', 'Inf', 1, '>=', 0, '<=', md.smb.num_basins, 'size', [md.mesh.numberofelements]) 99 93 md = checkfield(md, 'fieldname', 'smb.beta0', 'NaN', 1, 'Inf', 1, 'size', [1, md.smb.num_basins], 'numel', md.smb.num_basins) # Scheme fails if passed as column vector 100 md = checkfield(md, 'fieldname', 'smb.beta1', 'NaN', 1, 'Inf', 1, 'size', [1, md.smb.num_basins], 'numel', md.smb.num_basins) # Scheme fails if passed as column vector 94 md = checkfield(md, 'fieldname', 'smb.beta1', 'NaN', 1, 'Inf', 1, 'size', [1, md.smb.num_basins], 'numel', md.smb.num_basins) # Scheme fails if passed as column vector; NOTE: As opposed to MATLAB implementation, pass list 101 95 md = checkfield(md, 'fieldname', 'smb.ar_order', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', 0) 102 96 md = checkfield(md, 'fieldname', 'smb.ar_initialtime', 'numel', 1, 'NaN', 1, 'Inf', 1) 103 97 md = checkfield(md, 'fieldname', 'smb.ar_timestep', 'numel', 1, 'NaN', 1, 'Inf', 1, '>=', md.timestepping.time_step) # Autoregression time step cannot be finer than ISSM timestep 104 98 md = checkfield(md, 'fieldname', 'smb.phi', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, md.smb.ar_order]) 105 md = checkfield(md, 'fieldname', 'smb.covmat', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, md.smb.num_basins])106 md = checkfield(md, 'fieldname', 'smb.randomflag', 'numel', [1], 'values', [0, 1])107 99 md = checkfield(md, 'fieldname', 'smb.steps_per_step', '>=', 1, 'numel', [1]) 108 100 md = checkfield(md, 'fieldname', 'smb.averaging', 'numel', [1], 'values', [0, 1, 2]) … … 123 115 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'beta1', 'format', 'DoubleMat', 'name', 'md.smb.beta1', 'scale', 1 / (yts ** 2), 'yts', yts) 124 116 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'phi', 'format', 'DoubleMat', 'name', 'md.smb.phi', 'yts', yts) 125 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'covmat', 'format', 'DoubleMat', 'name', 'md.smb.covmat', 'scale', 1 / (yts ** 2), 'yts', yts)126 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'randomflag', 'format', 'Boolean')127 117 WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer') 128 118 WriteData(fid, prefix, 'object', self, 'fieldname', 'averaging', 'format', 'Integer') -
issm/trunk-jpl/src/m/classes/calvingvonmises.py
r24305 r26553 1 from checkfield import checkfield 1 2 from fielddisplay import fielddisplay 2 from checkfield import checkfield3 3 from WriteData import WriteData 4 4 5 5 6 6 class calvingvonmises(object): 7 """ 8 CALVINGVONMISES class definition 7 """CALVINGVONMISES class definition 9 8 10 11 9 Usage: 10 calvingvonmises = calvingvonmises() 12 11 """ 13 12 14 13 def __init__(self): # {{{ 15 16 self.stress_threshold_groundedice = 0. 17 self.stress_threshold_floatingice = 0. 18 self.min_thickness = 0. 14 self.stress_threshold_groundedice = 0 15 self.stress_threshold_floatingice = 0 16 self.min_thickness = 0 19 17 20 18 #set defaults … … 24 22 25 23 def __repr__(self): # {{{ 26 string = ' Calving VonMises parameters:' 27 string = "%s\n%s" % (string, fielddisplay(self, 'stress_threshold_groundedice', 'sigma_max applied to grounded ice only [Pa]')) 28 string = "%s\n%s" % (string, fielddisplay(self, 'stress_threshold_floatingice', 'sigma_max applied to floating ice only [Pa]')) 29 string = "%s\n%s" % (string, fielddisplay(self, 'min_thickness', 'minimum thickness below which no ice is allowed [m]')) 30 31 return string 24 s = ' Calving VonMises parameters:\n' 25 s += '{}\n'.format(fielddisplay(self, 'stress_threshold_groundedice', 'sigma_max applied to grounded ice only [Pa]')) 26 s += '{}\n'.format(fielddisplay(self, 'stress_threshold_floatingice', 'sigma_max applied to floating ice only [Pa]')) 27 s += '{}\n'.format(fielddisplay(self, 'min_thickness', 'minimum thickness below which no ice is allowed [m]')) 28 return s 32 29 #}}} 33 30 … … 37 34 38 35 def setdefaultparameters(self): # {{{ 39 # Default sigma max36 # Default sigma max 40 37 self.stress_threshold_groundedice = 1e6 41 38 self.stress_threshold_floatingice = 150e3 42 39 43 # turn off min_thickness by default.40 # Turn off min_thickness by default 44 41 self.min_thickness = 0. 45 42 return self … … 47 44 48 45 def checkconsistency(self, md, solution, analyses): # {{{ 49 # Early return50 if solution == 'TransientSolution' or md.transient.ismovingfront == 0:46 # Early return 47 if solution == 'TransientSolution' or not md.transient.ismovingfront: 51 48 return 52 49 -
issm/trunk-jpl/src/m/classes/frontalforcingsrignot.py
r26493 r26553 1 # -*- coding: utf-8 -*- 2 1 3 import numpy as np 2 4 … … 7 9 8 10 class frontalforcingsrignot(object): 9 """FRONTAL FORCINGS Rignotclass definition11 """FRONTALFORCINGSRIGNOT class definition 10 12 11 13 Usage: -
issm/trunk-jpl/src/m/classes/frontalforcingsrignotautoregression.m
r26526 r26553 7 7 properties (SetAccess=public) 8 8 num_basins = 0; 9 10 11 12 13 14 15 9 beta0 = NaN; 10 beta1 = NaN; 11 ar_order = 0; 12 ar_initialtime = 0; 13 ar_timestep = 0; 14 phi = NaN; 15 basin_id = NaN; 16 16 subglacial_discharge = NaN; 17 17 end … … 40 40 function self = setdefaultparameters(self) % {{{ 41 41 42 basin_id = NaN;43 num_basins = 0;44 s ubglacial_discharge = NaN;45 self.ar_order = 0.0; %autoregression model of order 042 self.basin_id = NaN; 43 self.num_basins = 0; 44 self.subglacial_discharge = NaN; 45 self.ar_order = 0.0; %autoregression model of order 0 46 46 47 47 end % }}} … … 52 52 md = checkfield(md,'fieldname','frontalforcings.num_basins','numel',1,'NaN',1,'Inf',1,'>',0); 53 53 md = checkfield(md,'fieldname','frontalforcings.basin_id','Inf',1,'>=',0,'<=',md.frontalforcings.num_basins,'size',[md.mesh.numberofelements 1]); 54 md = checkfield(md,'fieldname','frontalforcings.subglacial_discharge','>=',0,' nan',1,'Inf',1,'timeseries',1);54 md = checkfield(md,'fieldname','frontalforcings.subglacial_discharge','>=',0,'NaN',1,'Inf',1,'timeseries',1); 55 55 md = checkfield(md,'fieldname','frontalforcings.beta0','NaN',1,'Inf',1,'size',[1,md.frontalforcings.num_basins],'numel',md.frontalforcings.num_basins); 56 56 md = checkfield(md,'fieldname','frontalforcings.beta1','NaN',1,'Inf',1,'size',[1,md.frontalforcings.num_basins],'numel',md.frontalforcings.num_basins); … … 77 77 WriteData(fid,prefix,'name','md.frontalforcings.parameterization','data',55,'format','Integer'); 78 78 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','num_basins','format','Integer'); 79 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','subglacial_discharge','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts', md.constants.yts);79 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','subglacial_discharge','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',yts); 80 80 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','ar_order','format','Integer'); 81 81 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','ar_initialtime','format','Double','scale',yts); … … 83 83 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','basin_id','data',self.basin_id-1,'name','md.frontalforcings.basin_id','format','IntMat','mattype',2); %0-indexed 84 84 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','beta0','format','DoubleMat','name','md.frontalforcings.beta0'); 85 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','beta1','format','DoubleMat','name','md.frontalforcings.beta1','scale',1./yts,'yts', md.constants.yts);86 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','phi','format','DoubleMat','name','md.frontalforcings.phi','yts', md.constants.yts);85 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','beta1','format','DoubleMat','name','md.frontalforcings.beta1','scale',1./yts,'yts',yts); 86 WriteData(fid,prefix,'object',self,'class','frontalforcings','fieldname','phi','format','DoubleMat','name','md.frontalforcings.phi','yts',yts); 87 87 end % }}} 88 88 end -
issm/trunk-jpl/src/m/classes/stochasticforcing.m
r26549 r26553 42 42 md = checkfield(md,'fieldname','stochasticforcing.randomflag','numel',[1],'values',[0 1]); 43 43 44 %Check that all fields agree with the corresponding md class 44 %Check that all fields agree with the corresponding md class 45 45 for field=self.fields 46 46 if(contains(field,'SMB')) -
issm/trunk-jpl/src/m/classes/stochasticforcing.py
r26539 r26553 40 40 # Type of stabilization used 41 41 self.isstochasticforcing = 0 # stochasticforcing is turned off by default 42 self.fields = [] # Need to initialize to list to avoid "RuntimeError: object of type 'float' has no len()" on import of class 42 43 self.randomflag = 1 # true randomness is implemented by default 43 44 return self … … 76 77 def marshall(self, prefix, md, fid): # {{{ 77 78 yts = md.constants.yts 78 if (type(self.fields) is list): 79 num_fields = len(self.fields) 80 # Scaling covariance matrix (scale column-by-column and row-by-row) 81 scaledfields = ['SMBautoregression'] # list of fields that need scaling * 1/yts 82 for i in range(num_fields): 83 if self.fields[i] in scaledfields: 84 inds = range(1 + np.sum(self.dimensions[0:i]), np.sum(self.dimensions[0:i])) 85 for row in inds: # scale rows corresponding to scaled field 86 self.covariance[row, :] = 1 / yts * self.covariance[row, :] 87 for col in inds: # scale columns corresponding to scaled field 88 self.covariance[:, col] = 1 / yts * self.covariance[:, col] 79 num_fields = len(self.fields) 89 80 90 81 WriteData(fid, prefix, 'object', self, 'fieldname', 'isstochasticforcing', 'format', 'Boolean') … … 92 83 return md 93 84 else: 85 # Scaling covariance matrix (scale column-by-column and row-by-row) 86 scaledfields = ['SMBautoregression'] # list of fields that need scaling * 1/yts 87 tempcovariance = self.covariance 88 for i in range(num_fields): 89 if self.fields[i] in scaledfields: 90 inds = range(int(np.sum(self.dimensions[0:i])), int(np.sum(self.dimensions[0:i + 1]))) 91 for row in inds: # scale rows corresponding to scaled field 92 tempcovariance[row, :] = 1 / yts * self.covariance[row, :] 93 for col in inds: # scale columns corresponding to scaled field 94 tempcovariance[:, col] = 1 / yts * self.covariance[:, col] 94 95 WriteData(fid, prefix, 'data', num_fields, 'name', 'md.stochasticforcing.num_fields', 'format', 'Integer') 95 96 WriteData(fid, prefix, 'object', self, 'fieldname', 'fields', 'format', 'StringArray') 96 97 WriteData(fid, prefix, 'object', self, 'fieldname','dimensions', 'format', 'IntMat') 97 WriteData(fid, prefix, ' object', self, 'fieldname', 'covariance', 'format', 'DoubleMat')98 WriteData(fid, prefix, 'data', tempcovariance, 'name', 'md.stochasticforcing.covariance', 'format', 'DoubleMat') 98 99 WriteData(fid, prefix, 'object', self, 'fieldname', 'randomflag', 'format', 'Boolean') 99 100 # }}} -
issm/trunk-jpl/src/m/miscellaneous/MatlabFuncs.py
r26358 r26553 50 50 51 51 return np.degrees(np.arctan2(Y, X)) 52 # }}} 53 54 def contains(str, pat): #{{{ 55 """function contains - Determine if pattern is in strings 56 57 Usage: 58 TF = contains(str, pat) 59 60 TODO: 61 - Implement 'IgnoreCase' option 62 """ 63 52 64 # }}} 53 65 … … 142 154 # }}} 143 155 156 def intersect(A, B): # {{{ 157 """function intersect - Set intersection of two arrays 158 159 Usage: 160 C = intersect(A, B) 161 162 NOTE: 163 - Only the following functionality is currently implemented: 164 - C = intersect(A,B) returns the data common to both A and B, with no 165 repetitions. C is in sorted order. 166 167 """ 168 import numpy as np 169 170 return np.intersect1d(A, B) 171 #}}} 172 144 173 def isa(A, dataType): # {{{ 145 """ FUNCTION ISA174 """function isa 146 175 147 176 NOTE: … … 216 245 def mod(a, m): # {{{ 217 246 return a % m 247 # }}} 248 249 def numel(A): # {{{ 250 """function numel - Number of array elements 251 252 Usage: 253 n = numel(A)) 254 """ 255 import numpy as np 256 257 return np.size(A) 218 258 # }}} 219 259 -
issm/trunk-jpl/src/m/solve/WriteData.py
r25688 r26553 67 67 #We scale everything but the last line that holds time 68 68 data[:-1, :] = scale * data[:-1, :] 69 else: 69 elif type(data) is list: # Deal with "TypeError: can't multiply sequence by non-int of type 'float'" for type list 70 scaleddata = [] 71 for i in range(len(data)): 72 scaleddata.append(scale * data[i]) 73 data = scaleddata 74 else: # 70 75 data = scale * data 71 76 if np.ndim(data) > 1 and data.shape[0] == timeserieslength: -
issm/trunk-jpl/test/NightlyRun/runme.py
r26353 r26553 1 1 #!/usr/bin/env python 2 # 3 # NOTE: Switch to, 4 # 5 # #!/usr/bin/python3 6 # 7 # when making Python 3 default 8 # 2 9 import argparse 3 10 from glob import glob -
issm/trunk-jpl/test/NightlyRun/test257.m
r26532 r26553 5 5 md=setflowequation(md,'SSA','all'); 6 6 md.cluster=generic('name',oshostname(),'np',3); 7 md.transient.requested_outputs={'default','IceVolume','SmbMassBalance' ,};7 md.transient.requested_outputs={'default','IceVolume','SmbMassBalance'}; 8 8 9 9 ymax = max(md.mesh.y); … … 66 66 (md.results.TransientSolution(1).Thickness),... 67 67 (md.results.TransientSolution(1).IceVolume),... 68 68 (md.results.TransientSolution(1).SmbMassBalance),... 69 69 (md.results.TransientSolution(2).Vx),... 70 70 (md.results.TransientSolution(2).Vy),... … … 72 72 (md.results.TransientSolution(2).Thickness),... 73 73 (md.results.TransientSolution(2).IceVolume),... 74 74 (md.results.TransientSolution(2).SmbMassBalance),... 75 75 (md.results.TransientSolution(3).Vx),... 76 76 (md.results.TransientSolution(3).Vy),... … … 78 78 (md.results.TransientSolution(3).Thickness),... 79 79 (md.results.TransientSolution(3).IceVolume),... 80 80 (md.results.TransientSolution(3).SmbMassBalance),... 81 81 }; -
issm/trunk-jpl/test/NightlyRun/test542.m
r26532 r26553 34 34 end 35 35 end 36 36 37 md.transient.ismovingfront = 1; 37 38 md.levelset.spclevelset = NaN(md.mesh.numberofvertices,1); -
issm/trunk-jpl/test/NightlyRun/test543.m
r26532 r26553 40 40 md.stochasticforcing.fields = [{'FrontalForcingsRignotAutoregression'}]; 41 41 md.stochasticforcing.dimensions = [md.frontalforcings.num_basins]; %dimension of each field 42 md.stochasticforcing.covariance = 1e-4*[[1.5,0.5];[0.5,0.4]]; ;%global covariance among- and between-fields42 md.stochasticforcing.covariance = 1e-4*[[1.5,0.5];[0.5,0.4]]; %global covariance among- and between-fields 43 43 md.stochasticforcing.randomflag = 0; %determines true/false randomness 44 44
Note:
See TracChangeset
for help on using the changeset viewer.