Changeset 13020
- Timestamp:
- 08/13/12 14:41:11 (13 years ago)
- Location:
- issm/trunk-jpl/src/m/classes
- Files:
-
- 38 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/balancethickness.m
r12663 r13020 27 27 function md = checkconsistency(obj,md,solution,analyses) % {{{ 28 28 %Early return 29 if solution~=BalancethicknessSolutionEnum , return; end29 if solution~=BalancethicknessSolutionEnum(), return; end 30 30 31 31 md = checkfield(md,'balancethickness.spcthickness','forcing',1); -
issm/trunk-jpl/src/m/classes/balancethickness.py
r12958 r13020 1 1 #module imports 2 2 from fielddisplay import fielddisplay 3 from EnumDefinitions import * 4 from checkfield import * 5 from WriteData import * 6 3 7 class balancethickness(object): 8 """ 9 BALANCETHICKNESS class definition 10 11 Usage: 12 balancethickness=balancethickness(); 13 """ 14 4 15 #properties 5 16 def __init__(self): 6 17 # {{{ Properties 7 self.spcthickness = float('NaN')8 self.thickening_rate 9 self.stabilization 18 self.spcthickness = float('NaN') 19 self.thickening_rate = float('NaN') 20 self.stabilization = 0 10 21 11 22 #set defaults … … 13 24 14 25 #}}} 15 def __repr__( obj):26 def __repr__(self): 16 27 # {{{ Display 17 28 18 29 string=' balance thickness solution parameters:' 19 30 20 string="%s\n\n%s"%(string,fielddisplay( obj,'spcthickness','thickness constraints (NaN means no constraint)'))21 string="%s\n%s"%(string,fielddisplay( obj,'thickening_rate','ice thickening rate used in the mass conservation (dh/dt)'))22 string="%s\n%s"%(string,fielddisplay( obj,'stabilization','0: None, 1: SU, 2: MacAyeal''s artificial diffusivity, 3:DG'))31 string="%s\n\n%s"%(string,fielddisplay(self,'spcthickness','thickness constraints (NaN means no constraint)')) 32 string="%s\n%s"%(string,fielddisplay(self,'thickening_rate','ice thickening rate used in the mass conservation (dh/dt)')) 33 string="%s\n%s"%(string,fielddisplay(self,'stabilization',"0: None, 1: SU, 2: MacAyeal's artificial diffusivity, 3:DG")) 23 34 return string 24 35 #}}} 25 def setdefaultparameters( obj):36 def setdefaultparameters(self): 26 37 # {{{setdefaultparameters 27 38 28 39 #Type of stabilization used 29 obj.stabilization=140 self.stabilization=1 30 41 31 return obj42 return self 32 43 #}}} 33 44 45 def checkconsistency(self,md,solution,analyses): # {{{ 46 #Early return 47 if not solution==BalancethicknessSolutionEnum(): 48 return md 49 50 md = checkfield(md,'balancethickness.spcthickness','forcing',1) 51 md = checkfield(md,'balancethickness.thickening_rate','size',[md.mesh.numberofvertices],'NaN',1) 52 md = checkfield(md,'balancethickness.stabilization','size',[1],'values',[0,1,2,3]) 53 54 return md 55 # }}} 56 57 def marshall(self,fid): # {{{ 58 WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1) 59 WriteData(fid,'object',self,'fieldname','thickening_rate','format','DoubleMat','mattype',1) 60 WriteData(fid,'object',self,'fieldname','stabilization','format','Integer') 61 # }}} 62 -
issm/trunk-jpl/src/m/classes/basalforcings.m
r12663 r13020 24 24 function md = checkconsistency(obj,md,solution,analyses) % {{{ 25 25 26 if ismember(PrognosticAnalysisEnum ,analyses) & ~(solution==TransientSolutionEnum& md.transient.isprognostic==0),26 if ismember(PrognosticAnalysisEnum(),analyses) & ~(solution==TransientSolutionEnum() & md.transient.isprognostic==0), 27 27 md = checkfield(md,'basalforcings.melting_rate','NaN',1,'forcing',1); 28 28 end 29 if ismember(BalancethicknessAnalysisEnum ,analyses),29 if ismember(BalancethicknessAnalysisEnum(),analyses), 30 30 md = checkfield(md,'basalforcings.melting_rate','NaN',1,'size',[md.mesh.numberofvertices 1]); 31 31 end 32 if ismember(ThermalAnalysisEnum ,analyses) & ~(solution==TransientSolutionEnum& md.transient.isthermal==0),32 if ismember(ThermalAnalysisEnum(),analyses) & ~(solution==TransientSolutionEnum() & md.transient.isthermal==0), 33 33 md = checkfield(md,'basalforcings.melting_rate','NaN',1,'forcing',1); 34 34 md = checkfield(md,'basalforcings.geothermalflux','NaN',1,'forcing',1,'>=',0); -
issm/trunk-jpl/src/m/classes/basalforcings.py
r12958 r13020 40 40 def checkconsistency(self,md,solution,analyses): # {{{ 41 41 42 if PrognosticAnalysisEnum in analyses and not (solution==TransientSolutionEnumand not md.transient.isprognostic):42 if PrognosticAnalysisEnum() in analyses and not (solution==TransientSolutionEnum() and not md.transient.isprognostic): 43 43 md = checkfield(md,'basalforcings.melting_rate','NaN',1,'forcing',1) 44 44 45 if BalancethicknessAnalysisEnum in analyses:45 if BalancethicknessAnalysisEnum() in analyses: 46 46 md = checkfield(md,'basalforcings.melting_rate','NaN',1,'size',[md.mesh.numberofvertices]) 47 47 48 if ThermalAnalysisEnum in analyses and not (solution==TransientSolutionEnumand not md.transient.isthermal):48 if ThermalAnalysisEnum() in analyses and not (solution==TransientSolutionEnum() and not md.transient.isthermal): 49 49 md = checkfield(md,'basalforcings.melting_rate','NaN',1,'forcing',1) 50 50 md = checkfield(md,'basalforcings.geothermalflux','NaN',1,'forcing',1,'>=',0) -
issm/trunk-jpl/src/m/classes/diagnostic.m
r12945 r13020 67 67 68 68 %Early return 69 if ~ismember(DiagnosticHorizAnalysisEnum ,analyses), return; end70 %if ~ismember(DiagnosticHorizAnalysisEnum ,analyses) | (solution==TransientSolutionEnum& md.transient.isdiagnostic==0), return; end69 if ~ismember(DiagnosticHorizAnalysisEnum(),analyses), return; end 70 %if ~ismember(DiagnosticHorizAnalysisEnum(),analyses) | (solution==TransientSolutionEnum() & md.transient.isdiagnostic==0), return; end 71 71 72 72 md = checkfield(md,'diagnostic.spcvx','forcing',1); … … 102 102 if any(sum(isnan(md.diagnostic.referential),2)==0), 103 103 pos=find(sum(isnan(md.diagnostic.referential),2)==0); 104 if any(abs(dot(md.diagnostic.referential(pos,1:3) ',md.diagnostic.referential(pos,4:6)'))>eps),105 md = checkmessage(md,['Vectors in diagnostic.referential (colum s 1 to 3 and 4 to 6) must be orthogonal']);104 if any(abs(dot(md.diagnostic.referential(pos,1:3),md.diagnostic.referential(pos,4:6),2))>eps), 105 md = checkmessage(md,['Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal']); 106 106 end 107 107 end … … 168 168 %marshall ice front 169 169 data=obj.icefront; 170 pos=find(data(:,end)==0); data(pos,end)=AirEnum ;171 pos=find(data(:,end)==1); data(pos,end)=WaterEnum ;172 pos=find(data(:,end)==2); data(pos,end)=IceEnum ;173 WriteData(fid,'data',data,'enum',DiagnosticIcefrontEnum ,'format','DoubleMat','mattype',3);170 pos=find(data(:,end)==0); data(pos,end)=AirEnum(); 171 pos=find(data(:,end)==1); data(pos,end)=WaterEnum(); 172 pos=find(data(:,end)==2); data(pos,end)=IceEnum(); 173 WriteData(fid,'data',data,'enum',DiagnosticIcefrontEnum(),'format','DoubleMat','mattype',3); 174 174 end % }}} 175 175 end -
issm/trunk-jpl/src/m/classes/diagnostic.py
r12958 r13020 1 1 #module imports 2 import numpy 3 import sys 2 4 from fielddisplay import fielddisplay 5 from EnumDefinitions import * 6 from checkfield import * 7 from WriteData import * 3 8 4 9 class diagnostic(object): 10 """ 11 DIAGNOSTIC class definition 12 13 Usage: 14 diagnostic=diagnostic(); 15 """ 16 5 17 #properties 6 18 def __init__(self): … … 29 41 30 42 #}}} 31 def __repr__( obj):43 def __repr__(self): 32 44 # {{{ Display 33 34 45 35 46 string='\n Diagnostic solution parameters:' 36 47 string="%s\n\n%s"%(string,' Convergence criteria:') 37 48 38 string="%s\n%s"%(string,fielddisplay( obj,'restol','mechanical equilibrium residual convergence criterion'))39 string="%s\n%s"%(string,fielddisplay( obj,'reltol','velocity relative convergence criterion, NaN -> not applied'))40 string="%s\n%s"%(string,fielddisplay( obj,'abstol','velocity absolute convergence criterion, NaN -> not applied'))41 string="%s\n%s"%(string,fielddisplay( obj,'isnewton','Apply Newton''s method instead of a Picard fixed point method'))42 string="%s\n%s"%(string,fielddisplay( obj,'maxiter','maximum number of nonlinear iterations'))43 string="%s\n%s"%(string,fielddisplay( obj,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)'))49 string="%s\n%s"%(string,fielddisplay(self,'restol','mechanical equilibrium residual convergence criterion')) 50 string="%s\n%s"%(string,fielddisplay(self,'reltol','velocity relative convergence criterion, NaN -> not applied')) 51 string="%s\n%s"%(string,fielddisplay(self,'abstol','velocity absolute convergence criterion, NaN -> not applied')) 52 string="%s\n%s"%(string,fielddisplay(self,'isnewton',"Apply Newton's method instead of a Picard fixed point method")) 53 string="%s\n%s"%(string,fielddisplay(self,'maxiter','maximum number of nonlinear iterations')) 54 string="%s\n%s"%(string,fielddisplay(self,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)')) 44 55 45 56 string="%s\n%s"%(string,' boundary conditions:') 46 57 47 string="%s\n%s"%(string,fielddisplay( obj,'spcvx','x-axis velocity constraint (NaN means no constraint)'))48 string="%s\n%s"%(string,fielddisplay( obj,'spcvy','y-axis velocity constraint (NaN means no constraint)'))49 string="%s\n%s"%(string,fielddisplay( obj,'spcvz','z-axis velocity constraint (NaN means no constraint)'))50 string="%s\n%s"%(string,fielddisplay( obj,'icefront','segments on ice front list (last column 0-> Air, 1-> Water, 2->Ice'))58 string="%s\n%s"%(string,fielddisplay(self,'spcvx','x-axis velocity constraint (NaN means no constraint)')) 59 string="%s\n%s"%(string,fielddisplay(self,'spcvy','y-axis velocity constraint (NaN means no constraint)')) 60 string="%s\n%s"%(string,fielddisplay(self,'spcvz','z-axis velocity constraint (NaN means no constraint)')) 61 string="%s\n%s"%(string,fielddisplay(self,'icefront','segments on ice front list (last column 0-> Air, 1-> Water, 2->Ice')) 51 62 52 63 string="%s\n%s"%(string,' Rift options:') 53 string="%s\n%s"%(string,fielddisplay( obj,'rift_penalty_threshold','threshold for instability of mechanical constraints'))54 string="%s\n%s"%(string,fielddisplay( obj,'rift_penalty_lock','number of iterations before rift penalties are locked'))64 string="%s\n%s"%(string,fielddisplay(self,'rift_penalty_threshold','threshold for instability of mechanical constraints')) 65 string="%s\n%s"%(string,fielddisplay(self,'rift_penalty_lock','number of iterations before rift penalties are locked')) 55 66 56 67 string="%s\n%s"%(string,' Penalty options:') 57 string="%s\n%s"%(string,fielddisplay( obj,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset'))58 string="%s\n%s"%(string,fielddisplay( obj,'vertex_pairing','pairs of vertices that are penalized'))68 string="%s\n%s"%(string,fielddisplay(self,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset')) 69 string="%s\n%s"%(string,fielddisplay(self,'vertex_pairing','pairs of vertices that are penalized')) 59 70 60 71 string="%s\n%s"%(string,' Other:') 61 string="%s\n%s"%(string,fielddisplay( obj,'shelf_dampening','use dampening for floating ice ? Only for Stokes model'))62 string="%s\n%s"%(string,fielddisplay( obj,'stokesreconditioning','multiplier for incompressibility equation. Only for Stokes model'))63 string="%s\n%s"%(string,fielddisplay( obj,'referential','local referential'))64 string="%s\n%s"%(string,fielddisplay( obj,'requested_outputs','additional outputs requested'))72 string="%s\n%s"%(string,fielddisplay(self,'shelf_dampening','use dampening for floating ice ? Only for Stokes model')) 73 string="%s\n%s"%(string,fielddisplay(self,'stokesreconditioning','multiplier for incompressibility equation. Only for Stokes model')) 74 string="%s\n%s"%(string,fielddisplay(self,'referential','local referential')) 75 string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested')) 65 76 66 77 return string 67 78 #}}} 68 79 69 def setdefaultparameters( obj):80 def setdefaultparameters(self): 70 81 # {{{setdefaultparameters 71 82 #maximum of non-linear iterations. 72 obj.maxiter=10083 self.maxiter=100 73 84 74 85 #Convergence criterion: absolute, relative and residual 75 obj.restol=10**-4;76 obj.reltol=0.0177 obj.abstol=1086 self.restol=10**-4 87 self.reltol=0.01 88 self.abstol=10 78 89 79 obj.stokesreconditioning=10**1380 obj.shelf_dampening=090 self.stokesreconditioning=10**13 91 self.shelf_dampening=0 81 92 82 93 #Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor 83 obj.penalty_factor=394 self.penalty_factor=3 84 95 85 96 #coefficient to update the viscosity between each iteration of 86 97 #a diagnostic according to the following formula 87 98 #viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1)) 88 obj.viscosity_overshoot=099 self.viscosity_overshoot=0 89 100 90 101 #Stop the iterations of rift if below a threshold 91 obj.rift_penalty_threshold=0102 self.rift_penalty_threshold=0 92 103 93 104 #in some solutions, it might be needed to stop a run when only 94 105 #a few constraints remain unstable. For thermal computation, this 95 106 #parameter is often used. 96 obj.rift_penalty_lock=10107 self.rift_penalty_lock=10 97 108 98 return obj109 return self 99 110 #}}} 111 112 def checkconsistency(self,md,solution,analyses): # {{{ 113 114 #Early return 115 if not DiagnosticHorizAnalysisEnum() in analyses: 116 return md 117 #if (not DiagnosticHorizAnalysisEnum() in analyses) | (solution==TransientSolutionEnum() and not md.transient.isdiagnostic): 118 # return md 119 120 md = checkfield(md,'diagnostic.spcvx','forcing',1) 121 md = checkfield(md,'diagnostic.spcvy','forcing',1) 122 if md.mesh.dimension==3: 123 md = checkfield(md,'diagnostic.spcvz','forcing',1) 124 md = checkfield(md,'diagnostic.restol','size',[1],'>',0) 125 md = checkfield(md,'diagnostic.reltol','size',[1]) 126 md = checkfield(md,'diagnostic.abstol','size',[1]) 127 md = checkfield(md,'diagnostic.isnewton','numel',1,'values',[0,1]) 128 md = checkfield(md,'diagnostic.stokesreconditioning','size',[1,1],'NaN',1) 129 md = checkfield(md,'diagnostic.viscosity_overshoot','size',[1,1],'NaN',1) 130 if md.mesh.dimension==2: 131 md = checkfield(md,'diagnostic.icefront','size',[float('NaN'),4],'NaN',1) 132 else: 133 md = checkfield(md,'diagnostic.icefront','size',[float('NaN'),6],'NaN',1) 134 md = checkfield(md,'diagnostic.icefront[:,-1]','values',[0,1,2]) 135 md = checkfield(md,'diagnostic.maxiter','size',[1],'>=',1) 136 md = checkfield(md,'diagnostic.referential','size',[md.mesh.numberofvertices,6]) 137 if not md.diagnostic.requested_outputs: 138 md = checkfield(md,'diagnostic.requested_outputs','size',[float('NaN'),1]) 139 140 #singular solution 141 #if ~any((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy))==2), 142 if not any((numpy.logical_not(numpy.isnan(md.diagnostic.spcvx))+numpy.logical_not(numpy.isnan(md.diagnostic.spcvy)))==2): 143 md.checkmessage("model is not well posed (singular). You need at least one node with fixed velocity!") 144 #CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES 145 if any(not numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)==0 and not numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)==6): 146 md.checkmessage("Each line of diagnostic.referential should contain either only NaN values or no NaN values") 147 #CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL 148 if any(numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)==0): 149 pos=[i for i,item in enumerate(numpy.sum(numpy.isnan(md.diagnostic.referential),axis=1)) if item==0] 150 # numpy.inner (and numpy.dot) calculate all the dot product permutations, resulting in a full matrix multiply 151 # if any(numpy.abs(numpy.inner(md.diagnostic.referential[pos,0:2],md.diagnostic.referential[pos,3:5]).diagonal())>sys.float_info.epsilon): 152 # md.checkmessage("Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal") 153 for item in md.diagnostic.referential[pos,:]: 154 if numpy.abs(numpy.inner(item[0:2],item[3:5]))>sys.float_info.epsilon: 155 md.checkmessage("Vectors in diagnostic.referential (columns 1 to 3 and 4 to 6) must be orthogonal") 156 #CHECK THAT NO rotation specified for FS Grounded ice at base 157 if md.mesh.dimension==3 and md.flowequation.isstokes: 158 pos=numpy.nonzero(numpy.logical_and(md.mask.vertexongroundedice,md.mesh.vertexonbed)) 159 if any(not numpy.isnan(md.diagnostic.referential[pos,:])): 160 md.checkmessage("no referential should be specified for basal vertices of grounded ice") 161 162 return md 163 # }}} 164 165 def marshall(self,fid): # {{{ 166 WriteData(fid,'object',self,'fieldname','spcvx','format','DoubleMat','mattype',1) 167 WriteData(fid,'object',self,'fieldname','spcvy','format','DoubleMat','mattype',1) 168 WriteData(fid,'object',self,'fieldname','spcvz','format','DoubleMat','mattype',1) 169 WriteData(fid,'object',self,'fieldname','restol','format','Double') 170 WriteData(fid,'object',self,'fieldname','reltol','format','Double') 171 WriteData(fid,'object',self,'fieldname','abstol','format','Double') 172 WriteData(fid,'object',self,'fieldname','isnewton','format','Boolean') 173 WriteData(fid,'object',self,'fieldname','stokesreconditioning','format','Double') 174 WriteData(fid,'object',self,'fieldname','viscosity_overshoot','format','Double') 175 WriteData(fid,'object',self,'fieldname','maxiter','format','Integer') 176 WriteData(fid,'object',self,'fieldname','shelf_dampening','format','Integer') 177 WriteData(fid,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3) 178 WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double') 179 WriteData(fid,'object',self,'fieldname','rift_penalty_lock','format','Integer') 180 WriteData(fid,'object',self,'fieldname','rift_penalty_threshold','format','Integer') 181 WriteData(fid,'object',self,'fieldname','referential','format','DoubleMat','mattype',1) 182 WriteData(fid,'object',self,'fieldname','requested_outputs','format','DoubleMat','mattype',3) 183 184 #marshall ice front 185 data=self.icefront 186 data[[i for i,item in enumerate(data[:,-1]) if item==0],-1]=AirEnum() 187 data[[i for i,item in enumerate(data[:,-1]) if item==1],-1]=WaterEnum() 188 data[[i for i,item in enumerate(data[:,-1]) if item==2],-1]=IceEnum() 189 WriteData(fid,'data',data,'enum',DiagnosticIcefrontEnum(),'format','DoubleMat','mattype',3) 190 # }}} 191 -
issm/trunk-jpl/src/m/classes/flaim.m
r12663 r13020 35 35 36 36 %Early return 37 if solution~=FlaimSolutionEnum , return; end37 if solution~=FlaimSolutionEnum(), return; end 38 38 39 39 md = checkfield(md,'flaim.tracks','file',1); -
issm/trunk-jpl/src/m/classes/flowequation.m
r12949 r13020 29 29 function md = checkconsistency(obj,md,solution,analyses) % {{{ 30 30 31 if ismember(DiagnosticHorizAnalysisEnum ,analyses),31 if ismember(DiagnosticHorizAnalysisEnum(),analyses), 32 32 33 33 md = checkfield(md,'flowequation.ismacayealpattyn','numel',1,'values',[0 1]); … … 48 48 end 49 49 end 50 if ismember(DiagnosticHutterAnalysisEnum ,analyses),50 if ismember(DiagnosticHutterAnalysisEnum(),analyses), 51 51 if any(md.flowequation.element_equation==1), 52 52 if(md.flowequation.element_equation & md.mask.elementonfloatingice), … … 79 79 %convert approximations to enums 80 80 data=obj.vertex_equation; 81 pos=find(data==0); data(pos,end)=NoneApproximationEnum ;82 pos=find(data==1); data(pos,end)=HutterApproximationEnum ;83 pos=find(data==2); data(pos,end)=MacAyealApproximationEnum ;84 pos=find(data==3); data(pos,end)=PattynApproximationEnum ;85 pos=find(data==4); data(pos,end)=StokesApproximationEnum ;86 pos=find(data==5); data(pos,end)=MacAyealPattynApproximationEnum ;87 pos=find(data==6); data(pos,end)=MacAyealStokesApproximationEnum ;88 pos=find(data==7); data(pos,end)=PattynStokesApproximationEnum ;89 WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum ,'format','DoubleMat','mattype',1);81 pos=find(data==0); data(pos,end)=NoneApproximationEnum(); 82 pos=find(data==1); data(pos,end)=HutterApproximationEnum(); 83 pos=find(data==2); data(pos,end)=MacAyealApproximationEnum(); 84 pos=find(data==3); data(pos,end)=PattynApproximationEnum(); 85 pos=find(data==4); data(pos,end)=StokesApproximationEnum(); 86 pos=find(data==5); data(pos,end)=MacAyealPattynApproximationEnum(); 87 pos=find(data==6); data(pos,end)=MacAyealStokesApproximationEnum(); 88 pos=find(data==7); data(pos,end)=PattynStokesApproximationEnum(); 89 WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1); 90 90 data=obj.element_equation; 91 pos=find(data==0); data(pos,end)=NoneApproximationEnum ;92 pos=find(data==1); data(pos,end)=HutterApproximationEnum ;93 pos=find(data==2); data(pos,end)=MacAyealApproximationEnum ;94 pos=find(data==3); data(pos,end)=PattynApproximationEnum ;95 pos=find(data==4); data(pos,end)=StokesApproximationEnum ;96 pos=find(data==5); data(pos,end)=MacAyealPattynApproximationEnum ;97 pos=find(data==6); data(pos,end)=MacAyealStokesApproximationEnum ;98 pos=find(data==7); data(pos,end)=PattynStokesApproximationEnum ;99 WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum ,'format','DoubleMat','mattype',2);91 pos=find(data==0); data(pos,end)=NoneApproximationEnum(); 92 pos=find(data==1); data(pos,end)=HutterApproximationEnum(); 93 pos=find(data==2); data(pos,end)=MacAyealApproximationEnum(); 94 pos=find(data==3); data(pos,end)=PattynApproximationEnum(); 95 pos=find(data==4); data(pos,end)=StokesApproximationEnum(); 96 pos=find(data==5); data(pos,end)=MacAyealPattynApproximationEnum(); 97 pos=find(data==6); data(pos,end)=MacAyealStokesApproximationEnum(); 98 pos=find(data==7); data(pos,end)=PattynStokesApproximationEnum(); 99 WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2); 100 100 end % }}} 101 101 end -
issm/trunk-jpl/src/m/classes/flowequation.py
r12958 r13020 53 53 def checkconsistency(self,md,solution,analyses): # {{{ 54 54 55 if DiagnosticHorizAnalysisEnum in analyses:55 if DiagnosticHorizAnalysisEnum() in analyses: 56 56 md = checkfield(md,'flowequation.ismacayealpattyn','numel',1,'values',[0,1]) 57 57 md = checkfield(md,'flowequation.ishutter','numel',1,'values',[0,1]) … … 69 69 md.checkmessage("no element types set for this model. At least one of ismacayealpattyn, ishutter or isstokes need to be =1") 70 70 71 if DiagnosticHutterAnalysisEnum in analyses:71 if DiagnosticHutterAnalysisEnum() in analyses: 72 72 if any(md.flowequation.element_equation==1): 73 73 if any(numpy.logical_and(md.flowequation.element_equation,md.mask.elementonfloatingice)): … … 86 86 #convert approximations to enums 87 87 data=self.vertex_equation 88 data[[i for i,item in enumerate(data) if item==0]]=NoneApproximationEnum 89 data[[i for i,item in enumerate(data) if item==1]]=HutterApproximationEnum 90 data[[i for i,item in enumerate(data) if item==2]]=MacAyealApproximationEnum 91 data[[i for i,item in enumerate(data) if item==3]]=PattynApproximationEnum 92 data[[i for i,item in enumerate(data) if item==4]]=StokesApproximationEnum 93 data[[i for i,item in enumerate(data) if item==5]]=MacAyealPattynApproximationEnum 94 data[[i for i,item in enumerate(data) if item==6]]=MacAyealStokesApproximationEnum 95 data[[i for i,item in enumerate(data) if item==7]]=PattynStokesApproximationEnum 96 WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum ,'format','DoubleMat','mattype',1)88 data[[i for i,item in enumerate(data) if item==0]]=NoneApproximationEnum() 89 data[[i for i,item in enumerate(data) if item==1]]=HutterApproximationEnum() 90 data[[i for i,item in enumerate(data) if item==2]]=MacAyealApproximationEnum() 91 data[[i for i,item in enumerate(data) if item==3]]=PattynApproximationEnum() 92 data[[i for i,item in enumerate(data) if item==4]]=StokesApproximationEnum() 93 data[[i for i,item in enumerate(data) if item==5]]=MacAyealPattynApproximationEnum() 94 data[[i for i,item in enumerate(data) if item==6]]=MacAyealStokesApproximationEnum() 95 data[[i for i,item in enumerate(data) if item==7]]=PattynStokesApproximationEnum() 96 WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1) 97 97 data=self.element_equation 98 data[[i for i,item in enumerate(data) if item==0]]=NoneApproximationEnum 99 data[[i for i,item in enumerate(data) if item==1]]=HutterApproximationEnum 100 data[[i for i,item in enumerate(data) if item==2]]=MacAyealApproximationEnum 101 data[[i for i,item in enumerate(data) if item==3]]=PattynApproximationEnum 102 data[[i for i,item in enumerate(data) if item==4]]=StokesApproximationEnum 103 data[[i for i,item in enumerate(data) if item==5]]=MacAyealPattynApproximationEnum 104 data[[i for i,item in enumerate(data) if item==6]]=MacAyealStokesApproximationEnum 105 data[[i for i,item in enumerate(data) if item==7]]=PattynStokesApproximationEnum 106 WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum ,'format','DoubleMat','mattype',2)98 data[[i for i,item in enumerate(data) if item==0]]=NoneApproximationEnum() 99 data[[i for i,item in enumerate(data) if item==1]]=HutterApproximationEnum() 100 data[[i for i,item in enumerate(data) if item==2]]=MacAyealApproximationEnum() 101 data[[i for i,item in enumerate(data) if item==3]]=PattynApproximationEnum() 102 data[[i for i,item in enumerate(data) if item==4]]=StokesApproximationEnum() 103 data[[i for i,item in enumerate(data) if item==5]]=MacAyealPattynApproximationEnum() 104 data[[i for i,item in enumerate(data) if item==6]]=MacAyealStokesApproximationEnum() 105 data[[i for i,item in enumerate(data) if item==7]]=PattynStokesApproximationEnum() 106 WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2) 107 107 # }}} 108 108 -
issm/trunk-jpl/src/m/classes/friction.m
r12663 r13020 25 25 26 26 %Early return 27 if ~ismember(DiagnosticHorizAnalysisEnum ,analyses) & ~ismember(ThermalAnalysisEnum,analyses), return; end27 if ~ismember(DiagnosticHorizAnalysisEnum(),analyses) & ~ismember(ThermalAnalysisEnum(),analyses), return; end 28 28 29 29 md = checkfield(md,'friction.coefficient','NaN',1,'size',[md.mesh.numberofvertices 1]); -
issm/trunk-jpl/src/m/classes/friction.py
r12958 r13020 41 41 42 42 #Early return 43 if not DiagnosticHorizAnalysisEnum in analyses and not ThermalAnalysisEnumin analyses:43 if not DiagnosticHorizAnalysisEnum() in analyses and not ThermalAnalysisEnum() in analyses: 44 44 return md 45 45 -
issm/trunk-jpl/src/m/classes/geometry.m
r12663 r13020 32 32 md = checkmessage(md,['equality thickness=surface-bed violated']); 33 33 end 34 if solution==TransientSolutionEnum & md.transient.isgroundingline,34 if solution==TransientSolutionEnum() & md.transient.isgroundingline, 35 35 md = checkfield(md,'geometry.bathymetry','NaN',1,'size',[md.mesh.numberofvertices 1]); 36 36 end … … 47 47 end % }}} 48 48 function marshall(obj,fid) % {{{ 49 WriteData(fid,'data',obj.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum );50 WriteData(fid,'data',obj.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum );51 WriteData(fid,'data',obj.bed,'format','DoubleMat','mattype',1,'enum',BedEnum );52 WriteData(fid,'data',obj.bathymetry,'format','DoubleMat','mattype',1,'enum',BathymetryEnum );49 WriteData(fid,'data',obj.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum()); 50 WriteData(fid,'data',obj.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum()); 51 WriteData(fid,'data',obj.bed,'format','DoubleMat','mattype',1,'enum',BedEnum()); 52 WriteData(fid,'data',obj.bathymetry,'format','DoubleMat','mattype',1,'enum',BathymetryEnum()); 53 53 WriteData(fid,'object',obj,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1); 54 54 end % }}} -
issm/trunk-jpl/src/m/classes/geometry.py
r12958 r13020 52 52 md.checkmessage("equality thickness=surface-bed violated") 53 53 end 54 if solution==TransientSolutionEnum and md.transient.isgroundingline:54 if solution==TransientSolutionEnum() and md.transient.isgroundingline: 55 55 md = checkfield(md,'geometry.bathymetry','NaN',1,'size',[md.mesh.numberofvertices]) 56 56 … … 59 59 60 60 def marshall(self,fid): # {{{ 61 WriteData(fid,'data',self.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum )62 WriteData(fid,'data',self.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum )63 WriteData(fid,'data',self.bed,'format','DoubleMat','mattype',1,'enum',BedEnum )64 WriteData(fid,'data',self.bathymetry,'format','DoubleMat','mattype',1,'enum',BathymetryEnum )61 WriteData(fid,'data',self.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum()) 62 WriteData(fid,'data',self.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum()) 63 WriteData(fid,'data',self.bed,'format','DoubleMat','mattype',1,'enum',BedEnum()) 64 WriteData(fid,'data',self.bathymetry,'format','DoubleMat','mattype',1,'enum',BathymetryEnum()) 65 65 WriteData(fid,'object',self,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1) 66 66 # }}} -
issm/trunk-jpl/src/m/classes/groundingline.m
r12663 r13020 36 36 md = checkmessage(md,['requesting grounding line migration, but bathymetry is absent!']); 37 37 end 38 pos=find(md.mask.vertexongroundedice); 38 pos=find(md.mask.vertexongroundedice); 39 39 if any(abs(md.geometry.bed(pos)-md.geometry.bathymetry(pos))>10^-10), 40 md = checkmessage(md,['bathymetry not equal to bed on grounded ice 40 md = checkmessage(md,['bathymetry not equal to bed on grounded ice!']); 41 41 end 42 pos=find(md.mask.vertexonfloatingice); 42 pos=find(md.mask.vertexonfloatingice); 43 43 if any(md.geometry.bathymetry(pos)-md.geometry.bed(pos)>10^-9), 44 md = checkmessage(md,['bathymetry superior to bed on floating ice 44 md = checkmessage(md,['bathymetry superior to bed on floating ice!']); 45 45 end 46 46 end … … 55 55 end % }}} 56 56 function marshall(obj,fid) % {{{ 57 WriteData(fid,'data',StringToEnum(obj.migration),'enum',GroundinglineMigrationEnum ,'format','Integer');57 WriteData(fid,'data',StringToEnum(obj.migration),'enum',GroundinglineMigrationEnum(),'format','Integer'); 58 58 WriteData(fid,'object',obj,'fieldname','melting_rate','format','Double'); 59 59 end % }}} -
issm/trunk-jpl/src/m/classes/groundingline.py
r12958 r13020 1 1 #module imports 2 import numpy 2 3 from fielddisplay import fielddisplay 4 from EnumDefinitions import * 5 from checkfield import * 6 from WriteData import * 7 from MatlabFuncs import * 3 8 4 9 class groundingline(object): 10 """ 11 CONSTANTS class definition 12 13 Usage: 14 groundingline=groundingline(); 15 """ 16 5 17 #properties 6 18 def __init__(self): … … 13 25 14 26 #}}} 15 def __repr__( obj):27 def __repr__(self): 16 28 # {{{ Display 17 29 string=' grounding line solution parameters:' 18 30 19 string="%s\n\n%s"%(string,fielddisplay( obj,'migration','type of grounding line migration: ''SoftMigration'',''AgressiveMigration'' or ''None'''))20 string="%s\n%s"%(string,fielddisplay( obj,'melting_rate','melting rate applied when previously grounded parts start floating'))31 string="%s\n\n%s"%(string,fielddisplay(self,'migration','type of grounding line migration: ''SoftMigration'',''AgressiveMigration'' or ''None''')) 32 string="%s\n%s"%(string,fielddisplay(self,'melting_rate','melting rate applied when previously grounded parts start floating')) 21 33 return string 22 34 #}}} 23 def setdefaultparameters( obj):35 def setdefaultparameters(self): 24 36 # {{{setdefaultparameters 25 37 26 38 #Type of migration 27 obj.migration='None'39 self.migration='None' 28 40 29 41 #basal melting rate correction: 30 obj.melting_rate=0;42 self.melting_rate=0; 31 43 32 return obj44 return self 33 45 #}}} 34 46 47 def checkconsistency(self,md,solution,analyses): # {{{ 48 49 md = checkfield(md,'groundingline.migration','values',['None','AgressiveMigration','SoftMigration']) 50 51 if not strcmp(self.migration,'None'): 52 if any(numpy.isnan(md.geometry.bathymetry)): 53 md.checkmessage("requesting grounding line migration, but bathymetry is absent!") 54 pos=numpy.nonzero(md.mask.vertexongroundedice) 55 if any(numpy.abs(md.geometry.bed[pos]-md.geometry.bathymetry[pos])>10**-10): 56 md.checkmessage("bathymetry not equal to bed on grounded ice!") 57 pos=numpy.nonzero(md.mask.vertexonfloatingice) 58 if any(md.geometry.bathymetry[pos]-md.geometry.bed[pos]>10**-9): 59 md.checkmessage("bathymetry superior to bed on floating ice!") 60 61 return md 62 # }}} 63 64 def marshall(self,fid): # {{{ 65 WriteData(fid,'data',StringToEnum(self.migration),'enum',GroundinglineMigrationEnum(),'format','Integer') 66 WriteData(fid,'object',self,'fieldname','melting_rate','format','Double') 67 # }}} 68 -
issm/trunk-jpl/src/m/classes/hydrology.m
r12663 r13020 38 38 39 39 %Early return 40 if ~ismember(HydrologyAnalysisEnum ,analyses), return; end40 if ~ismember(HydrologyAnalysisEnum(),analyses), return; end 41 41 42 42 md = checkfield(md,'hydrology.spcwatercolumn','forcing',1); … … 57 57 function marshall(obj,fid) % {{{ 58 58 WriteData(fid,'object',obj,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1); 59 WriteData(fid,'object',obj,'fieldname','n','format','Double'); 59 WriteData(fid,'object',obj,'fieldname','n','format','Double'); 60 60 WriteData(fid,'object',obj,'fieldname','CR','format','Double'); 61 61 WriteData(fid,'object',obj,'fieldname','p','format','Double'); -
issm/trunk-jpl/src/m/classes/hydrology.py
r12958 r13020 1 1 #module imports 2 2 from fielddisplay import fielddisplay 3 from EnumDefinitions import * 4 from checkfield import * 5 from WriteData import * 3 6 4 7 class hydrology(object): 8 """ 9 HYDROLOGY class definition 10 11 Usage: 12 hydrology=hydrology(); 13 """ 14 5 15 #properties 6 16 def __init__(self): … … 17 27 self.setdefaultparameters() 18 28 19 20 29 #}}} 21 def __repr__( obj):30 def __repr__(self): 22 31 # {{{ Display 23 32 24 33 string=' hydrology solution parameters:' 25 string="%s\n\n%s"%(string,fielddisplay( obj,'spcwatercolumn','water thickness constraints (NaN means no constraint)'))26 string="%s\n%s"%(string,fielddisplay( obj,'n','Manning roughness coefficient'))27 string="%s\n%s"%(string,fielddisplay( obj,'CR','tortuosity parameter'))28 string="%s\n%s"%(string,fielddisplay( obj,'p','dimensionless exponent in Manning velocity formula'))29 string="%s\n%s"%(string,fielddisplay( obj,'q','dimensionless exponent in Manning velocity formula'))30 string="%s\n%s"%(string,fielddisplay( obj,'kn','parameter in effective pressure formula'))31 string="%s\n%s"%(string,fielddisplay( obj,'stabilization','artificial diffusivity (default is 1). can be more than 1 to increase diffusivity.'))34 string="%s\n\n%s"%(string,fielddisplay(self,'spcwatercolumn','water thickness constraints (NaN means no constraint)')) 35 string="%s\n%s"%(string,fielddisplay(self,'n','Manning roughness coefficient')) 36 string="%s\n%s"%(string,fielddisplay(self,'CR','tortuosity parameter')) 37 string="%s\n%s"%(string,fielddisplay(self,'p','dimensionless exponent in Manning velocity formula')) 38 string="%s\n%s"%(string,fielddisplay(self,'q','dimensionless exponent in Manning velocity formula')) 39 string="%s\n%s"%(string,fielddisplay(self,'kn','parameter in effective pressure formula')) 40 string="%s\n%s"%(string,fielddisplay(self,'stabilization','artificial diffusivity (default is 1). can be more than 1 to increase diffusivity.')) 32 41 return string 33 42 #}}} 34 43 35 def setdefaultparameters( obj):44 def setdefaultparameters(self): 36 45 # {{{setdefaultparameters 37 46 38 47 #Parameters from Johnson's 2002 thesis, section 3.5.4 39 obj.n=.0240 obj.CR=.0141 obj.p=242 obj.q=143 obj.kn=048 self.n=.02 49 self.CR=.01 50 self.p=2 51 self.q=1 52 self.kn=0 44 53 45 54 #Type of stabilization to use 0:nothing 1:artificial_diffusivity 46 obj.stabilization=155 self.stabilization=1 47 56 48 return obj57 return self 49 58 #}}} 50 59 60 def checkconsistency(self,md,solution,analyses): # {{{ 61 62 #Early return 63 if not HydrologyAnalysisEnum() in analyses: 64 return md 65 66 md = checkfield(md,'hydrology.spcwatercolumn','forcing',1) 67 md = checkfield(md,'hydrology.stabilization','>=',0) 68 69 return md 70 # }}} 71 72 def marshall(self,fid): # {{{ 73 WriteData(fid,'object',self,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1) 74 WriteData(fid,'object',self,'fieldname','n','format','Double') 75 WriteData(fid,'object',self,'fieldname','CR','format','Double') 76 WriteData(fid,'object',self,'fieldname','p','format','Double') 77 WriteData(fid,'object',self,'fieldname','q','format','Double') 78 WriteData(fid,'object',self,'fieldname','kn','format','Double') 79 WriteData(fid,'object',self,'fieldname','stabilization','format','Double') 80 # }}} 81 -
issm/trunk-jpl/src/m/classes/initialization.m
r12949 r13020 28 28 end % }}} 29 29 function md = checkconsistency(obj,md,solution,analyses) % {{{ 30 if ismember(DiagnosticHorizAnalysisEnum ,analyses)30 if ismember(DiagnosticHorizAnalysisEnum(),analyses) 31 31 if ~(isnan(md.initialization.vx) | isnan(md.initialization.vy)), 32 32 md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]); … … 34 34 end 35 35 end 36 if ismember(PrognosticAnalysisEnum ,analyses),36 if ismember(PrognosticAnalysisEnum(),analyses), 37 37 md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]); 38 38 md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]); 39 39 end 40 if ismember(HydrologyAnalysisEnum ,analyses),40 if ismember(HydrologyAnalysisEnum(),analyses), 41 41 md = checkfield(md,'initialization.watercolumn','NaN',1,'size',[md.mesh.numberofvertices 1]); 42 42 end 43 if ismember(BalancethicknessAnalysisEnum ,analyses),43 if ismember(BalancethicknessAnalysisEnum(),analyses), 44 44 md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]); 45 45 md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]); … … 49 49 end 50 50 end 51 if ismember(ThermalAnalysisEnum ,analyses),51 if ismember(ThermalAnalysisEnum(),analyses), 52 52 md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]); 53 53 md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]); … … 55 55 md = checkfield(md,'initialization.pressure','NaN',1,'size',[md.mesh.numberofvertices 1]); 56 56 end 57 if (ismember(EnthalpyAnalysisEnum ,analyses) & md.thermal.isenthalpy) | solution==EnthalpySolutionEnum,57 if (ismember(EnthalpyAnalysisEnum(),analyses) & md.thermal.isenthalpy) | solution==EnthalpySolutionEnum(), 58 58 md = checkfield(md,'initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices 1]); 59 59 end … … 73 73 end % }}} 74 74 function marshall(obj,fid) % {{{ 75 WriteData(fid,'data',obj.vx,'format','DoubleMat','mattype',1,'enum',VxEnum );76 WriteData(fid,'data',obj.vy,'format','DoubleMat','mattype',1,'enum',VyEnum );77 WriteData(fid,'data',obj.vz,'format','DoubleMat','mattype',1,'enum',VzEnum );78 WriteData(fid,'data',obj.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum );79 WriteData(fid,'data',obj.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum );80 WriteData(fid,'data',obj.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum );81 WriteData(fid,'data',obj.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum );75 WriteData(fid,'data',obj.vx,'format','DoubleMat','mattype',1,'enum',VxEnum()); 76 WriteData(fid,'data',obj.vy,'format','DoubleMat','mattype',1,'enum',VyEnum()); 77 WriteData(fid,'data',obj.vz,'format','DoubleMat','mattype',1,'enum',VzEnum()); 78 WriteData(fid,'data',obj.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum()); 79 WriteData(fid,'data',obj.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum()); 80 WriteData(fid,'data',obj.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum()); 81 WriteData(fid,'data',obj.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum()); 82 82 end % }}} 83 83 end -
issm/trunk-jpl/src/m/classes/initialization.py
r12958 r13020 53 53 54 54 def checkconsistency(self,md,solution,analyses): # {{{ 55 if DiagnosticHorizAnalysisEnum in analyses:55 if DiagnosticHorizAnalysisEnum() in analyses: 56 56 if not any(numpy.isnan(md.initialization.vx) or numpy.isnan(md.initialization.vy)): 57 57 md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices]) 58 58 md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices]) 59 if PrognosticAnalysisEnum in analyses:59 if PrognosticAnalysisEnum() in analyses: 60 60 md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices]) 61 61 md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices]) 62 if HydrologyAnalysisEnum in analyses:62 if HydrologyAnalysisEnum() in analyses: 63 63 md = checkfield(md,'initialization.watercolumn','NaN',1,'size',[md.mesh.numberofvertices]) 64 if BalancethicknessAnalysisEnum in analyses:64 if BalancethicknessAnalysisEnum() in analyses: 65 65 md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices]) 66 66 md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices]) … … 69 69 numpy.sum(numpy.abs(md.initialization.vy[md.mesh.elements.astype(int)-1]),axis=1)==0)): 70 70 md.checkmessage("at least one triangle has all its vertices with a zero velocity") 71 if ThermalAnalysisEnum in analyses:71 if ThermalAnalysisEnum() in analyses: 72 72 md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices]) 73 73 md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices]) 74 74 md = checkfield(md,'initialization.vz','NaN',1,'size',[md.mesh.numberofvertices]) 75 75 md = checkfield(md,'initialization.pressure','NaN',1,'size',[md.mesh.numberofvertices]) 76 if (EnthalpyAnalysisEnum in analyses and md.thermal.isenthalpy) or solution==EnthalpySolutionEnum:76 if (EnthalpyAnalysisEnum() in analyses and md.thermal.isenthalpy) or solution==EnthalpySolutionEnum(): 77 77 md = checkfield(md,'initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices]) 78 78 … … 81 81 82 82 def marshall(self,fid): # {{{ 83 WriteData(fid,'data',self.vx,'format','DoubleMat','mattype',1,'enum',VxEnum )84 WriteData(fid,'data',self.vy,'format','DoubleMat','mattype',1,'enum',VyEnum )85 WriteData(fid,'data',self.vz,'format','DoubleMat','mattype',1,'enum',VzEnum )86 WriteData(fid,'data',self.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum )87 WriteData(fid,'data',self.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum )88 WriteData(fid,'data',self.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum )89 WriteData(fid,'data',self.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum )83 WriteData(fid,'data',self.vx,'format','DoubleMat','mattype',1,'enum',VxEnum()) 84 WriteData(fid,'data',self.vy,'format','DoubleMat','mattype',1,'enum',VyEnum()) 85 WriteData(fid,'data',self.vz,'format','DoubleMat','mattype',1,'enum',VzEnum()) 86 WriteData(fid,'data',self.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum()) 87 WriteData(fid,'data',self.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum()) 88 WriteData(fid,'data',self.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum()) 89 WriteData(fid,'data',self.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum()) 90 90 # }}} 91 91 -
issm/trunk-jpl/src/m/classes/inversion.m
r12663 r13020 97 97 md = checkfield(md,'inversion.max_parameters','size',[md.mesh.numberofvertices num_controls]); 98 98 99 if solution==BalancethicknessSolutionEnum 99 if solution==BalancethicknessSolutionEnum() 100 100 md = checkfield(md,'inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1); 101 101 else … … 159 159 data(i)=StringToEnum(obj.control_parameters{i}); 160 160 end 161 WriteData(fid,'data',data,'enum',InversionControlParametersEnum ,'format','DoubleMat','mattype',3);162 WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum ,'format','Integer');161 WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3); 162 WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer'); 163 163 164 164 %process cost functions 165 165 num_cost_functions=size(obj.cost_functions,2); 166 166 data=obj.cost_functions; 167 pos=find(data==101); data(pos)=SurfaceAbsVelMisfitEnum ;168 pos=find(data==102); data(pos)=SurfaceRelVelMisfitEnum ;169 pos=find(data==103); data(pos)=SurfaceLogVelMisfitEnum ;170 pos=find(data==104); data(pos)=SurfaceLogVxVyMisfitEnum ;171 pos=find(data==105); data(pos)=SurfaceAverageVelMisfitEnum ;172 pos=find(data==201); data(pos)=ThicknessAbsMisfitEnum ;173 pos=find(data==501); data(pos)=DragCoefficientAbsGradientEnum ;174 pos=find(data==502); data(pos)=RheologyBbarAbsGradientEnum ;175 pos=find(data==503); data(pos)=ThicknessAbsGradientEnum ;176 WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum ,'format','DoubleMat','mattype',3);177 WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum ,'format','Integer');167 pos=find(data==101); data(pos)=SurfaceAbsVelMisfitEnum(); 168 pos=find(data==102); data(pos)=SurfaceRelVelMisfitEnum(); 169 pos=find(data==103); data(pos)=SurfaceLogVelMisfitEnum(); 170 pos=find(data==104); data(pos)=SurfaceLogVxVyMisfitEnum(); 171 pos=find(data==105); data(pos)=SurfaceAverageVelMisfitEnum(); 172 pos=find(data==201); data(pos)=ThicknessAbsMisfitEnum(); 173 pos=find(data==501); data(pos)=DragCoefficientAbsGradientEnum(); 174 pos=find(data==502); data(pos)=RheologyBbarAbsGradientEnum(); 175 pos=find(data==503); data(pos)=ThicknessAbsGradientEnum(); 176 WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3); 177 WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer'); 178 178 end % }}} 179 179 end -
issm/trunk-jpl/src/m/classes/materials.m
r12663 r13020 110 110 WriteData(fid,'object',obj,'fieldname','rheology_B','format','DoubleMat','mattype',1); 111 111 WriteData(fid,'object',obj,'fieldname','rheology_n','format','DoubleMat','mattype',2); 112 WriteData(fid,'data',StringToEnum(obj.rheology_law),'enum',MaterialsRheologyLawEnum ,'format','Integer');112 WriteData(fid,'data',StringToEnum(obj.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer'); 113 113 end % }}} 114 114 end -
issm/trunk-jpl/src/m/classes/materials.py
r12958 r13020 28 28 self.rheology_B = float('NaN') 29 29 self.rheology_n = float('NaN') 30 self.rheology_law = ""30 self.rheology_law = '' 31 31 32 32 self.setdefaultparameters() … … 47 47 string="%s\n%s"%(string,fielddisplay(self,"thermal_exchange_velocity","thermal exchange velocity [m/s]")) 48 48 string="%s\n%s"%(string,fielddisplay(self,"rheology_B","flow law parameter [Pa/s^(1/n)]")) 49 string="%s\n%s"%(string,fielddisplay(self,"rheology_n","Glen ""s flow law exponent"))50 string="%s\n%s"%(string,fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: ""None"", ""Paterson"" or ""Arrhenius"""))49 string="%s\n%s"%(string,fielddisplay(self,"rheology_n","Glen's flow law exponent")) 50 string="%s\n%s"%(string,fielddisplay(self,"rheology_law","law for the temperature dependance of the rheology: 'None', 'Paterson' or 'Arrhenius'")) 51 51 52 52 return string … … 115 115 WriteData(fid,'object',self,'fieldname','rheology_B','format','DoubleMat','mattype',1) 116 116 WriteData(fid,'object',self,'fieldname','rheology_n','format','DoubleMat','mattype',2) 117 WriteData(fid,'data',StringToEnum(self.rheology_law),'enum',MaterialsRheologyLawEnum ,'format','Integer')117 WriteData(fid,'data',StringToEnum(self.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer') 118 118 # }}} 119 119 -
issm/trunk-jpl/src/m/classes/mesh.m
r12978 r13020 100 100 %Solution specific checks 101 101 switch(solution), 102 case PrognosticSolutionEnum ,102 case PrognosticSolutionEnum(), 103 103 if md.prognostic.stabilization==3, 104 104 md = checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes'); … … 106 106 md = checkfield(md,'mesh.edges(:,1:3)','>',0); 107 107 end 108 case BalancethicknessSolutionEnum ,108 case BalancethicknessSolutionEnum(), 109 109 if md.balancethickness.stabilization==3, 110 110 md = checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes'); … … 112 112 md = checkfield(md,'mesh.edges(:,1:3)','>',0); 113 113 end 114 case TransientSolutionEnum ,114 case TransientSolutionEnum(), 115 115 if md.transient.isprognostic & md.prognostic.stabilization==3, 116 116 md = checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes'); … … 118 118 md = checkfield(md,'mesh.edges(:,1:3)','>',0); 119 119 end 120 case ThermalSolutionEnum ,120 case ThermalSolutionEnum(), 121 121 md = checkfield(md,'mesh.dimension','values',3,'message','thermal solution only supported on 3d meshes'); 122 122 end -
issm/trunk-jpl/src/m/classes/mesh.py
r12958 r13020 110 110 string="%s\n%s"%(string,fielddisplay(self,"lat","vertices latitude")) 111 111 string="%s\n%s"%(string,fielddisplay(self,"long","vertices longitude")) 112 string="%s\n%s"%(string,fielddisplay(self,"hemisphere","Indicate hemisphere ""n"" or ""s"""))112 string="%s\n%s"%(string,fielddisplay(self,"hemisphere","Indicate hemisphere 'n' or 's'")) 113 113 return string 114 114 #}}} … … 155 155 156 156 #Solution specific checks 157 if solution==PrognosticSolutionEnum :157 if solution==PrognosticSolutionEnum(): 158 158 if md.prognostic.stabilization==3: 159 159 md = checkfield(md,'mesh.dimension','values',2,'message',"Discontinuous Galerkin only supported for 2d meshes") 160 160 md = checkfield(md,'mesh.edges','size',[float('NaN'),4]) 161 161 md = checkfield(md,'mesh.edges[:,1:3]','>',0) 162 elif solution==BalancethicknessSolutionEnum :162 elif solution==BalancethicknessSolutionEnum(): 163 163 if md.balancethickness.stabilization==3: 164 164 md = checkfield(md,'mesh.dimension','values',2,'message',"Discontinuous Galerkin only supported for 2d meshes") 165 165 md = checkfield(md,'mesh.edges','size',[float('NaN'),4]) 166 166 md = checkfield(md,'mesh.edges[:,1:3]','>',0) 167 elif solution==TransientSolutionEnum :167 elif solution==TransientSolutionEnum(): 168 168 if md.transient.isprognostic and md.prognostic.stabilization==3: 169 169 md = checkfield(md,'mesh.dimension','values',2,'message',"Discontinuous Galerkin only supported for 2d meshes") 170 170 md = checkfield(md,'mesh.edges','size',[float('NaN'),4]) 171 171 md = checkfield(md,'mesh.edges[:,1:3]','>',0) 172 elif solution==ThermalSolutionEnum :172 elif solution==ThermalSolutionEnum(): 173 173 md = checkfield(md,'mesh.dimension','values',3,'message','thermal solution only supported on 3d meshes') 174 174 -
issm/trunk-jpl/src/m/classes/model/model.m
r13005 r13020 1047 1047 md.solver = solver(); 1048 1048 if ismumps, 1049 md.solver = addoptions(md.solver,DiagnosticVertAnalysisEnum ,mumpsoptions);1049 md.solver = addoptions(md.solver,DiagnosticVertAnalysisEnum(),mumpsoptions); 1050 1050 else 1051 md.solver = addoptions(md.solver,DiagnosticVertAnalysisEnum ,iluasmoptions);1051 md.solver = addoptions(md.solver,DiagnosticVertAnalysisEnum(),iluasmoptions); 1052 1052 end 1053 1053 md.cluster = generic(); -
issm/trunk-jpl/src/m/classes/prognostic.m
r12663 r13020 38 38 function md = checkconsistency(obj,md,solution,analyses) % {{{ 39 39 40 %Early return ,41 if ~ismember(PrognosticAnalysisEnum ,analyses) | (solution==TransientSolutionEnum& md.transient.isprognostic==0), return; end40 %Early return 41 if ~ismember(PrognosticAnalysisEnum(),analyses) | (solution==TransientSolutionEnum() & md.transient.isprognostic==0), return; end 42 42 43 43 md = checkfield(md,'prognostic.spcthickness','forcing',1); … … 62 62 WriteData(fid,'object',obj,'fieldname','spcthickness','format','DoubleMat','mattype',1); 63 63 WriteData(fid,'object',obj,'fieldname','min_thickness','format','Double'); 64 WriteData(fid,'data',StringToEnum(obj.hydrostatic_adjustment),'format','Integer','enum',PrognosticHydrostaticAdjustmentEnum );64 WriteData(fid,'data',StringToEnum(obj.hydrostatic_adjustment),'format','Integer','enum',PrognosticHydrostaticAdjustmentEnum()); 65 65 WriteData(fid,'object',obj,'fieldname','stabilization','format','Integer'); 66 66 WriteData(fid,'object',obj,'fieldname','vertex_pairing','format','DoubleMat','mattype',3); -
issm/trunk-jpl/src/m/classes/prognostic.py
r12958 r13020 1 1 #module imports 2 2 from fielddisplay import fielddisplay 3 from EnumDefinitions import * 4 from checkfield import * 5 from WriteData import * 3 6 4 7 class prognostic(object): 8 """ 9 PROGNOSTIC class definition 10 11 Usage: 12 prognostic=prognostic(); 13 """ 14 5 15 #properties 6 16 def __init__(self): … … 17 27 18 28 #}}} 19 def __repr__( obj):29 def __repr__(self): 20 30 # {{{ Display 21 31 string=' Prognostic solution parameters:' 22 string="%s\n\n%s"%(string,fielddisplay( obj,'spcthickness','thickness constraints (NaN means no constraint)'))23 string="%s\n%s"%(string,fielddisplay( obj,'min_thickness','minimum ice thickness allowed'))24 string="%s\n%s"%(string,fielddisplay( obj,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' '))25 string="%s\n%s"%(string,fielddisplay( obj,'stabilization','0->no, 1->artificial_diffusivity, 2->streamline upwinding, 3->discontinuous Galerkin'))32 string="%s\n\n%s"%(string,fielddisplay(self,'spcthickness','thickness constraints (NaN means no constraint)')) 33 string="%s\n%s"%(string,fielddisplay(self,'min_thickness','minimum ice thickness allowed')) 34 string="%s\n%s"%(string,fielddisplay(self,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' ')) 35 string="%s\n%s"%(string,fielddisplay(self,'stabilization','0->no, 1->artificial_diffusivity, 2->streamline upwinding, 3->discontinuous Galerkin')) 26 36 27 37 return string 28 38 #}}} 29 39 30 def setdefaultparameters( obj):40 def setdefaultparameters(self): 31 41 # {{{setdefaultparameters 32 42 33 43 #Type of stabilization to use 0:nothing 1:artificial_diffusivity 3:Discontinuous Galerkin 34 obj.stabilization=144 self.stabilization=1 35 45 36 46 #Factor applied to compute the penalties kappa=max(stiffness matrix)*10^penalty_factor 37 obj.penalty_factor=347 self.penalty_factor=3 38 48 39 49 #Minimum ice thickness that can be used 40 obj.min_thickness=150 self.min_thickness=1 41 51 42 52 #Hydrostatic adjustment 43 obj.hydrostatic_adjustment='Absolute'53 self.hydrostatic_adjustment='Absolute' 44 54 45 return obj55 return self 46 56 #}}} 47 57 58 def checkconsistency(self,md,solution,analyses): # {{{ 59 60 #Early return 61 if (not PrognosticAnalysisEnum() in analyses) or (solution==TransientSolutionEnum() and not md.transient.isprognostic): 62 return md 63 64 md = checkfield(md,'prognostic.spcthickness','forcing',1) 65 md = checkfield(md,'prognostic.hydrostatic_adjustment','values',['Absolute','Incremental']) 66 md = checkfield(md,'prognostic.stabilization','values',[0,1,2,3]) 67 md = checkfield(md,'prognostic.min_thickness','>',0) 68 69 return md 70 # }}} 71 72 def marshall(self,fid): # {{{ 73 WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1) 74 WriteData(fid,'object',self,'fieldname','min_thickness','format','Double') 75 WriteData(fid,'data',StringToEnum(self.hydrostatic_adjustment),'format','Integer','enum',PrognosticHydrostaticAdjustmentEnum()) 76 WriteData(fid,'object',self,'fieldname','stabilization','format','Integer') 77 WriteData(fid,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3) 78 WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double') 79 # }}} 80 -
issm/trunk-jpl/src/m/classes/rifts.m
r12663 r13020 79 79 end 80 80 81 WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum ,'format','Integer');82 WriteData(fid,'data',data,'enum',RiftsRiftstructEnum ,'format','DoubleMat','mattype',3);81 WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum(),'format','Integer'); 82 WriteData(fid,'data',data,'enum',RiftsRiftstructEnum(),'format','DoubleMat','mattype',3); 83 83 end % }}} 84 84 end -
issm/trunk-jpl/src/m/classes/rifts.py
r12958 r13020 86 86 count+=numpairsforthisrift 87 87 88 WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum ,'format','Integer')89 WriteData(fid,'data',data,'enum',RiftsRiftstructEnum ,'format','DoubleMat','mattype',3)88 WriteData(fid,'data',numrifts,'enum',RiftsNumriftsEnum(),'format','Integer') 89 WriteData(fid,'data',data,'enum',RiftsRiftstructEnum(),'format','DoubleMat','mattype',3) 90 90 # }}} 91 91 -
issm/trunk-jpl/src/m/classes/solver.m
r12663 r13020 20 20 function obj = addoptions(obj,analysis,varargin) % {{{ 21 21 % Usage example: 22 % md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum ,stokesoptions());23 % md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum );22 % md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum(),stokesoptions()); 23 % md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum()); 24 24 25 25 %Convert analysis from enum to string -
issm/trunk-jpl/src/m/classes/solver.py
r12958 r13020 26 26 def addoptions(self,analysis,*args): # {{{ 27 27 # Usage example: 28 # md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum ,stokesoptions());29 # md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum );28 # md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum(),stokesoptions()); 29 # md.solver=addoptions(md.solver,DiagnosticHorizAnalysisEnum()); 30 30 31 31 #Convert analysis from enum to string -
issm/trunk-jpl/src/m/classes/steadystate.m
r12663 r13020 29 29 30 30 %Early return 31 if solution~=SteadystateSolutionEnum , return; end;31 if solution~=SteadystateSolutionEnum(), return; end; 32 32 33 33 if md.timestepping.time_step~=0, -
issm/trunk-jpl/src/m/classes/surfaceforcings.m
r12949 r13020 44 44 function md = checkconsistency(obj,md,solution,analyses) % {{{ 45 45 46 if ismember(PrognosticAnalysisEnum ,analyses),46 if ismember(PrognosticAnalysisEnum(),analyses), 47 47 md = checkfield(md,'surfaceforcings.ispdd','numel',1,'values',[0 1]); 48 48 md = checkfield(md,'surfaceforcings.issmbgradients','numel',1,'values',[0 1]); … … 70 70 end 71 71 end 72 if ismember(BalancethicknessAnalysisEnum ,analyses),72 if ismember(BalancethicknessAnalysisEnum(),analyses), 73 73 md = checkfield(md,'surfaceforcings.mass_balance','size',[md.mesh.numberofvertices 1],'NaN',1); 74 74 end -
issm/trunk-jpl/src/m/classes/surfaceforcings.py
r12958 r13020 79 79 def checkconsistency(self,md,solution,analyses): # {{{ 80 80 81 if PrognosticAnalysisEnum in analyses:81 if PrognosticAnalysisEnum() in analyses: 82 82 md = checkfield(md,'surfaceforcings.ispdd','numel',1,'values',[0,1]) 83 83 md = checkfield(md,'surfaceforcings.issmbgradients','numel',1,'values',[0,1]) … … 103 103 md = checkfield(md,'surfaceforcings.mass_balance','forcing',1,'NaN',1) 104 104 105 if BalancethicknessAnalysisEnum in analyses:105 if BalancethicknessAnalysisEnum() in analyses: 106 106 md = checkfield(md,'surfaceforcings.mass_balance','size',[md.mesh.numberofvertices],'NaN',1) 107 107 -
issm/trunk-jpl/src/m/classes/thermal.m
r12663 r13020 43 43 44 44 %Early return 45 if (~ismember(ThermalAnalysisEnum ,analyses) & ~ismember(EnthalpyAnalysisEnum,analyses)) | (solution==TransientSolutionEnum& md.transient.isthermal==0), return; end45 if (~ismember(ThermalAnalysisEnum(),analyses) & ~ismember(EnthalpyAnalysisEnum(),analyses)) | (solution==TransientSolutionEnum() & md.transient.isthermal==0), return; end 46 46 47 47 md = checkfield(md,'thermal.stabilization','numel',1,'values',[0 1 2]); 48 48 md = checkfield(md,'thermal.spctemperature','forcing',1); 49 if (ismember(EnthalpyAnalysisEnum ,analyses) & md.thermal.isenthalpy & md.mesh.dimension==3),49 if (ismember(EnthalpyAnalysisEnum(),analyses) & md.thermal.isenthalpy & md.mesh.dimension==3), 50 50 md = checkfield(md,'thermal.spctemperature','<',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*(md.geometry.surface-md.mesh.z),'message','spctemperature should be below the adjusted melting point'); 51 51 md = checkfield(md,'thermal.isenthalpy','numel',1,'values',[0 1]); -
issm/trunk-jpl/src/m/classes/transient.m
r12829 r13020 33 33 34 34 %Early return 35 if solution~=TransientSolutionEnum , return; end35 if solution~=TransientSolutionEnum(), return; end 36 36 37 37 md = checkfield(md,'transient.isprognostic','numel',1,'values',[0 1]); -
issm/trunk-jpl/src/m/classes/verbose.m
r12939 r13020 120 120 %}}} 121 121 function marshall(obj,fid) % {{{ 122 WriteData(fid,'data',VerboseToBinary(obj),'enum',VerboseEnum ,'format','Integer');122 WriteData(fid,'data',VerboseToBinary(obj),'enum',VerboseEnum(),'format','Integer'); 123 123 end % }}} 124 124 end -
issm/trunk-jpl/src/m/classes/verbose.py
r12958 r13020 125 125 126 126 def marshall(self,fid): # {{{ 127 WriteData(fid,'data',VerboseToBinary(self),'enum',VerboseEnum ,'format','Integer')127 WriteData(fid,'data',VerboseToBinary(self),'enum',VerboseEnum(),'format','Integer') 128 128 # }}} 129 129
Note:
See TracChangeset
for help on using the changeset viewer.