Changeset 25307
- Timestamp:
- 07/29/20 00:45:32 (5 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/SMBgemb.py
r24793 r25307 1 1 import numpy as np 2 3 from checkfield import checkfield 2 4 from fielddisplay import fielddisplay 3 from checkfield import checkfield5 from project3d import project3d 4 6 from WriteData import WriteData 5 from project3d import project3d6 7 7 8 … … 14 15 """ 15 16 16 def __init__(self ): # {{{17 def __init__(self, *args): # {{{ 17 18 #each one of these properties is a transient forcing to the GEMB model, loaded from meteorological data derived 18 19 #from an automatic weather stations (AWS). Each property is therefore a matrix, of size (numberofvertices x number … … 32 33 33 34 #inputs: 34 self.Ta = float('NaN') #2 m air temperature, in Kelvin35 self.V = float('NaN') #wind speed (m/s-1)36 self.dswrf = float('NaN') #downward shortwave radiation flux [W/m^2]37 self.dlwrf = float('NaN') #downward longwave radiation flux [W/m^2]38 self.P = float('NaN') #precipitation [mm w.e. / m^2]39 self.eAir = float('NaN') #screen level vapor pressure [Pa]40 self.pAir = float('NaN') #surface pressure [Pa]41 self.Tmean = float('NaN') #mean annual temperature [K]42 self.Vmean = float('NaN') #mean annual wind velocity [m s-1]43 self.C = float('NaN') #mean annual snow accumulation [kg m-2 yr-1]44 self.Tz = float('NaN') #height above ground at which temperature (T) was sampled [m]45 self.Vz = float('NaN') #height above ground at which wind (V) eas sampled [m]35 self.Ta = np.nan # 2 m air temperature, in Kelvin 36 self.V = np.nan # wind speed (m/s-1) 37 self.dswrf = np.nan # downward shortwave radiation flux [W/m^2] 38 self.dlwrf = np.nan # downward longwave radiation flux [W/m^2] 39 self.P = np.nan # precipitation [mm w.e. / m^2] 40 self.eAir = np.nan # screen level vapor pressure [Pa] 41 self.pAir = np.nan # surface pressure [Pa] 42 self.Tmean = np.nan # mean annual temperature [K] 43 self.Vmean = np.nan # mean annual wind velocity [m s-1] 44 self.C = np.nan # mean annual snow accumulation [kg m-2 yr-1] 45 self.Tz = np.nan # height above ground at which temperature (T) was sampled [m] 46 self.Vz = np.nan # height above ground at which wind (V) was sampled [m] 46 47 47 48 #optional inputs: 48 self.aValue = float('NaN') #Albedo forcing at every element. Used only if aIdx == 0.49 self.teValue = float('NaN') #Outward longwave radiation thermal emissivity forcing at every element (default in code is 1)49 self.aValue = np.nan # Albedo forcing at every element. Used only if aIdx == 0. 50 self.teValue = np.nan # Outward longwave radiation thermal emissivity forcing at every element (default in code is 1) 50 51 51 52 # Initialization of snow properties 52 self.Dzini = float('NaN') #cell depth (m)53 self.Dini = float('NaN') #snow density (kg m-3)54 self.Reini = float('NaN') #effective grain size (mm)55 self.Gdnini = float('NaN') #grain dricity (0-1)56 self.Gspini = float('NaN') #grain sphericity (0-1)57 self.ECini = float('NaN') #evaporation/condensation (kg m-2)58 self.Wini = float('NaN') #Water content (kg m-2)59 self.Aini = float('NaN') #albedo (0-1)60 self.Tini = float('NaN') #snow temperature (K)61 self.Sizeini = float('NaN') #Number of layers53 self.Dzini = np.nan # cell depth (m) 54 self.Dini = np.nan # snow density (kg m-3) 55 self.Reini = np.nan # effective grain size (mm) 56 self.Gdnini = np.nan # grain dricity (0-1) 57 self.Gspini = np.nan # grain sphericity (0-1) 58 self.ECini = np.nan # evaporation/condensation (kg m-2) 59 self.Wini = np.nan # Water content (kg m-2) 60 self.Aini = np.nan # albedo (0-1) 61 self.Tini = np.nan # snow temperature (K) 62 self.Sizeini = np.nan # Number of layers 62 63 63 64 #settings: 64 self.aIdx = float('NaN') #method for calculating albedo and subsurface absorption (default is 1)65 self.swIdx = float('NaN')# apply all SW to top grid cell (0) or allow SW to penetrate surface (1) (default 1)66 self.denIdx = float('NaN') #densification model to use (default is 2):67 self.dsnowIdx = float('NaN') #model for fresh snow accumulation density (default is 1):68 self.zTop = float('NaN')# depth over which grid length is constant at the top of the snopack (default 10) [m]69 self.dzTop = float('NaN')# initial top vertical grid spacing (default .05) [m]70 self.dzMin = float('NaN')# initial min vertical allowable grid spacing (default dzMin/2) [m]71 self.zY = float('NaN')# strech grid cells bellow top_z by a [top_dz * y ^ (cells bellow top_z)]72 self.zMax = float('NaN') #initial max model depth (default is min(thickness, 250)) [m]73 self.zMin = float('NaN') #initial min model depth (default is min(thickness, 130)) [m]74 self.outputFreq = float('NaN') #output frequency in days (default is monthly, 30)65 self.aIdx = np.nan # method for calculating albedo and subsurface absorption (default is 1) 66 self.swIdx = np.nan # apply all SW to top grid cell (0) or allow SW to penetrate surface (1) (default 1) 67 self.denIdx = np.nan # densification model to use (default is 2): 68 self.dsnowIdx = np.nan # model for fresh snow accumulation density (default is 1): 69 self.zTop = np.nan # depth over which grid length is constant at the top of the snopack (default 10) [m] 70 self.dzTop = np.nan # initial top vertical grid spacing (default .05) [m] 71 self.dzMin = np.nan # initial min vertical allowable grid spacing (default dzMin/2) [m] 72 self.zY = np.nan # strech grid cells bellow top_z by a [top_dz * y ^ (cells bellow top_z)] 73 self.zMax = np.nan # initial max model depth (default is min(thickness, 250)) [m] 74 self.zMin = np.nan # initial min model depth (default is min(thickness, 130)) [m] 75 self.outputFreq = np.nan # output frequency in days (default is monthly, 30) 75 76 76 77 #specific albedo parameters: 77 78 #Method 1 and 2: 78 self.aSnow = float('NaN')# new snow albedo (0.64 - 0.89)79 self.aIce = float('NaN')# range 0.27-0.58 for old snow79 self.aSnow = np.nan # new snow albedo (0.64 - 0.89) 80 self.aIce = np.nan # range 0.27-0.58 for old snow 80 81 #Method 3: Radiation Correction Factors -> only used for met station data and Greuell & Konzelmann, 1994 albedo 81 self.cldFrac = float('NaN')# average cloud amount82 self.cldFrac = np.nan # average cloud amount 82 83 #Method 4: additonal tuning parameters albedo as a funtion of age and water content (Bougamont et al., 2005) 83 self.t0wet = float('NaN')# time scale for wet snow (15-21.9)84 self.t0dry = float('NaN')# warm snow timescale (30)85 self.K = float('NaN')# time scale temperature coef. (7)86 self.adThresh = float('NaN')# Apply aIdx method to all areas with densities below this value,84 self.t0wet = np.nan # time scale for wet snow (15-21.9) 85 self.t0dry = np.nan # warm snow timescale (30) 86 self.K = np.nan # time scale temperature coef. (7) 87 self.adThresh = np.nan # Apply aIdx method to all areas with densities below this value, 87 88 # or else apply direct input value from aValue, allowing albedo to be altered. 88 89 # Default value is rho water (1023 kg m-3). 89 90 90 91 #densities: 91 self.InitDensityScaling = float('NaN') #initial scaling factor multiplying the density of ice, which describes the density of the snowpack.92 self.InitDensityScaling = np.nan # initial scaling factor multiplying the density of ice, which describes the density of the snowpack. 92 93 93 94 #thermo: 94 self.ThermoDeltaTScaling = float('NaN') #scaling factor to multiply the thermal diffusion timestep (delta t)95 96 self.steps_per_step = 197 self.averaging = 098 self.requested_outputs = []95 self.ThermoDeltaTScaling = np.nan # scaling factor to multiply the thermal diffusion timestep (delta t) 96 97 self.steps_per_step = 1 98 self.averaging = 0 99 self.requested_outputs = [] 99 100 100 101 #Several fields are missing from the standard GEMB model, which are capture intrinsically by ISSM. … … 103 104 #elev: this is taken from the ISSM surface itself. 104 105 106 nargin = len(args) 107 if nargin: 108 if nargin == 2: 109 mesh = args[0] 110 geometry = args[1] 111 self.setdefaultparameters(mesh, geometry) 112 else: 113 raise Exception('constructor not supported: need mesh and geometry to set defaults') 105 114 #}}} 106 115 … … 281 290 282 291 md = checkfield(md, 'fieldname', 'smb.isgraingrowth', 'values', [0, 1]) 283 #md = checkfield(md, 'fieldname', 'smb.issmbgradients', 'values', [0, 1])292 md = checkfield(md, 'fieldname', 'smb.issmbgradients', 'values', [0, 1]) 284 293 md = checkfield(md, 'fieldname', 'smb.isalbedo', 'values', [0, 1]) 285 294 md = checkfield(md, 'fieldname', 'smb.isshortwave', 'values', [0, 1]) … … 352 361 353 362 def marshall(self, prefix, md, fid): # {{{ 354 355 363 yts = md.constants.yts 356 364 -
issm/trunk-jpl/src/m/solve/WriteData.m
r24199 r25307 32 32 end 33 33 34 %Scale data if neces arry34 %Scale data if necessary 35 35 if strcmpi(format,'MatArray') 36 36 for i=1:numel(data) -
issm/trunk-jpl/src/m/solve/WriteData.py
r25301 r25307 1 1 from copy import deepcopy 2 from struct import pack, error 2 from struct import error, pack 3 3 4 import numpy as np 5 4 6 import pairoptions 5 7 … … 47 49 # (see https://ross.ics.uci.edu/jenkins/view/All/job/Debian_Linux-Python/1036). 48 50 # 49 if mattype != 0: 50 data = deepcopy(data) 51 52 #Scale data if necesarry 53 if options.exist('scale'): 54 data = np.array(data) 55 scale = options.getfieldvalue('scale') 56 if np.size(data) > 1 and np.ndim(data) > 1 and np.size(data, 0) == timeserieslength: 57 data[0:-1, :] = scale * data[0:-1, :] 58 else: 59 data = scale * data 60 if np.size(data) > 1 and np.size(data, 0) == timeserieslength: 61 yts = options.getfieldvalue('yts') 62 if np.ndim(data) > 1: 51 # data = deepcopy(data) 52 53 #Scale data if necessary 54 if datatype == 'MatArray': 55 for i in range(np.size(data)): 56 if options.exist('scale'): 57 scale = options.getfieldvalue('scale') 58 if np.ndim(data[i]) > 1 and data[i].shape[0] == timeserieslength: 59 data[i][:-2, :] = scale * data[i][:-2, :] 60 else: 61 data[i] = scale * data[i] 62 if np.ndim(data) > 1 and data[i].shape[0] == timeserieslength: 63 yts = options.getfieldvalue('yts') 64 data[i][-1, :] = yts * data[i][-1, :] 65 else: 66 if options.exist('scale'): 67 scale = options.getfieldvalue('scale') 68 if np.ndim(data) > 1 and data.shape[0] == timeserieslength: 69 data[:-2, :] = scale * data[:-2, :] 70 else: 71 data = scale * data 72 if np.ndim(data) > 1 and data.shape[0] == timeserieslength: 73 yts = options.getfieldvalue('yts') 63 74 data[-1, :] = yts * data[-1, :] 64 else:65 data[-1] = yts * data[-1]66 75 67 76 #Step 1: write the enum to identify this record uniquely -
issm/trunk-jpl/test/NightlyRun/test234.py
r25112 r25307 10 10 from setflowequation import * 11 11 from solve import * 12 from SMBgemb import *13 12 from partitioner import * 14 13 from dmeth_params_set import * … … 39 38 #partitioning 40 39 npart = 20 41 partition = partitioner(md, 'package', 'chaco', 'npart', npart, 'weighting', 'on') - 140 partition = partitioner(md, 'package', 'chaco', 'npart', npart, 'weighting', 'on')[0] - 1 42 41 43 42 #variables -
issm/trunk-jpl/test/NightlyRun/test235.py
r25133 r25307 10 10 from setflowequation import * 11 11 from solve import * 12 from SMBgemb import *13 12 from partitioner import * 14 13 from dmeth_params_set import * -
issm/trunk-jpl/test/NightlyRun/test243.py
r24795 r25307 1 1 #Test Name: SquareShelfSMBGemb 2 from socket import gethostname 3 import sys 4 2 5 import numpy as np 3 import sys 6 4 7 from model import * 5 from socket import gethostname6 from triangle import *7 from setmask import *8 8 from parameterize import * 9 9 from setflowequation import * 10 from setmask import * 11 from SMBgemb import * 10 12 from solve import * 11 from SMBgembimport *13 from triangle import * 12 14 13 15 md = triangle(model(), '../Exp/Square.exp', 350000.) … … 19 21 20 22 #Use of Gemb method for SMB computation 21 md.smb = SMBgemb() 22 md.smb.setdefaultparameters(md.mesh, md.geometry) 23 md.smb = SMBgemb(md.mesh, md.geometry) 23 24 md.smb.dsnowIdx = 1 24 25 … … 37 38 md.smb.eAir = np.append(np.tile(np.conjugate(inputs[b'eAir0']), (md.mesh.numberofelements, 1)), np.conjugate([inputs[b'dateN']]), axis=0) 38 39 md.smb.pAir = np.append(np.tile(np.conjugate(inputs[b'pAir0']), (md.mesh.numberofelements, 1)), np.conjugate([inputs[b'dateN']]), axis=0) 39 md.smb.pAir = np.append(np.tile(np.conjugate(inputs[b'pAir0']), (md.mesh.numberofelements, 1)), np.conjugate([inputs[b'dateN']]), axis=0)40 40 md.smb.Vz = np.tile(np.conjugate(inputs[b'LP']['Vz']), (md.mesh.numberofelements, 1)).flatten() 41 41 md.smb.Tz = np.tile(np.conjugate(inputs[b'LP']['Tz']), (md.mesh.numberofelements, 1)).flatten() … … 44 44 45 45 #smb settings 46 md.smb.requested_outputs = ['SmbDz', 'SmbT', 'SmbD', 'SmbRe', 'SmbGdn', 'SmbGsp', 'SmbEC', 'SmbA', 'SmbMassBalance', 'SmbMAdd', 'SmbDzAdd', 'SmbFAC', 'SmbMeanSHF', 'SmbMeanLHF', 'SmbMeanULW', 'SmbNetLW', 'SmbNetSW'] 46 md.smb.requested_outputs = [ 47 'SmbDz', 'SmbT', 'SmbD', 'SmbRe', 'SmbGdn', 'SmbGsp', 'SmbEC', 48 'SmbA', 'SmbMassBalance', 'SmbMAdd', 'SmbDzAdd', 'SmbFAC', 'SmbMeanSHF', 'SmbMeanLHF', 49 'SmbMeanULW', 'SmbNetLW', 'SmbNetSW' 50 ] 47 51 48 52 #only run smb core: … … 54 58 md.timestepping.start_time = 1965. 55 59 md.timestepping.final_time = 1966. 56 md.timestepping.time_step = 1. / 365.060 md.timestepping.time_step = 1.0 / 365 57 61 md.timestepping.interp_forcings = 0. 58 62 … … 68 72 field_tolerances = [1e-12, 2e-12, 1e-12, 1e-11, 1e-11, 2e-11, 1e-11, 1e-12, 1e-11, 1e-12, 1e-12, 1e-12, 1e-11, 2e-11, 2e-11, 1e-11, 9e-10, 2e-11] 69 73 #shape is different in python solution (fixed using reshape) which can cause test failure: 70 field_values = [nlayers, 71 md.results.TransientSolution[-1].SmbDz[0, 0:nlayers].reshape(1, -1), 72 md.results.TransientSolution[-1].SmbT[0, 0:nlayers].reshape(1, -1), 73 md.results.TransientSolution[-1].SmbD[0, 0:nlayers].reshape(1, -1), 74 md.results.TransientSolution[-1].SmbRe[0, 0:nlayers].reshape(1, -1), 75 md.results.TransientSolution[-1].SmbGdn[0, 0:nlayers].reshape(1, -1), 76 md.results.TransientSolution[-1].SmbGsp[0, 0:nlayers].reshape(1, -1), 77 md.results.TransientSolution[-1].SmbA[0, 0:nlayers].reshape(1, -1), 78 md.results.TransientSolution[-1].SmbEC[0], 79 md.results.TransientSolution[-1].SmbMassBalance[0], 80 md.results.TransientSolution[-1].SmbMAdd[0], 81 md.results.TransientSolution[-1].SmbDzAdd[0], 82 md.results.TransientSolution[-1].SmbFAC[0], 83 md.results.TransientSolution[-1].SmbMeanSHF[0], 84 md.results.TransientSolution[-1].SmbMeanLHF[0], 85 md.results.TransientSolution[-1].SmbMeanULW[0], 86 md.results.TransientSolution[-1].SmbNetLW[0], 87 md.results.TransientSolution[-1].SmbNetSW[0]] 74 field_values = [ 75 nlayers, 76 md.results.TransientSolution[-1].SmbDz[0, 0:nlayers].reshape(1, -1), 77 md.results.TransientSolution[-1].SmbT[0, 0:nlayers].reshape(1, -1), 78 md.results.TransientSolution[-1].SmbD[0, 0:nlayers].reshape(1, -1), 79 md.results.TransientSolution[-1].SmbRe[0, 0:nlayers].reshape(1, -1), 80 md.results.TransientSolution[-1].SmbGdn[0, 0:nlayers].reshape(1, -1), 81 md.results.TransientSolution[-1].SmbGsp[0, 0:nlayers].reshape(1, -1), 82 md.results.TransientSolution[-1].SmbA[0, 0:nlayers].reshape(1, -1), 83 md.results.TransientSolution[-1].SmbEC[0], 84 md.results.TransientSolution[-1].SmbMassBalance[0], 85 md.results.TransientSolution[-1].SmbMAdd[0], 86 md.results.TransientSolution[-1].SmbDzAdd[0], 87 md.results.TransientSolution[-1].SmbFAC[0], 88 md.results.TransientSolution[-1].SmbMeanSHF[0], 89 md.results.TransientSolution[-1].SmbMeanLHF[0], 90 md.results.TransientSolution[-1].SmbMeanULW[0], 91 md.results.TransientSolution[-1].SmbNetLW[0], 92 md.results.TransientSolution[-1].SmbNetSW[0] 93 ] -
issm/trunk-jpl/test/NightlyRun/test244.py
r25133 r25307 28 28 29 29 # Use of Gemb method for SMB computation 30 md.smb = SMBgemb() 31 md.smb.setdefaultparameters(md.mesh, md.geometry) 30 md.smb = SMBgemb(md.mesh, md.geometry) 32 31 md.smb.dsnowIdx = 0 33 32 -
issm/trunk-jpl/test/NightlyRun/test250.py
r25133 r25307 9 9 from setflowequation import * 10 10 from solve import * 11 from SMBgemb import *12 11 from partitioner import * 13 12 from dmeth_params_set import * -
issm/trunk-jpl/test/NightlyRun/test251.py
r25133 r25307 9 9 from setflowequation import * 10 10 from solve import * 11 from SMBgemb import *12 11 from partitioner import * 13 12 from dmeth_params_set import * -
issm/trunk-jpl/test/NightlyRun/test252.py
r24773 r25307 1 1 #Test Name: SquareShelfSMBGembClim 2 from socket import gethostname 3 import sys 4 2 5 import numpy as np 3 import sys 6 4 7 from model import * 5 from socket import gethostname6 from triangle import *7 from setmask import *8 8 from parameterize import * 9 9 from setflowequation import * 10 from setmask import * 11 from SMBgemb import * 10 12 from solve import * 11 from SMBgembimport *13 from triangle import * 12 14 13 15 md = triangle(model(), '../Exp/Square.exp', 350000.) … … 19 21 20 22 #Use of Gemb method for SMB computation 21 md.smb = SMBgemb() 22 md.smb.setdefaultparameters(md.mesh, md.geometry) 23 md.smb = SMBgemb(md.mesh, md.geometry) 23 24 md.smb.dsnowIdx = 4 24 25 -
issm/trunk-jpl/test/NightlyRun/test253.py
r24760 r25307 19 19 20 20 #Use of Gemb method for SMB computation 21 md.smb = SMBgemb() 22 md.smb.setdefaultparameters(md.mesh, md.geometry) 21 md.smb = SMBgemb(md.mesh, md.geometry) 23 22 md.smb.dsnowIdx = 3 24 23 md.smb.aIdx = 2 -
issm/trunk-jpl/test/NightlyRun/test418.py
r25133 r25307 37 37 # - Run valgrind and fix the above 38 38 # 39 partition, md = partitioner(md, 'package', 'chaco', 'npart', npart) 40 partition -= 1 39 partition = partitioner(md, 'package', 'chaco', 'npart', npart)[0] - 1 41 40 42 41 vector = np.arange(1, 1 + md.mesh.numberofvertices, 1).reshape(-1, 1) -
issm/trunk-jpl/test/NightlyRun/test420.py
r25113 r25307 18 18 #partitioning 19 19 npart = 10 20 partition = partitioner(md, 'package', 'chaco', 'npart', npart) - 120 partition = partitioner(md, 'package', 'chaco', 'npart', npart)[0] - 1 21 21 md.qmu.isdakota = 1 22 22 -
issm/trunk-jpl/test/NightlyRun/test444.py
r25176 r25307 13 13 from setflowequation import * 14 14 from solve import * 15 from SMBgemb import *16 15 from partitioner import * 17 16 from dmeth_params_set import * -
issm/trunk-jpl/test/Par/SquareShelf.py
r24862 r25307 1 from arch import * 2 import inspect 1 3 import os.path 2 import inspect 3 from arch import * 4 4 5 import numpy as np 5 from verbose import verbose 6 6 7 from InterpFromMeshToMesh2d import InterpFromMeshToMesh2d 7 8 from paterson import paterson 8 9 from SetIceShelfBC import SetIceShelfBC 10 from verbose import verbose 9 11 10 12 #Start defining model parameters here … … 34 36 #dbg - end 35 37 38 # x = x[0][:] 39 # y = y[0][:] 40 # vx = vx[0][:] 41 # vy = vy[0][:] 42 # index = index[0][:] 43 36 44 [md.initialization.vx] = InterpFromMeshToMesh2d(index, x, y, vx, md.mesh.x, md.mesh.y) 37 45 [md.initialization.vy] = InterpFromMeshToMesh2d(index, x, y, vy, md.mesh.x, md.mesh.y) 38 md.initialization.vz = np.zeros((md.mesh.numberofvertices)) 39 md.initialization.pressure = np.zeros((md.mesh.numberofvertices)) 46 x = y = vx = vy = index = None 47 md.initialization.vz = np.zeros((md.mesh.numberofvertices, 1)) 48 md.initialization.pressure = np.zeros((md.mesh.numberofvertices, 1)) 40 49 41 50 #dbg - begin … … 50 59 #dbg - end 51 60 61 # Materials 62 md.initialization.temperature = (273 - 20) * np.ones((md.mesh.numberofvertices, 1)) 63 md.materials.rheology_B = paterson(md.initialization.temperature) 64 md.materials.rheology_n = 3 * np.ones((md.mesh.numberofelements, 1)) 52 65 53 #Materials 54 md.initialization.temperature = (273. - 20.) * np.ones((md.mesh.numberofvertices)) 55 md.materials.rheology_B = paterson(md.initialization.temperature) 56 md.materials.rheology_n = 3. * np.ones((md.mesh.numberofelements)) 66 # Friction 67 md.friction.coefficient = 20 * np.ones((md.mesh.numberofvertices, 1)) 68 md.friction.coefficient[np.where(md.mask.ocean_levelset < 0)[0]] = 0 69 md.friction.p = np.ones((md.mesh.numberofelements, 1)) 70 md.friction.q = np.ones((md.mesh.numberofelements, 1)) 57 71 58 #Friction 59 md.friction.coefficient = 20. * np.ones((md.mesh.numberofvertices)) 60 md.friction.coefficient[np.nonzero(md.mask.ocean_levelset < 0.)[0]] = 0. 61 md.friction.p = np.ones((md.mesh.numberofelements)) 62 md.friction.q = np.ones((md.mesh.numberofelements)) 63 64 #Numerical parameters 65 md.masstransport.stabilization = 1. 66 md.thermal.stabilization = 1. 72 # Numerical parameters 73 md.masstransport.stabilization = 1 74 md.thermal.stabilization = 1 67 75 md.settings.waitonlock = 30 68 76 md.verbose = verbose() … … 70 78 md.steadystate.reltol = 0.02 71 79 md.stressbalance.reltol = 0.02 72 md.stressbalance.abstol = float('nan')73 md.timestepping.time_step = 1 .74 md.timestepping.final_time = 3 .80 md.stressbalance.abstol = np.nan 81 md.timestepping.time_step = 1 82 md.timestepping.final_time = 3 75 83 md.groundingline.migration = 'None' 76 84 77 #Boundary conditions: 78 # #md = SetIceShelfBC(md) 85 # Boundary conditions: 79 86 md = SetIceShelfBC(md, '../Exp/SquareFront.exp') 80 87
Note:
See TracChangeset
for help on using the changeset viewer.