Changeset 27035 for issm/trunk/src/m/classes/lovenumbers.py
- Timestamp:
- 06/01/22 05:01:48 (3 years ago)
- Location:
- issm/trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk
- Property svn:mergeinfo changed
/issm/trunk-jpl merged: 26745-26955,26957-27031
- Property svn:mergeinfo changed
-
issm/trunk/src
- Property svn:mergeinfo changed
-
issm/trunk/src/m/classes/lovenumbers.py
r26744 r27035 19 19 20 20 def __init__(self, *args): #{{{ 21 # Regularlove numbers22 self.h = [] 23 self.k = [] 24 self.l = [] 21 # Loading love numbers 22 self.h = [] # Provided by PREM model 23 self.k = [] # idem 24 self.l = [] # idem 25 25 26 26 # Tidal love numbers for computing rotational feedback … … 28 28 self.tk = [] 29 29 self.tl = [] 30 self.tk2secular = 0 # deg 2 secular number 30 self.tk2secular = 0 # deg 2 secular number 31 self.pmtf_colinear = [] 32 self.pmtf_ortho = [] 33 pmtf_colinear = [] 34 pmtf_ortho = [] 31 35 32 36 # Time/frequency for visco-elastic love numbers … … 49 53 s += '{}\n'.format(fielddisplay(self, 'tl', 'tidal load Love number (deg 2)')) 50 54 s += '{}\n'.format(fielddisplay(self, 'tk2secular', 'secular fluid Love number')) 55 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)')) 56 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)')) 51 57 s += '{}\n'.format(fielddisplay(self, 'istime', 'time (default: 1) or frequency love numbers (0)')) 52 58 s += '{}\n'.format(fielddisplay(self, 'timefreq', 'time/frequency vector (yr or 1/yr)')) 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)')) 53 61 return s 54 62 #}}} … … 65 73 # Secular fluid love number 66 74 self.tk2secular = 0.942 75 self.pmtf_colinear=0.0 76 self.pmtf_ortho=0.0 77 if maxdeg>=2: 78 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 79 self.pmtf_ortho= 0.0 67 80 81 self.pmtf_colinear = np.array([0.0]).reshape(-1, 1) 82 self.pmtf_ortho = np.array([0.0]).reshape(-1, 1) 83 if maxdeg >= 2: 84 self.pmtf_colinear = ((1.0 + self.k[2, :]) / (1.0 - self.tk[2, :] / self.tk2secular)).reshape(-1, 1) # Valid only for elastic regime, not viscous. Also neglects chandler wobble. 85 self.pmtf_ortho = np.array([0.0]).reshape(-1, 1) 68 86 # Time 69 87 self.istime = 1 # Temporal love numbers by default … … 83 101 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.tl', 'NaN', 1, 'Inf', 1) 84 102 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.tk2secular', 'NaN', 1, 'Inf', 1) 103 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.pmtf_colinear', 'NaN', 1, 'Inf', 1) 104 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.pmtf_ortho', 'NaN', 1, 'Inf', 1) 85 105 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.timefreq', 'NaN', 1, 'Inf', 1) 86 106 md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.istime', 'NaN', 1, 'Inf', 1, 'values', [0, 1]) … … 91 111 92 112 ntf = len(self.timefreq) 93 if (np.shape(self.h)[1] != ntf or np.shape(self.k)[1] != ntf or np.shape(self.l)[1] != ntf or np.shape(self.th)[1] != ntf or np.shape(self.tk)[1] != ntf or np.shape(self.tl)[1] != ntf ):113 if (np.shape(self.h)[1] != ntf or np.shape(self.k)[1] != ntf or np.shape(self.l)[1] != ntf or np.shape(self.th)[1] != ntf or np.shape(self.tk)[1] != ntf or np.shape(self.tl)[1] != ntf or np.shape(self.pmtf_colinear)[1] != ntf or np.shape(self.pmtf_ortho)[1] != ntf): 94 114 raise ValueError('lovenumbers error message: love numbers should have as many time/frequency steps as the time/frequency vector') 95 115 116 if self.istime and self.timefreq[0] != 0: 117 raise ValueError('temporal love numbers must start with elastic response, i.e. timefreq[0] = 0') 96 118 return md 97 119 #}}} … … 109 131 WriteData(fid, prefix, 'object', self, 'fieldname', 'tk', 'name', 'md.solidearth.lovenumbers.tk', 'format', 'DoubleMat', 'mattype', 1) 110 132 WriteData(fid, prefix, 'object', self, 'fieldname', 'tl', 'name', 'md.solidearth.lovenumbers.tl', 'format', 'DoubleMat', 'mattype', 1) 133 WriteData(fid, prefix, 'object', self, 'fieldname', 'pmtf_colinear', 'name', 'md.solidearth.lovenumbers.pmtf_colinear', 'format', 'DoubleMat', 'mattype', 1) 134 WriteData(fid, prefix, 'object', self, 'fieldname', 'pmtf_ortho', 'name', 'md.solidearth.lovenumbers.pmtf_ortho', 'format', 'DoubleMat', 'mattype', 1) 111 135 WriteData(fid, prefix, 'object', self, 'data', self.tk2secular, 'fieldname', 'lovenumbers.tk2secular', 'format', 'Double') 136 WriteData(fid, prefix, 'object', self, 'fieldname', 'pmtf_colinear','name','md.solidearth.lovenumbers.pmtf_colinear','format','DoubleMat','mattype',1); 137 WriteData(fid, prefix, 'object', self, 'fieldname', 'pmtf_ortho','name','md.solidearth.lovenumbers.pmtf_ortho','format','DoubleMat','mattype',1); 112 138 113 139 if (self.istime): … … 118 144 WriteData(fid, prefix, 'object', self, 'fieldname', 'timefreq', 'name', 'md.solidearth.lovenumbers.timefreq', 'format', 'DoubleMat', 'mattype', 1, 'scale', scale); 119 145 #}}} 120 146 121 147 def extrude(self, md): #{{{ 122 148 return
Note:
See TracChangeset
for help on using the changeset viewer.