source: issm/trunk-jpl/src/m/classes/lovenumbers.py@ 26178

Last change on this file since 26178 was 26178, checked in by bdef, 4 years ago

CHG: minor syntax

File size: 4.8 KB
RevLine 
[25154]1from checkfield import checkfield
2from fielddisplay import fielddisplay
[25158]3from getlovenumbers import getlovenumbers
4from pairoptions import pairoptions
[25156]5from WriteData import WriteData
[25154]6
7
[26178]8class lovenumbers(object): #{{{
[25688]9 """LOVENUMBERS class definition
[25154]10
[25688]11 Usage:
[26178]12 lovenumbers = lovenumbers() #will setup love numbers deg 1001 by default
13 lovenumbers = lovenumbers('maxdeg', 10001); #supply numbers of degrees required (here, 10001)
[25688]14 """
[25154]15
[26178]16 def __init__(self, *args): #{{{
[25688]17 # Regular love numbers
[26178]18 self.h = [] # Provided by PREM model
19 self.k = [] # idem
20 self.l = [] # idem
[25154]21
[25688]22 # Tidal love numbers for computing rotational feedback
[25154]23 self.th = []
24 self.tk = []
25 self.tl = []
[26178]26 self.tk2secular = 0 # deg 2 secular number
[25158]27
28 options = pairoptions(*args)
29 maxdeg = options.getfieldvalue('maxdeg', 1000)
30 referenceframe = options.getfieldvalue('referenceframe', 'CM')
31 self.setdefaultparameters(maxdeg, referenceframe)
[25157]32 #}}}
[25154]33
[26178]34 def setdefaultparameters(self, maxdeg, referenceframe): #{{{
[25688]35 # Initialize love numbers
[25154]36 self.h = getlovenumbers('type', 'loadingverticaldisplacement', 'referenceframe', referenceframe, 'maxdeg', maxdeg)
37 self.k = getlovenumbers('type', 'loadinggravitationalpotential', 'referenceframe', referenceframe, 'maxdeg', maxdeg)
38 self.l = getlovenumbers('type', 'loadinghorizontaldisplacement', 'referenceframe', referenceframe, 'maxdeg', maxdeg)
39 self.th = getlovenumbers('type', 'tidalverticaldisplacement', 'referenceframe', referenceframe, 'maxdeg', maxdeg)
40 self.tk = getlovenumbers('type', 'tidalgravitationalpotential', 'referenceframe', referenceframe, 'maxdeg', maxdeg)
41 self.tl = getlovenumbers('type', 'tidalhorizontaldisplacement', 'referenceframe', referenceframe, 'maxdeg', maxdeg)
42
[25688]43 # Secular fluid love number
[25154]44 self.tk2secular = 0.942
[25688]45 return self
[25157]46 #}}}
[25154]47
[26178]48 def checkconsistency(self, md, solution, analyses): #{{{
49 if ('SealevelriseAnalysis' not in analyses) or (solution == 'TransientSolution' and not md.transient.isslc):
[25154]50 return
51 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.h', 'NaN', 1, 'Inf', 1)
52 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.k', 'NaN', 1, 'Inf', 1)
53 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.l', 'NaN', 1, 'Inf', 1)
54
55 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.th', 'NaN', 1, 'Inf', 1)
56 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.tk', 'NaN', 1, 'Inf', 1)
57 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.tk2secular', 'NaN', 1, 'Inf', 1)
[25688]58 # Check that love numbers are provided at the same level of accuracy
[25166]59 if (self.h.shape[0] != self.k.shape[0]) or (self.h.shape[0] != self.l.shape[0]):
[25154]60 raise ValueError('lovenumbers error message: love numbers should be provided at the same level of accuracy')
[25688]61 return md
[25157]62 #}}}
[25154]63
[26178]64 def defaultoutputs(self, md): #{{{
[25154]65 return[]
[25157]66 #}}}
[25154]67
[26178]68 def __repr__(self): #{{{
[25688]69 s = ' lovenumbers parameters:\n'
[25154]70 s += '{}\n'.format(fielddisplay(self, 'h', 'load Love number for radial displacement'))
71 s += '{}\n'.format(fielddisplay(self, 'k', 'load Love number for gravitational potential perturbation'))
72 s += '{}\n'.format(fielddisplay(self, 'l', 'load Love number for horizontal displacements'))
73 s += '{}\n'.format(fielddisplay(self, 'th', 'tidal load Love number (deg 2)'))
74 s += '{}\n'.format(fielddisplay(self, 'tk', 'tidal load Love number (deg 2)'))
75 s += '{}\n'.format(fielddisplay(self, 'tk2secular', 'secular fluid Love number'))
[25183]76 return s
[25157]77 #}}}
[25154]78
[26178]79 def marshall(self, prefix, md, fid): #{{{
[25154]80 WriteData(fid, prefix, 'object', self, 'fieldname', 'h', 'name', 'md.solidearth.lovenumbers.h', 'format', 'DoubleMat', 'mattype', 1)
81 WriteData(fid, prefix, 'object', self, 'fieldname', 'k', 'name', 'md.solidearth.lovenumbers.k', 'format', 'DoubleMat', 'mattype', 1)
82 WriteData(fid, prefix, 'object', self, 'fieldname', 'l', 'name', 'md.solidearth.lovenumbers.l', 'format', 'DoubleMat', 'mattype', 1)
83
84 WriteData(fid, prefix, 'object', self, 'fieldname', 'th', 'name', 'md.solidearth.lovenumbers.th', 'format', 'DoubleMat', 'mattype', 1)
85 WriteData(fid, prefix, 'object', self, 'fieldname', 'tk', 'name', 'md.solidearth.lovenumbers.tk', 'format', 'DoubleMat', 'mattype', 1)
86 WriteData(fid, prefix, 'object', self, 'fieldname', 'tl', 'name', 'md.solidearth.lovenumbers.tl', 'format', 'DoubleMat', 'mattype', 1)
87 WriteData(fid, prefix, 'object', self, 'data', self.tk2secular, 'fieldname', 'lovenumbers.tk2secular', 'format', 'Double')
[25157]88 #}}}
[25154]89
[26178]90 def extrude(self, md): #{{{
[25154]91 return
[25157]92#}}}
Note: See TracBrowser for help on using the repository browser.