source: issm/oecreview/Archive/26740-27031/ISSM-26827-26828.diff@ 27032

Last change on this file since 27032 was 27032, checked in by Mathieu Morlighem, 3 years ago

CHG: added 26740-27031

File size: 5.9 KB
RevLine 
[27032]1Index: ../trunk-jpl/src/m/classes/lovenumbers.m
2===================================================================
3--- ../trunk-jpl/src/m/classes/lovenumbers.m (revision 26827)
4+++ ../trunk-jpl/src/m/classes/lovenumbers.m (revision 26828)
5@@ -15,12 +15,12 @@
6 l = []; %idem
7
8 %tidal love numbers for computing rotational feedback:
9- th = [];
10- tk = [];
11- tl = [];
12- tk2secular = 0; %deg 2 secular number.
13- pmtf_colinear = [];
14- pmtf_ortho = [];
15+ th = [];
16+ tk = [];
17+ tl = [];
18+ tk2secular = 0; %deg 2 secular number.
19+ pmtf_colinear = [];
20+ pmtf_ortho = [];
21
22 %time/frequency for visco-elastic love numbers
23 timefreq = [];
24Index: ../trunk-jpl/src/m/classes/lovenumbers.py
25===================================================================
26--- ../trunk-jpl/src/m/classes/lovenumbers.py (revision 26827)
27+++ ../trunk-jpl/src/m/classes/lovenumbers.py (revision 26828)
28@@ -5,8 +5,7 @@
29 from pairoptions import pairoptions
30 from WriteData import WriteData
31
32-
33-class lovenumbers(object): #{{{
34+class lovenumbers(object):
35 """LOVENUMBERS class definition
36
37 Usage:
38@@ -28,6 +27,8 @@
39 self.tk = []
40 self.tl = []
41 self.tk2secular = 0 # deg 2 secular number
42+ pmtf_colinear = []
43+ pmtf_ortho = []
44
45 # Time/frequency for visco-elastic love numbers
46 self.timefreq = []
47@@ -38,7 +39,6 @@
48 referenceframe = options.getfieldvalue('referenceframe', 'CM')
49 self.setdefaultparameters(maxdeg, referenceframe)
50 #}}}
51-
52 def __repr__(self): #{{{
53 s = ' lovenumbers parameters:\n'
54 s += '{}\n'.format(fielddisplay(self, 'h', 'load Love number for radial displacement'))
55@@ -48,11 +48,12 @@
56 s += '{}\n'.format(fielddisplay(self, 'tk', 'tidal load Love number (deg 2)'))
57 s += '{}\n'.format(fielddisplay(self, 'tl', 'tidal load Love number (deg 2)'))
58 s += '{}\n'.format(fielddisplay(self, 'tk2secular', 'secular fluid Love number'))
59+ s += '{}\n'.format(fielddisplay(self, 'pmtf_colinear', 'Colinear component of the Polar Motion Transfer Function (e.g. x-motion due to x-component perturbation of the inertia tensor)'))
60+ s += '{}\n'.format(fielddisplay(self, 'pmtf_ortho', 'Orthogonal component of the Polar Motion Transfer Function (couples x and y components, only used for Chandler Wobble)'))
61 s += '{}\n'.format(fielddisplay(self, 'istime', 'time (default: 1) or frequency love numbers (0)'))
62 s += '{}\n'.format(fielddisplay(self, 'timefreq', 'time/frequency vector (yr or 1/yr)'))
63 return s
64 #}}}
65-
66 def setdefaultparameters(self, maxdeg, referenceframe): #{{{
67 # Initialize love numbers
68 self.h = getlovenumbers('type', 'loadingverticaldisplacement', 'referenceframe', referenceframe, 'maxdeg', maxdeg).reshape(-1,1)
69@@ -64,6 +65,11 @@
70
71 # Secular fluid love number
72 self.tk2secular = 0.942
73+ self.pmtf_colinear=0.0
74+ self.pmtf_ortho=0.0
75+ if maxdeg>=2:
76+ self.pmtf_colinear= (1.0+self.k[3-1,:])/(1.0-self.tk[3-1,:]/self.tk2secular) #valid only for elastic regime, not viscous. Also neglects chandler wobble
77+ self.pmtf_ortho= 0.0
78
79 # Time
80 self.istime = 1 # Temporal love numbers by default
81@@ -70,7 +76,6 @@
82 self.timefreq = np.zeros(1) # Elastic case by default
83 return self
84 #}}}
85-
86 def checkconsistency(self, md, solution, analyses): #{{{
87 if ('SealevelchangeAnalysis' not in analyses) or (solution == 'TransientSolution' and not md.transient.isslc):
88 return
89@@ -82,6 +87,8 @@
90 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.tk', 'NaN', 1, 'Inf', 1)
91 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.tl', 'NaN', 1, 'Inf', 1)
92 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.tk2secular', 'NaN', 1, 'Inf', 1)
93+ md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.pmtf_colinear', 'NaN', 1, 'Inf', 1)
94+ md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.pmtf_ortho', 'NaN', 1, 'Inf', 1)
95 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.timefreq', 'NaN', 1, 'Inf', 1)
96 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.istime', 'NaN', 1, 'Inf', 1, 'values', [0, 1])
97
98@@ -95,11 +102,9 @@
99
100 return md
101 #}}}
102-
103 def defaultoutputs(self, md): #{{{
104 return[]
105 #}}}
106-
107 def marshall(self, prefix, md, fid): #{{{
108 WriteData(fid, prefix, 'object', self, 'fieldname', 'h', 'name', 'md.solidearth.lovenumbers.h', 'format', 'DoubleMat', 'mattype', 1)
109 WriteData(fid, prefix, 'object', self, 'fieldname', 'k', 'name', 'md.solidearth.lovenumbers.k', 'format', 'DoubleMat', 'mattype', 1)
110@@ -109,6 +114,8 @@
111 WriteData(fid, prefix, 'object', self, 'fieldname', 'tk', 'name', 'md.solidearth.lovenumbers.tk', 'format', 'DoubleMat', 'mattype', 1)
112 WriteData(fid, prefix, 'object', self, 'fieldname', 'tl', 'name', 'md.solidearth.lovenumbers.tl', 'format', 'DoubleMat', 'mattype', 1)
113 WriteData(fid, prefix, 'object', self, 'data', self.tk2secular, 'fieldname', 'lovenumbers.tk2secular', 'format', 'Double')
114+ WriteData(fid, prefix, 'object', self, 'fieldname', 'pmtf_colinear','name','md.solidearth.lovenumbers.pmtf_colinear','format','DoubleMat','mattype',1);
115+ WriteData(fid, prefix, 'object', self, 'fieldname', 'pmtf_ortho','name','md.solidearth.lovenumbers.pmtf_ortho','format','DoubleMat','mattype',1);
116
117 if (self.istime):
118 scale = md.constants.yts
119@@ -117,7 +124,6 @@
120 WriteData(fid, prefix, 'object', self, 'fieldname', 'istime', 'name', 'md.solidearth.lovenumbers.istime', 'format', 'Boolean')
121 WriteData(fid, prefix, 'object', self, 'fieldname', 'timefreq', 'name', 'md.solidearth.lovenumbers.timefreq', 'format', 'DoubleMat', 'mattype', 1, 'scale', scale);
122 #}}}
123-
124 def extrude(self, md): #{{{
125 return
126 #}}}
Note: See TracBrowser for help on using the repository browser.