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

Last change on this file since 25157 was 25157, checked in by jdquinn, 5 years ago

CHG: Minor cleanup.

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