Changeset 26905
- Timestamp:
- 02/25/22 00:19:38 (3 years ago)
- Location:
- issm/trunk-jpl/src/m/classes
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/SMBautoregression.py
r26832 r26905 95 95 md = checkfield(md, 'fieldname', 'smb.num_basins', 'numel', 1, 'NaN', 1, 'Inf', 1, '>', 0) 96 96 md = checkfield(md, 'fieldname', 'smb.basin_id', 'Inf', 1, '>=', 0, '<=', md.smb.num_basins, 'size', [md.mesh.numberofelements]) 97 if len(np.shape(self.beta0)) == 1: 98 self.beta0 = np.array([self.beta0]) 99 self.beta1 = np.array([self.beta1]) 97 100 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 98 101 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 104 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 102 105 md = checkfield(md, 'fieldname', 'smb.phi', 'NaN', 1, 'Inf', 1, 'size', [md.smb.num_basins, md.smb.ar_order]) 103 if(np.any(np.isnan(md.smb.lapserate_pos)==False) or np.size(md.smb.lapserate_pos)>1): 106 107 if(np.any(np.isnan(self.lapserate_pos) is False) or np.size(self.lapserate_pos) > 1): 108 if len(np.shape(self.lapserate_pos)) == 1: 109 self.lapserate_pos = np.array([self.lapserate_pos]) 104 110 md = checkfield(md, 'fieldname', 'smb.lapserate_pos', 'NaN', 1, 'Inf', 1, 'size', [1, md.smb.num_basins], 'numel', md.smb.num_basins) 105 if(np.any(np.isnan(md.smb.lapserate_neg)==False) or np.size(md.smb.lapserate_neg)>1): 111 112 if(np.any(np.isnan(self.lapserate_neg) is False) or np.size(self.lapserate_neg) > 1): 113 if len(np.shape(self.lapserate_neg)) == 1: 114 self.lapserate_neg = np.array([self.lapserate_neg]) 106 115 md = checkfield(md, 'fieldname', 'smb.lapserate_neg', 'NaN', 1, 'Inf', 1, 'size', [1, md.smb.num_basins], 'numel', md.smb.num_basins) 107 if(np.any(np.isnan(md.smb.refelevation)==False) or np.size(md.smb.refelevation)>1): 116 117 if(np.any(np.isnan(self.refelevation) is False) or np.size(self.refelevation) > 1): 118 if len(np.shape(self.refelevation)) == 1: 119 self.refelevation = np.array([self.refelevation]) 108 120 md = checkfield(md, 'fieldname', 'smb.refelevation', 'NaN', 1, 'Inf', 1, '>=', 0, 'size', [1, md.smb.num_basins], 'numel', md.smb.num_basins) 109 121 … … 129 141 temprefelevation = np.zeros((md.smb.num_basins)).reshape(1,md.smb.num_basins) 130 142 areas = GetAreas(md.mesh.elements, md.mesh.x, md.mesh.y) 131 for ii, bid in enumerate(np.unique(md.smb.basin_id)):132 indices = np.where(md.smb.basin_id ==bid)[0]133 elemsh 143 for ii, bid in enumerate(np.unique(md.smb.basin_id)): 144 indices = np.where(md.smb.basin_id == bid)[0] 145 elemsh = np.zeros((len(indices))) 134 146 for jj in range(len(indices)): 135 elemsh[jj] = np.mean(md.geometry.surface[md.mesh.elements[indices[jj], :]-1])136 temprefelevation[0, ii] = np.sum(areas[indices]*elemsh)/np.sum(areas[indices])137 if(np.any(templapserate_pos !=0) or np.any(templapserate_neg!=0)):147 elemsh[jj] = np.mean(md.geometry.surface[md.mesh.elements[indices[jj], :] - 1]) 148 temprefelevation[0, ii] = np.sum(areas[indices] * elemsh) / np.sum(areas[indices]) 149 if(np.any(templapserate_pos != 0) or np.any(templapserate_neg != 0)): 138 150 print(' smb.refelevation not specified: Reference elevations set to mean surface elevation of basins') 139 151 … … 143 155 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'ar_initialtime', 'format', 'Double', 'scale', yts) 144 156 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'ar_timestep', 'format', 'Double', 'scale', yts) 145 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'basin_id', 'data', self.basin_id , 'name', 'md.smb.basin_id', 'format', 'IntMat', 'mattype', 2)# 0-indexed157 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'basin_id', 'data', self.basin_id - 1, 'name', 'md.smb.basin_id', 'format', 'IntMat', 'mattype', 2) # 0-indexed 146 158 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'beta0', 'format', 'DoubleMat', 'name', 'md.smb.beta0', 'scale', 1 / yts, 'yts', yts) 147 159 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'beta1', 'format', 'DoubleMat', 'name', 'md.smb.beta1', 'scale', 1 / (yts ** 2), 'yts', yts) 148 160 WriteData(fid, prefix, 'object', self, 'class', 'smb', 'fieldname', 'phi', 'format', 'DoubleMat', 'name', 'md.smb.phi', 'yts', yts) 149 WriteData(fid, prefix, 'data', templapserate_pos, 'name', 'md.smb.lapserate_pos', 'format', 'DoubleMat', 'scale',1/yts,'yts',yts)150 WriteData(fid, prefix, 'data', templapserate_neg, 'name', 'md.smb.lapserate_neg', 'format', 'DoubleMat', 'scale',1/yts,'yts',yts)161 WriteData(fid, prefix, 'data', templapserate_pos, 'name', 'md.smb.lapserate_pos', 'format', 'DoubleMat', 'scale', 1 / yts, 'yts', yts) 162 WriteData(fid, prefix, 'data', templapserate_neg, 'name', 'md.smb.lapserate_neg', 'format', 'DoubleMat', 'scale', 1 / yts, 'yts', yts) 151 163 WriteData(fid, prefix, 'data', temprefelevation, 'name', 'md.smb.refelevation', 'format', 'DoubleMat') 152 164 WriteData(fid, prefix, 'object', self, 'fieldname', 'steps_per_step', 'format', 'Integer') -
issm/trunk-jpl/src/m/classes/autoregressionlinearbasalforcings.py
r26836 r26905 73 73 if 'MasstransportAnalysis' in analyses: 74 74 md = checkfield(md, 'fieldname', 'basalforcings.num_basins', 'numel', 1, 'NaN', 1, 'Inf', 1, '>', 0) 75 md = checkfield(md,'fieldname','basalforcings.groundedice_melting_rate','NaN',1,'Inf',1,'timeseries',1) 76 md = checkfield(md, 'fieldname', 'basalforcings.deepwater_elevation', 'NaN', 1, 'Inf', 1, 'size', [1, md.basalforcings.num_basins], 'numel', md.basalforcings.num_basins) 77 md = checkfield(md, 'fieldname', 'basalforcings.upperwater_elevation', 'NaN', 1, 'Inf', 1,'<=',0, 'size', [1, md.basalforcings.num_basins], 'numel', md.basalforcings.num_basins) 78 md = checkfield(md, 'fieldname', 'basalforcings.upperwater_melting_rate', 'NaN', 1, 'Inf', 1,'>=',0, 'size', [1, md.basalforcings.num_basins], 'numel', md.basalforcings.num_basins) 75 md = checkfield(md, 'fieldname', 'basalforcings.groundedice_melting_rate', 'NaN', 1, 'Inf', 1, 'timeseries', 1) 76 77 if len(np.shape(self.deepwater_elevation)) == 1: 78 self.deepwater_elevation = np.array([self.deepwater_elevation]) 79 self.upperwater_elevation = np.array([self.upperwater_elevation]) 80 self.upperwater_melting_rate = np.array([self.upperwater_melting_rate]) 81 md = checkfield(md, 'fieldname', 'basalforcings.deepwater_elevation', 'NaN', 1, 'Inf', 1, 'size', [1, md.basalforcings.num_basins], 'numel', md.basalforcings.num_basins) 82 md = checkfield(md, 'fieldname', 'basalforcings.upperwater_elevation', 'NaN', 1, 'Inf', 1, '<=', 0, 'size', [1, md.basalforcings.num_basins], 'numel', md.basalforcings.num_basins) 83 md = checkfield(md, 'fieldname', 'basalforcings.upperwater_melting_rate', 'NaN', 1, 'Inf', 1,'>=', 0, 'size', [1, md.basalforcings.num_basins], 'numel', md.basalforcings.num_basins) 79 84 md = checkfield(md, 'fieldname', 'basalforcings.basin_id', 'Inf', 1, '>=', 0, '<=', md.basalforcings.num_basins, 'size', [md.mesh.numberofelements]) 85 86 if len(np.shape(self.beta0)) == 1: 87 self.beta0 = np.array([self.beta0]) 88 self.beta1 = np.array([self.beta1]) 89 80 90 md = checkfield(md, 'fieldname', 'basalforcings.beta0', 'NaN', 1, 'Inf', 1, 'size', [1, md.basalforcings.num_basins], 'numel', md.basalforcings.num_basins) # Scheme fails if passed as column vector 81 91 md = checkfield(md, 'fieldname', 'basalforcings.beta1', 'NaN', 1, 'Inf', 1, 'size', [1, md.basalforcings.num_basins], 'numel', md.basalforcings.num_basins) # Scheme fails if passed as column vector; NOTE: As opposed to MATLAB implementation, pass list … … 102 112 WriteData(fid, prefix, 'object', self, 'fieldname', 'ar_initialtime', 'format', 'Double', 'scale', yts) 103 113 WriteData(fid, prefix, 'object', self, 'fieldname', 'ar_timestep', 'format', 'Double', 'scale', yts) 104 WriteData(fid, prefix, 'object', self, 'fieldname', 'basin_id', 'data', self.basin_id , 'name', 'md.basalforcings.basin_id', 'format', 'IntMat', 'mattype', 2)# 0-indexed114 WriteData(fid, prefix, 'object', self, 'fieldname', 'basin_id', 'data', self.basin_id - 1, 'name', 'md.basalforcings.basin_id', 'format', 'IntMat', 'mattype', 2) # 0-indexed 105 115 WriteData(fid, prefix, 'object', self, 'fieldname', 'beta0', 'format', 'DoubleMat', 'name', 'md.basalforcings.beta0', 'scale', 1 / yts, 'yts', yts) 106 116 WriteData(fid, prefix, 'object', self, 'fieldname', 'beta1', 'format', 'DoubleMat', 'name', 'md.basalforcings.beta1', 'scale', 1 / (yts ** 2), 'yts', yts) -
issm/trunk-jpl/src/m/classes/frontalforcingsrignot.py
r26553 r26905 64 64 def marshall(self, prefix, md, fid): # {{{ 65 65 WriteData(fid, prefix, 'name', 'md.frontalforcings.parameterization', 'data', 2, 'format', 'Integer') 66 WriteData(fid, prefix, 'object', self, 'fieldname', 'basin_id', 'data', self.basin_id , 'name', 'md.frontalforcings.basin_id', 'format', 'IntMat', 'mattype', 2)# 0-indexed66 WriteData(fid, prefix, 'object', self, 'fieldname', 'basin_id', 'data', self.basin_id - 1, 'name', 'md.frontalforcings.basin_id', 'format', 'IntMat', 'mattype', 2) # 0-indexed 67 67 WriteData(fid, prefix, 'object', self, 'fieldname', 'num_basins', 'format', 'Integer') 68 68 WriteData(fid, prefix, 'object', self, 'fieldname', 'subglacial_discharge', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', md.constants.yts) -
issm/trunk-jpl/src/m/classes/frontalforcingsrignotautoregression.py
r26832 r26905 1 1 # -*- coding: utf-8 -*- 2 3 2 import numpy as np 4 5 3 from checkfield import checkfield 6 4 from fielddisplay import fielddisplay 7 5 from MatlabFuncs import * 8 6 from WriteData import WriteData 7 9 8 10 9 class frontalforcingsrignotautoregression(object): … … 49 48 self.num_basins = 0 50 49 self.subglacial_discharge = np.nan 51 self.ar_order = 0.0 # Autoregression model of order 050 self.ar_order = 0.0 # Autoregression model of order 0 52 51 return self 53 52 #}}} … … 61 60 md = checkfield(md, 'fieldname', 'frontalforcings.basin_id', 'Inf', 1, '>=', 0, '<=', md.frontalforcings.num_basins, 'size', [md.mesh.numberofelements]) 62 61 md = checkfield(md, 'fieldname', 'frontalforcings.subglacial_discharge', '>=', 0, 'NaN', 1, 'Inf', 1, 'timeseries', 1) 62 if len(np.shape(self.beta0)) == 1: 63 self.beta0 = np.array([self.beta0]) 64 self.beta1 = np.array([self.beta1]) 63 65 md = checkfield(md, 'fieldname', 'frontalforcings.beta0', 'NaN', 1, 'Inf', 1, 'size', [1, md.frontalforcings.num_basins], 'numel', md.frontalforcings.num_basins) 64 66 md = checkfield(md, 'fieldname', 'frontalforcings.beta1', 'NaN', 1, 'Inf', 1, 'size', [1, md.frontalforcings.num_basins], 'numel', md.frontalforcings.num_basins) … … 83 85 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'ar_initialtime', 'format', 'Double', 'scale', yts) 84 86 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'ar_timestep', 'format', 'Double', 'scale', yts) 85 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'basin_id', 'data', self.basin_id , 'name', 'md.frontalforcings.basin_id', 'format', 'IntMat', 'mattype', 2)# 0-indexed87 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 86 88 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'beta0', 'format', 'DoubleMat', 'name', 'md.frontalforcings.beta0') 87 89 WriteData(fid, prefix, 'object', self, 'class', 'frontalforcings', 'fieldname', 'beta1', 'format', 'DoubleMat', 'name', 'md.frontalforcings.beta1', 'scale', 1 / yts, 'yts', yts) -
issm/trunk-jpl/src/m/classes/stochasticforcing.py
r26859 r26905 208 208 WriteData(fid, prefix, 'object', self, 'fieldname', 'fields', 'format', 'StringArray') 209 209 WriteData(fid, prefix, 'data', dimensions, 'name', 'md.stochasticforcing.dimensions', 'format', 'IntMat', 'mattype', 2) 210 WriteData(fid, prefix, 'object', self, 'fieldname', 'default_id', ' format', 'IntMat', 'mattype', 2) #12Nov2021 make sure this is zero-indexed!210 WriteData(fid, prefix, 'object', self, 'fieldname', 'default_id', 'data', self.default_id - 1, 'format', 'IntMat', 'mattype', 2) #12Nov2021 make sure this is zero-indexed! 211 211 WriteData(fid, prefix, 'object', self, 'fieldname', 'defaultdimension', 'format', 'Integer') 212 212 WriteData(fid, prefix, 'data', tempcovariance, 'name', 'md.stochasticforcing.covariance', 'format', 'DoubleMat')
Note:
See TracChangeset
for help on using the changeset viewer.