Ignore:
Timestamp:
09/19/12 09:32:34 (12 years ago)
Author:
Mathieu Morlighem
Message:

merged trunk-jpl and trunk for revision 13393

Location:
issm/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk

  • issm/trunk/src

  • issm/trunk/src/m/classes/flowequation.py

    r12329 r13395  
    11#module imports
     2import numpy
    23from fielddisplay import fielddisplay
     4from EnumDefinitions import *
     5from checkfield import *
     6from WriteData import *
    37
    4 class flowequation:
     8class flowequation(object):
     9        """
     10        FLOWEQUATION class definition
     11
     12           Usage:
     13              flowequation=flowequation();
     14        """
     15
    516        #properties
    617        def __init__(self):
     
    920                self.ismacayealpattyn     = 0;
    1021                self.ishutter             = 0;
     22                self.isl1l2             = 0;
    1123                self.isstokes             = 0;
    1224                self.vertex_equation      = float('NaN')
     
    2032
    2133                #}}}
    22         def __repr__(obj):
     34        def __repr__(self):
    2335                # {{{ Display
    2436                string='   flow equation parameters:'
    2537
    26                 string="%s\n\n%s"%(string,fielddisplay(obj,'ismacayealpattyn','is the macayeal or pattyn approximation used ?'))
    27                 string="%s\n%s"%(string,fielddisplay(obj,'ishutter','is the shallow ice approximation used ?'))
    28                 string="%s\n%s"%(string,fielddisplay(obj,'isstokes','are the Full-Stokes equations used ?'))
    29                 string="%s\n%s"%(string,fielddisplay(obj,'vertex_equation','flow equation for each vertex'))
    30                 string="%s\n%s"%(string,fielddisplay(obj,'element_equation','flow equation for each element'))
    31                 string="%s\n%s"%(string,fielddisplay(obj,'bordermacayeal','vertices on MacAyeal''s border (for tiling)'))
    32                 string="%s\n%s"%(string,fielddisplay(obj,'borderpattyn','vertices on Pattyn''s border (for tiling)'))
    33                 string="%s\n%s"%(string,fielddisplay(obj,'borderstokes','vertices on Stokes'' border (for tiling)'))
     38                string="%s\n\n%s"%(string,fielddisplay(self,'ismacayealpattyn','is the macayeal or pattyn approximation used ?'))
     39                string="%s\n%s"%(string,fielddisplay(self,'ishutter','is the shallow ice approximation used ?'))
     40                string="%s\n%s"%(string,fielddisplay(self,'isl1l2','are l1l2 equations used ?'))
     41                string="%s\n%s"%(string,fielddisplay(self,'isstokes','are the Full-Stokes equations used ?'))
     42                string="%s\n%s"%(string,fielddisplay(self,'vertex_equation','flow equation for each vertex'))
     43                string="%s\n%s"%(string,fielddisplay(self,'element_equation','flow equation for each element'))
     44                string="%s\n%s"%(string,fielddisplay(self,'bordermacayeal','vertices on MacAyeal''s border (for tiling)'))
     45                string="%s\n%s"%(string,fielddisplay(self,'borderpattyn','vertices on Pattyn''s border (for tiling)'))
     46                string="%s\n%s"%(string,fielddisplay(self,'borderstokes','vertices on Stokes'' border (for tiling)'))
    3447                return string
    3548                #}}}
    3649               
    37         def setdefaultparameters(obj):
     50        def setdefaultparameters(self):
    3851                # {{{setdefaultparameters
    39                 return obj
     52                return self
    4053        #}}}
    4154
     55        def checkconsistency(self,md,solution,analyses):    # {{{
     56
     57                if DiagnosticHorizAnalysisEnum() in analyses:
     58                        md = checkfield(md,'flowequation.ismacayealpattyn','numel',[1],'values',[0,1])
     59                        md = checkfield(md,'flowequation.ishutter','numel',[1],'values',[0,1])
     60                        md = checkfield(md,'flowequation.isl1l2','numel',[1],'values',[0,1])
     61                        md = checkfield(md,'flowequation.isstokes','numel',[1],'values',[0,1])
     62                        md = checkfield(md,'flowequation.bordermacayeal','size',[md.mesh.numberofvertices],'values',[0,1])
     63                        md = checkfield(md,'flowequation.borderpattyn','size',[md.mesh.numberofvertices],'values',[0,1])
     64                        md = checkfield(md,'flowequation.borderstokes','size',[md.mesh.numberofvertices],'values',[0,1])
     65                        if md.mesh.dimension==2:
     66                                md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',[1,2])
     67                                md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',[1,2])
     68                        else:
     69                                md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',range(0,7+1))
     70                                md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',range(0,7+1))
     71                        if not (self.ismacayealpattyn or self.ishutter or self.isstokes or self.isl1l2):
     72                                md.checkmessage("no element types set for this model. At least one of ismacayealpattyn, ishutter or isstokes need to be =1")
     73
     74                if DiagnosticHutterAnalysisEnum() in analyses:
     75                        if any(self.element_equation==1):
     76                                if numpy.any(numpy.logical_and(self.element_equation,md.mask.elementonfloatingice)):
     77                                        print "\n !!! Warning: Hutter's model is not consistent on ice shelves !!!\n"
     78
     79                return md
     80        # }}}
     81
     82        def marshall(self,fid):    # {{{
     83                WriteData(fid,'object',self,'fieldname','ismacayealpattyn','format','Boolean')
     84                WriteData(fid,'object',self,'fieldname','ishutter','format','Boolean')
     85                WriteData(fid,'object',self,'fieldname','isl1l2','format','Boolean')
     86                WriteData(fid,'object',self,'fieldname','isstokes','format','Boolean')
     87                WriteData(fid,'object',self,'fieldname','bordermacayeal','format','DoubleMat','mattype',1)
     88                WriteData(fid,'object',self,'fieldname','borderpattyn','format','DoubleMat','mattype',1)
     89                WriteData(fid,'object',self,'fieldname','borderstokes','format','DoubleMat','mattype',1)
     90                #convert approximations to enums
     91                data=self.vertex_equation
     92                data[numpy.nonzero(data==0)]=NoneApproximationEnum()
     93                data[numpy.nonzero(data==1)]=HutterApproximationEnum()
     94                data[numpy.nonzero(data==2)]=MacAyealApproximationEnum()
     95                data[numpy.nonzero(data==3)]=PattynApproximationEnum()
     96                data[numpy.nonzero(data==4)]=StokesApproximationEnum()
     97                data[numpy.nonzero(data==5)]=MacAyealPattynApproximationEnum()
     98                data[numpy.nonzero(data==6)]=MacAyealStokesApproximationEnum()
     99                data[numpy.nonzero(data==7)]=PattynStokesApproximationEnum()
     100                data[numpy.nonzero(data==8)]=L1L2ApproximationEnum()
     101                WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1)
     102                data=self.element_equation
     103                data[numpy.nonzero(data==0)]=NoneApproximationEnum()
     104                data[numpy.nonzero(data==1)]=HutterApproximationEnum()
     105                data[numpy.nonzero(data==2)]=MacAyealApproximationEnum()
     106                data[numpy.nonzero(data==3)]=PattynApproximationEnum()
     107                data[numpy.nonzero(data==4)]=StokesApproximationEnum()
     108                data[numpy.nonzero(data==5)]=MacAyealPattynApproximationEnum()
     109                data[numpy.nonzero(data==6)]=MacAyealStokesApproximationEnum()
     110                data[numpy.nonzero(data==7)]=PattynStokesApproximationEnum()
     111                data[numpy.nonzero(data==8)]=L1L2ApproximationEnum()
     112                WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum(),'format','DoubleMat','mattype',2)
     113        # }}}
     114
Note: See TracChangeset for help on using the changeset viewer.