Changeset 25165
- Timestamp:
- 06/26/20 15:31:01 (5 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/giamme.py
r25158 r25165 42 42 43 43 def checkconsistency(self, md, solution, analyses): # {{{ 44 if ('SealevelriseAnalysis' not in analyses) or (solution == 'TransientSolution' and md.transient.is tidallove== 0):44 if ('SealevelriseAnalysis' not in analyses) or (solution == 'TransientSolution' and md.transient.isslr == 0): 45 45 return md 46 46 -
issm/trunk-jpl/src/m/classes/model.py
r25164 r25165 688 688 689 689 md.materials.extrude(md) 690 if md.damage.isdamage == 1: 691 md.damage.extrude(md) 690 md.damage.extrude(md) 692 691 md.mask.extrude(md) 693 692 md.qmu.extrude(md) -
issm/trunk-jpl/src/m/consistency/ismodelselfconsistent.py
r24240 r25165 1 def AnalysisConfiguration(solutiontype): #{{{ 2 """ 3 ANALYSISCONFIGURATION - return type of analyses, number of analyses 4 5 Usage: 6 [analyses] = AnalysisConfiguration(solutiontype) 7 """ 8 9 if solutiontype == 'StressbalanceSolution': 10 analyses = ['StressbalanceAnalysis', 'StressbalanceVerticalAnalysis', 'StressbalanceSIAAnalysis', 'L2ProjectionBaseAnalysis'] 11 elif solutiontype == 'SteadystateSolution': 12 analyses = ['StressbalanceAnalysis', 'StressbalanceVerticalAnalysis', 'StressbalanceSIAAnalysis', 'L2ProjectionBaseAnalysis', 'ThermalAnalysis', 'MeltingAnalysis', 'EnthalpyAnalysis'] 13 elif solutiontype == 'ThermalSolution': 14 analyses = ['EnthalpyAnalysis', 'ThermalAnalysis', 'MeltingAnalysis'] 15 elif solutiontype == 'MasstransportSolution': 16 analyses = ['MasstransportAnalysis'] 17 elif solutiontype == 'BalancethicknessSolution': 18 analyses = ['BalancethicknessAnalysis'] 19 elif solutiontype == 'SurfaceSlopeSolution': 20 analyses = ['L2ProjectionBaseAnalysis'] 21 elif solutiontype == 'BalancevelocitySolution': 22 analyses = ['BalancevelocityAnalysis'] 23 elif solutiontype == 'BedSlopeSolution': 24 analyses = ['L2ProjectionBaseAnalysis'] 25 elif solutiontype == 'GiaSolution': 26 analyses = ['GiaIvinsAnalysis'] 27 elif solutiontype == 'LoveSolution': 28 analyses = ['LoveAnalysis'] 29 elif solutiontype == 'TransientSolution': 30 analyses = ['StressbalanceAnalysis', 'StressbalanceVerticalAnalysis', 'StressbalanceSIAAnalysis', 'L2ProjectionBaseAnalysis', 'ThermalAnalysis', 'MeltingAnalysis', 'EnthalpyAnalysis', 'MasstransportAnalysis', 'HydrologyShaktiAnalysis', 'HydrologyGladsAnalysis', 'HydrologyDCInefficientAnalysis', 'HydrologyDCEfficientAnalysis'] 31 elif solutiontype == 'HydrologySolution': 32 analyses = ['L2ProjectionBaseAnalysis', 'HydrologyShreveAnalysis', 'HydrologyDCInefficientAnalysis', 'HydrologyDCEfficientAnalysis'] 33 elif 'DamageEvolutionSolution': 34 analyses = ['DamageEvolutionAnalysis'] 35 36 else: 37 raise TypeError("solution type: '%s' not supported yet!" % solutiontype) 38 return analyses 39 #}}} 40 41 42 def ismodelselfconsistent(md): 43 """ 1 def ismodelselfconsistent(md): #{{{ 2 ''' 44 3 ISMODELSELFCONSISTENT - check that model forms a closed form solvable problem. 45 4 46 5 Usage: 47 6 ismodelselfconsistent(md), 48 """7 ''' 49 8 50 9 #initialize consistency as true 51 10 md.private.isconsistent = True 11 12 # print(md.mesh.z) 13 # exit() 52 14 53 15 #Get solution and associated analyses … … 64 26 #Check that current field is an object 65 27 if not hasattr(getattr(md, field), 'checkconsistency'): 66 md.checkmessage( "field '%s' is not an object." % field)28 md.checkmessage('field {} is not an object.'.format(field)) 67 29 68 30 #Check consistency of the object … … 72 34 if not md.private.isconsistent: 73 35 raise RuntimeError('Model not consistent, see messages above.') 36 #}}} 37 38 def AnalysisConfiguration(solutiontype): #{{{ 39 ''' 40 ANALYSISCONFIGURATION - return type of analyses, number of analyses 41 42 Usage: 43 [analyses] = AnalysisConfiguration(solutiontype) 44 ''' 45 46 if solutiontype == 'StressbalanceSolution': 47 analyses = ['StressbalanceAnalysis', 'StressbalanceVerticalAnalysis', 'StressbalanceSIAAnalysis', 'L2ProjectionBaseAnalysis'] 48 elif solutiontype == 'SteadystateSolution': 49 analyses = ['StressbalanceAnalysis', 'StressbalanceVerticalAnalysis', 'StressbalanceSIAAnalysis', 'L2ProjectionBaseAnalysis', 'ThermalAnalysis', 'MeltingAnalysis', 'EnthalpyAnalysis'] 50 elif solutiontype == 'ThermalSolution': 51 analyses = ['EnthalpyAnalysis', 'ThermalAnalysis', 'MeltingAnalysis'] 52 elif solutiontype == 'MasstransportSolution': 53 analyses = ['MasstransportAnalysis'] 54 elif solutiontype == 'BalancethicknessSolution': 55 analyses = ['BalancethicknessAnalysis'] 56 elif solutiontype == 'Balancethickness2Solution': 57 analyses = ['Balancethickness2Analysis'] 58 elif solutiontype == 'BalancethicknessSoftSolution': 59 analyses = ['BalancethicknessAnalysis'] 60 elif solutiontype == 'BalancevelocitySolution': 61 analyses = ['BalancevelocityAnalysis'] 62 elif solutiontype == 'SurfaceSlopeSolution': 63 analyses = ['L2ProjectionBaseAnalysis'] 64 elif solutiontype == 'BedSlopeSolution': 65 analyses = ['L2ProjectionBaseAnalysis'] 66 elif solutiontype == 'GiaSolution': 67 analyses = ['GiaIvinsAnalysis'] 68 elif solutiontype == 'LoveSolution': 69 analyses = ['LoveAnalysis'] 70 elif solutiontype == 'EsaSolution': 71 analyses = ['EsaAnalysis'] 72 elif solutiontype == 'TransientSolution': 73 analyses = ['StressbalanceAnalysis', 'StressbalanceVerticalAnalysis', 'StressbalanceSIAAnalysis', 'L2ProjectionBaseAnalysis', 'ThermalAnalysis', 'MeltingAnalysis', 'EnthalpyAnalysis', 'MasstransportAnalysis', 'HydrologyShaktiAnalysis', 'HydrologyGladsAnalysis', 'HydrologyDCInefficientAnalysis', 'HydrologyDCEfficientAnalysis', 'SealevelriseAnalysis'] 74 elif solutiontype == 'SealevelriseSolution': 75 analyses = ['SealevelriseAnalysis'] 76 elif solutiontype == 'HydrologySolution': 77 analyses = ['L2ProjectionBaseAnalysis', 'HydrologyShreveAnalysis', 'HydrologyDCInefficientAnalysis', 'HydrologyDCEfficientAnalysis'] 78 elif 'DamageEvolutionSolution': 79 analyses = ['DamageEvolutionAnalysis'] 80 else: 81 raise TypeError('solution type: {} not supported yet!'.format(solutiontype)) 82 83 return analyses 84 #}}} -
issm/trunk-jpl/src/m/extrusion/project3d.m
r17686 r25165 38 38 39 39 elseif strcmpi(type,'node'), 40 41 40 %Initialize 3d vector 42 41 if size(vector2d,1)==md.mesh.numberofvertices2d 43 projected_vector=paddingvalue*ones(md.mesh.numberofvertices, 42 projected_vector=paddingvalue*ones(md.mesh.numberofvertices, size(vector2d,2)); 44 43 elseif size(vector2d,1)==md.mesh.numberofvertices2d+1 45 44 projected_vector=paddingvalue*ones(md.mesh.numberofvertices+1,size(vector2d,2)); -
issm/trunk-jpl/src/m/extrusion/project3d.py
r24256 r25165 1 1 import numpy as np 2 2 3 from pairoptions import pairoptions 3 4 4 5 5 6 def project3d(md, *args): 6 """7 ''' 7 8 PROJECT3D - vertically project a vector from 2d mesh 8 9 9 vertically project a vector from 2d mesh (split in noncoll and coll areas) into a 3d mesh. 10 This vector can be a node vector of size (md.mesh.numberofvertices2d, N / A) or an 11 element vector of size (md.mesh.numberofelements2d, N / A). 12 arguments: 13 'vector': 2d vector 14 'type': 'element' or 'node'. 15 options: 16 'layer' a layer number where vector should keep its values. If not specified, all layers adopt the 17 value of the 2d vector. 18 'padding': default to 0 (value adopted by other 3d layers not being projected 10 vertically project a vector from 2d mesh (split in noncoll and coll 11 areas) into a 3d mesh. 12 This vector can be a node vector of size (md.mesh.numberofvertices2d, 13 N/A) or an element vector of size (md.mesh.numberofelements2d, N/A). 19 14 20 Examples: 21 extruded_vector = project3d(md, 'vector', vector2d, 'type', 'node', 'layer', 1, 'padding', NaN) 22 extruded_vector = project3d(md, 'vector', vector2d, 'type', 'element', 'padding', 0) 23 extruded_vector = project3d(md, 'vector', vector2d, 'type', 'node') 24 """ 15 arguments: 16 'vector': 2d vector 17 'type': 'element' or 'node' 18 19 options: 20 'layer' a layer number where vector should keep its values. If 21 not specified, all layers adopt the value of the 2d 22 vector. 23 'padding': default to 0 (value adopted by other 3d layers not 24 being projected. 25 26 Examples: 27 extruded_vector = project3d(md, 'vector', vector2d, 'type', 'node', 'layer', 1, 'padding', NaN) 28 extruded_vector = project3d(md, 'vector', vector2d, 'type', 'element', 'padding', 0) 29 extruded_vector = project3d(md, 'vector', vector2d, 'type', 'node') 30 ''' 25 31 26 32 #some regular checks … … 37 43 paddingvalue = options.getfieldvalue('padding', 0) #0 by default 38 44 39 vector1d = False 40 if isinstance(vector2d, np.ndarray) and np.ndim(vector2d) == 1: 41 vector1d = True 42 vector2d = vector2d.reshape(-1, ) 45 #Handle special case where vector2d is single element (differs from representation in MATLAB) 46 if isinstance(vector2d, (bool, int, float)): 47 projected_vector = vector2d 43 48 44 if isinstance(vector2d, (bool, int, float)) ornp.size(vector2d) == 1:49 if np.size(vector2d) == 1: 45 50 projected_vector = vector2d 46 51 … … 56 61 else: 57 62 raise TypeError("vector length not supported") 58 #Fill in63 #Fill in 59 64 if layer == 0: 60 65 for i in range(md.mesh.numberoflayers): … … 71 76 else: 72 77 raise TypeError("vector length not supported") 73 #Fill in78 #Fill in 74 79 if layer == 0: 75 80 for i in range(md.mesh.numberoflayers): … … 89 94 else: 90 95 raise TypeError("vector length not supported") 91 #Fill in96 #Fill in 92 97 if layer == 0: 93 98 for i in range(md.mesh.numberoflayers - 1): … … 104 109 else: 105 110 raise TypeError("vector length not supported") 106 #Fill in111 #Fill in 107 112 if layer == 0: 108 113 for i in range(md.mesh.numberoflayers - 1): … … 114 119 raise TypeError("project3d error message: unknown projection type") 115 120 116 if vector1d:117 projected_vector = projected_vector.reshape(-1, )118 119 121 return projected_vector -
issm/trunk-jpl/src/m/partition/partitioner.m
r25109 r25165 14 14 % Usage: 15 15 % partitionvector=partitioner(md,'package','chaco','npart',100,'weighting','on'); 16 % [partitionvector,md]=partitioner(md,'package','chaco','npart',100,'weighting','on'); 16 17 % 17 18 … … 36 37 %partitioning essentially happens in 2D. So partition in 2D, then 37 38 %extrude the partition vector vertically. 38 md3d=md; %save 39 md3d=md; %save for later 39 40 md.mesh.elements=md.mesh.elements2d; 40 41 md.mesh.x=md.mesh.x2d; … … 78 79 % partition into nparts 79 80 if isa(md.mesh,'mesh2d'), 80 part=Chaco(md.qmu.adjacency,weights,[],md.mesh.x, 81 part=Chaco(md.qmu.adjacency,weights,[],md.mesh.x,md.mesh.y,zeros(md.mesh.numberofvertices,1),method,npart,[])'+1; %index partitions from 1 up. like metis. 81 82 else 82 83 part=Chaco(md.qmu.adjacency,weights,[],md.mesh.x, md.mesh.y,md.mesh.z,method,npart,[])'+1; %index partitions from 1 up. like metis. -
issm/trunk-jpl/src/m/partition/partitioner.py
r25132 r25165 1 import copy 2 1 3 import numpy as np 2 4 3 5 from adjacency import * 4 6 from Chaco import * 5 import copy6 7 from mesh2d import * 7 8 from MeshPartition import * … … 10 11 11 12 12 def partitioner(md, * varargin):13 def partitioner(md, *args): 13 14 ''' 14 15 PARTITIONER - partition mesh 15 16 16 List of options to partitioner: 17 List of options to partitioner: 18 package: 'chaco', 'metis', or 'scotch' 19 npart: number of partitions 20 weighting: 'on' or 'off': default off 21 section: 1 by defaults(1=bisection, 2=quadrisection, 3=octasection) 22 recomputeadjacency: 'on' by default (set to 'off' to compute existing one) 23 type: 'node' or 'element' partition vector (default to 'node') 24 Output: partitionvector: the partition vector 17 25 18 package: 'chaco', 'metis', or 'scotch' 19 npart: number of partitions 20 weighting: 'on' or 'off': default off 21 section: 1 by defaults(1=bisection, 2=quadrisection, 3=octasection) 22 recomputeadjacency: 'on' by default (set to 'off' to compute existing one) 23 type: 'node' or 'element' partition vector (default to 'node') 24 Output: partitionvector: the partition vector 25 26 Usage: 27 partitionvector = partitioner(md, 'package', 'chaco', 'npart', 100, 'weighting', 'on') 26 Usage: 27 partitionvector, md = partitioner(md, 'package', 'chaco', 'npart', 100, 'weighting', 'on') 28 28 ''' 29 29 30 30 #get options: 31 options = pairoptions(* varargin)31 options = pairoptions(*args) 32 32 33 #get options: 33 #set defaults 34 package = options.getfieldvalue('package', 'chaco') 35 npart = options.getfieldvalue('npart', 10) 36 weighting = options.getfieldvalue('weighting', 'on') 34 37 section = options.getfieldvalue('section', 1) 35 weighting = options.getfieldvalue('weighting', 'on') 36 package = options.getfieldvalue('package', 'chaco') #default to chaco 37 npart = options.getfieldvalue('npart', 10) # default to 10 38 recomputeadjacency = options.getfieldvalue('recomputeadjacency', 'on') # default to on 39 vectortype = options.getfieldvalue('type', 'node') #default to node 38 recomputeadjacency = options.getfieldvalue('recomputeadjacency', 'on') 39 vectortype = options.getfieldvalue('type', 'node') 40 40 41 41 # Python only: short-circuit 42 42 if vectortype == 'element' and not package == 'linear': 43 raise RuntimeError('partitioner error message: package %s does not allow element partitions.' % package)43 raise RuntimeError('partitioner error message: package {} does not allow element partitions.'.format(package)) 44 44 45 if (md.mesh.dimension() == 3):45 if md.mesh.dimension() == 3: 46 46 #partitioning essentially happens in 2D. So partition in 2D, then 47 47 #extrude the partition vector vertically. 48 md3d = copy.deepcopy(md) 48 md3d = copy.deepcopy(md) # save for later 49 49 md.mesh.elements = md.mesh.elements2d 50 50 md.mesh.x = md.mesh.x2d … … 64 64 if package == 'chaco': 65 65 if vectortype == 'element': 66 raise RuntimeError('partitioner error message: package %s does not allow element partitions.' % package)66 raise RuntimeError('partitioner error message: package {} does not allow element partitions.'.format(package)) 67 67 else: 68 # 69 method = np.array([1, 1, 0, 0, 1, 1, 50, 0, 0.001, 7654321]) 68 # default method (from chaco.m) 69 method = np.array([1, 1, 0, 0, 1, 1, 50, 0, 0.001, 7654321]).conj().transpose() 70 70 method[0] = 3 # global method (3 = inertial (geometric)) 71 71 method[2] = 0 # vertex weights (0 = off, 1 = on) … … 81 81 weights = [] 82 82 83 method = method.reshape(-1, 1) # transpose to 1x10 instead of 1083 #method = method.reshape(-1, 1) # transpose to 1x10 instead of 10 84 84 85 85 # partition into nparts 86 86 if isinstance(md.mesh, mesh2d): 87 part = np.array(Chaco(md.qmu.adjacency, weights, np.array([]), md.mesh.x, md.mesh.y, np.zeros((md.mesh.numberofvertices, )), method, npart, np.array([]))).T + 1#index partitions from 1 up. like metis.87 part = Chaco(md.qmu.adjacency, weights, np.array([]), md.mesh.x, md.mesh.y, np.zeros((md.mesh.numberofvertices, 1)), method, npart, np.array([]))[0].conj().transpose() + 1 #index partitions from 1 up. like metis. 88 88 else: 89 part = np.array(Chaco(md.qmu.adjacency, weights, np.array([]), md.mesh.x, md.mesh.y, md.mesh.z, method, npart, np.array([]))).T + 1 #index partitions from 1 up. like metis. 90 89 part = Chaco(md.qmu.adjacency, weights, np.array([]), md.mesh.x, md.mesh.y, md.mesh.z, method, npart, np.array([]))[0].conj().transpose() + 1 #index partitions from 1 up. like metis. 91 90 elif package == 'scotch': 92 91 if vectortype == 'element': … … 116 115 117 116 else: 118 raise RuntimeError('partitioner error message: could not find %s partitioner' % package)117 raise RuntimeError('partitioner error message: could not find {} partitioner'.format(package)) 119 118 120 119 #extrude if we are in 3D: … … 122 121 md3d.qmu.vertex_weight = md.qmu.vertex_weight 123 122 md3d.qmu.adjacency = md.qmu.adjacency 124 md = md3d123 md = copy.deepcopy(md3d) 125 124 if vectortype == 'element': 126 part = project3d(md, 'vector', np.squeeze(part), 'type', 'element')125 part = project3d(md, 'vector', part.conj().transpose(), 'type', 'element') 127 126 else: 128 part = project3d(md, 'vector', np.squeeze(part), 'type', 'node')127 part = project3d(md, 'vector', part.conj().transpose(), 'type', 'node') 129 128 130 part = part.reshape(-1, 1) 129 if part.shape[0] == 1: 130 part = part.conj().transpose() 131 131 132 132 # Output -
issm/trunk-jpl/test/NightlyRun/test445.m
r25005 r25165 16 16 17 17 %dakota version 18 version=IssmConfig('_DAKOTA_VERSION_'); version=version(1:3); version=str2num(version); 18 version=IssmConfig('_DAKOTA_VERSION_'); 19 version=version(1:3); 20 version=str2num(version); 19 21 20 22 %partitioning -
issm/trunk-jpl/test/NightlyRun/test445.py
r25133 r25165 1 1 #Test Name: SquareSheetShelfSteaEnthalpyHO3dDakotaSampNeff 2 from os import getcwd 3 from socket import gethostname 4 2 5 import numpy as np 3 from os import getcwd 6 7 from ContourToMesh import * 8 from dmeth_params_set import * 4 9 from model import * 5 from socket import gethostname 10 from parameterize import * 11 from partitioner import * 12 from setflowequation import * 13 from setmask import * 14 from solve import * 6 15 from triangle import * 7 from setmask import * 8 from parameterize import * 9 from setflowequation import * 10 from solve import * 11 from partitioner import * 12 from dmeth_params_set import * 13 from ContourToMesh import * 16 14 17 15 18 #model not consistent: equality thickness = surface-base violated … … 24 27 md.thermal.isenthalpy = 1 25 28 md.thermal.isdynamicbasalspc = 1 26 md.initialization.waterfraction = np.zeros((md.mesh.numberofvertices ))27 md.initialization.watercolumn = np.zeros((md.mesh.numberofvertices ))29 md.initialization.waterfraction = np.zeros((md.mesh.numberofvertices, 1)) 30 md.initialization.watercolumn = np.zeros((md.mesh.numberofvertices, 1)) 28 31 29 32 md.friction.coupling = 3 … … 36 39 #partitioning 37 40 npart = 10 38 partition = partitioner(md, 'package', 'chaco', 'npart', npart, 'weighting', 'on')[0] - 1 41 partition, md = partitioner(md, 'package', 'chaco', 'npart', npart, 'weighting', 'on') 42 partition -= 1 39 43 md.qmu.isdakota = 1 40 44 … … 69 73 #method 70 74 md.qmu.method = dakota_method.dakota_method('nond_samp') 71 md.qmu.method = dmeth_params_set(md.qmu.method, 'seed', 1234, 'samples', 20, 'sample_type', 'random') 75 md.qmu.method = dmeth_params_set( 76 md.qmu.method, 77 'seed', 1234, 78 'samples', 20, 79 'sample_type', 'random' 80 ) 72 81 73 82 #parameters
Note:
See TracChangeset
for help on using the changeset viewer.