Changeset 12949 for issm/trunk-jpl/src


Ignore:
Timestamp:
08/08/12 15:50:07 (13 years ago)
Author:
jschierm
Message:

NEW: A bunch more python checkconsistency and marshall methods for sub-classes (plus other minor changes).

Location:
issm/trunk-jpl/src/m
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/classes/basalforcings.py

    r12123 r12949  
    11#module imports
    22from fielddisplay import fielddisplay
     3from EnumDefinitions import *
     4from checkfield import *
     5from WriteData import *
    36
    47class basalforcings:
     
    2831        #}}}
    2932
     33        def checkconsistency(self,md,solution,analyses):    # {{{
     34
     35                if PrognosticAnalysisEnum in analyses and not (solution==TransientSolutionEnum and not md.transient.isprognostic):
     36                        md = checkfield(md,'basalforcings.melting_rate','NaN',1,'forcing',1)
     37
     38                if BalancethicknessAnalysisEnum in analyses:
     39                        md = checkfield(md,'basalforcings.melting_rate','NaN',1,'size',[md.mesh.numberofvertices])
     40
     41                if ThermalAnalysisEnum in analyses and not (solution==TransientSolutionEnum and not md.transient.isthermal):
     42                        md = checkfield(md,'basalforcings.melting_rate','NaN',1,'forcing',1)
     43                        md = checkfield(md,'basalforcings.geothermalflux','NaN',1,'forcing',1,'>=',0)
     44
     45                return md
     46        # }}}
     47
     48        def marshall(self,fid):    # {{{
     49                WriteData(fid,'object',self,'fieldname','melting_rate','format','DoubleMat','mattype',1)
     50                WriteData(fid,'object',self,'fieldname','melting_rate_correction','format','DoubleMat','mattype',1)
     51                WriteData(fid,'object',self,'fieldname','geothermalflux','format','DoubleMat','mattype',1)
     52        # }}}
     53
  • issm/trunk-jpl/src/m/classes/constants.py

    r12123 r12949  
    11#module imports
    22from fielddisplay import fielddisplay
     3from EnumDefinitions import *
     4from checkfield import *
     5from WriteData import *
    36
    47class constants:
     
    4043        #}}}
    4144
     45        def checkconsistency(self,md,solution,analyses):    # {{{
     46
     47                md = checkfield(md,'constants.g','>',0,'size',[1])
     48                md = checkfield(md,'constants.yts','>',0,'size',[1])
     49                md = checkfield(md,'constants.referencetemperature','size',[1])
     50
     51                return md
     52        # }}}
     53
     54        def marshall(self,fid):    # {{{
     55                WriteData(fid,'object',self,'fieldname','g','format','Double')
     56                WriteData(fid,'object',self,'fieldname','yts','format','Double')
     57                WriteData(fid,'object',self,'fieldname','referencetemperature','format','Double')
     58        # }}}
     59
  • issm/trunk-jpl/src/m/classes/flowequation.m

    r12663 r12949  
    4444                                        md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements 1],'values',[0:7]);
    4545                                end
    46                                 if (md.flowequation.ismacayealpattyn==0 && md.flowequation.ishutter==0 && md.flowequation.isstokes==0),
     46                                if ~(md.flowequation.ismacayealpattyn || md.flowequation.ishutter || md.flowequation.isstokes),
    4747                                        md = checkmessage(md,['no element types set for this model. At least one of ismacayealpattyn, ishutter or isstokes need to be =1']);
    4848                                end
  • issm/trunk-jpl/src/m/classes/flowequation.py

    r12123 r12949  
    11#module imports
     2import numpy
    23from fielddisplay import fielddisplay
     4from EnumDefinitions import *
     5from checkfield import *
     6from WriteData import *
    37
    48class flowequation:
     
    4044        #}}}
    4145
     46        def checkconsistency(self,md,solution,analyses):    # {{{
     47
     48                if DiagnosticHorizAnalysisEnum in analyses:
     49                        md = checkfield(md,'flowequation.ismacayealpattyn','numel',1,'values',[0,1])
     50                        md = checkfield(md,'flowequation.ishutter','numel',1,'values',[0,1])
     51                        md = checkfield(md,'flowequation.isstokes','numel',1,'values',[0,1])
     52                        md = checkfield(md,'flowequation.bordermacayeal','size',[md.mesh.numberofvertices],'values',[0,1])
     53                        md = checkfield(md,'flowequation.borderpattyn','size',[md.mesh.numberofvertices],'values',[0,1])
     54                        md = checkfield(md,'flowequation.borderstokes','size',[md.mesh.numberofvertices],'values',[0,1])
     55                        if md.mesh.dimension==2:
     56                                md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',[1,2])
     57                                md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',[1,2])
     58                        else:
     59                                md = checkfield(md,'flowequation.vertex_equation','size',[md.mesh.numberofvertices],'values',range(0,7+1))
     60                                md = checkfield(md,'flowequation.element_equation','size',[md.mesh.numberofelements],'values',range(0,7+1))
     61                        if not (md.flowequation.ismacayealpattyn or md.flowequation.ishutter or md.flowequation.isstokes):
     62                                md.checkmessage("no element types set for this model. At least one of ismacayealpattyn, ishutter or isstokes need to be =1")
     63
     64                if DiagnosticHutterAnalysisEnum in analyses:
     65                        if any(md.flowequation.element_equation==1):
     66                                if any(numpy.logical_and(md.flowequation.element_equation,md.mask.elementonfloatingice)):
     67                                        print "\n !!! Warning: Hutter's model is not consistent on ice shelves !!!\n"
     68
     69                return md
     70        # }}}
     71
     72        def marshall(self,fid):    # {{{
     73                WriteData(fid,'object',self,'fieldname','ismacayealpattyn','format','Boolean')
     74                WriteData(fid,'object',self,'fieldname','ishutter','format','Boolean')
     75                WriteData(fid,'object',self,'fieldname','isstokes','format','Boolean')
     76                WriteData(fid,'object',self,'fieldname','bordermacayeal','format','DoubleMat','mattype',1)
     77                WriteData(fid,'object',self,'fieldname','borderpattyn','format','DoubleMat','mattype',1)
     78                WriteData(fid,'object',self,'fieldname','borderstokes','format','DoubleMat','mattype',1)
     79                #convert approximations to enums
     80                data=self.vertex_equation
     81                data[[i for i,item in enumerate(data) if item==0]]=NoneApproximationEnum
     82                data[[i for i,item in enumerate(data) if item==1]]=HutterApproximationEnum
     83                data[[i for i,item in enumerate(data) if item==2]]=MacAyealApproximationEnum
     84                data[[i for i,item in enumerate(data) if item==3]]=PattynApproximationEnum
     85                data[[i for i,item in enumerate(data) if item==4]]=StokesApproximationEnum
     86                data[[i for i,item in enumerate(data) if item==5]]=MacAyealPattynApproximationEnum
     87                data[[i for i,item in enumerate(data) if item==6]]=MacAyealStokesApproximationEnum
     88                data[[i for i,item in enumerate(data) if item==7]]=PattynStokesApproximationEnum
     89                WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum,'format','DoubleMat','mattype',1)
     90                data=self.element_equation
     91                data[[i for i,item in enumerate(data) if item==0]]=NoneApproximationEnum
     92                data[[i for i,item in enumerate(data) if item==1]]=HutterApproximationEnum
     93                data[[i for i,item in enumerate(data) if item==2]]=MacAyealApproximationEnum
     94                data[[i for i,item in enumerate(data) if item==3]]=PattynApproximationEnum
     95                data[[i for i,item in enumerate(data) if item==4]]=StokesApproximationEnum
     96                data[[i for i,item in enumerate(data) if item==5]]=MacAyealPattynApproximationEnum
     97                data[[i for i,item in enumerate(data) if item==6]]=MacAyealStokesApproximationEnum
     98                data[[i for i,item in enumerate(data) if item==7]]=PattynStokesApproximationEnum
     99                WriteData(fid,'data',data,'enum',FlowequationElementEquationEnum,'format','DoubleMat','mattype',2)
     100        # }}}
     101
  • issm/trunk-jpl/src/m/classes/friction.py

    r12123 r12949  
    11#module imports
    22from fielddisplay import fielddisplay
     3from EnumDefinitions import *
     4from checkfield import *
     5from WriteData import *
    36
    47class friction:
     
    2831        #}}}
    2932
     33        def checkconsistency(self,md,solution,analyses):    # {{{
     34
     35                #Early return
     36                if not DiagnosticHorizAnalysisEnum in analyses and not ThermalAnalysisEnum in analyses:
     37                        return md
     38
     39                md = checkfield(md,'friction.coefficient','NaN',1,'size',[md.mesh.numberofvertices])
     40                md = checkfield(md,'friction.q','NaN',1,'size',[md.mesh.numberofelements])
     41                md = checkfield(md,'friction.p','NaN',1,'size',[md.mesh.numberofelements])
     42
     43                return md
     44        # }}}
     45
     46        def marshall(self,fid):    # {{{
     47                WriteData(fid,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1)
     48                WriteData(fid,'object',self,'fieldname','p','format','DoubleMat','mattype',2)
     49                WriteData(fid,'object',self,'fieldname','q','format','DoubleMat','mattype',2)
     50        # }}}
     51
  • issm/trunk-jpl/src/m/classes/geometry.py

    r12123 r12949  
    11#module imports
    22from fielddisplay import fielddisplay
     3from EnumDefinitions import *
     4from checkfield import *
     5from WriteData import *
    36
    47class geometry:
     
    3437        #}}}
    3538
     39        def checkconsistency(self,md,solution,analyses):    # {{{
     40
     41                md = checkfield(md,'geometry.surface'  ,'NaN',1,'size',[md.mesh.numberofvertices])
     42                md = checkfield(md,'geometry.bed'      ,'NaN',1,'size',[md.mesh.numberofvertices])
     43                md = checkfield(md,'geometry.thickness','NaN',1,'size',[md.mesh.numberofvertices],'>',0)
     44                if any((self.thickness-self.surface+self.bed)>10**-9):
     45                        md.checkmessage("equality thickness=surface-bed violated")
     46                end
     47                if solution==TransientSolutionEnum and md.transient.isgroundingline:
     48                        md = checkfield(md,'geometry.bathymetry','NaN',1,'size',[md.mesh.numberofvertices])
     49
     50                return md
     51        # }}}
     52
     53        def marshall(self,fid):    # {{{
     54                WriteData(fid,'data',self.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum)
     55                WriteData(fid,'data',self.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum)
     56                WriteData(fid,'data',self.bed,'format','DoubleMat','mattype',1,'enum',BedEnum)
     57                WriteData(fid,'data',self.bathymetry,'format','DoubleMat','mattype',1,'enum',BathymetryEnum)
     58                WriteData(fid,'object',self,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1)
     59        # }}}
     60
  • issm/trunk-jpl/src/m/classes/initialization.m

    r12663 r12949  
    2929                function md = checkconsistency(obj,md,solution,analyses) % {{{
    3030                        if ismember(DiagnosticHorizAnalysisEnum,analyses)
    31                                 if ~isnan(md.initialization.vx) & ~isnan(md.initialization.vy),
     31                                if ~(isnan(md.initialization.vx) | isnan(md.initialization.vy)),
    3232                                        md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]);
    3333                                        md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]);
  • issm/trunk-jpl/src/m/classes/initialization.py

    r12123 r12949  
    11#module imports
     2import numpy
    23from fielddisplay import fielddisplay
     4from EnumDefinitions import *
     5from checkfield import *
     6from WriteData import *
    37
    48class initialization:
     
    4145        #}}}
    4246
     47        def checkconsistency(obj,md,solution,analyses):    # {{{
     48                if DiagnosticHorizAnalysisEnum in analyses:
     49                        if not any(numpy.isnan(md.initialization.vx) or numpy.isnan(md.initialization.vy)):
     50                                md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices])
     51                                md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices])
     52                if PrognosticAnalysisEnum in analyses:
     53                        md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices])
     54                        md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices])
     55                if HydrologyAnalysisEnum in analyses:
     56                        md = checkfield(md,'initialization.watercolumn','NaN',1,'size',[md.mesh.numberofvertices])
     57                if BalancethicknessAnalysisEnum in analyses:
     58                        md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices])
     59                        md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices])
     60                        #Triangle with zero velocity
     61                        if any(numpy.logical_and(numpy.sum(numpy.abs(md.initialization.vx[md.mesh.elements.astype(int)-1]),axis=1)==0,\
     62                                                 numpy.sum(numpy.abs(md.initialization.vy[md.mesh.elements.astype(int)-1]),axis=1)==0)):
     63                                md.checkmessage("at least one triangle has all its vertices with a zero velocity")
     64                if ThermalAnalysisEnum in analyses:
     65                        md = checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices])
     66                        md = checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices])
     67                        md = checkfield(md,'initialization.vz','NaN',1,'size',[md.mesh.numberofvertices])
     68                        md = checkfield(md,'initialization.pressure','NaN',1,'size',[md.mesh.numberofvertices])
     69                if (EnthalpyAnalysisEnum in analyses and md.thermal.isenthalpy) or solution==EnthalpySolutionEnum:
     70                        md = checkfield(md,'initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices])
     71
     72                return md
     73        # }}}
     74
     75        def marshall(obj,fid):    # {{{
     76                WriteData(fid,'data',obj.vx,'format','DoubleMat','mattype',1,'enum',VxEnum)
     77                WriteData(fid,'data',obj.vy,'format','DoubleMat','mattype',1,'enum',VyEnum)
     78                WriteData(fid,'data',obj.vz,'format','DoubleMat','mattype',1,'enum',VzEnum)
     79                WriteData(fid,'data',obj.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum)
     80                WriteData(fid,'data',obj.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum)
     81                WriteData(fid,'data',obj.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum)
     82                WriteData(fid,'data',obj.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum)
     83        # }}}
     84
  • issm/trunk-jpl/src/m/classes/mask.py

    r12123 r12949  
    11#module imports
    22from fielddisplay import fielddisplay
     3from EnumDefinitions import *
     4from checkfield import *
     5from WriteData import *
    36
    47class mask:
     
    3538        #}}}
    3639
     40        def checkconsistency(self,md,solution,analyses):    # {{{
     41
     42                md = checkfield(md,'mask.elementonfloatingice','size',[md.mesh.numberofelements],'values',[0,1])
     43                md = checkfield(md,'mask.elementongroundedice','size',[md.mesh.numberofelements],'values',[0,1])
     44                md = checkfield(md,'mask.elementonwater'      ,'size',[md.mesh.numberofelements],'values',[0,1])
     45                md = checkfield(md,'mask.vertexonfloatingice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
     46                md = checkfield(md,'mask.vertexongroundedice' ,'size',[md.mesh.numberofvertices],'values',[0,1])
     47                md = checkfield(md,'mask.vertexonwater'       ,'size',[md.mesh.numberofvertices],'values',[0,1])
     48
     49                return md
     50        # }}}
     51
     52        def marshall(self,fid):    # {{{
     53                WriteData(fid,'object',self,'fieldname','elementonfloatingice','format','BooleanMat','mattype',2)
     54                WriteData(fid,'object',self,'fieldname','elementongroundedice','format','BooleanMat','mattype',2)
     55                WriteData(fid,'object',self,'fieldname','elementonwater','format','BooleanMat','mattype',2)
     56                WriteData(fid,'object',self,'fieldname','vertexonfloatingice','format','DoubleMat','mattype',1)
     57                WriteData(fid,'object',self,'fieldname','vertexongroundedice','format','DoubleMat','mattype',1)
     58                WriteData(fid,'object',self,'fieldname','vertexonwater','format','DoubleMat','mattype',1)
     59        # }}}
     60
  • issm/trunk-jpl/src/m/classes/materials.py

    r12123 r12949  
    11#module imports
    22from fielddisplay import fielddisplay
     3from EnumDefinitions import *
     4from checkfield import *
     5from WriteData import *
    36
    47class materials:
     
    69        def __init__(self):
    710                # {{{ Properties
    8                 self.rho_ice                    = 0;
    9                 self.rho_water                  = 0;
    10                 self.mu_water                   = 0;
    11                 self.heatcapacity               = 0;
    12                 self.latentheat                 = 0;
    13                 self.thermalconductivity        = 0;
    14                 self.meltingpoint               = 0;
    15                 self.beta                       = 0;
    16                 self.mixed_layer_capacity       = 0;
    17                 self.thermal_exchange_velocity  = 0;
     11                self.rho_ice                    = 0
     12                self.rho_water                  = 0
     13                self.mu_water                   = 0
     14                self.heatcapacity               = 0
     15                self.latentheat                 = 0
     16                self.thermalconductivity        = 0
     17                self.meltingpoint               = 0
     18                self.beta                       = 0
     19                self.mixed_layer_capacity       = 0
     20                self.thermal_exchange_velocity  = 0
    1821                self.rheology_B   = float('NaN')
    1922                self.rheology_n   = float('NaN')
    20                 self.rheology_law = "";
     23                self.rheology_law = ""
    2124
    2225                self.setdefaultparameters()
     
    7982                return obj
    8083                #}}}
     84
     85        def checkconsistency(self,md,solution,analyses):    # {{{
     86                md = checkfield(md,'materials.rho_ice','>',0)
     87                md = checkfield(md,'materials.rho_water','>',0)
     88                md = checkfield(md,'materials.rho_freshwater','>',0)
     89                md = checkfield(md,'materials.mu_water','>',0)
     90                md = checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices])
     91                md = checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements])
     92                md = checkfield(md,'materials.rheology_law','values',['None','Paterson','Arrhenius'])
     93                return md
     94        # }}}
     95
     96        def marshall(self,fid):    # {{{
     97                WriteData(fid,'object',self,'fieldname','rho_ice','format','Double')
     98                WriteData(fid,'object',self,'fieldname','rho_water','format','Double')
     99                WriteData(fid,'object',self,'fieldname','rho_freshwater','format','Double')
     100                WriteData(fid,'object',self,'fieldname','mu_water','format','Double')
     101                WriteData(fid,'object',self,'fieldname','heatcapacity','format','Double')
     102                WriteData(fid,'object',self,'fieldname','latentheat','format','Double')
     103                WriteData(fid,'object',self,'fieldname','thermalconductivity','format','Double')
     104                WriteData(fid,'object',self,'fieldname','meltingpoint','format','Double')
     105                WriteData(fid,'object',self,'fieldname','beta','format','Double')
     106                WriteData(fid,'object',self,'fieldname','mixed_layer_capacity','format','Double')
     107                WriteData(fid,'object',self,'fieldname','thermal_exchange_velocity','format','Double')
     108                WriteData(fid,'object',self,'fieldname','rheology_B','format','DoubleMat','mattype',1)
     109                WriteData(fid,'object',self,'fieldname','rheology_n','format','DoubleMat','mattype',2)
     110                WriteData(fid,'data',StringToEnum(self.rheology_law),'enum',MaterialsRheologyLawEnum,'format','Integer')
     111        # }}}
     112
  • issm/trunk-jpl/src/m/classes/mesh.py

    r12943 r12949  
    22import numpy
    33from fielddisplay import fielddisplay
     4from EnumDefinitions import *
    45from checkfield import *
    5 from EnumDefinitions import *
    66from MatlabFuncs import *
    77
     
    131131                        md = checkfield(md,'mesh.elements','size',[md.mesh.numberofelements,6])
    132132                if any(numpy.logical_not(ismember(range(1,md.mesh.numberofvertices+1),md.mesh.elements))):
    133                         md = checkmessage(md,"orphan nodes have been found. Check the mesh outline")
     133                        md.checkmessage("orphan nodes have been found. Check the mesh outline")
    134134                md = checkfield(md,'mesh.dimension','values',[2,3])
    135135                md = checkfield(md,'mesh.numberoflayers','>=',0)
  • issm/trunk-jpl/src/m/classes/private.py

    r12943 r12949  
    66        def __init__(self):
    77                # {{{ Properties
    8                 self.isconsistent = True;
     8                self.isconsistent = True
    99                self.runtimename  = ''
    1010                self.bamg         = {}
    11                 self.solution     = '';
     11                self.solution     = ''
    1212
    1313                #set defaults
  • issm/trunk-jpl/src/m/classes/surfaceforcings.m

    r12771 r12949  
    1111                issmbgradients = 0;
    1212                isdelta18o = 0;
    13            hc = NaN;
     13                hc = NaN;
    1414                smb_pos_max = NaN;
    1515                smb_pos_min = NaN;
     
    4646                        if ismember(PrognosticAnalysisEnum,analyses),
    4747                                md = checkfield(md,'surfaceforcings.ispdd','numel',1,'values',[0 1]);
    48                                 checkfield(md,'surfaceforcings.issmbgradients','numel',1,'values',[0 1]);
     48                                md = checkfield(md,'surfaceforcings.issmbgradients','numel',1,'values',[0 1]);
    4949                                if(obj.ispdd)
    50                                         if(obj.isdelta18o==0)
    51                                                 md = checkfield(md,'surfaceforcings.monthlytemperatures','forcing',1,'NaN',1);
    52                                                 md = checkfield(md,'surfaceforcings.precipitation','forcing',1,'NaN',1);
    53                                         else
    54                                                 md = checkfield(md,'surfaceforcings.delta18o','NaN',1);
    55                                                 md = checkfield(md,'surfaceforcings.delta18o_surface','NaN',1);
    56                                                 md = checkfield(md,'surfaceforcings.temperatures_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
    57                                                 md = checkfield(md,'surfaceforcings.temperatures_lgm','size',[md.mesh.numberofvertices+1 12],'NaN',1);
    58                                                 md = checkfield(md,'surfaceforcings.precipitations_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
    59                                         end
     50                                        if(obj.isdelta18o==0)
     51                                                md = checkfield(md,'surfaceforcings.monthlytemperatures','forcing',1,'NaN',1);
     52                                                md = checkfield(md,'surfaceforcings.precipitation','forcing',1,'NaN',1);
     53                                        else
     54                                                md = checkfield(md,'surfaceforcings.delta18o','NaN',1);
     55                                                md = checkfield(md,'surfaceforcings.delta18o_surface','NaN',1);
     56                                                md = checkfield(md,'surfaceforcings.temperatures_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
     57                                                md = checkfield(md,'surfaceforcings.temperatures_lgm','size',[md.mesh.numberofvertices+1 12],'NaN',1);
     58                                                md = checkfield(md,'surfaceforcings.precipitations_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1);
     59                                        end
    6060                                elseif(obj.issmbgradients)
    61                                         checkfield(md,'surfaceforcings.hc','forcing',1,'NaN',1);
    62                                         checkfield(md,'surfaceforcings.smb_pos_max','forcing',1,'NaN',1);
    63                                         checkfield(md,'surfaceforcings.smb_pos_min','forcing',1,'NaN',1);
    64                                         checkfield(md,'surfaceforcings.a_pos','forcing',1,'NaN',1);
    65                                         checkfield(md,'surfaceforcings.b_pos','forcing',1,'NaN',1);
    66                                         checkfield(md,'surfaceforcings.a_neg','forcing',1,'NaN',1);
    67                                         checkfield(md,'surfaceforcings.b_neg','forcing',1,'NaN',1);
     61                                        md = checkfield(md,'surfaceforcings.hc','forcing',1,'NaN',1);
     62                                        md = checkfield(md,'surfaceforcings.smb_pos_max','forcing',1,'NaN',1);
     63                                        md = checkfield(md,'surfaceforcings.smb_pos_min','forcing',1,'NaN',1);
     64                                        md = checkfield(md,'surfaceforcings.a_pos','forcing',1,'NaN',1);
     65                                        md = checkfield(md,'surfaceforcings.b_pos','forcing',1,'NaN',1);
     66                                        md = checkfield(md,'surfaceforcings.a_neg','forcing',1,'NaN',1);
     67                                        md = checkfield(md,'surfaceforcings.b_neg','forcing',1,'NaN',1);
    6868                                else
    6969                                        md = checkfield(md,'surfaceforcings.mass_balance','forcing',1,'NaN',1);
     
    103103                        WriteData(fid,'object',obj,'fieldname','isdelta18o','format','Boolean');
    104104                        if obj.ispdd,
    105                           if obj.isdelta18o
    106                                 WriteData(fid,'object',obj,'fieldname','temperatures_presentday','format','DoubleMat','mattype',1);
    107                                 WriteData(fid,'object',obj,'fieldname','temperatures_lgm','format','DoubleMat','mattype',1);
    108                                 WriteData(fid,'object',obj,'fieldname','precipitations_presentday','format','DoubleMat','mattype',1);
    109                                 WriteData(fid,'object',obj,'fieldname','delta18o_surface','format','DoubleMat','mattype',1);
    110                                 WriteData(fid,'object',obj,'fieldname','delta18o','format','DoubleMat','mattype',1);
    111                           else
    112                                 WriteData(fid,'object',obj,'fieldname','monthlytemperatures','format','DoubleMat','mattype',1);
    113                                 WriteData(fid,'object',obj,'fieldname','precipitation','format','DoubleMat','mattype',1);
    114                           end
     105                                if obj.isdelta18o
     106                                        WriteData(fid,'object',obj,'fieldname','temperatures_presentday','format','DoubleMat','mattype',1);
     107                                        WriteData(fid,'object',obj,'fieldname','temperatures_lgm','format','DoubleMat','mattype',1);
     108                                        WriteData(fid,'object',obj,'fieldname','precipitations_presentday','format','DoubleMat','mattype',1);
     109                                        WriteData(fid,'object',obj,'fieldname','delta18o_surface','format','DoubleMat','mattype',1);
     110                                        WriteData(fid,'object',obj,'fieldname','delta18o','format','DoubleMat','mattype',1);
     111                                else
     112                                        WriteData(fid,'object',obj,'fieldname','monthlytemperatures','format','DoubleMat','mattype',1);
     113                                        WriteData(fid,'object',obj,'fieldname','precipitation','format','DoubleMat','mattype',1);
     114                                end
    115115                        end
    116116                        WriteData(fid,'object',obj,'fieldname','issmbgradients','format','Boolean');
  • issm/trunk-jpl/src/m/classes/surfaceforcings.py

    r12123 r12949  
    11#module imports
    22from fielddisplay import fielddisplay
     3from EnumDefinitions import *
     4from checkfield import *
     5from WriteData import *
    36
    47class surfaceforcings:
     
    811                self.precipitation = float('NaN')
    912                self.mass_balance  = float('NaN')
     13                self.ispdd = 0
     14                self.issmbgradients = 0
     15                self.isdelta18o = 0
     16                self.hc = float('NaN')
     17                self.smb_pos_max = float('NaN')
     18                self.smb_pos_min = float('NaN')
     19                self.a_pos = float('NaN')
     20                self.b_pos = float('NaN')
     21                self.a_neg = float('NaN')
     22                self.b_neg = float('NaN')
     23                self.monthlytemperatures = float('NaN')
     24                self.delta18o = float('NaN')
     25                self.delta18o_surface = float('NaN')
     26                self.temperatures_presentday = float('NaN')
     27                self.temperatures_lgm = float('NaN')
     28                self.precipitations_presentday = float('NaN')
    1029
    1130                #set defaults
     
    1938                string="%s\n\n%s"%(string,fielddisplay(obj,'precipitation','surface precipitation [m/yr water eq]'))
    2039                string="%s\n%s"%(string,fielddisplay(obj,'mass_balance','surface mass balance [m/yr ice eq]'))
     40                string="%s\n%s"%(string,fielddisplay(obj,'ispdd','is pdd activated (0 or 1, default is 0)'))
     41                string="%s\n%s"%(string,fielddisplay(obj,'isdelta18o','is temperature and precipitation delta18o parametrisation activated (0 or 1, default is 0)'))
     42                string="%s\n%s"%(string,fielddisplay(obj,'monthlytemperatures','monthly surface temperatures [Kelvin], required if pdd is activated and delta18o not activated'))
     43                string="%s\n%s"%(string,fielddisplay(obj,'precipitation','surface precipitation [m/yr water eq]'))
     44                string="%s\n%s"%(string,fielddisplay(obj,'temperatures_presentday','monthly present day surface temperatures [Kelvin], required if pdd is activated and delta18o activated'))
     45                string="%s\n%s"%(string,fielddisplay(obj,'temperatures_lgm','monthly LGM surface temperatures [Kelvin], required if pdd is activated and delta18o activated'))
     46                string="%s\n%s"%(string,fielddisplay(obj,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if pdd is activated and delta18o activated'))
     47                string="%s\n%s"%(string,fielddisplay(obj,'delta18o','delta18o, required if pdd is activated and delta18o activated'))
     48                string="%s\n%s"%(string,fielddisplay(obj,'delta18o_surface','surface elevation of the delta18o site, required if pdd is activated and delta18o activated'))
     49                string="%s\n%s"%(string,fielddisplay(obj,'issmbgradients','is smb gradients method activated (0 or 1, default is 0)'))
     50                string="%s\n%s"%(string,fielddisplay(obj,'hc',' elevation of intersection between accumulation and ablation regime required if smb gradients is activated'))
     51                string="%s\n%s"%(string,fielddisplay(obj,'smb_pos_max',' maximum value of positive smb required if smb gradients is activated'))
     52                string="%s\n%s"%(string,fielddisplay(obj,'smb_pos_min',' minimum value of positive smb required if smb gradients is activated'))
     53                string="%s\n%s"%(string,fielddisplay(obj,'a_pos',' intercept of hs - smb regression line for accumulation regime required if smb gradients is activated'))
     54                string="%s\n%s"%(string,fielddisplay(obj,'b_pos',' slope of hs - smb regression line for accumulation regime required if smb gradients is activated'))
     55                string="%s\n%s"%(string,fielddisplay(obj,'a_neg',' intercept of hs - smb regression line for ablation regime required if smb gradients is activated'))
     56                string="%s\n%s"%(string,fielddisplay(obj,'b_neg',' slope of hs - smb regression line for ablation regime required if smb gradients is activated'))
    2157
    2258                return string
     
    2561        def setdefaultparameters(obj):
    2662                # {{{setdefaultparameters
     63                 
     64                #pdd method not used in default mode
     65                obj.ispdd=0
     66                obj.issmbgradients=0
     67                obj.isdelta18o=0
     68
    2769                return obj
    2870        #}}}
    2971
     72        def checkconsistency(self,md,solution,analyses):    # {{{
     73
     74                if PrognosticAnalysisEnum in analyses:
     75                        md = checkfield(md,'surfaceforcings.ispdd','numel',1,'values',[0,1])
     76                        md = checkfield(md,'surfaceforcings.issmbgradients','numel',1,'values',[0,1])
     77                        if   self.ispdd:
     78                                if not self.isdelta18o:
     79                                        md = checkfield(md,'surfaceforcings.monthlytemperatures','forcing',1,'NaN',1)
     80                                        md = checkfield(md,'surfaceforcings.precipitation','forcing',1,'NaN',1)
     81                                else:
     82                                        md = checkfield(md,'surfaceforcings.delta18o','NaN',1)
     83                                        md = checkfield(md,'surfaceforcings.delta18o_surface','NaN',1)
     84                                        md = checkfield(md,'surfaceforcings.temperatures_presentday','size',[md.mesh.numberofvertices+1,12],'NaN',1)
     85                                        md = checkfield(md,'surfaceforcings.temperatures_lgm','size',[md.mesh.numberofvertices+1,12],'NaN',1)
     86                                        md = checkfield(md,'surfaceforcings.precipitations_presentday','size',[md.mesh.numberofvertices+1,12],'NaN',1)
     87                        elif self.issmbgradients:
     88                                md = checkfield(md,'surfaceforcings.hc','forcing',1,'NaN',1)
     89                                md = checkfield(md,'surfaceforcings.smb_pos_max','forcing',1,'NaN',1)
     90                                md = checkfield(md,'surfaceforcings.smb_pos_min','forcing',1,'NaN',1)
     91                                md = checkfield(md,'surfaceforcings.a_pos','forcing',1,'NaN',1)
     92                                md = checkfield(md,'surfaceforcings.b_pos','forcing',1,'NaN',1)
     93                                md = checkfield(md,'surfaceforcings.a_neg','forcing',1,'NaN',1)
     94                                md = checkfield(md,'surfaceforcings.b_neg','forcing',1,'NaN',1)
     95                        else:
     96                                md = checkfield(md,'surfaceforcings.mass_balance','forcing',1,'NaN',1)
     97
     98                if BalancethicknessAnalysisEnum in analyses:
     99                        md = checkfield(md,'surfaceforcings.mass_balance','size',[md.mesh.numberofvertices],'NaN',1)
     100
     101                return md
     102        # }}}
     103
     104        def marshall(self,fid):    # {{{
     105                WriteData(fid,'object',self,'fieldname','precipitation','format','DoubleMat','mattype',1)
     106                WriteData(fid,'object',self,'fieldname','mass_balance','format','DoubleMat','mattype',1)
     107                WriteData(fid,'object',self,'fieldname','ispdd','format','Boolean')
     108                WriteData(fid,'object',self,'fieldname','isdelta18o','format','Boolean')
     109
     110                if self.ispdd:
     111                        if self.isdelta18o:
     112                                WriteData(fid,'object',self,'fieldname','temperatures_presentday','format','DoubleMat','mattype',1)
     113                                WriteData(fid,'object',self,'fieldname','temperatures_lgm','format','DoubleMat','mattype',1)
     114                                WriteData(fid,'object',self,'fieldname','precipitations_presentday','format','DoubleMat','mattype',1)
     115                                WriteData(fid,'object',self,'fieldname','delta18o_surface','format','DoubleMat','mattype',1)
     116                                WriteData(fid,'object',self,'fieldname','delta18o','format','DoubleMat','mattype',1)
     117                        else:
     118                                WriteData(fid,'object',self,'fieldname','monthlytemperatures','format','DoubleMat','mattype',1)
     119                                WriteData(fid,'object',self,'fieldname','precipitation','format','DoubleMat','mattype',1)
     120
     121                WriteData(fid,'object',self,'fieldname','issmbgradients','format','Boolean')
     122
     123                if self.issmbgradients:
     124                        WriteData(fid,'object',self,'fieldname','hc','format','DoubleMat','mattype',1)
     125                        WriteData(fid,'object',self,'fieldname','smb_pos_max','format','DoubleMat','mattype',1)
     126                        WriteData(fid,'object',self,'fieldname','smb_pos_min','format','DoubleMat','mattype',1)
     127                        WriteData(fid,'object',self,'fieldname','a_pos','format','DoubleMat','mattype',1)
     128                        WriteData(fid,'object',self,'fieldname','b_pos','format','DoubleMat','mattype',1)
     129                        WriteData(fid,'object',self,'fieldname','a_neg','format','DoubleMat','mattype',1)
     130                        WriteData(fid,'object',self,'fieldname','b_neg','format','DoubleMat','mattype',1)
     131        # }}}
     132
  • issm/trunk-jpl/src/m/classes/timestepping.py

    r12123 r12949  
    11#module imports
    22from fielddisplay import fielddisplay
     3from EnumDefinitions import *
     4from checkfield import *
     5from WriteData import *
    36
    47class timestepping:
     
    69        def __init__(self):
    710                # {{{ Properties
     11                self.start_time      = 0
     12                self.final_time      = 0
    813                self.time_step       = 0
    9                 self.final_time      = 0
    1014                self.time_adapt      = 0
    1115                self.cfl_coefficient = 0
     
    1822                # {{{ Display
    1923                string="   timestepping parameters:"
    20                 string="%s\n\n%s"%(string,fielddisplay(obj,"time_step","length of time steps [yrs]"))
     24                string="%s\n\n%s"%(string,fielddisplay(obj,"start_time","simulation starting time [yrs]"))
    2125                string="%s\n%s"%(string,fielddisplay(obj,"final_time","final time to stop the simulation [yrs]"))
     26                string="%s\n%s"%(string,fielddisplay(obj,"time_step","length of time steps [yrs]"))
    2227                string="%s\n%s"%(string,fielddisplay(obj,"time_adapt","use cfl condition to define time step ? (0 or 1) "))
    2328                string="%s\n%s"%(string,fielddisplay(obj,"cfl_coefficient","coefficient applied to cfl condition"))
     
    4045                return obj
    4146        #}}}
     47
     48        def checkconsistency(self,md,solution,analyses):    # {{{
     49
     50                md = checkfield(md,'timestepping.start_time','numel',1,'NaN',1)
     51                md = checkfield(md,'timestepping.final_time','numel',1,'NaN',1)
     52                md = checkfield(md,'timestepping.time_step','numel',1,'>=',0,'NaN',1)
     53                md = checkfield(md,'timestepping.time_adapt','numel',1,'values',[0,1])
     54                md = checkfield(md,'timestepping.cfl_coefficient','numel',1,'>',0,'<=',1)
     55                if self.final_time-self.start_time<0:
     56                        md.checkmessage("timestepping.final_time should be larger than timestepping.start_time")
     57
     58                return md
     59        # }}}
     60
     61        def marshall(self,fid):    # {{{
     62                WriteData(fid,'object',self,'fieldname','start_time','format','Double')
     63                WriteData(fid,'object',self,'fieldname','final_time','format','Double')
     64                WriteData(fid,'object',self,'fieldname','time_step','format','Double')
     65                WriteData(fid,'object',self,'fieldname','time_adapt','format','Boolean')
     66                WriteData(fid,'object',self,'fieldname','cfl_coefficient','format','Double')
     67        # }}}
     68
  • issm/trunk-jpl/src/m/model/setflowequation.m

    r12888 r12949  
    3535%Flag the elements that have not been flagged as filltype
    3636if strcmpi(filltype,'hutter'),
    37         hutterflag(find(~macayealflag & ~pattynflag))=1;
     37        hutterflag(find(~(macayealflag | pattynflag)))=1;
    3838elseif strcmpi(filltype,'macayeal'),
    39         macayealflag(find(~hutterflag & ~pattynflag & ~stokesflag))=1;
     39        macayealflag(find(~(hutterflag | pattynflag | ~stokesflag)))=1;
    4040elseif strcmpi(filltype,'pattyn'),
    41         pattynflag(find(~hutterflag & ~macayealflag & ~stokesflag))=1;
     41        pattynflag(find(~(hutterflag | ~macayealflag | ~stokesflag)))=1;
    4242end
    4343
  • issm/trunk-jpl/src/m/model/solve.py

    r12944 r12949  
    1616 
    1717           solution types available comprise:
    18                   - DiagnosticSolutionEnum
    19                   - PrognosticSolutionEnum
    20                   - ThermalSolutionEnum
    21                   - SteadystateSolutionEnum
    22                   - TransientSolutionEnum...
    23                   - BalancethicknessSolutionEnum
    24                   - BedSlopeSolutionEnum
    25                   - SurfaceSlopeSolutionEnum
    26                   - HydrologySolutionEnum
    27                   - FlaimSolutionEnum
     18              - DiagnosticSolutionEnum
     19              - PrognosticSolutionEnum
     20              - ThermalSolutionEnum
     21              - SteadystateSolutionEnum
     22              - TransientSolutionEnum...
     23              - BalancethicknessSolutionEnum
     24              - BedSlopeSolutionEnum
     25              - SurfaceSlopeSolutionEnum
     26              - HydrologySolutionEnum
     27              - FlaimSolutionEnum
    2828 
    2929           extra options:
Note: See TracChangeset for help on using the changeset viewer.