Changeset 13023


Ignore:
Timestamp:
08/13/12 15:52:22 (13 years ago)
Author:
jschierm
Message:

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

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

Legend:

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

    r12958 r13023  
    11#module imports
    22from fielddisplay import fielddisplay
     3from EnumDefinitions import *
     4from checkfield import *
     5from WriteData import *
    36
    47class autodiff(object):
     8        """
     9        AUTODIFF class definition
     10
     11           Usage:
     12              autodiff=autodiff();
     13        """
     14
    515        #properties
    616        def __init__(self):
     
    1424
    1525                #}}}
    16         def __repr__(obj):
     26        def __repr__(self):
    1727                # {{{ Display
    1828                string='   automatic differentiation parameters:'
    19                 string="%s\n%s"%(string,fielddisplay(obj,'isautodiff','indicates if the automatic differentiation is activated'))
    20                 string="%s\n%s"%(string,fielddisplay(obj,'forward','forward differentiation'))
    21                 string="%s\n%s"%(string,fielddisplay(obj,'reverse','backward differentiation'))
     29                string="%s\n%s"%(string,fielddisplay(self,'isautodiff','indicates if the automatic differentiation is activated'))
     30                string="%s\n%s"%(string,fielddisplay(self,'forward','forward differentiation'))
     31                string="%s\n%s"%(string,fielddisplay(self,'reverse','backward differentiation'))
    2232                return string
    2333                #}}}
    24         def setdefaultparameters(obj):
     34        def setdefaultparameters(self):
    2535                # {{{setdefaultparameters
    26                 return obj
     36                return self
    2737        #}}}
    2838
     39        def checkconsistency(self,md,solution,analyses):    # {{{
     40                return md
     41        # }}}
     42
     43        def marshall(self,fid):    # {{{
     44                WriteData(fid,'object',self,'fieldname','isautodiff','format','Boolean')
     45                WriteData(fid,'object',self,'fieldname','forward','format','Boolean')
     46                WriteData(fid,'object',self,'fieldname','reverse','format','Boolean')
     47        # }}}
     48
  • issm/trunk-jpl/src/m/classes/clusters/generic.py

    r12944 r13023  
    7373
    7474                #write queuing script
    75                 if not 'Windows' in platform.system():
     75                if 'Windows' not in platform.system():
    7676
    7777                        fid=open(modelname+'.queue','w')
     
    115115
    116116                #write queuing script
    117                 if not 'Windows' in platform.system():
     117                if 'Windows' not in platform.system():
    118118
    119119                        fid=open(modelname+'.queue','w')
  • issm/trunk-jpl/src/m/classes/diagnostic.py

    r13020 r13023  
    113113
    114114                #Early return
    115                 if not DiagnosticHorizAnalysisEnum() in analyses:
     115                if DiagnosticHorizAnalysisEnum() not in analyses:
    116116                        return md
    117                 #if (not DiagnosticHorizAnalysisEnum() in analyses) | (solution==TransientSolutionEnum() and not md.transient.isdiagnostic):
     117                #if (DiagnosticHorizAnalysisEnum() not in analyses) | (solution==TransientSolutionEnum() and not md.transient.isdiagnostic):
    118118                #       return md
    119119
  • issm/trunk-jpl/src/m/classes/flaim.py

    r12958 r13023  
    11#module imports
     2import numpy
    23from fielddisplay import fielddisplay
     4from EnumDefinitions import *
     5from checkfield import *
     6from WriteData import *
    37
    48class flaim(object):
     9        """
     10        FLAIM class definition
     11
     12           Usage:
     13              flaim=flaim();
     14        """
     15
    516        #properties
    617        def __init__(self):
     
    2031                self.opt_niter          = 30000
    2132                #}}}
    22         def __repr__(obj):
     33        def __repr__(self):
    2334                # {{{ Displa
    2435                string='   FLAIM - Flight Line Adaptation using Ice sheet Modeling:'
    2536
    2637                string="%s\n\n%s"%(string,'      Input:')
    27                 string="%s\n%s"%(string,fielddisplay(obj,'targets'            ,'name of kml output targets file '))
    28                 string="%s\n%s"%(string,fielddisplay(obj,'tracks'             ,'name of kml input tracks file '))
    29                 string="%s\n%s"%(string,fielddisplay(obj,'flightreqs'         ,'structure of kml flight requirements (not used yet)'))
    30                 string="%s\n%s"%(string,fielddisplay(obj,'criterion'          ,'element or nodal criterion for flight path evaluation (metric)'))
     38                string="%s\n%s"%(string,fielddisplay(self,'targets'            ,'name of kml output targets file '))
     39                string="%s\n%s"%(string,fielddisplay(self,'tracks'             ,'name of kml input tracks file '))
     40                string="%s\n%s"%(string,fielddisplay(self,'flightreqs'         ,'structure of kml flight requirements (not used yet)'))
     41                string="%s\n%s"%(string,fielddisplay(self,'criterion'          ,'element or nodal criterion for flight path evaluation (metric)'))
    3142
    3243                string="%s\n\n%s"%(string,'      Arguments:')
    33                 string="%s\n%s"%(string,fielddisplay(obj,'gridsatequator'     ,'number of grids at equator (determines resolution)'))
    34                 string="%s\n%s"%(string,fielddisplay(obj,'usevalueordering'   ,'flag to consider target values for flight path evaluation'))
    35                 string="%s\n%s"%(string,fielddisplay(obj,'split_antimeridian' ,'flag to split polygons on the antimeridian'))
     44                string="%s\n%s"%(string,fielddisplay(self,'gridsatequator'     ,'number of grids at equator (determines resolution)'))
     45                string="%s\n%s"%(string,fielddisplay(self,'usevalueordering'   ,'flag to consider target values for flight path evaluation'))
     46                string="%s\n%s"%(string,fielddisplay(self,'split_antimeridian' ,'flag to split polygons on the antimeridian'))
    3647               
    3748                string="%s\n\n%s"%(string,'      Optimization:')
    38                 string="%s\n%s"%(string,fielddisplay(obj,'path_optimize'     ,'optimize? (default false)'))
    39                 string="%s\n%s"%(string,fielddisplay(obj,'opt_ndir'     ,['number of directions to test when moving a point.  If this value = 1, a random direction is tested.',\
     49                string="%s\n%s"%(string,fielddisplay(self,'path_optimize'     ,'optimize? (default false)'))
     50                string="%s\n%s"%(string,fielddisplay(self,'opt_ndir'     ,['number of directions to test when moving a point.  If this value = 1, a random direction is tested.',\
    4051                                                                                  'A value > 1 results in directions equally spaced from [0, 2*PI] being tested.',\
    4152                                                                                  'For example, 4 would result in directions [0, PI/2, PI, 3PI/2].']))
    42                 string="%s\n%s"%(string,fielddisplay(obj,'opt_dist'     ,'specifies the distance in km (default 25) to move a randomly selected path point on each iteration'))
    43                 string="%s\n%s"%(string,fielddisplay(obj,'opt_niter'     ,['number of iterations (default 30,000) to run for flightplan optimization',\
     53                string="%s\n%s"%(string,fielddisplay(self,'opt_dist'     ,'specifies the distance in km (default 25) to move a randomly selected path point on each iteration'))
     54                string="%s\n%s"%(string,fielddisplay(self,'opt_niter'     ,['number of iterations (default 30,000) to run for flightplan optimization',\
    4455                                                                                   'i.e. the number of times to randomly select a point and move it.']))
    4556
    4657                string="%s\n\n%s"%(string,'      Output:')
    47                 string="%s\n%s"%(string,fielddisplay(obj,'solution'           ,'name of kml solution file'))
    48                 string="%s\n%s"%(string,fielddisplay(obj,'quality'            ,'quality of kml solution'))
     58                string="%s\n%s"%(string,fielddisplay(self,'solution'           ,'name of kml solution file'))
     59                string="%s\n%s"%(string,fielddisplay(self,'quality'            ,'quality of kml solution'))
    4960                return string
    5061                #}}}
     62
     63        def checkconsistency(self,md,solution,analyses):    # {{{
     64
     65                #Early return
     66                if not solution==FlaimSolutionEnum():
     67                        return md
     68
     69                md = checkfield(md,'flaim.tracks','file',1)
     70                if any(numpy.isnan(md.flaim.criterion)) or not md.flaim.criterion:
     71                        md = checkfield(md,'flaim.targets','file',1)
     72                else:
     73                        md = checkfield(md,'flaim.criterion','numel',[md.mesh.numberofvertices,md.mesh.numberofelements])
     74
     75                return md
     76        # }}}
     77
  • issm/trunk-jpl/src/m/classes/friction.py

    r13020 r13023  
    4141
    4242                #Early return
    43                 if not DiagnosticHorizAnalysisEnum() in analyses and not ThermalAnalysisEnum() in analyses:
     43                if DiagnosticHorizAnalysisEnum() not in analyses and ThermalAnalysisEnum() not in analyses:
    4444                        return md
    4545
  • issm/trunk-jpl/src/m/classes/hydrology.py

    r13020 r13023  
    6161
    6262                #Early return
    63                 if not HydrologyAnalysisEnum() in analyses:
     63                if HydrologyAnalysisEnum() not in analyses:
    6464                        return md
    6565
  • issm/trunk-jpl/src/m/classes/inversion.m

    r13020 r13023  
    1 %CONSTANTS class definition
     1%INVERSION class definition
    22%
    33%   Usage:
  • issm/trunk-jpl/src/m/classes/inversion.py

    r12958 r13023  
    11#module imports
     2import numpy
    23from fielddisplay import fielddisplay
     4from EnumDefinitions import *
     5from checkfield import *
     6from WriteData import *
    37
    48class inversion(object):
     9        """
     10        INVERSION class definition
     11
     12           Usage:
     13              inversion=inversion();
     14        """
     15
    516        #properties
    617        def __init__(self):
     
    2637                self.thickness_obs               = float('NaN')
    2738                #}}}
    28         def __repr__(obj):
     39        def __repr__(self):
    2940                # {{{ Display
    3041                string='\n   Inversion parameters:'
    31                 string="%s\n%s"%(string,fielddisplay(obj,'iscontrol','is inversion activated?'))
    32                 string="%s\n%s"%(string,fielddisplay(obj,'incomplete_adjoint','do we assume linear viscosity?'))
    33                 string="%s\n%s"%(string,fielddisplay(obj,'control_parameters','parameter where inverse control is carried out; ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}'))
    34                 string="%s\n%s"%(string,fielddisplay(obj,'nsteps','number of optimization searches'))
    35                 string="%s\n%s"%(string,fielddisplay(obj,'cost_functions','indicate the type of response for each optimization step'))
    36                 string="%s\n%s"%(string,fielddisplay(obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter'))
    37                 string="%s\n%s"%(string,fielddisplay(obj,'cost_function_threshold','misfit convergence criterion. Default is 1%, NaN if not applied'))
    38                 string="%s\n%s"%(string,fielddisplay(obj,'maxiter_per_step','maximum iterations during each optimization step'))
    39                 string="%s\n%s"%(string,fielddisplay(obj,'gradient_scaling','scaling factor on gradient direction during optimization, for each optimization step'))
    40                 string="%s\n%s"%(string,fielddisplay(obj,'step_threshold','decrease threshold for misfit, default is 30%'))
    41                 string="%s\n%s"%(string,fielddisplay(obj,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex'))
    42                 string="%s\n%s"%(string,fielddisplay(obj,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex'))
    43                 string="%s\n%s"%(string,fielddisplay(obj,'gradient_only','stop control method solution at gradient'))
    44                 string="%s\n%s"%(string,fielddisplay(obj,'vx_obs','observed velocity x component [m/a]'))
    45                 string="%s\n%s"%(string,fielddisplay(obj,'vy_obs','observed velocity y component [m/a]'))
    46                 string="%s\n%s"%(string,fielddisplay(obj,'vel_obs','observed velocity magnitude [m/a]'))
    47                 string="%s\n%s"%(string,fielddisplay(obj,'thickness_obs','observed thickness [m]'))
     42                string="%s\n%s"%(string,fielddisplay(self,'iscontrol','is inversion activated?'))
     43                string="%s\n%s"%(string,fielddisplay(self,'incomplete_adjoint','do we assume linear viscosity?'))
     44                string="%s\n%s"%(string,fielddisplay(self,'control_parameters','parameter where inverse control is carried out; ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}'))
     45                string="%s\n%s"%(string,fielddisplay(self,'nsteps','number of optimization searches'))
     46                string="%s\n%s"%(string,fielddisplay(self,'cost_functions','indicate the type of response for each optimization step'))
     47                string="%s\n%s"%(string,fielddisplay(self,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter'))
     48                string="%s\n%s"%(string,fielddisplay(self,'cost_function_threshold','misfit convergence criterion. Default is 1%, NaN if not applied'))
     49                string="%s\n%s"%(string,fielddisplay(self,'maxiter_per_step','maximum iterations during each optimization step'))
     50                string="%s\n%s"%(string,fielddisplay(self,'gradient_scaling','scaling factor on gradient direction during optimization, for each optimization step'))
     51                string="%s\n%s"%(string,fielddisplay(self,'step_threshold','decrease threshold for misfit, default is 30%'))
     52                string="%s\n%s"%(string,fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex'))
     53                string="%s\n%s"%(string,fielddisplay(self,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex'))
     54                string="%s\n%s"%(string,fielddisplay(self,'gradient_only','stop control method solution at gradient'))
     55                string="%s\n%s"%(string,fielddisplay(self,'vx_obs','observed velocity x component [m/a]'))
     56                string="%s\n%s"%(string,fielddisplay(self,'vy_obs','observed velocity y component [m/a]'))
     57                string="%s\n%s"%(string,fielddisplay(self,'vel_obs','observed velocity magnitude [m/a]'))
     58                string="%s\n%s"%(string,fielddisplay(self,'thickness_obs','observed thickness [m]'))
    4859                string="%s\n%s"%(string,'Available cost functions:')
    4960                string="%s\n%s"%(string,'   101: SurfaceAbsVelMisfit')
     
    5970                #}}}
    6071
    61         def setdefaultparameters(obj):
     72        def setdefaultparameters(self):
    6273                # {{{setdefaultparameters
    6374               
    6475                #default is incomplete adjoint for now
    65                 obj.incomplete_adjoint=1
     76                self.incomplete_adjoint=1
    6677
    6778                #parameter to be inferred by control methods (only
    6879                #drag and B are supported yet)
    69                 obj.control_parameters=['FrictionCoefficient']
     80                self.control_parameters=['FrictionCoefficient']
    7081
    7182                #number of steps in the control methods
    72                 obj.nsteps=20
     83                self.nsteps=20
    7384
    7485                #maximum number of iteration in the optimization algorithm for
    7586                #each step
    76                 obj.maxiter_per_step=20*ones(obj.nsteps)
     87                self.maxiter_per_step=20*ones(self.nsteps)
    7788
    7889                #the inversed parameter is updated as follows:
     
    8192                #inversed parameter (10^8 for B, 50 for drag) and can be decreased
    8293                #after the first iterations
    83                 obj.gradient_scaling=50*ones(obj.nsteps)
     94                self.gradient_scaling=50*ones(self.nsteps)
    8495
    8596                #several responses can be used:
    86                 obj.cost_functions=101*ones(obj.nsteps)
     97                self.cost_functions=101*ones(self.nsteps)
    8798
    8899                #step_threshold is used to speed up control method. When
    89                 #misfit(1)/misfit(0) < obj.step_threshold, we go directly to
     100                #misfit(1)/misfit(0) < self.step_threshold, we go directly to
    90101                #the next step
    91                 obj.step_threshold=.7*ones(obj.nsteps) #30 per cent decrement
     102                self.step_threshold=.7*ones(self.nsteps) #30 per cent decrement
    92103
    93104                #stop control solution at the gradient computation and return it?
    94                 obj.gradient_only=0
     105                self.gradient_only=0
    95106
    96107                #cost_function_threshold is a criteria to stop the control methods.
    97108                #if J[n]-J[n-1]/J[n] < criteria, the control run stops
    98109                #NaN if not applied
    99                 obj.cost_function_threshold=NaN #not activated
     110                self.cost_function_threshold=NaN #not activated
    100111
    101                 return obj
    102                 #}}}
     112                return self
     113        #}}}
    103114
     115        def checkconsistency(self,md,solution,analyses):    # {{{
    104116
     117                #Early return
     118                if not self.iscontrol:
     119                        return md
     120
     121                num_controls=numpy.size(md.inversion.control_parameters)
     122                num_costfunc=numpy.size(md.inversion.cost_functions,1)
     123
     124                md = checkfield(md,'inversion.iscontrol','values',[0,1])
     125                md = checkfield(md,'inversion.tao','values',[0,1])
     126                md = checkfield(md,'inversion.incomplete_adjoint','values',[0,1])
     127                md = checkfield(md,'inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','Vx','Vy'])
     128                md = checkfield(md,'inversion.nsteps','numel',1,'>=',1)
     129                md = checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps],'>=',0)
     130                md = checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps])
     131                md = checkfield(md,'inversion.cost_functions','size',[md.inversion.nsteps,num_costfunc],'values',[101,102,103,104,105,201,501,502,503])
     132                md = checkfield(md,'inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices,num_costfunc],'>=',0)
     133                md = checkfield(md,'inversion.gradient_only','values',[0,1])
     134                md = checkfield(md,'inversion.gradient_scaling','size',[md.inversion.nsteps,num_controls])
     135                md = checkfield(md,'inversion.min_parameters','size',[md.mesh.numberofvertices,num_controls])
     136                md = checkfield(md,'inversion.max_parameters','size',[md.mesh.numberofvertices,num_controls])
     137
     138                if solution==BalancethicknessSolutionEnum():
     139                        md = checkfield(md,'inversion.thickness_obs','size',[md.mesh.numberofvertices],'NaN',1)
     140                else:
     141                        md = checkfield(md,'inversion.vx_obs','size',[md.mesh.numberofvertices],'NaN',1)
     142                        md = checkfield(md,'inversion.vy_obs','size',[md.mesh.numberofvertices],'NaN',1)
     143
     144                return md
     145        # }}}
     146
     147        def marshall(self,fid):    # {{{
     148
     149                WriteData(fid,'object',self,'fieldname','iscontrol','format','Boolean')
     150                WriteData(fid,'object',self,'fieldname','tao','format','Boolean')
     151                WriteData(fid,'object',self,'fieldname','incomplete_adjoint','format','Boolean')
     152                if not self.iscontrol:
     153                        return
     154                WriteData(fid,'object',self,'fieldname','nsteps','format','Integer')
     155                WriteData(fid,'object',self,'fieldname','maxiter_per_step','format','DoubleMat','mattype',3)
     156                WriteData(fid,'object',self,'fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1)
     157                WriteData(fid,'object',self,'fieldname','gradient_scaling','format','DoubleMat','mattype',3)
     158                WriteData(fid,'object',self,'fieldname','cost_function_threshold','format','Double')
     159                WriteData(fid,'object',self,'fieldname','min_parameters','format','DoubleMat','mattype',3)
     160                WriteData(fid,'object',self,'fieldname','max_parameters','format','DoubleMat','mattype',3)
     161                WriteData(fid,'object',self,'fieldname','step_threshold','format','DoubleMat','mattype',3)
     162                WriteData(fid,'object',self,'fieldname','gradient_only','format','Boolean')
     163                WriteData(fid,'object',self,'fieldname','vx_obs','format','DoubleMat','mattype',1)
     164                WriteData(fid,'object',self,'fieldname','vy_obs','format','DoubleMat','mattype',1)
     165                WriteData(fid,'object',self,'fieldname','vz_obs','format','DoubleMat','mattype',1)
     166                WriteData(fid,'object',self,'fieldname','thickness_obs','format','DoubleMat','mattype',1)
     167
     168                #process control parameters
     169                num_control_parameters=numpy.size(self.control_parameters)
     170                data=[StringToEnum(self.control_parameters[i]) for i in xrange(0,num_control_parameters)]
     171                WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3)
     172                WriteData(fid,'data',num_control_parameters,'enum',InversionNumControlParametersEnum(),'format','Integer')
     173
     174                #process cost functions
     175                num_cost_functions=size(self.cost_functions,1)
     176                data=self.cost_functions
     177                data[[i for i,item in enumerate(data) if item==101]]=SurfaceAbsVelMisfitEnum()
     178                data[[i for i,item in enumerate(data) if item==102]]=SurfaceRelVelMisfitEnum()
     179                data[[i for i,item in enumerate(data) if item==103]]=SurfaceLogVelMisfitEnum()
     180                data[[i for i,item in enumerate(data) if item==104]]=SurfaceLogVxVyMisfitEnum()
     181                data[[i for i,item in enumerate(data) if item==105]]=SurfaceAverageVelMisfitEnum()
     182                data[[i for i,item in enumerate(data) if item==201]]=ThicknessAbsMisfitEnum()
     183                data[[i for i,item in enumerate(data) if item==501]]=DragCoefficientAbsGradientEnum()
     184                data[[i for i,item in enumerate(data) if item==502]]=RheologyBbarAbsGradientEnum()
     185                data[[i for i,item in enumerate(data) if item==503]]=ThicknessAbsGradientEnum()
     186                WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3)
     187                WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer')
     188        # }}}
     189
  • issm/trunk-jpl/src/m/classes/pairoptions.py

    r12944 r13023  
    5454                """ADDFIELDDEFAULT - add a field to an options list if it does not exist"""
    5555                if isinstance(field,str):
    56                         if not field in self.list:
     56                        if field not in self.list:
    5757                                self.list[field] = value
    5858        # }}}
  • issm/trunk-jpl/src/m/classes/prognostic.py

    r13020 r13023  
    5959
    6060                #Early return
    61                 if (not PrognosticAnalysisEnum() in analyses) or (solution==TransientSolutionEnum() and not md.transient.isprognostic):
     61                if (PrognosticAnalysisEnum() not in analyses) or (solution==TransientSolutionEnum() and not md.transient.isprognostic):
    6262                        return md
    6363
  • issm/trunk-jpl/src/m/classes/steadystate.py

    r12958 r13023  
    11#module imports
     2import numpy
    23from fielddisplay import fielddisplay
     4from EnumDefinitions import *
     5from checkfield import *
     6from WriteData import *
    37
    48class steadystate(object):
     9        """
     10        STEADYSTATE class definition
     11
     12           Usage:
     13              steadystate=steadystate();
     14        """
     15
    516        #properties
    617        def __init__(self):
     
    1425
    1526                #}}}
    16         def __repr__(obj):
     27        def __repr__(self):
    1728                # {{{ Display
    1829                string='   steadystate solution parameters:'
    19                 string="%s\n%s"%(string,fielddisplay(obj,'reltol','relative tolerance criterion'))
    20                 string="%s\n%s"%(string,fielddisplay(obj,'maxiter','maximum number of iterations'))
    21                 string="%s\n%s"%(string,fielddisplay(obj,'requested_outputs','additional requested outputs'))
     30                string="%s\n%s"%(string,fielddisplay(self,'reltol','relative tolerance criterion'))
     31                string="%s\n%s"%(string,fielddisplay(self,'maxiter','maximum number of iterations'))
     32                string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional requested outputs'))
    2233                return string
    2334                #}}}
    2435               
    25         def setdefaultparameters(obj):
     36        def setdefaultparameters(self):
    2637                # {{{setdefaultparameters
    2738               
    2839                #maximum of steady state iterations
    29                 obj.maxiter=100
     40                self.maxiter=100
    3041
    3142                #Relative tolerance for the steadystate convertgence
    32                 obj.reltol=0.01
     43                self.reltol=0.01
    3344
    34                 return obj
     45                return self
    3546        #}}}
    3647
     48        def checkconsistency(self,md,solution,analyses):    # {{{
     49
     50                #Early return
     51                if not solution==SteadystateSolutionEnum():
     52                        return md
     53
     54                if not md.timestepping.time_step==0:
     55                        md.checkmessage("for a steadystate computation, timestepping.time_step must be zero.")
     56
     57                if numpy.isnan(md.diagnostic.reltol):
     58                        md.checkmessage("for a steadystate computation, diagnostic.reltol (relative convergence criterion) must be defined!")
     59
     60                return md
     61        # }}}
     62
     63        def marshall(self,fid):    # {{{
     64                WriteData(fid,'object',self,'fieldname','reltol','format','Double')
     65                WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
     66                WriteData(fid,'object',self,'fieldname','requested_outputs','format','DoubleMat','mattype',3)
     67        # }}}
     68
  • issm/trunk-jpl/src/m/classes/thermal.m

    r13020 r13023  
    4848                        md = checkfield(md,'thermal.spctemperature','forcing',1);
    4949                        if (ismember(EnthalpyAnalysisEnum(),analyses) & md.thermal.isenthalpy & md.mesh.dimension==3),
    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                         md = checkfield(md,'thermal.isenthalpy','numel',1,'values',[0 1]);
     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                                md = checkfield(md,'thermal.isenthalpy','numel',1,'values',[0 1]);
    5252                        end
    5353                end % }}}
  • issm/trunk-jpl/src/m/classes/thermal.py

    r12958 r13023  
    11#module imports
    22from fielddisplay import fielddisplay
     3from EnumDefinitions import *
     4from checkfield import *
     5from WriteData import *
    36
    47class thermal(object):
     8        """
     9        THERMAL class definition
     10
     11           Usage:
     12              thermal=thermal();
     13        """
     14
    515        #properties
    616        def __init__(self):
     
    1828
    1929                #}}}
    20         def __repr__(obj):
     30        def __repr__(self):
    2131                # {{{ Display
    2232                string='   Thermal solution parameters:'
    23                 string="%s\n\n%s"%(string,fielddisplay(obj,'spctemperature','temperature constraints (NaN means no constraint)'))
    24                 string="%s\n%s"%(string,fielddisplay(obj,'stabilization','0->no, 1->artificial_diffusivity, 2->SUPG'))
    25                 string="%s\n%s"%(string,fielddisplay(obj,'maxiter','maximum number of non linear iterations'))
    26                 string="%s\n%s"%(string,fielddisplay(obj,'penalty_lock','stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization)'))
    27                 string="%s\n%s"%(string,fielddisplay(obj,'penalty_threshold','threshold to declare convergence of thermal solution (default is 0)'))
    28                 string="%s\n%s"%(string,fielddisplay(obj,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)'))
     33                string="%s\n\n%s"%(string,fielddisplay(self,'spctemperature','temperature constraints (NaN means no constraint)'))
     34                string="%s\n%s"%(string,fielddisplay(self,'stabilization','0->no, 1->artificial_diffusivity, 2->SUPG'))
     35                string="%s\n%s"%(string,fielddisplay(self,'maxiter','maximum number of non linear iterations'))
     36                string="%s\n%s"%(string,fielddisplay(self,'penalty_lock','stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization)'))
     37                string="%s\n%s"%(string,fielddisplay(self,'penalty_threshold','threshold to declare convergence of thermal solution (default is 0)'))
     38                string="%s\n%s"%(string,fielddisplay(self,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)'))
    2939                return string
    3040                #}}}
    3141               
    32         def setdefaultparameters(obj):
     42        def setdefaultparameters(self):
    3343                # {{{setdefaultparameters
    3444               
    3545                #Number of unstable constraints acceptable
    36                 obj.penalty_threshold=0
     46                self.penalty_threshold=0
    3747
    3848                #Type of stabilization used
    39                 obj.stabilization=1
     49                self.stabilization=1
    4050
    4151                #Maximum number of iterations
    42                 obj.maxiter=100
     52                self.maxiter=100
    4353
    4454                #factor used to compute the values of the penalties: kappa=max(stiffness matrix)*10^penalty_factor
    45                 obj.penalty_factor=3
     55                self.penalty_factor=3
    4656
    4757                #Should we use cold ice (default) or enthalpy formulation
    48                 obj.isenthalpy=0
     58                self.isenthalpy=0
    4959
    50                 return obj
     60                return self
    5161        #}}}
    5262
     63        def checkconsistency(self,md,solution,analyses):    # {{{
     64
     65                #Early return
     66                if (ThermalAnalysisEnum() not in analyses and EnthalpyAnalysisEnum() not in analyses) or (solution==TransientSolutionEnum() and not md.transient.isthermal):
     67                        return md
     68
     69                md = checkfield(md,'thermal.stabilization','numel',1,'values',[0,1,2])
     70                md = checkfield(md,'thermal.spctemperature','forcing',1)
     71                if EnthalpyAnalysisEnum() in analyses and md.thermal.isenthalpy and md.mesh.dimension==3:
     72                        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")
     73                        md = checkfield(md,'thermal.isenthalpy','numel',1,'values',[0,1])
     74
     75                return md
     76        # }}}
     77
     78        def marshall(self,fid):    # {{{
     79                WriteData(fid,'object',self,'fieldname','spctemperature','format','DoubleMat','mattype',1)
     80                WriteData(fid,'object',self,'fieldname','penalty_threshold','format','Integer')
     81                WriteData(fid,'object',self,'fieldname','stabilization','format','Integer')
     82                WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
     83                WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer')
     84                WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double')
     85                WriteData(fid,'object',self,'fieldname','isenthalpy','format','Boolean')
     86        # }}}
     87
  • issm/trunk-jpl/src/m/classes/transient.py

    r12958 r13023  
    11#module imports
    22from fielddisplay import fielddisplay
     3from EnumDefinitions import *
     4from checkfield import *
     5from WriteData import *
    36
    47class transient(object):
     8        """
     9        TRANSIENT class definition
     10
     11           Usage:
     12              transient=transient();
     13        """
     14
    515        #properties
    616        def __init__(self):
     
    1626
    1727                #}}}
    18         def __repr__(obj):
     28        def __repr__(self):
    1929                # {{{ Display
    2030                string='   transient solution parameters:'
    21                 string="%s\n%s"%(string,fielddisplay(obj,'isprognostic','indicates if a prognostic solution is used in the transient'))
    22                 string="%s\n%s"%(string,fielddisplay(obj,'isthermal','indicates if a thermal solution is used in the transient'))
    23                 string="%s\n%s"%(string,fielddisplay(obj,'isdiagnostic','indicates if a diagnostic solution is used in the transient'))
    24                 string="%s\n%s"%(string,fielddisplay(obj,'isgroundingline','indicates if a groundingline migration is used in the transient'))
    25                 string="%s\n%s"%(string,fielddisplay(obj,'requested_outputs','list of additional outputs requested'))
     31                string="%s\n%s"%(string,fielddisplay(self,'isprognostic','indicates if a prognostic solution is used in the transient'))
     32                string="%s\n%s"%(string,fielddisplay(self,'isthermal','indicates if a thermal solution is used in the transient'))
     33                string="%s\n%s"%(string,fielddisplay(self,'isdiagnostic','indicates if a diagnostic solution is used in the transient'))
     34                string="%s\n%s"%(string,fielddisplay(self,'isgroundingline','indicates if a groundingline migration is used in the transient'))
     35                string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','list of additional outputs requested'))
    2636                return string
    2737                #}}}
    2838               
    29         def setdefaultparameters(obj):
     39        def setdefaultparameters(self):
    3040                # {{{setdefaultparameters
    3141               
    3242                #full analysis: Diagnostic, Prognostic and Thermal but no groundingline migration for now
    33                 obj.isprognostic=1
    34                 obj.isdiagnostic=1
    35                 obj.isthermal=1
    36                 obj.isgroundingline=0
     43                self.isprognostic=1
     44                self.isdiagnostic=1
     45                self.isthermal=1
     46                self.isgroundingline=0
    3747
    38                 return obj
     48                return self
    3949        #}}}
    4050
     51        def checkconsistency(self,md,solution,analyses):    # {{{
     52
     53                #Early return
     54                if not solution==TransientSolutionEnum():
     55                        return md
     56
     57                md = checkfield(md,'transient.isprognostic','numel',1,'values',[0,1])
     58                md = checkfield(md,'transient.isdiagnostic','numel',1,'values',[0,1])
     59                md = checkfield(md,'transient.isthermal','numel',1,'values',[0,1])
     60                md = checkfield(md,'transient.isgroundingline','numel',1,'values',[0,1])
     61                md = checkfield(md,'transient.requested_outputs','size',[float('NaN')])
     62
     63
     64                return md
     65        # }}}
     66
     67        def marshall(self,fid):    # {{{
     68                WriteData(fid,'object',self,'fieldname','isprognostic','format','Boolean')
     69                WriteData(fid,'object',self,'fieldname','isdiagnostic','format','Boolean')
     70                WriteData(fid,'object',self,'fieldname','isthermal','format','Boolean')
     71                WriteData(fid,'object',self,'fieldname','isgroundingline','format','Boolean')
     72                WriteData(fid,'object',self,'fieldname','requested_outputs','format','DoubleMat','mattype',3)
     73        # }}}
     74
  • issm/trunk-jpl/src/m/consistency/checkfield.py

    r12943 r13023  
    5050                fieldsize=options.getfieldvalue('size')
    5151                if   len(fieldsize) == 1:
    52                         if (not numpy.size(field,0)==fieldsize[0]):
     52                        if   numpy.isnan(fieldsize[0]):
     53                                pass
     54                        elif not numpy.size(field,0)==fieldsize[0]:
    5355                                md = md.checkmessage(options.getfieldvalue('message',\
    5456                                        "field '%s' size should be %d" % (fieldname,fieldsize[0])))
     
    7072        if options.exist('numel'):
    7173                fieldnumel=options.getfieldvalue('numel')
    72                 if not numpy.size(field) in fieldnumel:
     74                if numpy.size(field) not in fieldnumel:
    7375                        if   len(fieldnumel)==1:
    7476                                md = md.checkmessage(options.getfieldvalue('message',\
  • issm/trunk-jpl/src/m/os/issmdir.py

    r12999 r13023  
    1111        """
    1212
    13         if not 'Windows' in platform.system():
     13        if 'Windows' not in platform.system():
    1414                ISSM_DIR =os.environ['ISSM_DIR']
    1515        else:
  • issm/trunk-jpl/src/m/solve/MatlabProcessPatch.py

    r13007 r13023  
    1111
    1212                #return if there is no field Patch
    13                 if not 'Patch' in structurei:
     13                if 'Patch' not in structurei:
    1414                        continue
    1515
  • issm/trunk-jpl/src/m/solve/loadresultsfromcluster.py

    r13004 r13023  
    4141                os.remove(md.miscellaneous.name+'.errlog')
    4242                os.remove(md.miscellaneous.name+'.outbin')
    43                 if not 'Windows' in platform.system():
     43                if 'Windows' not in platform.system():
    4444                        os.remove(md.private.runtimename+'.tar.gz')
    4545
     
    5353                        os.remove(md.miscellaneous.name+'.bin')
    5454                        os.remove(md.miscellaneous.name+'.petsc')
    55                         if not 'Windows' in platform.system():
     55                        if 'Windows' not in platform.system():
    5656                                os.remove(md.miscellaneous.name+'.queue')
    5757                        else:
  • issm/trunk-jpl/src/m/solve/parseresultsfromdisk.py

    r13006 r13023  
    4242        while result:
    4343                #Get time and step
    44                 if not result['step'] in results:
     44                if result['step'] not in results:
    4545                        results[result['step']]={}
    4646                        results[result['step']]['step']=result['step']
     
    8585
    8686                #Get time and step
    87                 if not result['step'] in results:
     87                if result['step'] not in results:
    8888                        results[result['step']]={}
    8989                        results[result['step']]['step']=result['step']
     
    124124
    125125                #Get time and step
    126                 if not result['step'] in results:
     126                if result['step'] not in results:
    127127                        results[result['step']]={}
    128128                        results[result['step']]['step']=result['step']
  • issm/trunk-jpl/src/m/solve/process_solve_options.py

    r13004 r13023  
    1616        #solution_type: check on this option, error out otherwise
    1717        solution_type=options.getfieldvalue('solution_type')
    18         if not solution_type in (DiagnosticSolutionEnum,PrognosticSolutionEnum,ThermalSolutionEnum,\
     18        if solution_type not in (DiagnosticSolutionEnum,PrognosticSolutionEnum,ThermalSolutionEnum,\
    1919                        SteadystateSolutionEnum,TransientSolutionEnum,EnthalpySolutionEnum,\
    2020                        BalancethicknessSolutionEnum,BedSlopeSolutionEnum,SurfaceSlopeSolutionEnum,HydrologySolutionEnum,FlaimSolutionEnum):
Note: See TracChangeset for help on using the changeset viewer.