Ignore:
Timestamp:
06/01/22 05:01:48 (3 years ago)
Author:
Mathieu Morlighem
Message:

merged trunk-jpl and trunk for revision 27033

Location:
issm/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk

  • issm/trunk/src

  • issm/trunk/src/m/classes/lovenumbers.py

    r26744 r27035  
    1919
    2020    def __init__(self, *args):  #{{{
    21         # Regular love numbers
    22         self.h = []   # Provided by PREM model
    23         self.k = []   # idem
    24         self.l = []   # idem
     21        # Loading love numbers
     22        self.h = [] # Provided by PREM model
     23        self.k = [] # idem
     24        self.l = [] # idem
    2525
    2626        # Tidal love numbers for computing rotational feedback
     
    2828        self.tk = []
    2929        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      = []
    3135
    3236        # Time/frequency for visco-elastic love numbers
     
    4953        s += '{}\n'.format(fielddisplay(self, 'tl', 'tidal load Love number (deg 2)'))
    5054        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)'))
    5157        s += '{}\n'.format(fielddisplay(self, 'istime', 'time (default: 1) or frequency love numbers (0)'))
    5258        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)'))
    5361        return s
    5462    #}}}
     
    6573        # Secular fluid love number
    6674        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
    6780
     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)
    6886        # Time
    6987        self.istime = 1 # Temporal love numbers by default
     
    83101        md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.tl', 'NaN', 1, 'Inf', 1)
    84102        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)
    85105        md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.timefreq', 'NaN', 1, 'Inf', 1)
    86106        md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.istime', 'NaN', 1, 'Inf', 1, 'values', [0, 1])
     
    91111
    92112        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):
    94114            raise ValueError('lovenumbers error message: love numbers should have as many time/frequency steps as the time/frequency vector')
    95115
     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')
    96118        return md
    97119    #}}}
     
    109131        WriteData(fid, prefix, 'object', self, 'fieldname', 'tk', 'name', 'md.solidearth.lovenumbers.tk', 'format', 'DoubleMat', 'mattype', 1)
    110132        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)
    111135        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);
    112138
    113139        if (self.istime):
     
    118144        WriteData(fid, prefix, 'object', self, 'fieldname', 'timefreq', 'name', 'md.solidearth.lovenumbers.timefreq', 'format', 'DoubleMat', 'mattype', 1, 'scale', scale);
    119145    #}}}
    120 
     146 
    121147    def extrude(self, md):  #{{{
    122148        return
Note: See TracChangeset for help on using the changeset viewer.