source:
issm/oecreview/Archive/24684-25833/ISSM-25805-25806.diff
Last change on this file was 25834, checked in by , 4 years ago | |
---|---|
File size: 18.8 KB |
-
../trunk-jpl/src/m/classes/frictionschoof.py
1 import numpy as np 2 3 from checkfield import checkfield 4 from fielddisplay import fielddisplay 5 from project3d import project3d 6 from structtoobj import structtoobj 7 from WriteData import WriteData 8 9 10 class frictionschoof(object): 11 """FRICTIONSCHOOF class definition 12 13 Usage: 14 friction = frictionschoof() 15 """ 16 17 def __init__(self, *args): # {{{ 18 self.C = np.nan 19 self.Cmax = np.nan 20 self.m = np.nan 21 self.effective_pressure_limit = 0 22 23 nargs = len(args) 24 if nargs == 0: 25 self.setdefaultparameters() 26 elif nargs == 1: 27 self = structtoobj(self, args[0]) 28 else: 29 raise Exception('constructor not supported') 30 #}}} 31 32 def __repr__(self): # {{{ 33 # See Brondex et al. 2019 https://www.the-cryosphere.net/13/177/2019/ 34 s = 'Schoof sliding law parameters:\n' 35 s += ' Schoof\'s sliding law reads:\n' 36 s += ' C^2 |u_b|^(m-1) \n' 37 s += ' tau_b = - _____________________________ u_b \n' 38 s += ' (1+(C^2/(Cmax N))^1/m |u_b| )^m \n' 39 s += '\n' 40 s += "{}\n".format(fielddisplay(self, 'C', 'friction coefficient [SI]')) 41 s += "{}\n".format(fielddisplay(self, 'Cmax', 'Iken\'s bound (typically between 0.17 and 0.84) [SI]')) 42 s += "{}\n".format(fielddisplay(self, 'm', 'm exponent (generally taken as m = 1/n = 1/3)')) 43 s += "{}\n".format(fielddisplay(self, 'effective_pressure_limit', 'fNeff do not allow to fall below a certain limit: effective_pressure_limit*rho_ice*g*thickness (default 0)')) 44 return s 45 #}}} 46 47 def setdefaultparameters(self): # {{{ 48 self.effective_pressure_limit = 0 49 return self 50 #}}} 51 52 def extrude(self, md): # {{{ 53 self.C = project3d(md, 'vector', self.C, 'type', 'node') 54 self.Cmax = project3d(md, 'vector', self.Cmax, 'type', 'node') 55 self.m = project3d(md, 'vector', self.m, 'type', 'element') 56 return self 57 #}}} 58 59 def checkconsistency(self, md, solution, analyses): # {{{ 60 # Early return 61 if 'StressbalanceAnalysis' not in analyses and 'ThermalAnalysis' not in analyses: 62 return md 63 md = checkfield(md, 'fieldname', 'friction.C', 'timeseries', 1, 'NaN', 1, 'Inf', 1, '>',0.) 64 md = checkfield(md, 'fieldname', 'friction.Cmax', 'timeseries', 1, 'NaN', 1, 'Inf', 1, '>', 0.) 65 md = checkfield(md, 'fieldname', 'friction.m', 'NaN', 1, 'Inf', 1, '>', 0., 'size', [md.mesh.numberofelements, 1]) 66 md = checkfield(md, 'fieldname', 'friction.effective_pressure_limit', 'numel', [1], '>=', 0) 67 return md 68 # }}} 69 70 def marshall(self, prefix, md, fid): # {{{ 71 yts = md.constants.yts 72 73 WriteData(fid, prefix, 'name', 'md.friction.law', 'data', 11, 'format', 'Integer') 74 WriteData(fid, prefix, 'class', 'friction', 'object', self, 'fieldname', 'C', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', md.constants.yts) 75 WriteData(fid, prefix, 'class', 'friction', 'object', self, 'fieldname', 'Cmax', 'format', 'DoubleMat', 'mattype', 1, 'timeserieslength', md.mesh.numberofvertices + 1, 'yts', md.constants.yts) 76 WriteData(fid, prefix, 'class', 'friction', 'object', self, 'fieldname', 'm', 'format', 'DoubleMat', 'mattype', 2) 77 WriteData(fid, prefix, 'object', self, 'class', 'friction', 'fieldname', 'effective_pressure_limit', 'format', 'Double') 78 # }}} 79 -
../trunk-jpl/src/m/classes/frictionshakti.py
27 27 def __repr__(self): # {{{ 28 28 s = 'Basal shear stress parameters: Sigma_b = coefficient^2 * Neff * u_b\n' 29 29 s += '(effective stress Neff = rho_ice * g * thickness + rho_water * g * (head - b))\n' 30 s += "{}\n".format(fielddisplay(self, "coefficient", "friction coefficient [SI]"))30 s += '{}\n'.format(fielddisplay(self, 'coefficient', 'friction coefficient [SI]')) 31 31 return s 32 32 #}}} 33 33 -
../trunk-jpl/src/m/classes/calving.py
1 import numpy as np 2 3 from checkfield import checkfield 1 4 from fielddisplay import fielddisplay 2 5 from project3d import project3d 3 from checkfield import checkfield4 6 from WriteData import WriteData 5 7 6 8 7 9 class calving(object): 8 """ 9 CALVING class definition 10 """CALVING class definition 10 11 11 12 12 Usage: 13 calving = calving() 13 14 """ 14 15 15 16 def __init__(self): # {{{ 16 17 self.calvingrate = float('NaN') 18 19 #set defaults 17 self.calvingrate = np.nan 20 18 self.setdefaultparameters() 21 19 22 20 #}}} 23 21 24 22 def __repr__(self): # {{{ 25 string = ' Calving parameters:' 26 string = "%s\n%s" % (string, fielddisplay(self, 'calvingrate', 'calving rate at given location [m / a]')) 27 28 return string 23 s = ' Calving parameters:' 24 s += '{}\n'.format(fielddisplay(self, 'calvingrate', 'calving rate at given location [m / a]')) 25 return s 29 26 #}}} 30 27 31 28 def extrude(self, md): # {{{ … … 39 36 40 37 def checkconsistency(self, md, solution, analyses): # {{{ 41 38 #Early return 42 if (solution != 'TransientSolution') or (not md.transient.ismovingfront):39 if solution != 'TransientSolution' or not md.transient.ismovingfront: 43 40 return md 44 41 45 42 md = checkfield(md, 'fieldname', 'calving.calvingrate', '>=', 0, 'timeseries', 1, 'NaN', 1, 'Inf', 1) -
../trunk-jpl/src/m/classes/inversion.py
53 53 s += '{}\n'.format(fielddisplay(self, 'step_threshold', 'decrease threshold for misfit, default is 30%')) 54 54 s += '{}\n'.format(fielddisplay(self, 'min_parameters', 'absolute minimum acceptable value of the inversed parameter on each vertex')) 55 55 s += '{}\n'.format(fielddisplay(self, 'max_parameters', 'absolute maximum acceptable value of the inversed parameter on each vertex')) 56 s += '{}\n'.format(fielddisplay(self, 'vx_obs', 'observed velocity x component [m /yr]'))57 s += '{}\n'.format(fielddisplay(self, 'vy_obs', 'observed velocity y component [m /yr]'))58 s += '{}\n'.format(fielddisplay(self, 'vel_obs', 'observed velocity magnitude [m /yr]'))56 s += '{}\n'.format(fielddisplay(self, 'vx_obs', 'observed velocity x component [m/yr]')) 57 s += '{}\n'.format(fielddisplay(self, 'vy_obs', 'observed velocity y component [m/yr]')) 58 s += '{}\n'.format(fielddisplay(self, 'vel_obs', 'observed velocity magnitude [m/yr]')) 59 59 s += '{}\n'.format(fielddisplay(self, 'thickness_obs', 'observed thickness [m]')) 60 60 s += '{}\n'.format(fielddisplay(self, 'surface_obs', 'observed surface elevation [m]')) 61 61 s += '{}\n'.format('Available cost functions:') … … 159 159 if not self.iscontrol: 160 160 return 161 161 WriteData(fid, prefix, 'object', self, 'fieldname', 'nsteps', 'format', 'Integer') 162 WriteData(fid, prefix, 'object', self, 'fieldname', 'maxiter_per_step', 'format', ' DoubleMat', 'mattype', 3)162 WriteData(fid, prefix, 'object', self, 'fieldname', 'maxiter_per_step', 'format', 'IntMat', 'mattype', 3) 163 163 WriteData(fid, prefix, 'object', self, 'fieldname', 'cost_functions_coefficients', 'format', 'DoubleMat', 'mattype', 1) 164 164 WriteData(fid, prefix, 'object', self, 'fieldname', 'gradient_scaling', 'format', 'DoubleMat', 'mattype', 3) 165 165 WriteData(fid, prefix, 'object', self, 'fieldname', 'cost_function_threshold', 'format', 'Double') -
../trunk-jpl/src/m/classes/solidearthsettings.py
21 21 self.rotation = 0 22 22 self.ocean_area_scaling = 0 23 23 self.runfrequency = 1 # How many time steps we skip before we run grd_core 24 self.computesealevelchange = 0# Will grd_core compute sea level?24 self.computesealevelchange = 1 # Will grd_core compute sea level? 25 25 self.isgrd = 1 # Will GRD patterns be computed? 26 26 self.degacc = 0 # Degree increment for resolution of Green tables 27 27 self.horiz = 0 # Compute horizontal displacement? … … 65 65 self.rotation = 1 66 66 self.ocean_area_scaling = 0 67 67 self.isgrd = 1 68 self.computesealevelchange = 068 self.computesealevelchange = 1 69 69 70 70 # Numerical discretization accuracy 71 71 self.degacc = .01 … … 73 73 # How many time steps we skip before we run solidearthsettings solver during transient 74 74 self.runfrequency = 1 75 75 76 # Fractional contribution 77 self.glfraction = 1 78 76 79 # Horizontal displacement? (not on by default) 77 80 self.horiz = 0 78 79 # Fractional contribution80 self.glfraction = 181 81 #}}} 82 82 83 83 def checkconsistency(self, md, solution, analyses): # {{{ -
../trunk-jpl/src/m/inversions/supportedcostfunctions.py
1 1 def supportedcostfunctions(): 2 return [101, 102, 103, 104, 105, 201, 501, 502, 503, 504, 505]2 return list(range(101, 105 + 1)) + [201] + list(range(501, 508 + 1)) + [510] + list(range(601, 604 + 1)) -
../trunk-jpl/src/m/inversions/supportedcontrols.py
1 1 def supportedcontrols(): 2 return ['BalancethicknessThickeningRate', 'FrictionCoefficient', 'FrictionAs', 'MaterialsRheologyBbar', 'DamageDbar', 'Vx', 'Vy'] 2 return [ 3 'BalancethicknessThickeningRate', 4 'FrictionCoefficient', 5 'FrictionC', 6 'FrictionAs', 7 'MaterialsRheologyBbar', 8 'DamageDbar', 9 'Vx', 10 'Vy', 11 'Thickness', 12 'BalancethicknessOmega', 13 'BalancethicknessApparentMassbalance', 14 'MaterialsRheologyB' 15 ] -
../trunk-jpl/src/m/qmu/postqmu.m
15 15 disp(sprintf('%s',fline)); 16 16 fline=fgetl(fide); 17 17 end 18 warning(['Dakota returned error in ''' qmuerrfile ' file. qmudirectory retained.'])18 warning(['Dakota returned error in ''' qmuerrfile ''' file. QMU directory retained.']) 19 19 end 20 20 status=fclose(fide); 21 21 end -
../trunk-jpl/test/NightlyRun/test356.py
1 #Test Name: TransientFrictionSchoof 2 import numpy as np 3 4 from frictionschoof import frictionschoof 5 from MatlabFuncs import oshostname 6 from model import * 7 from parameterize import parameterize 8 from setflowequation import setflowequation 9 from setmask import setmask 10 from solve import solve 11 from transient import transient 12 from triangle import triangle 13 14 15 md = triangle(model(), '../Exp/Square.exp', 200000.) 16 md = setmask(md, '', '') 17 md = parameterize(md, '../Par/SquareSheetConstrained.py') 18 md = setflowequation(md, 'SSA', 'all') 19 20 # Use Schoof's law 21 Cmax = 0.8 22 md.friction = frictionschoof() 23 md.friction.m = 1.0 / 3.0 * np.ones((md.mesh.numberofelements, 1)) 24 md.friction.Cmax = Cmax * np.ones((md.mesh.numberofvertices, 1)) 25 md.friction.C = 200 * np.ones((md.mesh.numberofvertices, 1)) 26 27 # Control parameters 28 md.inversion.iscontrol = 1 29 md.inversion.control_parameters = ['FrictionC'] 30 md.inversion.min_parameters = 1. * np.ones((md.mesh.numberofvertices, 1)) 31 md.inversion.max_parameters = 10000. * np.ones((md.mesh.numberofvertices, 1)) 32 md.inversion.nsteps = 2 33 md.inversion.cost_functions = [102, 501] 34 md.inversion.cost_functions_coefficients = np.ones((md.mesh.numberofvertices, 2)) 35 md.inversion.cost_functions_coefficients[:, 1] = 2e-7 36 md.inversion.gradient_scaling = 3. * np.ones((md.inversion.nsteps, 1)) 37 md.inversion.maxiter_per_step = 2 * np.ones((md.inversion.nsteps, 1)) 38 md.inversion.step_threshold = 0.3 * np.ones((md.inversion.nsteps, 1)) 39 md.inversion.vx_obs = md.initialization.vx 40 md.inversion.vy_obs= md.initialization.vy 41 42 md.cluster = generic('name', oshostname(), 'np', 3) 43 md = solve(md, 'Stressbalance') 44 45 #Fields and tolerances to track changes 46 field_names = ['Gradient', 'Misfits', 'FrictionC', 'Pressure', 'Vel', 'Vx', 'Vy'] 47 field_tolerances = [1e-12, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13, 1e-13] 48 field_values = [ 49 md.results.StressbalanceSolution.Gradient1, 50 md.results.StressbalanceSolution.J, 51 md.results.StressbalanceSolution.FrictionC, 52 md.results.StressbalanceSolution.Pressure, 53 md.results.StressbalanceSolution.Vel, 54 md.results.StressbalanceSolution.Vx, 55 md.results.StressbalanceSolution.Vy 56 ] -
../trunk-jpl/test/NightlyRun/test481.py
1 #Test Name: TransientFrictionSchoof 2 import numpy as np 3 4 from frictionschoof import frictionschoof 5 from MatlabFuncs import oshostname 6 from model import * 7 from parameterize import parameterize 8 from setflowequation import setflowequation 9 from setmask import setmask 10 from solve import solve 11 from transient import transient 12 from triangle import triangle 13 14 md = triangle(model(), '../Exp/Square.exp', 150000.) 15 md = setmask(md, '../Exp/SquareShelf.exp', '') 16 md = parameterize(md, '../Par/SquareSheetShelf.py') 17 md.extrude(4, 1) 18 md = setflowequation(md, 'HO', 'all') 19 md.transient.isthermal = 0 20 md.friction = frictionschoof(md.friction) 21 md.friction.C = pow(20.e4, 0.5) * np.ones((md.mesh.numberofvertices, 1)) 22 md.friction.Cmax = 0.5 * np.ones((md.mesh.numberofvertices, 1)) 23 md.friction.m = 1./3.* np.ones((md.mesh.numberofelements, 1)) 24 md.cluster = generic('name', oshostname(), 'np', 3) 25 md = solve(md, 'Transient') 26 27 #Fields and tolerances to track changes 28 field_names = [ 29 'Vx1', 'Vy1', 'Vel1', 'Pressure1', 'Bed1', 'Surface1', 'Thickness1', 30 'Vx2', 'Vy2', 'Vel2', 'Pressure2', 'Bed2', 'Surface2', 'Thickness2', 31 'Vx3', 'Vy3', 'Vel3', 'Pressure3', 'Bed3', 'Surface3', 'Thickness3' 32 ] 33 field_tolerances = [ 34 2e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 35 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 36 2e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09, 1e-09 37 ] 38 field_values = [ 39 md.results.TransientSolution[0].Vx, 40 md.results.TransientSolution[0].Vy, 41 md.results.TransientSolution[0].Vel, 42 md.results.TransientSolution[0].Pressure, 43 md.results.TransientSolution[0].Base, 44 md.results.TransientSolution[0].Surface, 45 md.results.TransientSolution[0].Thickness, 46 md.results.TransientSolution[1].Vx, 47 md.results.TransientSolution[1].Vy, 48 md.results.TransientSolution[1].Vel, 49 md.results.TransientSolution[1].Pressure, 50 md.results.TransientSolution[1].Base, 51 md.results.TransientSolution[1].Surface, 52 md.results.TransientSolution[1].Thickness, 53 md.results.TransientSolution[2].Vx, 54 md.results.TransientSolution[2].Vy, 55 md.results.TransientSolution[2].Vel, 56 md.results.TransientSolution[2].Pressure, 57 md.results.TransientSolution[2].Base, 58 md.results.TransientSolution[2].Surface, 59 md.results.TransientSolution[2].Thickness 60 ] -
../trunk-jpl/test/NightlyRun/test350.py
1 1 #Test Name: SquareSheetHydrologyShakti 2 from operator import itemgetter3 2 import numpy as np 3 4 from frictionshakti import frictionshakti 5 from MatlabFuncs import oshostname 4 6 from model import * 5 from socket import gethostname 6 from triangle import triangle 7 from setmask import setmask 7 from operator import itemgetter 8 8 from parameterize import parameterize 9 9 from setflowequation import setflowequation 10 from setmask import setmask 10 11 from solve import solve 11 from frictionshakti import frictionshakti12 12 from transient import transient 13 from triangle import triangle 13 14 14 15 md = triangle(model(), '../Exp/Square.exp', 50000.) 15 16 md.mesh.x = md.mesh.x / 1000 -
../trunk-jpl/test/NightlyRun/runme.m
106 106 % }}} 107 107 %Process Ids according to benchmarks{{{ 108 108 if strcmpi(benchmark,'nightly'), 109 test_ids=intersect(test_ids, [1:999]);109 test_ids=intersect(test_ids,union([1:999])); 110 110 elseif strcmpi(benchmark,'validation'), 111 111 test_ids=intersect(test_ids,[1001:1999]); 112 112 elseif strcmpi(benchmark,'ismip'), -
../trunk-jpl/test/NightlyRun/test444.py
6 6 # 7 7 8 8 import numpy as np 9 10 from ContourToMesh import * 11 from dmeth_params_set import * 12 from MatlabFuncs import oshostname 9 13 from model import * 10 from triangle import *11 from setmask import *12 14 from parameterize import * 15 from partitioner import * 16 from regionaloutput import * 13 17 from setflowequation import * 18 from setmask import * 14 19 from solve import * 15 from partitioner import * 16 from dmeth_params_set import * 17 from ContourToMesh import * 18 from regionaloutput import * 20 from triangle import * 19 21 20 22 #model not consistent: equality thickness = surface-base violated 21 23
Note:
See TracBrowser
for help on using the repository browser.