Index: ../trunk-jpl/src/m/classes/lovenumbers.m =================================================================== --- ../trunk-jpl/src/m/classes/lovenumbers.m (revision 26827) +++ ../trunk-jpl/src/m/classes/lovenumbers.m (revision 26828) @@ -15,12 +15,12 @@ l = []; %idem %tidal love numbers for computing rotational feedback: - th = []; - tk = []; - tl = []; - tk2secular = 0; %deg 2 secular number. - pmtf_colinear = []; - pmtf_ortho = []; + th = []; + tk = []; + tl = []; + tk2secular = 0; %deg 2 secular number. + pmtf_colinear = []; + pmtf_ortho = []; %time/frequency for visco-elastic love numbers timefreq = []; Index: ../trunk-jpl/src/m/classes/lovenumbers.py =================================================================== --- ../trunk-jpl/src/m/classes/lovenumbers.py (revision 26827) +++ ../trunk-jpl/src/m/classes/lovenumbers.py (revision 26828) @@ -5,8 +5,7 @@ from pairoptions import pairoptions from WriteData import WriteData - -class lovenumbers(object): #{{{ +class lovenumbers(object): """LOVENUMBERS class definition Usage: @@ -28,6 +27,8 @@ self.tk = [] self.tl = [] self.tk2secular = 0 # deg 2 secular number + pmtf_colinear = [] + pmtf_ortho = [] # Time/frequency for visco-elastic love numbers self.timefreq = [] @@ -38,7 +39,6 @@ referenceframe = options.getfieldvalue('referenceframe', 'CM') self.setdefaultparameters(maxdeg, referenceframe) #}}} - def __repr__(self): #{{{ s = ' lovenumbers parameters:\n' s += '{}\n'.format(fielddisplay(self, 'h', 'load Love number for radial displacement')) @@ -48,11 +48,12 @@ s += '{}\n'.format(fielddisplay(self, 'tk', 'tidal load Love number (deg 2)')) s += '{}\n'.format(fielddisplay(self, 'tl', 'tidal load Love number (deg 2)')) s += '{}\n'.format(fielddisplay(self, 'tk2secular', 'secular fluid Love number')) + 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)')) + 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)')) s += '{}\n'.format(fielddisplay(self, 'istime', 'time (default: 1) or frequency love numbers (0)')) s += '{}\n'.format(fielddisplay(self, 'timefreq', 'time/frequency vector (yr or 1/yr)')) return s #}}} - def setdefaultparameters(self, maxdeg, referenceframe): #{{{ # Initialize love numbers self.h = getlovenumbers('type', 'loadingverticaldisplacement', 'referenceframe', referenceframe, 'maxdeg', maxdeg).reshape(-1,1) @@ -64,6 +65,11 @@ # Secular fluid love number self.tk2secular = 0.942 + self.pmtf_colinear=0.0 + self.pmtf_ortho=0.0 + if maxdeg>=2: + 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 + self.pmtf_ortho= 0.0 # Time self.istime = 1 # Temporal love numbers by default @@ -70,7 +76,6 @@ self.timefreq = np.zeros(1) # Elastic case by default return self #}}} - def checkconsistency(self, md, solution, analyses): #{{{ if ('SealevelchangeAnalysis' not in analyses) or (solution == 'TransientSolution' and not md.transient.isslc): return @@ -82,6 +87,8 @@ md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.tk', 'NaN', 1, 'Inf', 1) md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.tl', 'NaN', 1, 'Inf', 1) md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.tk2secular', 'NaN', 1, 'Inf', 1) + md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.pmtf_colinear', 'NaN', 1, 'Inf', 1) + md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.pmtf_ortho', 'NaN', 1, 'Inf', 1) md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.timefreq', 'NaN', 1, 'Inf', 1) md = checkfield(md, 'fieldname', 'solidearth.lovenumbers.istime', 'NaN', 1, 'Inf', 1, 'values', [0, 1]) @@ -95,11 +102,9 @@ return md #}}} - def defaultoutputs(self, md): #{{{ return[] #}}} - def marshall(self, prefix, md, fid): #{{{ WriteData(fid, prefix, 'object', self, 'fieldname', 'h', 'name', 'md.solidearth.lovenumbers.h', 'format', 'DoubleMat', 'mattype', 1) WriteData(fid, prefix, 'object', self, 'fieldname', 'k', 'name', 'md.solidearth.lovenumbers.k', 'format', 'DoubleMat', 'mattype', 1) @@ -109,6 +114,8 @@ WriteData(fid, prefix, 'object', self, 'fieldname', 'tk', 'name', 'md.solidearth.lovenumbers.tk', 'format', 'DoubleMat', 'mattype', 1) WriteData(fid, prefix, 'object', self, 'fieldname', 'tl', 'name', 'md.solidearth.lovenumbers.tl', 'format', 'DoubleMat', 'mattype', 1) WriteData(fid, prefix, 'object', self, 'data', self.tk2secular, 'fieldname', 'lovenumbers.tk2secular', 'format', 'Double') + WriteData(fid, prefix, 'object', self, 'fieldname', 'pmtf_colinear','name','md.solidearth.lovenumbers.pmtf_colinear','format','DoubleMat','mattype',1); + WriteData(fid, prefix, 'object', self, 'fieldname', 'pmtf_ortho','name','md.solidearth.lovenumbers.pmtf_ortho','format','DoubleMat','mattype',1); if (self.istime): scale = md.constants.yts @@ -117,7 +124,6 @@ WriteData(fid, prefix, 'object', self, 'fieldname', 'istime', 'name', 'md.solidearth.lovenumbers.istime', 'format', 'Boolean') WriteData(fid, prefix, 'object', self, 'fieldname', 'timefreq', 'name', 'md.solidearth.lovenumbers.timefreq', 'format', 'DoubleMat', 'mattype', 1, 'scale', scale); #}}} - def extrude(self, md): #{{{ return #}}}