Changeset 23088


Ignore:
Timestamp:
08/11/18 13:06:28 (7 years ago)
Author:
kruegern
Message:

BUG: fixed various differences in the python Solid Earth (slr) tests and resulting bins

Location:
issm/trunk-jpl
Files:
5 edited

Legend:

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

    r23038 r23088  
    1111       
    1212                Usage:
    13                   slr=slr();
     13                  slr=slr()
    1414        """
    1515       
     
    1717                self.deltathickness         = float('NaN')
    1818                self.sealevel               = float('NaN')
     19                self.spcthickness           = float('NaN')
    1920                self.maxiter                = 0
    2021                self.reltol                 = 0
     
    2324                self.love_k                 = 0 #ideam
    2425                self.love_l                 = 0 #ideam
    25                 self.tide_love_h            = 0
    26                 self.tide_love_k            = 0
     26                self.tide_love_k            = 0 #ideam
     27                self.tide_love_h            = 0 #ideam
    2728                self.fluid_love             = 0
    2829                self.equatorial_moi         = 0
     
    5152                        string="%s\n%s"%(string,fielddisplay(self,'deltathickness','thickness change: ice height equivalent [m]'))
    5253                        string="%s\n%s"%(string,fielddisplay(self,'sealevel','current sea level (prior to computation) [m]'))
     54                        string="%s\n%s"%(string,fielddisplay(self,'spcthickness','thickness constraints (NaN means no constraint) [m]'))
    5355                        string="%s\n%s"%(string,fielddisplay(self,'reltol','sea level rise relative convergence criterion, (NaN: not applied)'))
    5456                        string="%s\n%s"%(string,fielddisplay(self,'abstol','sea level rise absolute convergence criterion, (default, NaN: not applied)'))
     
    6264                        string="%s\n%s"%(string,fielddisplay(self,'equatorial_moi','mean equatorial moment of inertia [kg m^2]'))
    6365                        string="%s\n%s"%(string,fielddisplay(self,'polar_moi','polar moment of inertia [kg m^2]'))
    64                         string="%s\n%s"%(string,fielddisplay(self,'angular_velocity','mean rotational velocity of earth [per second]'));
     66                        string="%s\n%s"%(string,fielddisplay(self,'angular_velocity','mean rotational velocity of earth [per second]'))
    6567                        string="%s\n%s"%(string,fielddisplay(self,'ocean_area_scaling','correction for model representation of ocean area [default: No correction]'))
    6668                        string="%s\n%s"%(string,fielddisplay(self,'steric_rate','rate of steric ocean expansion [mm/yr]'))
     
    8284               
    8385                #Convergence criterion: absolute, relative and residual
    84                 self.reltol=float('NaN') #default
    85                 self.abstol=0.001 #1 mm of sea level rise
     86                self.reltol=0.01 #default
     87                self.abstol=float('NaN') #1 mm of sea level rise
    8688
    8789                #maximum of non-linear iterations.
    8890                self.maxiter=5
    89                 self.loop_increment=200;
     91                self.loop_increment=200
    9092
    9193                #computational flags:
     
    9395                self.rigid=1
    9496                self.elastic=1
    95                 self.rotation=0
    9697                self.ocean_area_scaling=0
     98                self.rotation=1
    9799
    98100                #tidal love numbers:
    99                 self.tide_love_h=0.6149; #degree 2
    100                 self.tide_love_k=0.3055; #degree 2
     101                self.tide_love_h=0.6149 #degree 2
     102                self.tide_love_k=0.3055 #degree 2
    101103               
    102104      #secular fluid love number:
    103                 self.fluid_love=0.942;
     105                self.fluid_love=0.942
    104106               
    105107                #moment of inertia:
    106                 self.equatorial_moi=8.0077*10**37; # [kg m^2]
    107                 self.polar_moi      =8.0345*10**37; # [kg m^2]
     108                self.equatorial_moi=8.0077*10**37 # [kg m^2]
     109                self.polar_moi      =8.0345*10**37 # [kg m^2]
    108110               
    109111                #mean rotational velocity of earth
    110                 self.angular_velocity=7.2921*10**-5; # [s^-1]
     112                self.angular_velocity=7.2921*10**-5 # [s^-1]
    111113
    112114                #numerical discretization accuracy
     
    114116
    115117                #steric:
    116                 self.steric_rate=0;
     118                self.steric_rate=0
    117119
    118120                #how many time steps we skip before we run SLR solver during transient
    119                 self.geodetic_run_frequency=1;
     121                self.geodetic_run_frequency=1
    120122               
    121123                #output default:
     
    125127                self.transitions=[]
    126128
    127                 #default output
    128                 self.requested_outputs=['default']
     129                #horizontal displacement?  (not by default)
     130                self.horiz=0
     131
    129132                return self
    130133                #}}}
     
    137140                md = checkfield(md,'fieldname','slr.deltathickness','NaN',1,'Inf',1,'size',[md.mesh.numberofelements])
    138141                md = checkfield(md,'fieldname','slr.sealevel','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
     142                md = checkfield(md,'fieldname','slr.spcthickness','Inf',1,'timeseries',1)
    139143                md = checkfield(md,'fieldname','slr.love_h','NaN',1,'Inf',1)
    140144                md = checkfield(md,'fieldname','slr.love_k','NaN',1,'Inf',1)
     
    152156                md = checkfield(md,'fieldname','slr.steric_rate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    153157                md = checkfield(md,'fieldname','slr.degacc','size',[1,1],'>=',1e-10)
     158                md = checkfield(md,'fieldname','slr.requested_outputs','stringrow',1)
    154159                md = checkfield(md,'fieldname','slr.loop_increment','NaN',1,'Inf',1,'>=',1)
    155160                md = checkfield(md,'fieldname','slr.horiz','NaN',1,'Inf',1,'values',[0,1])
    156161                md = checkfield(md,'fieldname','slr.Ngia','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    157162                md = checkfield(md,'fieldname','slr.Ugia','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices])
    158                 md = checkfield(md,'fieldname','slr.requested_outputs','stringrow',1)
    159163
    160164                #check that love numbers are provided at the same level of accuracy:
     
    172176                #a coupler to a planet model is provided.
    173177                if self.geodetic and not md.transient.iscoupler and domaintype(md.mesh)!='mesh3dsurface':
    174                                         error('model is requesting geodetic computations without being a mesh3dsurface, or being coupled to one!')
     178                        error('model is requesting geodetic computations without being a mesh3dsurface, or being coupled to one!')
    175179                return md
    176180        # }}}
     
    181185                WriteData(fid,prefix,'object',self,'fieldname','deltathickness','format','DoubleMat','mattype',2)
    182186                WriteData(fid,prefix,'object',self,'fieldname','sealevel','mattype',1,'format','DoubleMat','timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
     187                WriteData(fid,prefix,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts)
    183188                WriteData(fid,prefix,'object',self,'fieldname','reltol','format','Double')
    184189                WriteData(fid,prefix,'object',self,'fieldname','abstol','format','Double')
     
    187192                WriteData(fid,prefix,'object',self,'fieldname','love_k','format','DoubleMat','mattype',1)
    188193                WriteData(fid,prefix,'object',self,'fieldname','love_l','format','DoubleMat','mattype',1)
    189                 WriteData(fid,prefix,'object',self,'fieldname','tide_love_h','format','Double');
    190                 WriteData(fid,prefix,'object',self,'fieldname','tide_love_k','format','Double');
    191                 WriteData(fid,prefix,'object',self,'fieldname','fluid_love','format','Double');
    192                 WriteData(fid,prefix,'object',self,'fieldname','equatorial_moi','format','Double');
    193                 WriteData(fid,prefix,'object',self,'fieldname','polar_moi','format','Double');
    194                 WriteData(fid,prefix,'object',self,'fieldname','angular_velocity','format','Double');
     194                WriteData(fid,prefix,'object',self,'fieldname','tide_love_h','format','Double')
     195                WriteData(fid,prefix,'object',self,'fieldname','tide_love_k','format','Double')
     196                WriteData(fid,prefix,'object',self,'fieldname','fluid_love','format','Double')
     197                WriteData(fid,prefix,'object',self,'fieldname','equatorial_moi','format','Double')
     198                WriteData(fid,prefix,'object',self,'fieldname','polar_moi','format','Double')
     199                WriteData(fid,prefix,'object',self,'fieldname','angular_velocity','format','Double')
    195200                WriteData(fid,prefix,'object',self,'fieldname','rigid','format','Boolean')
    196201                WriteData(fid,prefix,'object',self,'fieldname','elastic','format','Boolean')
     
    199204                WriteData(fid,prefix,'object',self,'fieldname','geodetic_run_frequency','format','Integer')
    200205                WriteData(fid,prefix,'object',self,'fieldname','steric_rate','format','DoubleMat','mattype',1,'scale',1e-3/md.constants.yts)
    201                 WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double')
    202                 WriteData(fid,prefix,'object',self,'fieldname','loop_increment','format','Integer');
    203                 WriteData(fid,prefix,'object',self,'fieldname','horiz','format','Integer');
    204206                WriteData(fid,prefix,'object',self,'fieldname','Ngia','format','DoubleMat','mattype',1,'scale',1e-3/md.constants.yts)
    205207                WriteData(fid,prefix,'object',self,'fieldname','Ugia','format','DoubleMat','mattype',1,'scale',1e-3/md.constants.yts)
     208                WriteData(fid,prefix,'object',self,'fieldname','degacc','format','Double')
    206209                WriteData(fid,prefix,'object',self,'fieldname','transitions','format','MatArray')
     210                WriteData(fid,prefix,'object',self,'fieldname','loop_increment','format','Integer')
     211                WriteData(fid,prefix,'object',self,'fieldname','horiz','format','Integer')
    207212                WriteData(fid,prefix,'object',self,'fieldname','geodetic','format','Integer')
    208213       
  • TabularUnified issm/trunk-jpl/src/m/classes/stressbalance.py

    r22576 r23088  
    185185                WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer')
    186186                WriteData(fid,prefix,'object',self,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1)
    187                
    188                 if isinstance(self.loadingforce, (list, tuple, np.ndarray)):
    189                         lx=self.loadingforce[:,0];
    190                         ly=self.loadingforce[:,1];
    191                         lz=self.loadingforce[:,2];
    192                 else:
    193                         lx=float('NaN'); ly=float('NaN'); lz=float('NaN');
    194 
    195                 WriteData(fid,prefix,'data',lx,'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcex')
    196                 WriteData(fid,prefix,'data',ly,'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcey')
    197                 WriteData(fid,prefix,'data',lz,'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcez')
     187
     188                if isinstance(self.loadingforce, (list, tuple, np.ndarray)) and np.size(self.loadingforce,1) == 3:
     189                        WriteData(fid,prefix,'data',self.loadingforce[:,0],'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcex')
     190                        WriteData(fid,prefix,'data',self.loadingforce[:,1],'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcey')
     191                        WriteData(fid,prefix,'data',self.loadingforce[:,2],'format','DoubleMat','mattype',1,'name','md.stressbalance.loadingforcez')
    198192
    199193                #process requested outputs
  • TabularUnified issm/trunk-jpl/test/NightlyRun/test2002.py

    r23040 r23088  
    4646icemask[md.mesh.elements[pos,:].astype(int)-1]=-1
    4747md.mask.ice_levelset=icemask
    48 
    4948md.mask.ocean_levelset=np.zeros((md.mesh.numberofvertices))
    5049pos=np.where(md.mask.ice_levelset==1)
     
    110109md.slr.rigid=1
    111110md.slr.elastic=1
    112 md.slr.rotation=1
     111md.slr.rotation=0
    113112md=solve(md,'Sealevelrise')
    114113Selastic=md.results.SealevelriseSolution.Sealevel
  • TabularUnified issm/trunk-jpl/test/NightlyRun/test2003.py

    r23040 r23088  
    1212#mesh earth:
    1313md = model()
    14 md.mesh = gmshplanet('radius',6.371012*1e3,'resolution',1000) #500 km resolution mesh
     14md.mesh = gmshplanet('radius',6.371012*1e3,'resolution',1000.) #500 km resolution mesh
    1515
    1616#parameterize slr solution:
     
    8181md.materials.rheology_n = 3 * np.ones((md.mesh.numberofelements,))
    8282
     83#Miscellaneous
     84md.miscellaneous.name = 'test2003'
     85
    8386#New stuff
    8487md.slr.spcthickness = np.nan*np.ones((md.mesh.numberofvertices,));
    8588md.slr.Ngia = np.zeros((md.mesh.numberofvertices,))
    8689md.slr.Ugia = np.zeros((md.mesh.numberofvertices,))
    87 
    88 #Miscellaneous
    89 md.miscellaneous.name = 'test2003'
    9090
    9191#Solution parameters
  • TabularUnified issm/trunk-jpl/test/NightlyRun/test2010.py

    r23040 r23088  
    9999# uncomment following 2 lines for
    100100md = solve(md,'Sealevelrise')
    101 eus = md.results.SealevelriseSolution.SealevelEustatic
     101eus = md.results.SealevelriseSolution.SealevelRSLEustatic
    102102slr = md.results.SealevelriseSolution.Sealevel
    103103moixz = md.results.SealevelriseSolution.SealevelInertiaTensorXZ
Note: See TracChangeset for help on using the changeset viewer.