Index: ../trunk-jpl/src/m/classes/mesh2d.m =================================================================== --- ../trunk-jpl/src/m/classes/mesh2d.m (revision 16294) +++ ../trunk-jpl/src/m/classes/mesh2d.m (revision 16295) @@ -1,9 +1,9 @@ -%MESH class definition +%MESH2D class definition % % Usage: -% mesh=mesh(); +% mesh2d=mesh2d(); -classdef mesh +classdef mesh2d properties (SetAccess=public) x = NaN; y = NaN; @@ -29,7 +29,7 @@ extractedelements = NaN end methods - function obj = mesh(varargin) % {{{ + function obj = mesh2d(varargin) % {{{ switch nargin case 0 obj=setdefaultparameters(obj); @@ -57,7 +57,6 @@ end md = checkfield(md,'mesh.numberofelements','>',0); md = checkfield(md,'mesh.numberofvertices','>',0); - md = checkfield(md,'mesh.vertexonbed','size',[md.mesh.numberofvertices 1],'values',[0 1]); md = checkfield(md,'mesh.average_vertex_connectivity','>=',9,'message','''mesh.average_vertex_connectivity'' should be at least 9 in 2d'); switch(solution), @@ -95,12 +94,17 @@ fielddisplay(obj,'hemisphere','Indicate hemisphere ''n'' or ''s'' '); end % }}} function marshall(obj,md,fid) % {{{ - WriteData(fid,'object',obj,'fieldname','x','format','DoubleMat','mattype',1); - WriteData(fid,'object',obj,'fieldname','y','format','DoubleMat','mattype',1); - WriteData(fid,'object',obj,'fieldname','elements','format','DoubleMat','mattype',2); - WriteData(fid,'object',obj,'fieldname','numberofelements','format','Integer'); - WriteData(fid,'object',obj,'fieldname','numberofvertices','format','Integer'); - WriteData(fid,'object',obj,'fieldname','average_vertex_connectivity','format','Integer'); + WriteData(fid,'enum',MeshTypeEnum(),'data',StringToEnum(['Mesh' meshtype(obj)]),'format','Integer'); + WriteData(fid,'object',obj,'class','mesh','fieldname','x','format','DoubleMat','mattype',1); + WriteData(fid,'object',obj,'class','mesh','fieldname','y','format','DoubleMat','mattype',1); + WriteData(fid,'enum',MeshZEnum(),'data',zeros(obj.numberofvertices,1),'format','DoubleMat','mattype',1); + WriteData(fid,'object',obj,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2); + WriteData(fid,'object',obj,'class','mesh','fieldname','numberofelements','format','Integer'); + WriteData(fid,'object',obj,'class','mesh','fieldname','numberofvertices','format','Integer'); + WriteData(fid,'object',obj,'class','mesh','fieldname','average_vertex_connectivity','format','Integer'); end % }}} + function t = meshtype(obj) % {{{ + t = '2Dhorizontal'; + end % }}} end end Index: ../trunk-jpl/src/m/classes/stressbalance.py =================================================================== --- ../trunk-jpl/src/m/classes/stressbalance.py (revision 16294) +++ ../trunk-jpl/src/m/classes/stressbalance.py (revision 16295) @@ -111,7 +111,7 @@ md = checkfield(md,'stressbalance.spcvx','forcing',1) md = checkfield(md,'stressbalance.spcvy','forcing',1) - if md.mesh.dimension==3: + if strcmp(md.mesh.meshtype(),'3D'): md = checkfield(md,'stressbalance.spcvz','forcing',1) md = checkfield(md,'stressbalance.restol','size',[1],'>',0) md = checkfield(md,'stressbalance.reltol','size',[1]) @@ -144,8 +144,7 @@ if numpy.abs(numpy.inner(item[0:2],item[3:5]))>sys.float_info.epsilon: md.checkmessage("Vectors in stressbalance.referential (columns 1 to 3 and 4 to 6) must be orthogonal") #CHECK THAT NO rotation specified for FS Grounded ice at base -# if md.mesh.dimension==3 & md.flowequation.isFS, - if md.mesh.dimension==3 and md.flowequation.isFS: + if strcmp(md.mesh.meshtype(),'3D') and md.flowequation.isFS: pos=numpy.nonzero(numpy.logical_and(md.mask.groundedice_levelset,md.mesh.vertexonbed)) if numpy.any(numpy.logical_not(numpy.isnan(md.stressbalance.referential[pos,:]))): md.checkmessage("no referential should be specified for basal vertices of grounded ice") Index: ../trunk-jpl/src/m/classes/stressbalance.m =================================================================== --- ../trunk-jpl/src/m/classes/stressbalance.m (revision 16294) +++ ../trunk-jpl/src/m/classes/stressbalance.m (revision 16295) @@ -80,7 +80,7 @@ md = checkfield(md,'stressbalance.spcvx','forcing',1); md = checkfield(md,'stressbalance.spcvy','forcing',1); - if md.mesh.dimension==3, md = checkfield(md,'stressbalance.spcvz','forcing',1); end + if strcmp(meshtype(md.mesh),'3D'), md = checkfield(md,'stressbalance.spcvz','forcing',1); end md = checkfield(md,'stressbalance.restol','size',[1 1],'>',0,'NaN',1); md = checkfield(md,'stressbalance.reltol','size',[1 1]); md = checkfield(md,'stressbalance.abstol','size',[1 1]); @@ -110,7 +110,7 @@ end end %CHECK THAT NO rotation specified for FS Grounded ice at base - if md.mesh.dimension==3 & md.flowequation.isFS, + if strcmp(meshtype(md.mesh),'3D') & md.flowequation.isFS, pos=find(md.mask.groundedice_levelset>0. & md.mesh.vertexonbed); if any(~isnan(md.stressbalance.referential(pos,:))), md = checkmessage(md,['no referential should be specified for basal vertices of grounded ice']); Index: ../trunk-jpl/src/m/classes/flowequation.py =================================================================== --- ../trunk-jpl/src/m/classes/flowequation.py (revision 16294) +++ ../trunk-jpl/src/m/classes/flowequation.py (revision 16295) @@ -78,12 +78,14 @@ md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices],'values',[0,1]) md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices],'values',[0,1]) md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices],'values',[0,1]) - if md.mesh.dimension==2: + if strcmp(md.mesh.meshtype(),'2Dhorizontal'): md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',[1,2]) md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',[1,2]) - else: + elif strcmp(md.mesh.meshtype(),'3D'): md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',numpy.arange(0,8+1)) md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',numpy.arange(0,8+1)) + else: + raise RuntimeError('mesh type not supported yet') if not (self.isSIA or self.isSSA or self.isL1L2 or self.isHO or self.isFS): md.checkmessage("no element types set for this model") Index: ../trunk-jpl/src/m/classes/flowequation.m =================================================================== --- ../trunk-jpl/src/m/classes/flowequation.m (revision 16294) +++ ../trunk-jpl/src/m/classes/flowequation.m (revision 16295) @@ -90,12 +90,14 @@ md = checkfield(md,'flowequation.borderSSA','size',[md.mesh.numberofvertices 1],'values',[0 1]); md = checkfield(md,'flowequation.borderHO','size',[md.mesh.numberofvertices 1],'values',[0 1]); md = checkfield(md,'flowequation.borderFS','size',[md.mesh.numberofvertices 1],'values',[0 1]); - if (md.mesh.dimension==2), + if strcmp(meshtype(md.mesh),'2Dhorizontal') md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices 1],'values',[1:2]); md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements 1],'values',[1:2]); - else + elseif strcmp(meshtype(md.mesh),'3D'), md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices 1],'values',[0:8]); md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements 1],'values',[0:8]); + else + error('Case not supported yet'); end if ~(obj.isSIA || obj.isSSA || obj.isL1L2 || obj.isHO || obj.isFS), md = checkmessage(md,['no element types set for this model']); Index: ../trunk-jpl/src/m/classes/mesh2d.py =================================================================== --- ../trunk-jpl/src/m/classes/mesh2d.py (revision 16294) +++ ../trunk-jpl/src/m/classes/mesh2d.py (revision 16295) @@ -4,12 +4,12 @@ from checkfield import * from MatlabFuncs import * -class mesh(object): +class mesh2d(object): """ - MESH class definition + MESH2D class definition Usage: - mesh=mesh(); + mesh2d=mesh2d(); """ def __init__(self): # {{{ @@ -97,11 +97,16 @@ return md # }}} + def meshtype(self): # {{{ + return "2Dhorizontal" + #}}} def marshall(self,md,fid): # {{{ - WriteData(fid,'object',self,'fieldname','x','format','DoubleMat','mattype',1) - WriteData(fid,'object',self,'fieldname','y','format','DoubleMat','mattype',1) - WriteData(fid,'object',self,'fieldname','elements','format','DoubleMat','mattype',2) - WriteData(fid,'object',self,'fieldname','numberofelements','format','Integer') - WriteData(fid,'object',self,'fieldname','numberofvertices','format','Integer') - WriteData(fid,'object',self,'fieldname','average_vertex_connectivity','format','Integer') + WriteData(fid,'enum',MeshTypeEnum(),'data',StringToEnum("Mesh"+self.meshtype())[0],'format','Integer'); + WriteData(fid,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1) + WriteData(fid,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1) + WriteData(fid,'enum',MeshZEnum(),'data',numpy.zeros(self.numberofvertices),'format','DoubleMat','mattype',1); + WriteData(fid,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2) + WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements','format','Integer') + WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer') + WriteData(fid,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer') # }}}