Ignore:
Timestamp:
04/08/19 16:35:05 (6 years ago)
Author:
kruegern
Message:

BUG: fixed various tab vs 4-space bugs and misaligned tabs

File:
1 edited

Legend:

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

    r23812 r23833  
    77
    88class initialization(object):
    9         """
    10         INITIALIZATION class definition
    11        
    12         Usage:
    13         initialization=initialization();
    14         """
     9    """
     10    INITIALIZATION class definition
     11   
     12    Usage:
     13    initialization=initialization();
     14    """
    1515
    16         def __init__(self): # {{{
    17                                        
    18                 self.vx            = float('NaN')
    19                 self.vy            = float('NaN')
    20                 self.vz            = float('NaN')
    21                 self.vel           = float('NaN')
    22                 self.enthalpy      = float('NaN')
    23                 self.pressure      = float('NaN')
    24                 self.temperature   = float('NaN')
    25                 self.waterfraction = float('NaN')
    26                 self.watercolumn   = float('NaN')
    27                 self.sediment_head = float('NaN')
    28                 self.epl_head      = float('NaN')
    29                 self.epl_thickness = float('NaN')
     16    def __init__(self): # {{{
     17                   
     18        self.vx            = float('NaN')
     19        self.vy            = float('NaN')
     20        self.vz            = float('NaN')
     21        self.vel           = float('NaN')
     22        self.enthalpy      = float('NaN')
     23        self.pressure      = float('NaN')
     24        self.temperature   = float('NaN')
     25        self.waterfraction = float('NaN')
     26        self.watercolumn   = float('NaN')
     27        self.sediment_head = float('NaN')
     28        self.epl_head      = float('NaN')
     29        self.epl_thickness = float('NaN')
    3030
    31                 #set defaults
    32                 self.setdefaultparameters()
     31        #set defaults
     32        self.setdefaultparameters()
    3333
    34                 #}}}
    35         def __repr__(self): # {{{
    36                 string='   initial field values:'
    37                 string="%s\n%s"%(string,fielddisplay(self,'vx','x component of velocity [m/yr]'))
    38                 string="%s\n%s"%(string,fielddisplay(self,'vy','y component of velocity [m/yr]'))
    39                 string="%s\n%s"%(string,fielddisplay(self,'vz','z component of velocity [m/yr]'))
    40                 string="%s\n%s"%(string,fielddisplay(self,'vel','velocity norm [m/yr]'))
    41                 string="%s\n%s"%(string,fielddisplay(self,'pressure','pressure [Pa]'))
    42                 string="%s\n%s"%(string,fielddisplay(self,'temperature','temperature [K]'))
    43                 string="%s\n%s"%(string,fielddisplay(self,'enthalpy','enthalpy [J]'))
    44                 string="%s\n%s"%(string,fielddisplay(self,'waterfraction','fraction of water in the ice'))
    45                 string="%s\n%s"%(string,fielddisplay(self,'watercolumn','thickness of subglacial water [m]'))
    46                 string="%s\n%s"%(string,fielddisplay(self,'sediment_head','sediment water head of subglacial system [m]'))
    47                 string="%s\n%s"%(string,fielddisplay(self,'epl_head','epl water head of subglacial system [m]'))
    48                 string="%s\n%s"%(string,fielddisplay(self,'epl_thickness','thickness of the epl [m]'))
     34        #}}}
     35    def __repr__(self): # {{{
     36        string='   initial field values:'
     37        string="%s\n%s"%(string,fielddisplay(self,'vx','x component of velocity [m/yr]'))
     38        string="%s\n%s"%(string,fielddisplay(self,'vy','y component of velocity [m/yr]'))
     39        string="%s\n%s"%(string,fielddisplay(self,'vz','z component of velocity [m/yr]'))
     40        string="%s\n%s"%(string,fielddisplay(self,'vel','velocity norm [m/yr]'))
     41        string="%s\n%s"%(string,fielddisplay(self,'pressure','pressure [Pa]'))
     42        string="%s\n%s"%(string,fielddisplay(self,'temperature','temperature [K]'))
     43        string="%s\n%s"%(string,fielddisplay(self,'enthalpy','enthalpy [J]'))
     44        string="%s\n%s"%(string,fielddisplay(self,'waterfraction','fraction of water in the ice'))
     45        string="%s\n%s"%(string,fielddisplay(self,'watercolumn','thickness of subglacial water [m]'))
     46        string="%s\n%s"%(string,fielddisplay(self,'sediment_head','sediment water head of subglacial system [m]'))
     47        string="%s\n%s"%(string,fielddisplay(self,'epl_head','epl water head of subglacial system [m]'))
     48        string="%s\n%s"%(string,fielddisplay(self,'epl_thickness','thickness of the epl [m]'))
    4949
    50                 return string
    51                 #}}}
    52         def extrude(self,md): # {{{
    53                 self.vx=project3d(md,'vector',self.vx,'type','node')
    54                 self.vy=project3d(md,'vector',self.vy,'type','node')
    55                 self.vz=project3d(md,'vector',self.vz,'type','node')
    56                 self.vel=project3d(md,'vector',self.vel,'type','node')
    57                 self.temperature=project3d(md,'vector',self.temperature,'type','node')
    58                 self.enthalpy=project3d(md,'vector',self.enthalpy,'type','node')
    59                 self.waterfraction=project3d(md,'vector',self.waterfraction,'type','node')
    60                 self.watercolumn=project3d(md,'vector',self.watercolumn,'type','node')
    61                 self.sediment_head=project3d(md,'vector',self.sediment_head,'type','node','layer',1)
    62                 self.epl_head=project3d(md,'vector',self.epl_head,'type','node','layer',1)
    63                 self.epl_thickness=project3d(md,'vector',self.epl_thickness,'type','node','layer',1)
     50        return string
     51        #}}}
     52    def extrude(self,md): # {{{
     53        self.vx=project3d(md,'vector',self.vx,'type','node')
     54        self.vy=project3d(md,'vector',self.vy,'type','node')
     55        self.vz=project3d(md,'vector',self.vz,'type','node')
     56        self.vel=project3d(md,'vector',self.vel,'type','node')
     57        self.temperature=project3d(md,'vector',self.temperature,'type','node')
     58        self.enthalpy=project3d(md,'vector',self.enthalpy,'type','node')
     59        self.waterfraction=project3d(md,'vector',self.waterfraction,'type','node')
     60        self.watercolumn=project3d(md,'vector',self.watercolumn,'type','node')
     61        self.sediment_head=project3d(md,'vector',self.sediment_head,'type','node','layer',1)
     62        self.epl_head=project3d(md,'vector',self.epl_head,'type','node','layer',1)
     63        self.epl_thickness=project3d(md,'vector',self.epl_thickness,'type','node','layer',1)
    6464
    65                 #Lithostatic pressure by default
    66                 #               self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface[:,0]-md.mesh.z)
    67                 #self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z.reshape(-1,))
     65        #Lithostatic pressure by default
     66        #        self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface[:,0]-md.mesh.z)
     67        #self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z.reshape(-1,))
    6868
    69                 if np.ndim(md.geometry.surface)==2:
    70                         print('Reshaping md.geometry.surface for you convenience but you should fix it in you files')
    71                         self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface.reshape(-1,)-md.mesh.z)
    72                 else:
    73                         self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z)
     69        if np.ndim(md.geometry.surface)==2:
     70            print('Reshaping md.geometry.surface for you convenience but you should fix it in you files')
     71            self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface.reshape(-1,)-md.mesh.z)
     72        else:
     73            self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z)
    7474
    75                 return self
    76         #}}}
    77         def setdefaultparameters(self): # {{{
    78                 return self
    79         #}}}
    80         def checkconsistency(self,md,solution,analyses):    # {{{
    81                 if 'StressbalanceAnalysis' in analyses:
    82                         if not np.any(np.logical_or(np.isnan(md.initialization.vx),np.isnan(md.initialization.vy))):
    83                                 md = checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    84                                 md = checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    85                 if 'MasstransportAnalysis' in analyses:
    86                         md = checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    87                         md = checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    88                 if 'BalancethicknessAnalysis' in analyses:
    89                         md = checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    90                         md = checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    91                         #Triangle with zero velocity
    92                         if np.any(np.logical_and(np.sum(np.abs(md.initialization.vx[md.mesh.elements-1]),axis=1)==0,\
    93                                                        np.sum(np.abs(md.initialization.vy[md.mesh.elements-1]),axis=1)==0)):
    94                                 md.checkmessage("at least one triangle has all its vertices with a zero velocity")
    95                 if 'ThermalAnalysis' in analyses:
    96                         md = checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    97                         md = checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    98                         md = checkfield(md,'fieldname','initialization.temperature','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    99                         if md.mesh.dimension()==3:
    100                                 md = checkfield(md,'fieldname','initialization.vz','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    101                         md = checkfield(md,'fieldname','initialization.pressure','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    102                         if ('EnthalpyAnalysis' in analyses and md.thermal.isenthalpy):
    103                                 md = checkfield(md,'fieldname','initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices])
    104                                 md = checkfield(md,'fieldname','initialization.watercolumn'  ,'>=',0,'size',[md.mesh.numberofvertices])
    105                                 pos = np.nonzero(md.initialization.waterfraction > 0.)[0]
    106                                 if(pos.size):
    107                                         md = checkfield(md,'fieldname', 'delta Tpmp', 'field', np.absolute(md.initialization.temperature[pos]-(md.materials.meltingpoint-md.materials.beta*md.initialization.pressure[pos])),'<',1e-11, 'message','set temperature to pressure melting point at locations with waterfraction>0');
    108                 if 'HydrologyShreveAnalysis' in analyses:
    109                         if hasattr(md.hydrology,'hydrologyshreve'):
    110                                 md = checkfield(md,'fieldname','initialization.watercolumn','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    111                 if 'HydrologyDCInefficientAnalysis' in analyses:
    112                         if hasattr(md.hydrology,'hydrologydc'):
    113                                 md = checkfield(md,'fieldname','initialization.sediment_head','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    114                 if 'HydrologyDCEfficientAnalysis' in analyses:
    115                         if hasattr(md.hydrology,'hydrologydc'):
    116                                 if md.hydrology.isefficientlayer==1:
    117                                         md = checkfield(md,'fieldname','initialization.epl_head','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    118                                         md = checkfield(md,'fieldname','initialization.epl_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     75        return self
     76    #}}}
     77    def setdefaultparameters(self): # {{{
     78        return self
     79    #}}}
     80    def checkconsistency(self,md,solution,analyses):    # {{{
     81        if 'StressbalanceAnalysis' in analyses:
     82            if not np.any(np.logical_or(np.isnan(md.initialization.vx),np.isnan(md.initialization.vy))):
     83                md = checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     84                md = checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     85        if 'MasstransportAnalysis' in analyses:
     86            md = checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     87            md = checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     88        if 'BalancethicknessAnalysis' in analyses:
     89            md = checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     90            md = checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     91            #Triangle with zero velocity
     92            if np.any(np.logical_and(np.sum(np.abs(md.initialization.vx[md.mesh.elements-1]),axis=1)==0,\
     93                                           np.sum(np.abs(md.initialization.vy[md.mesh.elements-1]),axis=1)==0)):
     94                md.checkmessage("at least one triangle has all its vertices with a zero velocity")
     95        if 'ThermalAnalysis' in analyses:
     96            md = checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     97            md = checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     98            md = checkfield(md,'fieldname','initialization.temperature','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     99            if md.mesh.dimension()==3:
     100                md = checkfield(md,'fieldname','initialization.vz','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     101            md = checkfield(md,'fieldname','initialization.pressure','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     102            if ('EnthalpyAnalysis' in analyses and md.thermal.isenthalpy):
     103                md = checkfield(md,'fieldname','initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices])
     104                md = checkfield(md,'fieldname','initialization.watercolumn'  ,'>=',0,'size',[md.mesh.numberofvertices])
     105                pos = np.nonzero(md.initialization.waterfraction > 0.)[0]
     106                if(pos.size):
     107                    md = checkfield(md,'fieldname', 'delta Tpmp', 'field', np.absolute(md.initialization.temperature[pos]-(md.materials.meltingpoint-md.materials.beta*md.initialization.pressure[pos])),'<',1e-11,    'message','set temperature to pressure melting point at locations with waterfraction>0');
     108        if 'HydrologyShreveAnalysis' in analyses:
     109            if hasattr(md.hydrology,'hydrologyshreve'):
     110                md = checkfield(md,'fieldname','initialization.watercolumn','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     111        if 'HydrologyDCInefficientAnalysis' in analyses:
     112            if hasattr(md.hydrology,'hydrologydc'):
     113                md = checkfield(md,'fieldname','initialization.sediment_head','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     114        if 'HydrologyDCEfficientAnalysis' in analyses:
     115            if hasattr(md.hydrology,'hydrologydc'):
     116                if md.hydrology.isefficientlayer==1:
     117                    md = checkfield(md,'fieldname','initialization.epl_head','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     118                    md = checkfield(md,'fieldname','initialization.epl_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    119119
    120                 return md
    121         # }}}
    122         def marshall(self,prefix,md,fid):    # {{{
     120        return md
     121    # }}}
     122    def marshall(self,prefix,md,fid):    # {{{
    123123
    124                 yts=md.constants.yts
     124        yts=md.constants.yts
    125125
    126                 WriteData(fid,prefix,'object',self,'fieldname','vx','format','DoubleMat','mattype',1,'scale',1./yts)
    127                 WriteData(fid,prefix,'object',self,'fieldname','vy','format','DoubleMat','mattype',1,'scale',1./yts)
    128                 WriteData(fid,prefix,'object',self,'fieldname','vz','format','DoubleMat','mattype',1,'scale',1./yts)
    129                 WriteData(fid,prefix,'object',self,'fieldname','pressure','format','DoubleMat','mattype',1)
    130                 WriteData(fid,prefix,'object',self,'fieldname','temperature','format','DoubleMat','mattype',1)
    131                 WriteData(fid,prefix,'object',self,'fieldname','waterfraction','format','DoubleMat','mattype',1)
    132                 WriteData(fid,prefix,'object',self,'fieldname','sediment_head','format','DoubleMat','mattype',1)
    133                 WriteData(fid,prefix,'object',self,'fieldname','epl_head','format','DoubleMat','mattype',1)
    134                 WriteData(fid,prefix,'object',self,'fieldname','epl_thickness','format','DoubleMat','mattype',1)
    135                 WriteData(fid,prefix,'object',self,'fieldname','watercolumn','format','DoubleMat','mattype',1)
    136                
    137                 if md.thermal.isenthalpy:
    138                     if (np.size(self.enthalpy)<=1):
    139                         tpmp = md.materials.meltingpoint - md.materials.beta*md.initialization.pressure;
    140                         pos  = np.nonzero(md.initialization.waterfraction > 0.)[0]
    141                         self.enthalpy      = md.materials.heatcapacity*(md.initialization.temperature-md.constants.referencetemperature);
    142                         self.enthalpy[pos] = md.materials.heatcapacity*(tpmp[pos].reshape(-1,) - md.constants.referencetemperature) + md.materials.latentheat*md.initialization.waterfraction[pos].reshape(-1,)
     126        WriteData(fid,prefix,'object',self,'fieldname','vx','format','DoubleMat','mattype',1,'scale',1./yts)
     127        WriteData(fid,prefix,'object',self,'fieldname','vy','format','DoubleMat','mattype',1,'scale',1./yts)
     128        WriteData(fid,prefix,'object',self,'fieldname','vz','format','DoubleMat','mattype',1,'scale',1./yts)
     129        WriteData(fid,prefix,'object',self,'fieldname','pressure','format','DoubleMat','mattype',1)
     130        WriteData(fid,prefix,'object',self,'fieldname','temperature','format','DoubleMat','mattype',1)
     131        WriteData(fid,prefix,'object',self,'fieldname','waterfraction','format','DoubleMat','mattype',1)
     132        WriteData(fid,prefix,'object',self,'fieldname','sediment_head','format','DoubleMat','mattype',1)
     133        WriteData(fid,prefix,'object',self,'fieldname','epl_head','format','DoubleMat','mattype',1)
     134        WriteData(fid,prefix,'object',self,'fieldname','epl_thickness','format','DoubleMat','mattype',1)
     135        WriteData(fid,prefix,'object',self,'fieldname','watercolumn','format','DoubleMat','mattype',1)
     136       
     137        if md.thermal.isenthalpy:
     138            if (np.size(self.enthalpy)<=1):
     139                tpmp = md.materials.meltingpoint - md.materials.beta*md.initialization.pressure;
     140                pos  = np.nonzero(md.initialization.waterfraction > 0.)[0]
     141                self.enthalpy      = md.materials.heatcapacity*(md.initialization.temperature-md.constants.referencetemperature);
     142                self.enthalpy[pos] = md.materials.heatcapacity*(tpmp[pos].reshape(-1,) - md.constants.referencetemperature) + md.materials.latentheat*md.initialization.waterfraction[pos].reshape(-1,)
    143143
    144                     WriteData(fid,prefix,'data',self.enthalpy,'format','DoubleMat','mattype',1,'name','md.initialization.enthalpy');
     144            WriteData(fid,prefix,'data',self.enthalpy,'format','DoubleMat','mattype',1,'name','md.initialization.enthalpy');
    145145
    146         # }}}
     146    # }}}
Note: See TracChangeset for help on using the changeset viewer.