diff --git a/doc/source/api_reference/arguments.rst b/doc/source/api_reference/arguments.rst index 23bec0ed..0f238502 100644 --- a/doc/source/api_reference/arguments.rst +++ b/doc/source/api_reference/arguments.rst @@ -36,6 +36,12 @@ Calling Sequence .. autofunction:: pyTMD.arguments._constituent_parameters +.. autofunction:: pyTMD.arguments._parse_tide_potential_table + .. autofunction:: pyTMD.arguments._to_doodson_number +.. autofunction:: pyTMD.arguments._to_extended_doodson + .. autofunction:: pyTMD.arguments._from_doodson_number + +.. autofunction:: pyTMD.arguments._from_extended_doodson diff --git a/doc/source/getting_started/Citations.rst b/doc/source/getting_started/Citations.rst index cd7b8db6..2f91f468 100644 --- a/doc/source/getting_started/Citations.rst +++ b/doc/source/getting_started/Citations.rst @@ -81,6 +81,27 @@ The NASA Goddard Space Flight Center (GSFC) PREdict Tidal Heights (PERTH3) softw Richard Ray and Remko Scharroo. An updated and more versatile version of the NASA GSFC tidal prediction software (PERTH5) was developed by Richard Ray. +Data Citations +############## + +Internally, ``pyTMD`` includes datasets from the following: + + D. E. Cartwright and R. J. Tayler, "New Computations of the Tide-generating Potential," + *Geophysical Journal of the Royal Astronomical Society*, 23(1), 45--73. (1971). + `doi: 10.1111/j.1365-246X.1971.tb01803.x `_ + + D. E. Cartwright and A. C. Edden, "Corrected Tables of Tidal Harmonics," + *Geophysical Journal of the Royal Astronomical Society*, 33(3), 253--264, (1973). + `doi: 10.1111/j.1365-246X.1973.tb03420.x `_ + + S. Desai, J. Wahr and B. Beckley "Revisiting the pole tide for and from satellite altimetry", + *Journal of Geodesy*, 89(12), p1233-1243, (2015). + `doi: 10.1007/s00190-015-0848-7 `_ + + *IERS Conventions (2010)*, G. Petit and B. Luzum (eds.), (IERS Technical Note; 36), + Frankfurt am Main: Verlag des Bundesamts f\ |uuml|\ r Kartographie und Geod\ |auml|\ sie, 179 pp. (2010). + `ISBN 3-89888-989-6 `_ + Disclaimer ########## @@ -89,3 +110,7 @@ of Washington Applied Physics Laboratory (UW-APL). It is not sponsored or maintained by the Universities Space Research Association (USRA), AVISO or NASA. Outputs from this software should be used for scientific or technical purposes only. This software should not be used for coastal navigation or any application that may risk life or property. + +.. |auml| unicode:: U+00E4 .. LATIN SMALL LETTER A WITH DIAERESIS +.. |uuml| unicode:: U+00FC .. LATIN SMALL LETTER U WITH DIAERESIS + diff --git a/pyTMD/arguments.py b/pyTMD/arguments.py index 6b75fdea..52843f21 100755 --- a/pyTMD/arguments.py +++ b/pyTMD/arguments.py @@ -39,6 +39,9 @@ UPDATE HISTORY: Updated 10/2024: can convert Doodson numbers formatted as strings + update Doodson number conversions to follow Cartwright X=10 convention + add function to parse Cartwright/Tayler/Edden tables + add functions to calculate UKHO Extended Doodson numbers for constituents Updated 09/2024: add function to calculate tidal angular frequencies Updated 08/2024: add support for constituents in PERTH5 tables add back nodal arguments from PERTH3 for backwards compatibility @@ -71,8 +74,12 @@ """ from __future__ import annotations +import re +import json +import pathlib import numpy as np import pyTMD.astro +from pyTMD.utilities import get_data_path __all__ = [ "arguments", @@ -84,8 +91,11 @@ "_arguments_table", "_minor_table", "_constituent_parameters", + "_parse_tide_potential_table", "_to_doodson_number", - "_from_doodson_number" + "_to_extended_doodson", + "_from_doodson_number", + "_from_extended_doodson" ] def arguments( @@ -339,6 +349,9 @@ def minor_arguments( # return values as tuple return (u, f, arg) +# JSON file of Doodson coefficients +_coefficients_table = get_data_path(['data','doodson.json']) + def coefficients_table( constituents: list | tuple | np.ndarray | str, **kwargs @@ -352,6 +365,8 @@ def coefficients_table( tidal constituent IDs corrections: str, default 'OTIS' use coefficients from OTIS, FES or GOT models + file: str or pathlib.Path, default `coefficients.json` + JSON file of Doodson coefficients Returns ------- @@ -370,7 +385,10 @@ def coefficients_table( """ # set default keyword arguments kwargs.setdefault('corrections', 'OTIS') + kwargs.setdefault('file', _coefficients_table) + # verify coefficients table path + table = pathlib.Path(kwargs['file']).expanduser().absolute() # modified Doodson coefficients for constituents # using 7 index variables: tau, s, h, p, n, pp, k # tau: mean lunar time @@ -380,542 +398,15 @@ def coefficients_table( # n: mean longitude of ascending lunar node # pp: mean longitude of solar perigee # k: 90-degree phase - coefficients = {} - coefficients['z0'] = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['node'] = [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 2.0] - coefficients['omega0'] = [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 2.0] - # With p' - coefficients['sa'] = [0.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0] + with table.open(mode='r', encoding='utf8') as fid: + coefficients = json.load(fid) + # # Without p' # coefficients['sa'] = [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['ssa'] = [0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0] - # With p' - coefficients['sta'] = [0.0, 0.0, 3.0, 0.0, 0.0, -1.0, 0.0] - # # Without p' # coefficients['sta'] = [0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0] - coefficients['st'] = [0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0] - coefficients['msm'] = [0.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['mm'] = [0.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0] - # annual sideline - coefficients['msfa'] = [0.0, 2.0, -3.0, 0.0, 0.0, 0.0, 0.0] - coefficients['msf'] = [0.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] - # annual sideline - coefficients['msfb'] = [0.0, 2.0, -1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['mfa'] = [0.0, 2.0, -1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['mf-'] = [0.0, 2.0, 0.0, 0.0, -1.0, 0.0, 0.0] - coefficients['mf'] = [0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] - # nodal line - coefficients['mf+'] = [0.0, 2.0, 0.0, 0.0, 1.0, 0.0, 0.0] - # nodal line - coefficients['mfn'] = [0.0, 2.0, 0.0, 0.0, 1.0, 0.0, 0.0] - coefficients['mfb'] = [0.0, 2.0, 1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['sn0'] = [0.0, 3.0, -2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['mst'] = [0.0, 3.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['mt'] = [0.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] - coefficients['mtm'] = [0.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] - coefficients['msqm'] = [0.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['mq'] = [0.0, 4.0, 0.0, -2.0, 0.0, 0.0, 0.0] - coefficients['2smn0'] = [0.0, 5.0, -4.0, -1.0, 0.0, 0.0, 0.0] - coefficients['msp'] = [0.0, 5.0, -2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['mp'] = [0.0, 5.0, 0.0, -3.0, 0.0, 0.0, 0.0] - coefficients['2qj1'] = [1.0, -6.0, 0.0, 3.0, 0.0, 0.0, 1.0] - coefficients['2qk1'] = [1.0, -5.0, 0.0, 2.0, 0.0, 0.0, 1.0] - coefficients['2qs1'] = [1.0, -5.0, 1.0, 2.0, 0.0, 0.0, 0.0] - coefficients['2qp1'] = [1.0, -5.0, 2.0, 2.0, 0.0, 0.0, -1.0] - coefficients['2oj1'] = [1.0, -4.0, 0.0, 1.0, 0.0, 0.0, 1.0] - coefficients['alpha1'] = [1.0, -4.0, 2.0, 1.0, 0.0, 0.0, -1.0] - coefficients['2ok1'] = [1.0, -3.0, 0.0, 0.0, 0.0, 0.0, 1.0] - # 3rd degree terms - coefficients["2q1'"] = [1.0, -3.0, 0.0, 1.0, 0.0, 0.0, 2.0] - coefficients['2q1'] = [1.0, -3.0, 0.0, 2.0, 0.0, 0.0, -1.0] - coefficients['sigma1'] = [1.0, -3.0, 2.0, 0.0, 0.0, 0.0, -1.0] - # 3rd degree terms - coefficients["q1'"] = [1.0, -2.0, 0.0, 0.0, 0.0, 0.0, 2.0] - coefficients['q1'] = [1.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0] - coefficients['rho1'] = [1.0, -2.0, 2.0, -1.0, 0.0, 0.0, -1.0] - coefficients['np1'] = [1.0, -2.0, 2.0, 1.0, 0.0, 0.0, 1.0] - coefficients['opk1'] = [1.0, -1.0, -2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['oa1'] = [1.0, -1.0, -1.0, 0.0, 0.0, 0.0, -1.0] - # O1 nodal line - coefficients['o1n'] = [1.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0] - # O1 nodal line - coefficients['o1-'] = [1.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0] - coefficients['o1'] = [1.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] - # conjugate to nodal line - coefficients['o1+'] = [1.0, -1.0, 0.0, 0.0, 1.0, 0.0, -1.0] - # 3rd degree terms - coefficients["o1'"] = [1.0, -1.0, 0.0, 1.0, 0.0, 0.0, 2.0] - coefficients['ob1'] = [1.0, -1.0, 1.0, 0.0, 0.0, 0.0, -1.0] - coefficients['ms1'] = [1.0, -1.0, 1.0, 0.0, 0.0, 0.0, 2.0] - coefficients['mp1'] = [1.0, -1.0, 2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['tau1'] = [1.0, -1.0, 2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['beta1'] = [1.0, 0.0, -2.0, 1.0, 0.0, 0.0, 1.0] - coefficients['pqo1'] = [1.0, 0.0, -2.0, 1.0, 0.0, 0.0, -1.0] - coefficients['2oq1'] = [1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0] - # 3rd degree terms - coefficients["m1'"] = [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0] - coefficients['m1'] = [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0] - coefficients['m1a'] = [1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0] - coefficients['m1b'] = [1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0] - coefficients['no1'] = [1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0] - coefficients['chi1'] = [1.0, 0.0, 2.0, -1.0, 0.0, 0.0, 1.0] - coefficients['2pk1'] = [1.0, 1.0, -4.0, 0.0, 0.0, 0.0, 1.0] - coefficients['pi1'] = [1.0, 1.0, -3.0, 0.0, 0.0, 1.0, -1.0] - coefficients['tk1'] = [1.0, 1.0, -3.0, 0.0, 0.0, 1.0, -1.0] - coefficients['s1-1'] = [1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 2.0] - coefficients['p1'] = [1.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] - coefficients['s1-'] = [1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 1.0] + # set s1 coefficients if kwargs['corrections'] in ('OTIS','ATLAS','TMD3','netcdf'): coefficients['s1'] = [1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 1.0] - else: - # Doodson's phase - coefficients['s1'] = [1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 2.0] - coefficients['s1+'] = [1.0, 1.0, -1.0, 0.0, 0.0, 1.0, 1.0] - coefficients['ojm1'] = [1.0, 1.0, 0.0, -2.0, 0.0, 0.0, -1.0] - # 3rd degree terms - coefficients["k1'"] = [1.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0] - coefficients['k1-'] = [1.0, 1.0, 0.0, 0.0, -1.0, 0.0, -1.0] - coefficients['k1'] = [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0] - coefficients['s1+1'] = [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 2.0] - coefficients['k1+'] = [1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0] - coefficients['k1n'] = [1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0] - coefficients['k1++'] = [1.0, 1.0, 0.0, 0.0, 2.0, 0.0, -1.0] - coefficients['psi1'] = [1.0, 1.0, 1.0, 0.0, 0.0, -1.0, 1.0] - coefficients['rp1'] = [1.0, 1.0, 1.0, 0.0, 0.0, -1.0, -1.0] - coefficients['phi1'] = [1.0, 1.0, 2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['kp1'] = [1.0, 1.0, 2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['opq1'] = [1.0, 2.0, -2.0, -1.0, 0.0, 0.0, -1.0] - coefficients['the1'] = [1.0, 2.0, -2.0, 1.0, 0.0, 0.0, 1.0] - coefficients['theta1'] = [1.0, 2.0, -2.0, 1.0, 0.0, 0.0, 1.0] - coefficients['mq1'] = [1.0, 2.0, 0.0, -1.0, 0.0, 0.0, 1.0] - coefficients['j1'] = [1.0, 2.0, 0.0, -1.0, 0.0, 0.0, 1.0] - # 3rd degree terms - coefficients["j1'"] = [1.0, 2.0, 0.0, 0.0, 0.0, 0.0, 2.0] - coefficients['2po1'] = [1.0, 3.0, -4.0, 0.0, 0.0, 0.0, -1.0] - coefficients['so1'] = [1.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['oo1'] = [1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0] - coefficients['kpq1'] = [1.0, 4.0, -2.0, -1.0, 0.0, 0.0, 1.0] - coefficients['ups1'] = [1.0, 4.0, 0.0, -1.0, 0.0, 0.0, 1.0] - coefficients['kq1'] = [1.0, 4.0, 0.0, -1.0, 0.0, 0.0, 1.0] - coefficients['2jo1'] = [1.0, 5.0, 0.0, -2.0, 0.0, 0.0, -1.0] - coefficients['kjq1'] = [1.0, 5.0, 0.0, -2.0, 0.0, 0.0, -1.0] - coefficients['2ook1'] = [1.0, 5.0, 0.0, 0.0, 0.0, 0.0, -1.0] - coefficients['2oop1'] = [1.0, 5.0, 2.0, 0.0, 0.0, 0.0, -1.0] - coefficients['2jq1'] = [1.0, 6.0, 0.0, -3.0, 0.0, 0.0, -1.0] - coefficients['2mn2s2'] = [2.0, -5.0, 4.0, 1.0, 0.0, 0.0, 0.0] - coefficients['2nk2'] = [2.0, -4.0, 0.0, 2.0, 0.0, 0.0, 0.0] - coefficients['3m(sk)2'] = [2.0, -4.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['3mks2'] = [2.0, -4.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2ns2'] = [2.0, -4.0, 2.0, 2.0, 0.0, 0.0, 0.0] - coefficients['3m2s2'] = [2.0, -4.0, 4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['oq2'] = [2.0, -3.0, 0.0, 1.0, 0.0, 0.0, 2.0] - coefficients['mnk2'] = [2.0, -3.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['3n2'] = [2.0, -3.0, 0.0, 3.0, 0.0, 0.0, 0.0] - coefficients['eps2'] = [2.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['mns2'] = [2.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0] - # coefficients['mns2'] = [2.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0] - coefficients['mnus2'] = [2.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2ml2s2'] = [2.0, -3.0, 4.0, -1.0, 0.0, 0.0, 2.0] - coefficients['mnk2s2'] = [2.0, -3.0, 4.0, 1.0, 0.0, 0.0, 0.0] - coefficients['2ms2k2'] = [2.0, -2.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2mk2'] = [2.0, -2.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['o2'] = [2.0, -2.0, 0.0, 0.0, 0.0, 0.0, 2.0] - # 3rd degree terms - coefficients["2n2'"] = [2.0, -2.0, 0.0, 1.0, 0.0, 0.0, 1.0] - coefficients['2n2'] = [2.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] - coefficients['2nm2'] = [2.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] - coefficients['2ms2'] = [2.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['mu2'] = [2.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2mk2s2'] = [2.0, -2.0, 4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['omg2'] = [2.0, -2.0, 3.0, 0.0, 0.0, -1.0, 0.0] - coefficients['nsk2'] = [2.0, -1.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['snk2'] = [2.0, -1.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['na2'] = [2.0, -1.0, -1.0, 1.0, 0.0, 0.0, 0.0] - # 3rd degree terms - coefficients["n2'"] = [2.0, -1.0, 0.0, 0.0, 0.0, 0.0, 1.0] - coefficients['n2'] = [2.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['2ml2'] = [2.0, -1.0, 0.0, 1.0, 0.0, 0.0, 2.0] - coefficients['nb2'] = [2.0, -1.0, 1.0, 1.0, 0.0, 0.0, 0.0] - coefficients['nu2'] = [2.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['mmun2'] = [2.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['3m(sn)2'] = [2.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['nks2'] = [2.0, -1.0, 2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['nkp2'] = [2.0, -1.0, 2.0, 1.0, 0.0, 0.0, 2.0] - coefficients['mkl2s2'] = [2.0, -1.0, 4.0, -1.0, 0.0, 0.0, 2.0] - coefficients['2kn2s2'] = [2.0, -1.0, 4.0, 1.0, 0.0, 0.0, 0.0] - coefficients['msk2'] = [2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['op2'] = [2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 2.0] - coefficients['m2-2'] = [2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['gamma2'] = [2.0, 0.0, -2.0, 2.0, 0.0, 0.0, 2.0] - coefficients['gam2'] = [2.0, 0.0, -2.0, 2.0, 0.0, 0.0, 2.0] - coefficients['alp2'] = [2.0, 0.0, -1.0, 0.0, 0.0, 1.0, 2.0] - coefficients['alpha2'] = [2.0, 0.0, -1.0, 0.0, 0.0, 1.0, 2.0] - coefficients['m2a'] = [2.0, 0.0, -1.0, 0.0, 0.0, 1.0, 0.0] - coefficients['m2-1'] = [2.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['ma2'] = [2.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0] - # M2 nodal line - coefficients['m2-'] = [2.0, 0.0, 0.0, 0.0, -1.0, 0.0, 2.0] - coefficients['m2'] = [2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['ko2'] = [2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - # conjugate to nodal - coefficients['m2+'] = [2.0, 0.0, 0.0, 0.0, 1.0, 0.0, 2.0] - # 3rd degree terms - coefficients["m2'"] = [2.0, 0.0, 0.0, 1.0, 0.0, 0.0, -1.0] - coefficients['mb2'] = [2.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['m2+1'] = [2.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['m2b'] = [2.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0] - coefficients['beta2'] = [2.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0] - coefficients['delta2'] = [2.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['m2+2'] = [2.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['mks2'] = [2.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['m2(ks)2'] = [2.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2snmk2'] = [2.0, 1.0, -4.0, 1.0, 0.0, 0.0, 0.0] - coefficients['2sn(mk)2'] = [2.0, 1.0, -4.0, 1.0, 0.0, 0.0, 0.0] - coefficients['snm2'] = [2.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['lambda2'] = [2.0, 1.0, -2.0, 1.0, 0.0, 0.0, 2.0] - coefficients['2mn2'] = [2.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0] - coefficients['l2'] = [2.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0] - coefficients['l2a'] = [2.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0] - # 3rd degree terms - coefficients["l2'"] = [2.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.0] - coefficients['nkm2'] = [2.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['l2b'] = [2.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['lb2'] = [2.0, 1.0, 1.0, -1.0, 0.0, 0.0, 2.0] - coefficients['2sk2'] = [2.0, 2.0, -4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2t2'] = [2.0, 2.0, -4.0, 0.0, 0.0, 2.0, 0.0] - coefficients['s2-2'] = [2.0, 2.0, -4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['s2-1'] = [2.0, 2.0, -3.0, 0.0, 0.0, 0.0, 0.0] - coefficients['t2'] = [2.0, 2.0, -3.0, 0.0, 0.0, 1.0, 0.0] - coefficients['kp2'] = [2.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['s2r'] = [2.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['s2'] = [2.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['r2'] = [2.0, 2.0, -1.0, 0.0, 0.0, -1.0, 2.0] - coefficients['s2+1'] = [2.0, 2.0, -1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['s2+2'] = [2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['k2'] = [2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['kb2'] = [2.0, 2.0, 1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2ks2'] = [2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2pmn2'] = [2.0, 3.0, -4.0, -1.0, 0.0, 0.0, 2.0] - coefficients['msnu2'] = [2.0, 3.0, -4.0, 1.0, 0.0, 0.0, 0.0] - coefficients['msn2'] = [2.0, 3.0, -2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['zeta2'] = [2.0, 3.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['eta2'] = [2.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] - coefficients['mkn2'] = [2.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] - coefficients['kj2'] = [2.0, 3.0, 0.0, -1.0, 0.0, 0.0, 2.0] - coefficients['2kmsn2'] = [2.0, 3.0, 2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2km(sn)2'] = [2.0, 3.0, 2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2sm2'] = [2.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2ms2n2'] = [2.0, 4.0, -2.0, -2.0, 0.0, 0.0, 0.0] - coefficients['skm2'] = [2.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2j2'] = [2.0, 4.0, 0.0, -2.0, 0.0, 0.0, 2.0] - coefficients['2k2'] = [2.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2snu2'] = [2.0, 5.0, -6.0, 1.0, 0.0, 0.0, 0.0] - coefficients['3(sm)n2'] = [2.0, 5.0, -6.0, 1.0, 0.0, 0.0, 0.0] - coefficients['2sn2'] = [2.0, 5.0, -4.0, -1.0, 0.0, 0.0, 0.0] - coefficients['skn2'] = [2.0, 5.0, -2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2kn2'] = [2.0, 5.0, 0.0, -1.0, 0.0, 0.0, 0.0] - coefficients['3s2m2'] = [2.0, 6.0, -6.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2sk2m2'] = [2.0, 6.0, -4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2oq3'] = [3.0, -4.0, 0.0, 1.0, 0.0, 0.0, 1.0] - # compound 3 O1 - coefficients['o3'] = [3.0, -3.0, 0.0, 0.0, 0.0, 0.0, 1.0] - coefficients['nq3'] = [3.0, -3.0, 0.0, 2.0, 0.0, 0.0, -1.0] - coefficients['muo3'] = [3.0, -3.0, 2.0, 0.0, 0.0, 0.0, -1.0] - coefficients['mq3'] = [3.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0] - coefficients['no3'] = [3.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0] - coefficients['mnp3'] = [3.0, -2.0, 2.0, 1.0, 0.0, 0.0, 1.0] - coefficients['2op3'] = [3.0, -1.0, -2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['2os3'] = [3.0, -1.0, -1.0, 0.0, 0.0, 0.0, 0.0] - # Q1+M1+S1 - coefficients['qms3'] = [3.0, -1.0, -1.0, 2.0, 0.0, 0.0, 2.0] - coefficients['mo3-'] = [3.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0] - coefficients['mo3'] = [3.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] - coefficients['mo3+'] = [3.0, -1.0, 0.0, 0.0, 1.0, 0.0, -1.0] - coefficients['2mk3'] = [3.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] - coefficients['e3n'] = [3.0, -1.0, 0.0, 1.0, -1.0, 0.0, 0.0] - # 3rd degree terms - coefficients['e3'] = [3.0, -1.0, 0.0, 1.0, 0.0, 0.0, 2.0] - coefficients['2no3'] = [3.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0] - coefficients['2nkm3'] = [3.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0] - coefficients['2ms3'] = [3.0, -1.0, 1.0, 0.0, 0.0, 0.0, 2.0] - coefficients['2mp3'] = [3.0, -1.0, 2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['ns3'] = [3.0, 0.0, -1.0, 1.0, 0.0, 0.0, 2.0] - coefficients['2oj3'] = [3.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0] - # 2M2 - M1 - coefficients['2mm3'] = [3.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0] - coefficients['m3'] = [3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - # 3rd degree terms - coefficients["m3'"] = [3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0] - coefficients['nk3'] = [3.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['mp3'] = [3.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] - coefficients['so3'] = [3.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] - # 3rd degree terms - coefficients['lambda3'] = [3.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['ms3'] = [3.0, 1.0, -1.0, 0.0, 0.0, 0.0, 2.0] - coefficients['pjrho3'] = [3.0, 1.0, 0.0, -2.0, 0.0, 0.0, -1.0] - # 3rd degree terms - coefficients['l3'] = [3.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0] - coefficients['mk3-'] = [3.0, 1.0, 0.0, 0.0, -1.0, 0.0, 1.0] - coefficients['mk3'] = [3.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0] - coefficients['mk3+'] = [3.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0] - # 3rd degree terms - coefficients['l3b'] = [3.0, 1.0, 0.0, 1.0, 0.0, 0.0, 2.0] - coefficients['mks3'] = [3.0, 1.0, 1.0, 0.0, 0.0, 0.0, 2.0] - coefficients['mkp3'] = [3.0, 1.0, 2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['nso3'] = [3.0, 2.0, -2.0, 1.0, 0.0, 0.0, 1.0] - coefficients['2mq3'] = [3.0, 2.0, 0.0, -1.0, 0.0, 0.0, 1.0] - # 3rd degree terms - coefficients['f3'] = [3.0, 2.0, 0.0, 0.0, 0.0, 0.0, 2.0] - # 3rd degree terms - coefficients['j3'] = [3.0, 2.0, 0.0, 0.0, 0.0, 0.0, 2.0] - # s3 perturbation - coefficients['2t3'] = [3.0, 3.0, -5.0, 0.0, 0.0, 0.0, 2.0] - # s3 perturbation - coefficients['t3'] = [3.0, 3.0, -4.0, 0.0, 0.0, 0.0, 2.0] - # = 2SK3 - coefficients['sp3'] = [3.0, 3.0, -4.0, 0.0, 0.0, 0.0, -1.0] - coefficients['s3'] = [3.0, 3.0, -3.0, 0.0, 0.0, 0.0, 0.0] - # 3rd degree terms - coefficients["s3'"] = [3.0, 3.0, -3.0, 0.0, 0.0, 0.0, 2.0] - # s3 perturbation - coefficients['r3'] = [3.0, 3.0, -2.0, 0.0, 0.0, 0.0, 2.0] - coefficients['sk3'] = [3.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0] - # s3 perturbation - coefficients['2r3'] = [3.0, 3.0, -1.0, 0.0, 0.0, 0.0, 2.0] - coefficients['k3'] = [3.0, 3.0, 0.0, 0.0, 0.0, 0.0, -1.0] - coefficients['2so3'] = [3.0, 5.0, -4.0, 0.0, 0.0, 0.0, 1.0] - coefficients['2jp3'] = [3.0, 5.0, -2.0, -2.0, 0.0, 0.0, 1.0] - coefficients['kso3'] = [3.0, 5.0, -2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['2jk3'] = [3.0, 5.0, -1.0, -2.0, 0.0, 0.0, 0.0] - coefficients['2ko3'] = [3.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0] - coefficients['2sq3'] = [3.0, 6.0, -4.0, -1.0, 0.0, 0.0, 1.0] - coefficients['o4'] = [4.0, -4.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2qm4'] = [4.0, -4.0, 0.0, 2.0, 0.0, 0.0, 2.0] - coefficients['4ms4'] = [4.0, -4.0, 4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['4m2s4'] = [4.0, -4.0, 4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2mnk4'] = [4.0, -3.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['moq4'] = [4.0, -3.0, 0.0, 1.0, 0.0, 0.0, 2.0] - coefficients['2mns4'] = [4.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['2mns4'] = [4.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2mnus4'] = [4.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0] - coefficients['3mk4'] = [4.0, -2.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2om4'] = [4.0, -2.0, 0.0, 0.0, 0.0, 0.0, 2.0] - coefficients['n4'] = [4.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] - coefficients['3ms4'] = [4.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['msnk4'] = [4.0, -1.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['mpq4'] = [4.0, -1.0, -2.0, 1.0, 0.0, 0.0, 2.0] - coefficients['mn4'] = [4.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['mnu4'] = [4.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2mls4'] = [4.0, -1.0, 2.0, -1.0, 0.0, 0.0, 2.0] - coefficients['mnks4'] = [4.0, -1.0, 2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['2msk4'] = [4.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['mop4'] = [4.0, 0.0, -2.0, 0.0, 0.0, 0.0, 2.0] - coefficients['ma4'] = [4.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['m4'] = [4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['mb4'] = [4.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2mks4'] = [4.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['sn4'] = [4.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['3mn4'] = [4.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0] - coefficients['ml4'] = [4.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0] - coefficients['nk4'] = [4.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['2smk4'] = [4.0, 2.0, -4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2pm4'] = [4.0, 2.0, -4.0, 0.0, 0.0, 0.0, 2.0] - coefficients['mt4'] = [4.0, 2.0, -3.0, 0.0, 0.0, 1.0, 0.0] - coefficients['ms4'] = [4.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['mr4'] = [4.0, 2.0, -1.0, 0.0, 0.0, -1.0, 2.0] - coefficients['mk4'] = [4.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2snm4'] = [4.0, 3.0, -4.0, 1.0, 0.0, 0.0, 0.0] - coefficients['2msn4'] = [4.0, 3.0, -2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['sl4'] = [4.0, 3.0, -2.0, -1.0, 0.0, 0.0, 2.0] - coefficients['2mkn4'] = [4.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] - coefficients['mkj4'] = [4.0, 3.0, 0.0, -1.0, 0.0, 0.0, 2.0] - coefficients['2t4'] = [4.0, 4.0, -6.0, 0.0, 0.0, 0.0, 0.0] - coefficients['t4'] = [4.0, 4.0, -5.0, 0.0, 0.0, 0.0, 0.0] - coefficients['st4'] = [4.0, 4.0, -5.0, 0.0, 0.0, 1.0, 0.0] - coefficients['s4'] = [4.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['r4'] = [4.0, 4.0, -3.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2r4'] = [4.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['sk4'] = [4.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['3ks4'] = [4.0, 4.0, -1.0, 0.0, 0.0, 0.0, -1.0] - coefficients['k4'] = [4.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['3sm4'] = [4.0, 6.0, -6.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2(kj)4'] = [4.0, 6.0, 0.0, -2.0, 0.0, 0.0, 2.0] - coefficients['2no5'] = [5.0, -3.0, 0.0, 2.0, 0.0, 0.0, -1.0] - coefficients['mno5'] = [5.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0] - coefficients['2mq5'] = [5.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0] - coefficients['2nkms5'] = [5.0, -2.0, 2.0, 2.0, 0.0, 0.0, 1.0] - coefficients['2mo5'] = [5.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] - coefficients['mnm5'] = [5.0, -1.0, 0.0, 1.0, 0.0, 0.0, 2.0] - coefficients['2nk5'] = [5.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0] - coefficients['3ms5'] = [5.0, -1.0, 1.0, 0.0, 0.0, 0.0, 2.0] - coefficients['3mp5'] = [5.0, -1.0, 2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['nso5'] = [5.0, 0.0, -2.0, 1.0, 0.0, 0.0, -1.0] - coefficients['m5'] = [5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0] - coefficients['mnk5'] = [5.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0] - coefficients['mb5'] = [5.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0] - coefficients['mso5'] = [5.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] - coefficients['2mp5'] = [5.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] - coefficients['2ms5'] = [5.0, 1.0, -1.0, 0.0, 0.0, 0.0, 2.0] - coefficients['2mk5'] = [5.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0] - # N2 + K2 + S1 - coefficients['nks5'] = [5.0, 2.0, -1.0, 1.0, 0.0, 0.0, 2.0] - coefficients['nsk5'] = [5.0, 2.0, -2.0, -1.0, 0.0, 0.0, 1.0] - coefficients['msm5'] = [5.0, 2.0, -2.0, 0.0, 0.0, 0.0, 2.0] - coefficients['snk5'] = [5.0, 2.0, -2.0, 1.0, 0.0, 0.0, -1.0] - coefficients['3mq5'] = [5.0, 2.0, 0.0, -1.0, 0.0, 0.0, 1.0] - coefficients['msp5'] = [5.0, 3.0, -4.0, 0.0, 0.0, 0.0, -1.0] - coefficients['msk5'] = [5.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['3km5'] = [5.0, 3.0, 0.0, 0.0, 0.0, 0.0, -1.0] - coefficients['2sp5'] = [5.0, 5.0, -6.0, 0.0, 0.0, 0.0, -1.0] - coefficients['t5'] = [5.0, 5.0, -6.0, 0.0, 0.0, 0.0, 0.0] - coefficients['s5'] = [5.0, 5.0, -5.0, 0.0, 0.0, 0.0, 0.0] - coefficients['r5'] = [5.0, 5.0, -4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2sk5'] = [5.0, 5.0, -4.0, 0.0, 0.0, 0.0, 1.0] - coefficients['k5'] = [5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0] - coefficients['o6'] = [6.0, -6.0, 0.0, 0.0, 0.0, 0.0, 2.0] - coefficients['2(mn)k6'] = [6.0, -4.0, 0.0, 2.0, 0.0, 0.0, 0.0] - coefficients['5mks6'] = [6.0, -4.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2(mn)s6'] = [6.0, -4.0, 2.0, 2.0, 0.0, 0.0, 0.0] - coefficients['5m2s6'] = [6.0, -4.0, 4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['3mnk6'] = [6.0, -3.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['n6'] = [6.0, -3.0, 0.0, 3.0, 0.0, 0.0, 0.0] - coefficients['3mns6'] = [6.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['2nmls6'] = [6.0, -3.0, 2.0, 1.0, 0.0, 0.0, 2.0] - coefficients['3nks6'] = [6.0, -3.0, 2.0, 3.0, 0.0, 0.0, 0.0] - coefficients['3mnus6'] = [6.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0] - coefficients['4mk6'] = [6.0, -2.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2nm6'] = [6.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] - coefficients['m2n6'] = [6.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] - coefficients['4ms6'] = [6.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2mlns6'] = [6.0, -2.0, 2.0, 0.0, 0.0, 0.0, 2.0] - coefficients['2mnls6'] = [6.0, -2.0, 2.0, 0.0, 0.0, 0.0, 2.0] - coefficients['2nmks6'] = [6.0, -2.0, 2.0, 2.0, 0.0, 0.0, 0.0] - coefficients['2msnk6'] = [6.0, -1.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['2mn6'] = [6.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['2mnu6'] = [6.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2mn6'] = [6.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['3mls6'] = [6.0, -1.0, 2.0, -1.0, 0.0, 0.0, 2.0] - coefficients['2mno6'] = [6.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2mnks6'] = [6.0, -1.0, 2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['3msk6'] = [6.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['ma6'] = [6.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['m6'] = [6.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2nk6'] = [6.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0] - coefficients['mb6'] = [6.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['3mks6'] = [6.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['msn6'] = [6.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['4mn6'] = [6.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2ml6'] = [6.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0] - coefficients['mnk6'] = [6.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['mkn6'] = [6.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['mknu6'] = [6.0, 1.0, 2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2(ms)k6'] = [6.0, 2.0, -4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2mt6'] = [6.0, 2.0, -3.0, 0.0, 0.0, 1.0, 0.0] - coefficients['2ms6'] = [6.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2mr6'] = [6.0, 2.0, -1.0, 0.0, 0.0, -1.0, 2.0] - coefficients['2mk6'] = [6.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2sn6'] = [6.0, 3.0, -4.0, 1.0, 0.0, 0.0, 0.0] - coefficients['3msn6'] = [6.0, 3.0, -2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['msl6'] = [6.0, 3.0, -2.0, -1.0, 0.0, 0.0, 2.0] - coefficients['snk6'] = [6.0, 3.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['mkl6'] = [6.0, 3.0, 0.0, -1.0, 0.0, 0.0, 2.0] - coefficients['3mkn6'] = [6.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2sm6'] = [6.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['msk6'] = [6.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2km6'] = [6.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2(ms)n6'] = [6.0, 5.0, -4.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2mskn6'] = [6.0, 5.0, -2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2t6'] = [6.0, 6.0, -8.0, 0.0, 0.0, 0.0, 0.0] - coefficients['t6'] = [6.0, 6.0, -7.0, 0.0, 0.0, 0.0, 0.0] - coefficients['s6'] = [6.0, 6.0, -6.0, 0.0, 0.0, 0.0, 0.0] - coefficients['r6'] = [6.0, 6.0, -5.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2r6'] = [6.0, 6.0, -4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2sk6'] = [6.0, 6.0, -4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['k6'] = [6.0, 6.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['4sm6'] = [6.0, 8.0, -8.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2mno7'] = [7.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0] - coefficients['4mk7'] = [7.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] - coefficients['3mo7'] = [7.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] - coefficients['2nmk7'] = [7.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0] - # = 2MNK7 = MNKO7 - coefficients['m7'] = [7.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0] - coefficients['3mp7'] = [7.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] - coefficients['2mso7'] = [7.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] - coefficients['3mk7'] = [7.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0] - # = MSKO7 (noaa) - coefficients['2msk7'] = [7.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['msko7'] = [7.0, 3.0, -2.0, 0.0, 0.0, 0.0, -1.0] - coefficients['2t7'] = [7.0, 7.0, -9.0, 0.0, 0.0, 0.0, 0.0] - coefficients['3sp7'] = [7.0, 7.0, -8.0, 0.0, 0.0, 0.0, -1.0] - coefficients['t7'] = [7.0, 7.0, -8.0, 0.0, 0.0, 0.0, 0.0] - coefficients['s7'] = [7.0, 7.0, -7.0, 0.0, 0.0, 0.0, 0.0] - coefficients['r7'] = [7.0, 7.0, -6.0, 0.0, 0.0, 0.0, 0.0] - coefficients['3sk7'] = [7.0, 7.0, -6.0, 0.0, 0.0, 0.0, 1.0] - coefficients['2r7'] = [7.0, 7.0, -5.0, 0.0, 0.0, 0.0, 0.0] - coefficients['3r7'] = [7.0, 7.0, -4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['4r7'] = [7.0, 7.0, -3.0, 0.0, 0.0, 0.0, 0.0] - coefficients['k7'] = [7.0, 7.0, 0.0, 0.0, 0.0, 0.0, 1.0] - coefficients['3m2ns8'] = [8.0, -4.0, 2.0, 2.0, 0.0, 0.0, 0.0] - coefficients['4mns8'] = [8.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['5mk8'] = [8.0, -2.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2mn8'] = [8.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] - coefficients['2(mn)8'] = [8.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] - coefficients['5ms8'] = [8.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['3mn8'] = [8.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['3mnu8'] = [8.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['3mn8'] = [8.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] - coefficients['4mls8'] = [8.0, -1.0, 2.0, -1.0, 0.0, 0.0, 2.0] - coefficients['ma8'] = [8.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['m8'] = [8.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['mb8'] = [8.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2msn8'] = [8.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['3ml8'] = [8.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0] - coefficients['2mnk8'] = [8.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['3mt8'] = [8.0, 2.0, -3.0, 0.0, 0.0, 1.0, 0.0] - coefficients['3ms8'] = [8.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['3mk8'] = [8.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2smn8'] = [8.0, 3.0, -4.0, 1.0, 0.0, 0.0, 0.0] - coefficients['2msl8'] = [8.0, 3.0, -2.0, -1.0, 0.0, 0.0, 2.0] - coefficients['msnk8'] = [8.0, 3.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['4msn8'] = [8.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] - coefficients['2(ms)8'] = [8.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2msk8'] = [8.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['2(mk)8'] = [8.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['s8'] = [8.0, 8.0, -8.0, 0.0, 0.0, 0.0, 0.0] - coefficients['k8'] = [8.0, 8.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['4mo9'] = [9.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] - coefficients['2(mn)k9'] = [9.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0] - coefficients['2m2nk9'] = [9.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0] - coefficients['3mnk9'] = [9.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0] - coefficients['4mp9'] = [9.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] - coefficients['4ms9'] = [9.0, 1.0, -1.0, 0.0, 0.0, 0.0, 2.0] - coefficients['4mk9'] = [9.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0] - coefficients['3msk9'] = [9.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0] - coefficients['s9'] = [9.0, 9.0, -9.0, 0.0, 0.0, 0.0, 0.0] - coefficients['k9'] = [9.0, 9.0, 0.0, 0.0, 0.0, 0.0, 1.0] - coefficients['4mn10'] = [10.0, -1, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['m10'] = [10.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['3msn10'] = [10.0, 1.0, -2, 1.0, 0.0, 0.0, 0.0] - coefficients['4ms10'] = [10.0, 2.0, -2, 0.0, 0.0, 0.0, 0.0] - coefficients['4mk10'] = [10.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['3msl10'] = [10.0, 3.0, -2, -1.0, 0.0, 0.0, 2.0] - coefficients['3m2s10'] = [10.0, 4.0, -4, 0.0, 0.0, 0.0, 0.0] - coefficients['3msk10'] = [10.0, 4.0, -2, 0.0, 0.0, 0.0, 0.0] - coefficients['s10'] = [10.0, 10.0, -10.0, 0.0, 0.0, 0.0, 0.0] - coefficients['4msk11'] = [11.0, 3.0, -2, 0.0, 0.0, 0.0, 1.0] - coefficients['s11'] = [11.0, 11.0, -11.0, 0.0, 0.0, 0.0, 0.0] - coefficients['5mn12'] = [12.0, -1, 0.0, 1.0, 0.0, 0.0, 0.0] - coefficients['m12'] = [12.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['4msn12'] = [12.0, 1.0, -2, 1.0, 0.0, 0.0, 0.0] - coefficients['4mns12'] = [12.0, 1.0, -2, 1.0, 0.0, 0.0, 0.0] - coefficients['5ms12'] = [12.0, 2.0, -2, 0.0, 0.0, 0.0, 0.0] - coefficients['4msl12'] = [12.0, 3.0, -2, -1.0, 0.0, 0.0, 2.0] - coefficients['4m2s12'] = [12.0, 4.0, -4, 0.0, 0.0, 0.0, 0.0] - coefficients['s12'] = [12.0, 12.0, -12.0, 0.0, 0.0, 0.0, 0.0] - coefficients['m14'] = [14.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] - coefficients['5msn14'] = [14.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] - coefficients['6ms14'] = [14.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] - coefficients['5m2s14'] = [14.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0] # set constituents to be iterable if isinstance(constituents, str): @@ -952,6 +443,7 @@ def doodson_number( - ``'Cartwright'`` - ``'Doodson'`` + - ``'Extended'`` raise_error: bool, default True Raise exception if constituent is unsupported @@ -973,7 +465,7 @@ def doodson_number( kwargs.setdefault('formalism', 'Doodson') kwargs.setdefault('raise_error', True) # validate inputs - assert kwargs['formalism'].title() in ('Cartwright', 'Doodson'), \ + assert kwargs['formalism'].title() in ('Cartwright', 'Doodson','Extended'), \ f'Unknown formalism {kwargs["formalism"]}' # get the coefficients of coefficients if isinstance(constituents, str): @@ -992,6 +484,9 @@ def doodson_number( elif (kwargs['formalism'] == 'Doodson'): # convert from coefficients to Doodson number numbers = _to_doodson_number(coefficients[:,0], **kwargs) + elif (kwargs['formalism'] == 'Extended'): + # convert to extended Doodson number in UKHO format + numbers = _to_extended_doodson(coefficients[:,0], **kwargs) else: # output dictionary with Doodson numbers numbers = {} @@ -1013,6 +508,9 @@ def doodson_number( elif (kwargs['formalism'] == 'Doodson'): # convert from coefficients to Doodson number numbers[c] = _to_doodson_number(coefficients[:,0], **kwargs) + elif (kwargs['formalism'] == 'Extended'): + # convert to extended Doodson number in UKHO format + numbers[c] = _to_extended_doodson(coefficients[:,0], **kwargs) # return the Doodson or Cartwright number return numbers @@ -1962,6 +1460,64 @@ def _constituent_parameters(c: str, **kwargs): # return the values for the constituent return (amplitude, phase, omega, alpha, species) +# Cartwright and Tayler (1971) table with 3rd-degree values +_ct1971_table_5 = get_data_path(['data','ct1971_tab5.txt']) +# Cartwright and Edden (1973) table with updated values +_ce1973_table_1 = get_data_path(['data','ce1973_tab1.txt']) + +def _parse_tide_potential_table(table: str | pathlib.Path): + """Parse tables of tide-generating potential from [1]_ and [2]_ + + Parameters + ---------- + table: str or pathlib.Path + table of tide-generating potentials + + Returns + ------- + CTE: float + Cartwright-Tayler-Edden table values + + References + ---------- + .. [1] D. E. Cartwright and R. J. Tayler, + "New Computations of the Tide-generating Potential," + *Geophysical Journal of the Royal Astronomical Society*, + 23(1), 45--73. (1971). `doi: 10.1111/j.1365-246X.1971.tb01803.x + `_ + .. [2] D. E. Cartwright and A. C. Edden, + "Corrected Tables of Tidal Harmonics," + *Geophysical Journal of the Royal Astronomical Society*, + 33(3), 253--264, (1973). `doi: 10.1111/j.1365-246X.1973.tb03420.x + `_ + """ + # verify table path + table = pathlib.Path(table).expanduser().absolute() + with table.open(mode='r', encoding='utf8') as f: + file_contents = f.readlines() + # number of lines in the file + file_lines = len(file_contents) + # tau: coefficient for mean lunar time + # s: coefficient for mean longitude of moon + # h: coefficient for mean longitude of sun + # p: coefficient for mean longitude of lunar perigee + # n: coefficient for mean longitude of ascending lunar node + # pp: coefficient for mean longitude of solar perigee + # Hs1: amplitude for epoch span 1 (1861-09-21 to 1879-09-22) + # Hs2: amplitude for epoch span 2 (1915-05-16 to 1933-05-22) + # Hs3: amplitude for epoch span 2 (1951-05-23 to 1969-05-22) + # DO: Doodson number for coefficient + # Hs0: Doodson scaled amplitude for 1900 + names = ('tau','s','h','p','n','pp','Hs1','Hs2','Hs3','DO','Hs0') + formats = ('i','i','i','i','i','i','f','f','f','U7','f') + dtype = np.dtype({'names':names, 'formats':formats}) + CTE = np.zeros((file_lines), dtype=dtype) + for i,line in enumerate(file_contents): + # drop last column with values from Doodson (1921) + CTE[i] = np.array(tuple(line.split()[:11]), dtype=dtype) + # return the table values + return CTE + def _to_doodson_number(coef: list | np.ndarray, **kwargs): """ Converts Cartwright numbers into a Doodson number @@ -1975,13 +1531,13 @@ def _to_doodson_number(coef: list | np.ndarray, **kwargs): Returns ------- - DO: float + DO: float or string Doodson number for constituent """ # default keyword arguments kwargs.setdefault('raise_error', True) # assert length and verify array - coef = np.array(coef[:6]) + coef = np.array(coef[:6]).astype(int) # add 5 to values following Doodson convention (prevent negatives) coef[1:] += 5 # check for unsupported constituents @@ -1989,12 +1545,41 @@ def _to_doodson_number(coef: list | np.ndarray, **kwargs): raise ValueError('Unsupported constituent') elif (np.any(coef < 0) or np.any(coef > 10)): return None + elif np.any(coef == 10): + # convert to string and replace 10 with X (Cartwright convention) + DO = [str(v).replace('10','X') for v in coef] + # convert to Doodson number + return np.str_('{0}{1}{2}.{3}{4}{5}'.format(*DO)) else: # convert to single number and round off floating point errors DO = np.sum([v*10**(2-o) for o,v in enumerate(coef)]) return np.round(DO, decimals=3) -def _from_doodson_number(DO: str | float | np.ndarray): +def _to_extended_doodson(coef: list | np.ndarray, **kwargs): + """ + Converts Cartwright numbers into an UKHO Extended Doodson number + + Parameters + ---------- + coef: list or np.ndarray + Doodson coefficients (Cartwright numbers) for constituent + + Returns + ------- + XDO: string + Extended Doodson number for constituent + """ + # assert length and verify array + coef = np.array(coef).astype(int) + # digits for UKHO Extended Doodson number + # Z = 0 + # A - P = 1 to 15 + # R - Y = -8 to -1 + digits = 'RSTUVWXYZABCDEFGHIJKLMNOP' + XDO = ''.join([digits[v+8] for v in coef]) + return np.str_(XDO) + +def _from_doodson_number(DO: str | float | np.ndarray, **kwargs): """ Converts Doodson numbers into Cartwright numbers @@ -2009,10 +1594,31 @@ def _from_doodson_number(DO: str | float | np.ndarray): Doodson coefficients (Cartwright numbers) for constituent """ # convert from Doodson number to Cartwright numbers - # verify Doodson numbers are floating point variables - DO = np.array(DO).astype(float) - # multiply by 1000 to prevent floating point errors - coef = np.array([np.mod(1e3*DO, 10**(6-o))//10**(5-o) for o in range(6)]) + coef = [c.replace('X', '10') for c in re.findall(r'\w', str(DO).zfill(7))] + coef = np.array(coef, dtype=int) # remove 5 from values following Doodson convention coef[1:] -= 5 return coef + +def _from_extended_doodson(XDO: str | np.str_, **kwargs): + """ + Converts UKHO Extended Doodson number into Cartwright numbers + + Parameters + ---------- + XDO: string + Extended Doodson number for constituent + + Returns + ------- + coef: np.ndarray + Doodson coefficients (Cartwright numbers) for constituent + """ + # digits for UKHO Extended Doodson number + # Z = 0 + # A - P = 1 to 15 + # R - Y = -8 to -1 + digits = 'RSTUVWXYZABCDEFGHIJKLMNOP' + # convert from extended Doodson number to Cartwright numbers + coef = np.array([(digits.index(c)-8) for c in str(XDO)], dtype=int) + return coef diff --git a/pyTMD/data/ce1973_tab1.txt b/pyTMD/data/ce1973_tab1.txt new file mode 100644 index 00000000..4b7added --- /dev/null +++ b/pyTMD/data/ce1973_tab1.txt @@ -0,0 +1,382 @@ +0 0 0 0 0 0 -0.31446 -0.31452 -0.31455 055.555 0.73806 0.73869 +0 0 0 0 1 0 0.02794 0.02794 0.02793 055.565 -0.06556 -0.06552 +0 0 0 0 2 0 -0.00027 -0.00028 -0.00028 055.575 0.00064 0.00064 +0 0 0 2 1 0 0.00004 0.00004 0.00004 055.765 -0.00009 +0 0 1 0 -1 -1 -0.00004 -0.00004 -0.00004 056.544 0.00009 +0 0 1 0 0 -1 -0.00493 -0.00493 -0.00492 056.554 0.01156 0.01160 +0 0 1 0 0 1 0.00027 0.00026 0.00026 056.556 -0.00062 -0.00061 +0 0 1 0 1 -1 0.00005 0.00005 0.00005 056.564 -0.00011 +0 0 2 -2 -1 0 0.00002 0.00002 0.00002 057.345 -0.00005 +0 0 2 -2 0 0 -0.00031 -0.00031 -0.00032 057.355 0.00074 0.00073 +0 0 2 0 0 0 -0.03104 -0.03102 -0.03100 057.555 0.07281 0.07299 +0 0 2 0 0 -2 -0.00013 -0.00013 -0.00012 057.553 0.00029 0.00030 +0 0 2 0 1 0 0.00077 0.00077 0.00077 057.565 -0.00180 -0.00181 +0 0 2 0 2 0 0.00017 0.00017 0.00017 057.575 -0.00040 -0.00040 +0 0 3 0 0 -1 -0.00182 -0.00181 -0.00181 058.554 0.00426 0.00427 +0 0 3 0 1 -1 0.00003 0.00003 0.00003 058.564 -0.00007 +0 0 4 0 0 -2 -0.00007 -0.00007 -0.00007 059.553 0.00017 0.00017 +0 1 -3 1 -1 1 0.00002 0.00002 0.00002 062.646 -0.00005 +0 1 -3 1 0 1 -0.00029 -0.00029 -0.00029 062.656 0.00067 0.00067 +0 1 -2 -1 -2 0 0.00002 0.00002 0.00002 063.435 -0.00006 +0 1 -2 -1 -1 0 0.00006 0.00007 0.00007 063.445 -0.00015 -0.00016 +0 1 -2 1 -1 0 0.00048 0.00048 0.00048 063.645 -0.00113 -0.00113 +0 1 -2 1 0 0 -0.00673 -0.00673 -0.00673 063.655 0.01579 0.01578 +0 1 -2 1 1 0 0.00044 0.00044 0.00044 063.665 -0.00103 -0.00103 +0 1 -1 -1 0 1 -0.00022 -0.00022 -0.00022 064.456 0.00051 0.00051 +0 1 -1 0 0 0 0.00020 0.00020 0.00020 064.555 -0.00046 -0.00044 +0 1 -1 1 0 -1 0.00005 0.00005 0.00005 064.654 -0.00011 -0.00010 +0 1 0 -1 -2 0 -0.00003 -0.00003 -0.00003 065.435 0.00007 +0 1 0 -1 -1 0 0.00231 0.00231 0.00231 065.445 -0.00542 -0.00542 +0 1 0 -1 0 0 -0.03517 -0.03518 -0.03518 065.455 0.08254 0.08254 +0 1 0 -1 1 0 0.00228 0.00228 0.00229 065.465 -0.00536 -0.00535 +0 1 0 1 0 0 0.00188 0.00188 0.00188 065.655 -0.00441 -0.00442 +0 1 0 1 1 0 0.00077 0.00077 0.00077 065.665 -0.00180 -0.00179 +0 1 0 1 2 0 0.00021 0.00021 0.00021 065.675 -0.00049 -0.00047 +0 1 1 -1 0 -1 0.00018 0.00018 0.00018 066.454 -0.00043 -0.00043 +0 1 2 -1 0 0 0.00049 0.00049 0.00049 067.455 -0.00115 -0.00116 +0 1 2 -1 1 0 0.00025 0.00025 0.00024 067.465 -0.00058 -0.00058 +0 1 2 -1 2 0 0.00005 0.00004 0.00004 067.475 -0.00010 +0 1 3 -1 0 -1 0.00002 0.00002 0.00002 068.454 -0.00005 +0 2 -4 2 0 0 -0.00011 -0.00011 -0.00011 071.755 0.00026 0.00026 +0 2 -3 0 0 1 -0.00039 -0.00039 -0.00038 072.556 0.00090 0.00091 +0 2 -3 0 1 1 0.00002 0.00002 0.00002 072.566 -0.00006 +0 2 -2 0 -1 0 -0.00042 -0.00042 -0.00042 073.545 0.00098 0.00098 +0 2 -2 0 0 0 -0.00583 -0.00583 -0.00583 073.555 0.01369 0.01370 +0 2 -2 0 1 0 0.00037 0.00037 0.00038 073.565 -0.00088 -0.00088 +0 2 -2 2 0 0 0.00004 0.00004 0.00004 073.755 -0.00009 +0 2 -1 -2 0 1 -0.00004 -0.00004 -0.00004 074.356 0.00008 +0 2 -1 -1 0 0 0.00003 0.00003 0.00003 074.455 -0.00007 +0 2 -1 0 0 -1 0.00006 0.00006 0.00006 074.554 -0.00015 -0.00017 +0 2 -1 0 0 1 -0.00020 -0.00020 -0.00020 074.556 0.00048 0.00048 +0 2 -1 0 1 1 -0.00004 -0.00004 -0.00004 074.566 0.00010 0.00012 +0 2 0 -2 -1 0 0.00015 0.00015 0.00015 075.345 -0.00036 -0.00036 +0 2 0 -2 0 0 -0.00288 -0.00288 -0.00288 075.355 0.00676 0.00677 +0 2 0 -2 1 0 0.00019 0.00019 0.00019 075.365 -0.00044 -0.00044 +0 2 0 0 0 0 -0.06669 -0.06665 -0.06663 075.555 0.15647 0.15642 +0 2 0 0 1 0 -0.02763 -0.02762 -0.02762 075.565 0.06483 0.06481 +0 2 0 0 2 0 -0.00258 -0.00258 -0.00258 075.575 0.00606 0.00607 +0 2 0 0 3 0 0.00005 0.00006 0.00006 075.585 -0.00013 -0.00013 +0 2 1 -2 0 -1 0.00003 0.00003 0.00003 076.354 -0.00007 +0 2 1 0 0 -1 0.00023 0.00023 0.00023 076.554 -0.00054 -0.00054 +0 2 1 0 1 -1 0.00006 0.00006 0.00006 076.564 -0.00014 -0.00014 +0 2 2 -2 0 0 0.00020 0.00020 0.00020 077.355 -0.00047 -0.00047 +0 2 2 -2 1 0 0.00008 0.00008 0.00008 077.365 -0.00018 -0.00019 +0 2 2 0 2 0 0.00003 0.00003 0.00003 077.575 -0.00007 +0 3 -5 1 0 1 -0.00002 -0.00002 -0.00002 080.656 0.00005 +0 3 -4 1 0 0 -0.00017 -0.00017 -0.00017 081.655 0.00041 0.00042 +0 3 -3 -1 0 1 -0.00007 -0.00007 -0.00007 082.456 0.00016 0.00016 +0 3 -3 1 0 1 -0.00012 -0.00011 -0.00011 082.656 0.00027 0.00026 +0 3 -3 1 1 1 -0.00005 -0.00004 -0.00004 082.666 0.00011 0.00011 +0 3 -2 -1 -1 0 -0.00009 -0.00009 -0.00009 083.445 0.00022 0.00022 +0 3 -2 -1 0 0 -0.00092 -0.00092 -0.00092 083.455 0.00217 0.00217 +0 3 -2 -1 1 0 0.00006 0.00006 0.00006 083.465 -0.00014 -0.00014 +0 3 -2 1 0 0 -0.00242 -0.00242 -0.00242 083.655 0.00569 0.00569 +0 3 -2 1 1 0 -0.00100 -0.00100 -0.00100 083.665 0.00236 0.00236 +0 3 -2 1 2 0 -0.00009 -0.00009 -0.00009 083.675 0.00021 0.00021 +0 3 -1 -1 0 1 -0.00013 -0.00013 -0.00013 084.456 0.00031 0.00028 +0 3 -1 -1 1 1 -0.00004 -0.00004 -0.00004 084.466 0.00010 0.00010 +0 3 -1 0 0 0 0.00007 0.00007 0.00007 084.555 -0.00017 -0.00016 +0 3 -1 0 1 0 0.00003 0.00003 0.00003 084.565 -0.00007 +0 3 -1 1 0 -1 0.00002 0.00002 0.00003 084.654 -0.00005 +0 3 0 -3 0 0 -0.00023 -0.00023 -0.00023 085.255 0.00054 0.00054 +0 3 0 -3 1 -1 0.00004 0.00004 0.00004 085.264 -0.00009 +0 3 0 -3 1 1 0.00004 0.00004 0.00004 085.266 -0.00009 +0 3 0 -1 0 0 -0.01277 -0.01276 -0.01276 085.455 0.02996 0.02995 +0 3 0 -1 1 0 -0.00529 -0.00529 -0.00529 085.465 0.01241 0.01241 +0 3 0 -1 2 0 -0.00049 -0.00050 -0.00051 085.475 0.00115 0.00117 +0 3 0 1 2 0 0.00005 0.00005 0.00005 085.675 -0.00012 -0.00012 +0 3 0 1 3 0 0.00002 0.00002 0.00002 085.685 -0.00005 +0 3 1 -1 0 -1 0.00011 0.00011 0.00011 086.454 -0.00025 -0.00026 +0 3 1 -1 1 -1 0.00004 0.00004 0.00004 086.464 -0.00009 +0 4 -4 0 0 0 -0.00008 -0.00008 -0.00008 091.555 0.00020 0.00020 +0 4 -4 2 0 0 -0.00006 -0.00006 -0.00006 091.755 0.00015 0.00014 +0 4 -4 2 1 0 -0.00003 -0.00003 -0.00003 091.765 0.00006 +0 4 -3 0 0 1 -0.00014 -0.00014 -0.00014 092.556 0.00033 0.00032 +0 4 -3 0 1 1 -0.00006 -0.00006 -0.00006 092.566 0.00013 0.00013 +0 4 -2 -2 0 0 -0.00011 -0.00011 -0.00011 093.355 0.00026 0.00025 +0 4 -2 0 0 0 -0.00204 -0.00204 -0.00204 093.555 0.00478 0.00478 +0 4 -2 0 1 0 -0.00084 -0.00084 -0.00084 093.565 0.00198 0.00200 +0 4 -2 0 2 0 -0.00008 -0.00008 -0.00008 093.575 0.00018 0.00019 +0 4 -1 -2 0 1 -0.00003 -0.00003 -0.00003 094.356 0.00007 +0 4 -1 0 0 -1 0.00003 0.00003 0.00003 094.554 -0.00007 +0 4 0 -2 0 0 -0.00169 -0.00169 -0.00169 095.355 0.00396 0.00396 +0 4 0 -2 1 0 -0.00070 -0.00070 -0.00070 095.365 0.00164 0.00165 +0 4 0 -2 2 0 -0.00006 -0.00006 -0.00007 095.375 0.00015 0.00016 +1 -4 0 3 -1 0 -0.00014 -0.00014 -0.00014 115.845 0.00020 0.00021 +1 -4 0 3 0 0 -0.00075 -0.00075 -0.00075 115.855 0.00107 0.00108 +1 -4 1 1 0 1 0.00004 0.00004 0.00004 116.656 -0.00005 +1 -4 2 1 -1 0 -0.00037 -0.00037 -0.00037 117.645 0.00053 0.00053 +1 -4 2 1 0 0 -0.00194 -0.00194 -0.00194 117.655 0.00278 0.00278 +1 -4 3 1 0 -1 -0.00015 -0.00015 -0.00015 118.654 0.00021 0.00021 +1 -4 4 -1 -1 0 -0.00007 -0.00007 -0.00007 119.445 0.00010 0.00010 +1 -4 4 -1 0 0 -0.00037 -0.00037 -0.00037 119.455 0.00054 0.00054 +1 -4 5 -1 0 -1 -0.00004 -0.00004 -0.00004 11X.454 0.00006 +1 -3 -1 2 0 1 0.00009 0.00009 0.00009 124.756 -0.00013 0.00013 +1 -3 0 0 -2 0 0.00004 0.00004 0.00004 125.535 -0.00006 +1 -3 0 2 -2 0 0.00005 0.00004 0.00003 125.735 -0.00006 +1 -3 0 2 -1 0 -0.00125 -0.00125 -0.00125 125.745 0.00180 0.00180 +1 -3 0 2 0 0 -0.00665 -0.00664 -0.00664 125.755 0.00955 0.00955 +1 -3 1 0 0 1 0.00011 0.00011 0.00011 126.556 -0.00016 -0.00016 +1 -3 1 1 0 0 0.00007 0.00007 0.00007 126.655 -0.00010 -0.00011 +1 -3 1 2 0 -1 -0.00010 -0.00010 -0.00010 126.754 0.00015 0.00015 +1 -3 2 0 -2 0 0.00005 0.00005 0.00004 127.535 -0.00007 +1 -3 2 0 -1 0 -0.00151 -0.00151 -0.00151 127.545 0.00217 0.00218 +1 -3 2 0 0 0 -0.00802 -0.00802 -0.00802 127.555 0.01152 0.01153 +1 -3 2 2 0 0 0.00007 0.00007 0.00007 127.755 -0.00010 +1 -3 3 0 -1 -1 -0.00010 -0.00010 -0.00010 128.544 0.00014 0.00014 +1 -3 3 0 0 -1 -0.00054 -0.00054 -0.00054 128.554 0.00078 0.00079 +1 -3 4 -2 -1 0 -0.00005 -0.00005 -0.00005 129.345 0.00007 +1 -3 4 -2 0 0 -0.00024 -0.00024 -0.00024 129.355 0.00035 0.00035 +1 -3 4 0 0 0 0.00008 0.00008 0.00008 129.555 -0.00011 +1 -3 4 0 1 0 -0.00003 -0.00003 -0.00003 129.565 0.00005 +1 -2 -2 1 -2 0 0.00004 0.00004 0.00004 133.635 -0.00006 +1 -2 -2 3 0 0 0.00016 0.00016 0.00016 133.855 -0.00023 -0.00023 +1 -2 -1 1 -1 1 0.00007 0.00007 0.00007 134.646 -0.00010 +1 -2 -1 1 0 1 0.00042 0.00042 0.00042 134.656 -0.00061 -0.00061 +1 -2 0 -1 -3 0 0.00004 0.00004 0.00004 135.425 -0.00005 +1 -2 0 -1 -2 0 0.00019 0.00019 0.00019 135.435 -0.00028 -0.00028 +1 -2 0 1 -2 0 0.00028 0.00029 0.00029 135.635 -0.00041 -0.00042 +1 -2 0 0 0 1 -0.00004 -0.00004 -0.00004 135.556 0.00006 +1 -2 0 1 -1 0 -0.00946 -0.00947 -0.00947 135.645 0.01360 0.01360 +1 -2 0 1 0 0 -0.05022 -0.05021 -0.05020 135.655 0.07217 0.07216 +1 -2 0 3 0 0 0.00014 0.00014 0.00014 135.855 -0.00020 -0.00019 +1 -2 1 -1 0 1 0.00010 0.00009 0.00009 136.456 -0.00014 -0.00013 +1 -2 1 0 -1 0 0.00005 0.00005 0.00005 136.545 -0.00007 +1 -2 1 0 0 0 0.00027 0.00027 0.00027 136.555 -0.00039 -0.00039 +1 -2 1 1 0 -1 -0.00046 -0.00046 -0.00046 136.654 0.00066 0.00068 +1 -2 2 -1 -2 0 0.00005 0.00005 0.00005 137.435 -0.00008 +1 -2 2 -1 -1 0 -0.00180 -0.00180 -0.00180 137.445 0.00258 0.00258 +1 -2 2 -1 0 0 -0.00954 -0.00954 -0.00954 137.455 0.01371 0.01371 +1 -2 2 1 0 0 0.00055 0.00055 0.00055 137.655 -0.00079 -0.00078 +1 -2 2 1 1 0 -0.00017 -0.00017 -0.00017 137.665 0.00024 0.00024 +1 -2 3 -1 -1 -1 -0.00008 -0.00008 -0.00008 138.444 0.00012 0.00011 +1 -2 3 -1 0 -1 -0.00044 -0.00044 -0.00044 138.454 0.00063 0.00064 +1 -2 3 1 0 -1 0.00004 0.00004 0.00004 138.654 -0.00006 +1 -2 4 -1 0 0 0.00012 0.00012 0.00012 139.455 -0.00017 -0.00014 +1 -1 -2 0 -2 0 0.00011 0.00011 0.00011 143.535 -0.00016 -0.00017 +1 -1 -2 2 -1 0 0.00014 0.00014 0.00014 143.745 -0.00020 -0.00020 +1 -1 -2 2 0 0 0.00079 0.00079 0.00079 143.755 -0.00113 -0.00113 +1 -1 -1 0 -1 1 0.00011 0.00011 0.00011 144.546 -0.00015 -0.00015 +1 -1 -1 0 0 1 0.00090 0.00090 0.00090 144.556 -0.00130 -0.00130 +1 -1 -1 1 0 0 -0.00004 -0.00004 -0.00004 144.655 0.00006 +1 -1 0 0 -2 0 0.00152 0.00152 0.00152 145.535 -0.00218 -0.00218 +1 -1 0 0 -1 0 -0.04944 -0.04945 -0.04945 145.545 0.07106 0.07105 +1 -1 0 0 0 0 -0.26233 -0.26226 -0.26221 145.555 0.37694 0.37689 +1 -1 0 2 -1 0 -0.00005 -0.00005 -0.00005 145.745 0.00007 +1 -1 0 2 0 0 0.00169 0.00170 0.00170 145.755 -0.00243 -0.00243 +1 -1 0 2 1 0 0.00027 0.00028 0.00028 145.765 -0.00039 -0.00040 +1 -1 1 0 -1 -1 -0.00009 -0.00008 -0.00008 146.544 0.00012 0.00012 +1 -1 1 0 0 -1 -0.00076 -0.00076 -0.00076 146.554 0.00109 0.00115 +1 -1 2 -2 0 0 0.00015 0.00015 0.00015 147.355 -0.00022 -0.00021 +1 -1 2 0 -1 0 -0.00010 -0.00010 -0.00010 147.545 0.00014 0.00014 +1 -1 2 0 0 0 0.00343 0.00343 0.00343 147.555 -0.00493 -0.00491 +1 -1 2 0 1 0 -0.00075 -0.00075 -0.00075 147.565 0.00107 0.00107 +1 -1 2 0 2 0 -0.00005 -0.00005 -0.00005 147.575 0.00007 +1 -1 3 0 0 -1 0.00023 0.00023 0.00023 148.554 -0.00033 -0.00033 +1 -1 4 -2 0 0 0.00006 0.00006 0.00006 149.355 -0.00009 +1 0 -3 1 0 1 0.00009 0.00009 0.00009 152.656 -0.00013 -0.00014 +1 0 -2 1 -1 0 0.00044 0.00044 0.00044 153.645 -0.00063 -0.00063 +1 0 -2 1 0 0 0.00193 0.00194 0.00194 153.655 -0.00278 -0.00278 +1 0 -1 0 0 0 -0.00004 -0.00004 -0.00004 154.555 0.00006 +1 0 -1 1 0 1 -0.00010 -0.00010 -0.00010 154.656 0.00015 0.00015 +1 0 0 -1 -2 0 -0.00012 -0.00012 -0.00012 155.435 0.00017 0.00017 +1 0 0 -1 -1 0 0.00137 0.00137 0.00137 155.445 -0.00197 -0.00197 +1 0 0 -1 0 0 0.00742 0.00742 0.00741 155.455 -0.01066 -0.01065 +1 0 0 1 -1 0 -0.00060 -0.00060 -0.00059 155.645 0.00086 0.00085 +1 0 0 1 0 0 0.02063 0.02093 0.02062 155.655 -0.02964 -0.02964 +1 0 0 1 1 0 0.00414 0.00414 0.00414 155.665 -0.00594 -0.00594 +1 0 0 1 2 0 -0.00011 -0.00012 -0.00011 155.675 0.00016 0.00017 +1 0 1 0 0 0 -0.00011 -0.00012 -0.00012 156.555 0.00017 0.00016 +1 0 1 1 0 -1 0.00013 0.00013 0.00013 156.654 -0.00018 -0.00018 +1 0 2 -1 -1 0 -0.00011 -0.00011 -0.00011 157.445 0.00016 0.00016 +1 0 2 -1 0 0 0.00394 0.00395 0.00394 157.455 -0.00567 -0.00566 +1 0 2 -1 1 0 0.00086 0.00087 0.00087 157.465 -0.00124 -0.00124 +1 0 3 -1 0 -1 0.00017 0.00017 0.00017 158.454 -0.00024 -0.00024 +1 0 3 -1 1 -1 0.00004 0.00004 0.00004 158.464 -0.00006 +1 1 -4 0 0 2 -0.00029 -0.00029 -0.00029 161.557 0.00042 0.00042 +1 1 -3 0 -1 1 0.00006 0.00006 0.00006 162.546 -0.00008 +1 1 -3 0 0 1 -0.00716 -0.00715 -0.00714 162.556 0.01028 0.01029 +1 1 -2 0 -2 0 -0.00010 -0.00010 -0.00010 163.535 0.00014 0.00014 +1 1 -2 0 -1 0 0.00137 0.00137 0.00137 163.545 -0.00197 -0.00199 +1 1 -2 0 0 0 -0.12209 -0.12205 -0.12203 163.555 0.17545 0.17584 +1 1 -2 0 0 2 0.00005 0.00005 0.00005 163.557 -0.00007 -0.00011 +1 1 -2 2 0 0 0.00018 0.00019 0.00018 163.755 -0.00026 -0.00026 +1 1 -2 2 1 0 0.00004 0.00004 0.00004 163.765 -0.00005 +1 1 -1 0 0 -1 0.00102 0.00103 0.00102 164.554 -0.00147 -0.00147 +1 1 -1 0 0 1 0.00290 0.00289 0.00289 164.556 -0.00416 -0.00423 +1 1 -1 0 1 1 -0.00008 -0.00008 -0.00008 164.566 0.00011 +1 1 0 -2 -1 0 0.00007 0.00007 0.00007 165.345 -0.00010 +1 1 0 0 -2 0 0.00004 0.00004 0.00005 165.535 -0.00006 +1 1 0 0 -1 0 -0.00731 -0.00731 -0.00730 165.545 0.01051 0.01050 +1 1 0 0 0 0 0.36892 0.36883 0.36878 165.555 -0.53011 -0.53050 +1 1 0 0 1 0 0.05000 0.05001 0.05001 165.565 -0.07186 -0.07182 +1 1 0 0 2 0 -0.00108 -0.00108 -0.00108 165.575 0.00155 0.00154 +1 1 1 0 0 -1 0.00294 0.00293 0.00293 166.554 -0.00422 -0.00423 +1 1 1 0 1 -1 0.00005 0.00005 0.00005 166.564 -0.00008 +1 1 2 -2 0 0 0.00018 0.00018 0.00018 167.355 -0.00026 -0.00026 +1 1 2 -2 1 0 0.00005 0.00005 0.00005 167.365 -0.00008 +1 1 2 0 0 -2 0.00007 0.00007 0.00007 167.553 -0.00010 -0.00011 +1 1 2 0 0 0 0.00526 0.00525 0.00525 167.555 -0.00755 -0.00756 +1 1 2 0 1 0 -0.00020 -0.00020 -0.00020 167.565 0.00029 0.00029 +1 1 2 0 2 0 -0.00010 -0.00010 -0.00010 167.575 0.00014 0.00014 +1 1 3 0 0 -1 0.00031 0.00031 0.00031 168.554 -0.00044 -0.00044 +1 2 -3 1 0 1 0.00017 0.00017 0.00017 172.656 -0.00024 -0.00024 +1 2 -2 -1 -1 0 0.00012 0.00012 0.00012 173.445 -0.00017 -0.00017 +1 2 -2 1 -1 0 -0.00013 -0.00013 -0.00012 173.645 0.00018 0.00018 +1 2 -2 1 0 0 0.00395 0.00394 0.00395 173.655 -0.00567 -0.00566 +1 2 -2 1 1 0 0.00078 0.00078 0.00078 173.665 -0.00113 -0.00112 +1 2 -1 -1 0 1 0.00013 0.00012 0.00012 174.456 -0.00018 -0.00018 +1 2 -1 0 0 0 -0.00011 -0.00011 -0.00012 174.555 0.00016 0.00016 +1 2 0 -1 -1 0 -0.00061 -0.00061 -0.00060 175.445 0.00087 0.00087 +1 2 0 -1 0 0 0.02063 0.02062 0.02062 175.455 -0.02964 -0.02964 +1 2 0 -1 1 0 0.00409 0.00409 0.00409 175.465 -0.00587 -0.00587 +1 2 0 -1 2 0 -0.00010 -0.00009 -0.00007 175.475 0.00014 0.00013 +1 2 0 1 0 0 -0.00032 -0.00032 -0.00032 175.655 0.00045 0.00046 +1 2 0 1 1 0 -0.00020 -0.00020 -0.00020 175.665 0.00029 0.00029 +1 2 0 1 2 0 -0.00012 -0.00012 -0.00012 175.675 0.00017 0.00017 +1 2 1 -1 0 -1 -0.00011 -0.00010 -0.00011 176.454 0.00015 0.00015 +1 2 2 -1 0 0 -0.00008 -0.00008 -0.00008 177.455 0.00012 0.00012 +1 2 2 -1 1 0 -0.00006 -0.00006 -0.00006 177.465 0.00009 +1 3 -4 2 0 0 0.00006 0.00006 0.00006 181.755 -0.00009 +1 3 -3 0 0 1 0.00023 0.00023 0.00023 182.556 -0.00032 -0.00032 +1 3 -3 0 1 1 0.00004 0.00004 0.00004 182.566 -0.00006 +1 3 -2 0 -1 0 0.00011 0.00011 0.00011 183.545 -0.00016 -0.00016 +1 3 -2 0 0 0 0.00342 0.00342 0.00342 183.555 -0.00492 -0.00492 +1 3 -2 0 1 0 0.00067 0.00067 0.00067 183.565 -0.00096 -0.00096 +1 3 -1 0 0 -1 -0.00007 -0.00007 -0.00007 184.554 0.00010 +1 3 0 -2 -1 0 -0.00004 -0.00004 -0.00004 185.345 0.00006 +1 3 0 -2 0 0 0.00169 0.00169 0.00169 185.355 -0.00243 -0.00240 +1 3 0 -2 1 0 0.00033 0.00034 0.00034 185.365 -0.00048 -0.00048 +1 3 0 0 0 0 0.01130 0.01129 0.01129 185.555 -0.01624 -0.01623 +1 3 0 0 1 0 0.00723 0.00723 0.00723 185.565 -0.01039 -0.01039 +1 3 0 0 2 0 0.00151 0.00151 0.00151 185.575 -0.00218 -0.00218 +1 3 0 0 3 0 0.00010 0.00010 0.00010 185.585 -0.00014 -0.00014 +1 3 1 0 0 -1 -0.00004 -0.00004 -0.00004 186.554 0.00006 +1 4 -4 1 0 0 0.00010 0.00010 0.00010 191.655 -0.00015 -0.00015 +1 4 -3 -1 0 1 0.00004 0.00004 0.00004 192.456 -0.00006 +1 4 -2 -1 0 0 0.00054 0.00054 0.00054 193.455 -0.00078 -0.00078 +1 4 -2 -1 1 0 0.00011 0.00011 0.00011 193.465 -0.00015 -0.00015 +1 4 -2 1 0 0 0.00041 0.00041 0.00041 193.655 -0.00059 -0.00059 +1 4 -2 1 1 0 0.00026 0.00026 0.00026 193.665 -0.00038 -0.00038 +1 4 -2 1 2 0 0.00005 0.00005 0.00005 193.675 -0.00008 +1 4 0 -3 0 0 0.00013 0.00013 0.00013 195.255 -0.00019 -0.00019 +1 4 0 -1 0 0 0.00217 0.00216 0.00216 195.455 -0.00311 -0.00311 +1 4 0 -1 1 0 0.00139 0.00138 0.00138 195.465 -0.00199 -0.00199 +1 4 0 -1 2 0 0.00029 0.00029 0.00029 195.475 -0.00041 -0.00042 +2 -4 0 4 0 0 0.00019 0.00019 0.00019 215.955 0.00027 0.00027 +2 -4 2 2 0 0 0.00077 0.00078 0.00078 217.755 0.00111 0.00111 +2 -4 3 2 0 -1 0.00006 0.00006 0.00006 218.754 0.00009 +2 -4 4 0 0 0 0.00048 0.00048 0.00048 219.555 0.00069 0.00069 +2 -4 5 0 0 -1 0.00006 0.00006 0.00006 21X.554 0.00009 +2 -3 0 3 -1 0 -0.00007 -0.00007 -0.00007 225.845 -0.00010 +2 -3 0 3 0 0 0.00180 0.00180 0.00180 225.855 0.00259 0.00259 +2 -3 1 1 0 1 -0.00009 -0.00009 -0.00009 226.656 -0.00013 -0.00012 +2 -3 1 3 0 -1 0.00004 0.00004 0.00004 226.854 0.00006 +2 -3 2 1 -1 0 -0.00017 -0.00017 -0.00017 227.645 -0.00025 -0.00025 +2 -3 2 1 0 0 0.00467 0.00467 0.00467 227.655 0.00671 0.00671 +2 -3 3 1 0 -1 0.00036 0.00036 0.00036 228.654 0.00051 0.00054 +2 -3 4 -1 -1 0 -0.00003 -0.00003 -0.00003 229.445 -0.00005 +2 -3 4 -1 0 0 0.00090 0.00090 0.00090 229.455 0.00130 0.00130 +2 -3 5 -1 0 -1 0.00010 0.00010 0.00010 22X.454 0.00015 0.00015 +2 -2 -2 4 0 0 -0.00006 -0.00006 -0.00006 233.955 -0.00009 +2 -2 -1 2 0 1 -0.00022 -0.00022 -0.00022 234.756 -0.00031 -0.00031 +2 -2 0 0 -2 0 -0.00010 -0.00010 -0.00010 235.535 -0.00014 -0.00014 +2 -2 0 2 -1 0 -0.00060 -0.00060 -0.00060 235.745 -0.00086 -0.00086 +2 -2 0 2 0 0 0.01601 0.01601 0.01601 235.755 0.02301 0.02301 +2 -2 1 0 0 1 -0.00027 -0.00027 -0.00027 236.556 -0.00039 -0.00040 +2 -2 1 1 0 0 -0.00017 -0.00017 -0.00017 236.655 -0.00025 -0.00025 +2 -2 1 2 0 -1 0.00025 0.00025 0.00025 236.754 0.00036 0.00036 +2 -2 2 0 -1 0 -0.00072 -0.00072 -0.00072 237.545 -0.00104 -0.00104 +2 -2 2 0 0 0 0.01932 0.01932 0.01932 237.555 0.02776 0.02774 +2 -2 3 -1 0 0 -0.00005 -0.00005 -0.00004 238.455 -0.00007 +2 -2 3 0 -1 -1 -0.00005 -0.00005 -0.00005 238.544 -0.00007 +2 -2 3 0 0 -1 0.00131 0.00131 0.00130 238.554 0.00188 0.00189 +2 -2 4 -2 0 0 0.00059 0.00059 0.00059 239.355 0.00085 0.00085 +2 -2 4 0 0 -2 0.00005 0.00005 0.00005 239.553 0.00007 +2 -2 5 -2 0 -1 0.00005 0.00005 0.00005 23X.354 0.00008 +2 -1 -2 1 -2 0 -0.00010 -0.00010 -0.00010 243.635 -0.00015 -0.00015 +2 -1 -2 3 0 0 -0.00039 -0.00039 -0.00039 243.855 -0.00056 -0.00056 +2 -1 -1 1 -1 1 0.00003 0.00003 0.00003 244.646 0.00005 +2 -1 -1 1 0 1 -0.00102 -0.00102 -0.00102 244.656 -0.00147 -0.00147 +2 -1 0 -1 -2 0 -0.00047 -0.00047 -0.00047 245.435 -0.00067 -0.00063 +2 -1 0 1 -2 0 0.00006 0.00006 0.00007 245.635 0.00009 +2 -1 0 0 0 1 0.00010 0.00009 0.00010 245.556 0.00014 0.00014 +2 -1 0 1 -1 0 -0.00452 -0.00451 -0.00451 245.645 -0.00649 -0.00648 +2 -1 0 1 0 0 0.12098 0.12098 0.12099 245.655 0.17386 0.17387 +2 -1 1 -1 0 1 -0.00023 -0.00022 -0.00022 246.456 -0.00032 -0.00033 +2 -1 1 0 0 0 -0.00065 -0.00065 -0.00065 246.555 -0.00094 -0.00094 +2 -1 1 1 -1 -1 -0.00004 -0.00004 -0.00004 246.644 -0.00005 +2 -1 1 1 0 -1 0.00113 0.00113 0.00113 246.654 0.00163 0.00163 +2 -1 2 -1 -1 0 -0.00086 -0.00086 -0.00086 247.445 -0.00123 -0.00123 +2 -1 2 -1 0 0 0.02298 0.02298 0.02298 247.455 0.03302 0.03303 +2 -1 2 1 0 0 0.00010 0.00010 0.00010 247.655 0.00014 0.00017 +2 -1 2 1 1 0 -0.00008 -0.00008 -0.00008 247.665 -0.00012 -0.00012 +2 -1 3 -1 -1 -1 -0.00004 -0.00004 -0.00004 248.444 -0.00006 +2 -1 3 -1 0 -1 0.00106 0.00106 0.00106 248.454 0.00153 0.00153 +2 0 -3 2 0 1 -0.00008 -0.00008 -0.00008 252.756 -0.00011 -0.00011 +2 0 -2 0 -2 0 -0.00027 -0.00027 -0.00028 253.535 -0.00039 -0.00040 +2 0 -2 2 -1 0 0.00007 0.00007 0.00007 253.745 0.00009 +2 0 -2 2 0 0 -0.00190 -0.00190 -0.00190 253.755 -0.00273 -0.00273 +2 0 -1 0 -1 1 0.00005 0.00005 0.00005 254.546 0.00007 +2 0 -1 0 0 1 -0.00218 -0.00218 -0.00218 254.556 -0.00313 -0.00314 +2 0 -1 1 0 0 0.00010 0.00009 0.00009 254.655 0.00014 0.00014 +2 0 0 0 -2 0 0.00033 0.00033 0.00033 255.535 0.00047 0.00047 +2 0 0 0 -1 0 -0.02359 -0.02359 -0.02358 255.545 -0.03390 -0.03386 +2 0 0 0 0 0 0.63187 0.63190 0.63192 255.555 0.90809 0.90812 +2 0 0 2 0 0 0.00037 0.00037 0.00037 255.755 0.00053 0.00053 +2 0 0 2 1 0 0.00013 0.00013 0.00013 255.765 0.00019 0.00019 +2 0 1 0 -1 -1 -0.00004 -0.00004 -0.00004 256.544 -0.00006 +2 0 1 0 0 -1 0.00193 0.00192 0.00192 256.554 0.00277 0.00276 +2 0 2 -2 0 0 -0.00036 -0.00036 -0.00036 257.355 -0.00052 -0.00052 +2 0 2 0 0 0 0.00072 0.00072 0.00072 257.555 0.00104 0.00107 +2 0 2 0 1 0 -0.00036 -0.00036 -0.00036 257.565 -0.00051 -0.00051 +2 0 2 0 2 0 0.00012 0.00012 0.00012 257.575 0.00017 0.00018 +2 0 3 0 0 -1 0.00005 0.00005 0.00005 258.554 0.00007 +2 1 -3 1 0 1 -0.00022 -0.00022 -0.00022 262.656 -0.00032 -0.00013 +2 1 -2 1 -1 0 0.00021 0.00021 0.00021 263.645 0.00030 0.00024 +2 1 -2 1 0 0 -0.00466 -0.00466 -0.00466 263.655 -0.00670 -0.00670 +2 1 -1 -1 0 1 -0.00007 -0.00007 -0.00007 264.456 -0.00010 -0.00010 +2 1 -1 0 0 0 0.00011 0.00011 0.00011 264.555 0.00016 0.00017 +2 1 0 -1 -1 0 0.00065 0.00065 0.00066 265.445 0.00094 0.00095 +2 1 0 -1 0 0 -0.01786 -0.01786 -0.01786 265.455 -0.02567 -0.02567 +2 1 0 1 -1 0 -0.00009 -0.00008 -0.00008 265.645 -0.00012 -0.00012 +2 1 0 1 0 0 0.00447 0.00447 0.00447 265.655 0.00643 0.00643 +2 1 0 1 1 0 0.00197 0.00197 0.00197 265.665 0.00283 0.00283 +2 1 0 1 2 0 0.00028 0.00028 0.00028 265.675 0.00040 0.00040 +2 1 2 -1 0 0 0.00086 0.00085 0.00086 267.455 0.00123 0.00123 +2 1 2 -1 1 0 0.00041 0.00041 0.00041 267.465 0.00059 0.00059 +2 1 2 -1 2 0 0.00005 0.00005 0.00005 267.475 0.00007 +2 2 -4 0 0 2 0.00070 0.00070 0.00070 271.557 0.00101 0.00101 +2 2 -3 0 0 1 0.01724 0.01722 0.01720 272.556 0.02476 0.02479 +2 2 -2 0 -1 0 0.00066 0.00066 0.00066 273.545 0.00095 0.00094 +2 2 -2 0 0 0 0.29397 0.29398 0.29400 273.555 0.42248 0.42358 +2 2 -2 2 0 0 0.00004 0.00004 0.00004 273.755 0.00006 +2 2 -1 0 0 -1 -0.00247 -0.00246 -0.00246 274.554 -0.00355 -0.00354 +2 2 -1 0 0 1 0.00063 0.00062 0.00062 274.556 0.00090 0.00092 +2 2 -1 0 1 1 -0.00004 -0.00004 -0.00004 274.566 -0.00005 +2 2 0 0 -1 0 -0.00103 -0.00102 -0.00102 275.545 -0.00147 -0.00147 +2 2 0 0 1 0 0.02384 0.02383 0.02383 275.565 0.03426 0.03423 +2 2 0 0 2 0 0.00259 0.00259 0.00259 275.575 0.00372 0.00372 +2 2 1 0 0 -1 0.00063 0.00063 0.00063 276.554 0.00091 0.00092 +2 2 2 -2 0 0 0.00004 0.00004 0.00004 277.355 0.00005 +2 2 2 0 0 0 0.00053 0.00053 0.00053 277.555 0.00076 0.00078 +2 3 -3 1 0 1 0.00004 0.00004 0.00004 282.656 0.00005 +2 3 -2 -1 -1 0 0.00006 0.00006 0.00006 283.445 0.00008 +2 3 -2 -1 0 0 0.00004 0.00004 0.00004 283.455 0.00006 +2 3 -2 1 0 0 0.00086 0.00086 0.00086 283.655 0.00123 0.00123 +2 3 -2 1 1 0 0.00037 0.00037 0.00037 283.665 0.00054 0.00054 +2 3 -2 1 2 0 0.00004 0.00004 0.00004 283.675 0.00006 +2 3 0 -1 -1 0 -0.00008 -0.00009 -0.00009 285.445 -0.00012 -0.00012 +2 3 0 -1 0 0 0.00447 0.00447 0.00447 285.455 0.00643 0.00643 +2 3 0 -1 1 0 0.00195 0.00195 0.00195 285.465 0.00280 0.00280 +2 3 0 -1 2 0 0.00021 0.00021 0.00022 285.475 0.00030 0.00030 +2 3 0 1 0 0 -0.00003 -0.00003 -0.00003 285.655 -0.00005 +2 4 -3 0 0 1 0.00005 0.00005 0.00005 292.556 0.00007 +2 4 -2 0 0 0 0.00074 0.00074 0.00074 293.555 0.00107 0.00107 +2 4 -2 0 1 0 0.00032 0.00032 0.00032 293.565 0.00046 0.00046 +2 4 -2 0 2 0 0.00003 0.00003 0.00003 293.575 0.00005 +2 4 0 -2 0 0 0.00037 0.00037 0.00037 295.355 0.00053 0.00053 +2 4 0 -2 1 0 0.00016 0.00016 0.00016 295.365 0.00023 0.00023 +2 4 0 0 0 0 0.00117 0.00117 0.00117 295.555 0.00169 0.00168 +2 4 0 0 2 0 0.00033 0.00033 0.00033 295.575 0.00047 0.00047 +2 4 0 0 3 0 0.00005 0.00005 0.00005 295.585 0.00007 diff --git a/pyTMD/data/ct1971_tab5.txt b/pyTMD/data/ct1971_tab5.txt new file mode 100644 index 00000000..1c46625b --- /dev/null +++ b/pyTMD/data/ct1971_tab5.txt @@ -0,0 +1,99 @@ +0 0 0 1 0 0 -0.00020 -0.00020 -0.00021 055.655 0.00025 0.00026 +0 0 2 -1 0 0 -0.00004 -0.00004 -0.00004 057.455 0.00005 +0 1 -2 0 0 0 0.00004 0.00004 0.00004 063.555 -0.00005 +0 1 0 0 -1 0 0.00019 0.00020 0.00019 065.545 -0.00024 -0.00024 +0 1 0 0 0 0 -0.00375 -0.00375 -0.00375 065.555 0.00466 0.00466 +0 1 0 0 1 0 -0.00059 -0.00059 -0.00059 065.565 0.00074 0.00073 +0 1 0 0 2 0 0.00005 0.00005 0.00005 065.575 -0.00006 +0 2 -2 1 0 0 -0.00012 -0.00012 -0.00012 073.655 0.00015 0.00015 +0 2 0 -1 0 0 -0.00061 -0.00061 -0.00061 075.455 0.00076 0.00076 +0 2 0 -1 1 0 -0.00010 -0.00010 -0.00010 075.465 0.00012 0.00012 +0 3 -2 0 0 0 -0.00010 -0.00010 -0.00010 083.555 0.00013 0.00013 +0 3 0 -2 0 0 -0.00007 -0.00007 -0.00007 085.355 0.00009 +0 3 0 0 0 0 -0.00031 -0.00030 -0.00030 085.555 0.00038 0.00038 +0 3 0 0 1 0 -0.00019 -0.00019 -0.00019 085.565 0.00023 0.00024 +0 3 0 0 2 0 -0.00004 -0.00004 -0.00004 085.575 0.00005 +0 4 0 -1 0 0 -0.00008 -0.00008 -0.00008 095.455 0.00010 0.00011 +0 4 0 -1 1 0 -0.00005 -0.00005 -0.00005 095.465 0.00006 +1 -4 0 2 0 0 -0.00006 -0.00006 -0.00006 115.755 -0.00010 -0.00010 +1 -4 2 0 0 0 -0.00006 -0.00006 -0.00006 117.555 -0.00010 -0.00010 +1 -3 0 1 -1 0 -0.00014 -0.00014 -0.00014 125.645 -0.00023 -0.00023 +1 -3 0 1 0 0 -0.00035 -0.00035 -0.00035 125.655 -0.00058 -0.00058 +1 -3 2 -1 0 0 -0.00007 -0.00007 -0.00007 127.455 -0.00011 -0.00011 +1 -2 0 0 -2 0 -0.00004 -0.00004 -0.00004 135.535 -0.00007 +1 -2 0 0 -1 0 -0.00051 -0.00050 -0.00050 135.545 -0.00083 -0.00084 +1 -2 0 0 0 0 -0.00128 -0.00128 -0.00128 135.555 -0.00211 -0.00211 +1 -2 0 2 0 0 -0.00008 -0.00008 -0.00008 135.755 -0.00013 -0.00013 +1 -2 2 0 0 0 -0.00011 -0.00011 -0.00011 137.555 -0.00018 -0.00018 +1 -1 0 -1 0 0 0.00007 0.00007 0.00007 145.455 0.00012 0.00012 +1 -1 0 1 -1 0 0.00010 0.00010 0.00010 145.645 0.00016 0.00016 +1 -1 0 1 0 0 -0.00065 -0.00065 -0.00065 145.655 -0.00108 -0.00108 +1 -1 0 1 1 0 0.00009 0.00008 0.00009 145.665 0.00014 0.00014 +1 -1 2 -1 0 0 -0.00013 -0.00013 -0.00013 147.455 -0.00021 -0.00021 +1 0 0 0 -1 0 0.00059 0.00059 0.00059 155.545 0.00098 0.00098 +1 0 0 0 0 0 -0.00399 -0.00399 -0.00399 155.555 -0.00660 -0.00661 +1 0 0 0 1 0 0.00052 0.00052 0.00052 155.565 0.00086 0.00086 +1 1 -2 1 0 0 -0.00004 -0.00004 -0.00004 163.655 -0.00007 +1 1 0 -1 -1 0 0.00003 0.00003 0.00003 165.445 0.00005 +1 1 0 -1 0 0 -0.00022 -0.00022 -0.00022 165.455 -0.00036 -0.00036 +1 1 0 -1 1 0 0.00003 0.00003 0.00003 165.465 0.00005 +1 1 0 1 0 0 -0.00008 -0.00008 -0.00008 165.655 -0.00013 -0.00013 +1 1 0 1 1 0 -0.00003 -0.00003 -0.00003 165.665 -0.00005 +1 2 -2 0 0 0 -0.00005 -0.00005 -0.00005 173.555 -0.00008 +1 2 0 0 -1 0 0.00005 0.00005 0.00005 175.545 0.00008 +1 2 0 0 0 0 -0.00146 -0.00146 -0.00146 175.555 -0.00242 -0.00241 +1 2 0 0 1 0 -0.00059 -0.00059 -0.00059 175.565 -0.00098 -0.00089 +1 2 0 0 2 0 -0.00005 -0.00005 -0.00005 175.575 -0.00008 +1 3 -2 1 0 0 -0.00005 -0.00005 -0.00005 183.655 -0.00008 +1 3 0 -1 0 0 -0.00024 -0.00024 -0.00024 185.455 -0.00039 -0.00040 +1 3 0 -1 1 0 -0.00010 -0.00010 -0.00010 185.465 -0.00016 -0.00016 +1 4 -2 0 0 0 -0.00004 -0.00004 -0.00004 193.555 -0.00007 +1 4 0 0 0 0 -0.00006 -0.00005 -0.00005 195.555 -0.00009 +1 4 0 0 1 0 -0.00005 -0.00005 -0.00005 195.565 -0.00008 +2 -4 2 1 0 0 -0.00006 -0.00006 -0.00006 217.655 -0.00008 +2 -3 0 2 0 0 -0.00018 -0.00018 -0.00018 225.755 -0.00027 -0.00027 +2 -3 2 0 -1 0 -0.00003 -0.00003 -0.00003 227.545 -0.00005 +2 -3 2 0 0 0 -0.00019 -0.00018 -0.00018 227.555 -0.00027 -0.00027 +2 -2 0 1 -1 0 -0.00018 -0.00018 -0.00018 235.645 -0.00027 -0.00027 +2 -2 0 1 0 0 -0.00107 -0.00107 -0.00107 235.655 -0.00156 -0.00156 +2 -2 2 -1 -1 0 -0.00003 -0.00003 -0.00003 237.445 -0.00005 +2 -2 2 -1 0 0 -0.00020 -0.00020 -0.00020 237.455 -0.00029 -0.00029 +2 -1 0 0 -2 0 0.00003 0.00004 0.00003 245.535 0.00005 +2 -1 0 0 -1 0 -0.00066 -0.00066 -0.00066 245.545 -0.00097 -0.00097 +2 -1 0 0 0 0 -0.00389 -0.00389 -0.00389 245.555 -0.00569 -0.00569 +2 -1 0 2 0 0 0.00007 0.00007 0.00007 245.755 0.00010 0.00011 +2 -1 2 0 0 0 0.00010 0.00010 0.00010 247.555 0.00014 0.00015 +2 0 -2 1 0 0 0.00005 0.00005 0.00005 253.655 0.00008 +2 0 0 -1 -1 0 0.00004 0.00004 0.00004 255.445 0.00005 +2 0 0 -1 0 0 0.00022 0.00022 0.00022 255.455 0.00032 0.00032 +2 0 0 1 -1 0 -0.00003 -0.00003 -0.00003 255.645 -0.00005 +2 0 0 1 0 0 0.00059 0.00059 0.00059 255.655 0.00086 0.00086 +2 0 0 1 1 0 0.00011 0.00011 0.00011 255.665 0.00016 0.00016 +2 0 2 -1 0 0 0.00011 0.00011 0.00011 257.455 0.00017 0.00017 +2 1 0 0 -1 0 -0.00021 -0.00021 -0.00021 265.545 -0.00031 -0.00031 +2 1 0 0 0 0 0.00359 0.00359 0.00359 265.555 0.00525 0.00525 +2 1 0 0 1 0 0.00068 0.00068 0.00068 265.565 0.00099 0.00099 +2 2 -2 1 0 0 0.00004 0.00004 0.00004 273.655 0.00005 +2 2 0 -1 0 0 0.00019 0.00019 0.00019 275.455 0.00028 0.00028 +2 2 0 -1 1 0 0.00004 0.00004 0.00004 275.465 0.00005 +2 3 -2 0 0 0 0.00004 0.00004 0.00004 283.555 0.00006 +2 3 0 0 0 0 0.00033 0.00033 0.00033 285.555 0.00048 0.00048 +2 3 0 0 1 0 0.00021 0.00021 0.00021 285.565 0.00031 0.00031 +2 3 0 0 2 0 0.00004 0.00004 0.00004 285.575 0.00006 +2 4 0 -1 0 0 0.00005 0.00005 0.00005 295.455 0.00008 +3 -2 0 2 0 0 0.00036 0.00037 0.00037 335.755 -0.00057 -0.00056 +3 -2 2 0 0 0 0.00037 0.00037 0.00037 337.555 -0.00057 -0.00057 +3 -1 0 1 -1 0 -0.00012 -0.00012 -0.00012 345.645 0.00018 0.00018 +3 -1 0 1 0 0 0.00210 0.00210 0.00210 345.655 -0.00326 -0.00326 +3 -1 2 -1 0 0 0.00039 0.00039 0.00039 347.455 -0.00061 -0.00061 +3 0 -2 2 0 0 -0.00005 -0.00005 -0.00005 353.755 0.00007 +3 0 0 0 -1 0 -0.00043 -0.00043 -0.00043 355.545 0.00067 0.00066 +3 0 0 0 0 0 0.00765 0.00765 0.00765 355.555 -0.01188 -0.01188 +3 1 -2 1 0 0 -0.00011 -0.00011 -0.00011 363.655 0.00017 0.00017 +3 1 0 -1 0 0 -0.00043 -0.00043 -0.00043 365.455 0.00067 0.00067 +3 1 0 1 0 0 0.00016 0.00016 0.00016 365.655 -0.00025 -0.00025 +3 1 0 1 1 0 0.00007 0.00007 0.00007 365.665 -0.00011 -0.00011 +3 2 0 0 -1 0 -0.00004 -0.00004 -0.00004 375.545 0.00006 +3 2 0 0 0 0 0.00100 0.00100 0.00100 375.555 -0.00155 -0.00155 +3 2 0 0 1 0 0.00044 0.00044 0.00043 375.565 -0.00068 -0.00068 +3 2 0 0 2 0 0.00005 0.00005 0.00005 375.575 -0.00007 diff --git a/pyTMD/data/doodson.json b/pyTMD/data/doodson.json new file mode 100644 index 00000000..aca114f6 --- /dev/null +++ b/pyTMD/data/doodson.json @@ -0,0 +1,485 @@ +{ + "z0": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "node": [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 2.0], + "omega0": [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 2.0], + "sa": [0.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0], + "ssa": [0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "sta": [0.0, 0.0, 3.0, 0.0, 0.0, -1.0, 0.0], + "st": [0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0], + "msm": [0.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "mm": [0.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0], + "msfa": [0.0, 2.0, -3.0, 0.0, 0.0, 0.0, 0.0], + "msf": [0.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "msfb": [0.0, 2.0, -1.0, 0.0, 0.0, 0.0, 0.0], + "mfa": [0.0, 2.0, -1.0, 0.0, 0.0, 0.0, 0.0], + "mf-": [0.0, 2.0, 0.0, 0.0, -1.0, 0.0, 0.0], + "mf": [0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "mf+": [0.0, 2.0, 0.0, 0.0, 1.0, 0.0, 0.0], + "mfn": [0.0, 2.0, 0.0, 0.0, 1.0, 0.0, 0.0], + "mfb": [0.0, 2.0, 1.0, 0.0, 0.0, 0.0, 0.0], + "sn0": [0.0, 3.0, -2.0, -1.0, 0.0, 0.0, 0.0], + "mst": [0.0, 3.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "mt": [0.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0], + "mtm": [0.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0], + "msqm": [0.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "mq": [0.0, 4.0, 0.0, -2.0, 0.0, 0.0, 0.0], + "2smn0": [0.0, 5.0, -4.0, -1.0, 0.0, 0.0, 0.0], + "msp": [0.0, 5.0, -2.0, -1.0, 0.0, 0.0, 0.0], + "mp": [0.0, 5.0, 0.0, -3.0, 0.0, 0.0, 0.0], + "2qj1": [1.0, -6.0, 0.0, 3.0, 0.0, 0.0, 1.0], + "2qk1": [1.0, -5.0, 0.0, 2.0, 0.0, 0.0, 1.0], + "2qs1": [1.0, -5.0, 1.0, 2.0, 0.0, 0.0, 0.0], + "2qp1": [1.0, -5.0, 2.0, 2.0, 0.0, 0.0, -1.0], + "2oj1": [1.0, -4.0, 0.0, 1.0, 0.0, 0.0, 1.0], + "alpha1": [1.0, -4.0, 2.0, 1.0, 0.0, 0.0, -1.0], + "2ok1": [1.0, -3.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "2q1'": [1.0, -3.0, 0.0, 1.0, 0.0, 0.0, 2.0], + "2q1": [1.0, -3.0, 0.0, 2.0, 0.0, 0.0, -1.0], + "sigma1": [1.0, -3.0, 2.0, 0.0, 0.0, 0.0, -1.0], + "q1'": [1.0, -2.0, 0.0, 0.0, 0.0, 0.0, 2.0], + "q1": [1.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0], + "rho1": [1.0, -2.0, 2.0, -1.0, 0.0, 0.0, -1.0], + "np1": [1.0, -2.0, 2.0, 1.0, 0.0, 0.0, 1.0], + "opk1": [1.0, -1.0, -2.0, 0.0, 0.0, 0.0, 1.0], + "oa1": [1.0, -1.0, -1.0, 0.0, 0.0, 0.0, -1.0], + "o1n": [1.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0], + "o1-": [1.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0], + "o1": [1.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0], + "o1+": [1.0, -1.0, 0.0, 0.0, 1.0, 0.0, -1.0], + "o1'": [1.0, -1.0, 0.0, 1.0, 0.0, 0.0, 2.0], + "ob1": [1.0, -1.0, 1.0, 0.0, 0.0, 0.0, -1.0], + "ms1": [1.0, -1.0, 1.0, 0.0, 0.0, 0.0, 2.0], + "mp1": [1.0, -1.0, 2.0, 0.0, 0.0, 0.0, 1.0], + "tau1": [1.0, -1.0, 2.0, 0.0, 0.0, 0.0, 1.0], + "beta1": [1.0, 0.0, -2.0, 1.0, 0.0, 0.0, 1.0], + "pqo1": [1.0, 0.0, -2.0, 1.0, 0.0, 0.0, -1.0], + "2oq1": [1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0], + "m1'": [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0], + "m1": [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "m1a": [1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0], + "m1b": [1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0], + "no1": [1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0], + "chi1": [1.0, 0.0, 2.0, -1.0, 0.0, 0.0, 1.0], + "2pk1": [1.0, 1.0, -4.0, 0.0, 0.0, 0.0, 1.0], + "pi1": [1.0, 1.0, -3.0, 0.0, 0.0, 1.0, -1.0], + "tk1": [1.0, 1.0, -3.0, 0.0, 0.0, 1.0, -1.0], + "s1-1": [1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 2.0], + "p1": [1.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0], + "s1-": [1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 1.0], + "s1": [1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 2.0], + "s1+": [1.0, 1.0, -1.0, 0.0, 0.0, 1.0, 1.0], + "ojm1": [1.0, 1.0, 0.0, -2.0, 0.0, 0.0, -1.0], + "k1'": [1.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0], + "k1-": [1.0, 1.0, 0.0, 0.0, -1.0, 0.0, -1.0], + "k1": [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "s1+1": [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 2.0], + "k1+": [1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0], + "k1n": [1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0], + "k1++": [1.0, 1.0, 0.0, 0.0, 2.0, 0.0, -1.0], + "psi1": [1.0, 1.0, 1.0, 0.0, 0.0, -1.0, 1.0], + "rp1": [1.0, 1.0, 1.0, 0.0, 0.0, -1.0, -1.0], + "phi1": [1.0, 1.0, 2.0, 0.0, 0.0, 0.0, 1.0], + "kp1": [1.0, 1.0, 2.0, 0.0, 0.0, 0.0, 1.0], + "opq1": [1.0, 2.0, -2.0, -1.0, 0.0, 0.0, -1.0], + "the1": [1.0, 2.0, -2.0, 1.0, 0.0, 0.0, 1.0], + "theta1": [1.0, 2.0, -2.0, 1.0, 0.0, 0.0, 1.0], + "mq1": [1.0, 2.0, 0.0, -1.0, 0.0, 0.0, 1.0], + "j1": [1.0, 2.0, 0.0, -1.0, 0.0, 0.0, 1.0], + "j1'": [1.0, 2.0, 0.0, 0.0, 0.0, 0.0, 2.0], + "2po1": [1.0, 3.0, -4.0, 0.0, 0.0, 0.0, -1.0], + "so1": [1.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0], + "oo1": [1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "kpq1": [1.0, 4.0, -2.0, -1.0, 0.0, 0.0, 1.0], + "ups1": [1.0, 4.0, 0.0, -1.0, 0.0, 0.0, 1.0], + "kq1": [1.0, 4.0, 0.0, -1.0, 0.0, 0.0, 1.0], + "2jo1": [1.0, 5.0, 0.0, -2.0, 0.0, 0.0, -1.0], + "kjq1": [1.0, 5.0, 0.0, -2.0, 0.0, 0.0, -1.0], + "2ook1": [1.0, 5.0, 0.0, 0.0, 0.0, 0.0, -1.0], + "2oop1": [1.0, 5.0, 2.0, 0.0, 0.0, 0.0, -1.0], + "2jq1": [1.0, 6.0, 0.0, -3.0, 0.0, 0.0, -1.0], + "2mn2s2": [2.0, -5.0, 4.0, 1.0, 0.0, 0.0, 0.0], + "2nk2": [2.0, -4.0, 0.0, 2.0, 0.0, 0.0, 0.0], + "3m(sk)2": [2.0, -4.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "3mks2": [2.0, -4.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "2ns2": [2.0, -4.0, 2.0, 2.0, 0.0, 0.0, 0.0], + "3m2s2": [2.0, -4.0, 4.0, 0.0, 0.0, 0.0, 0.0], + "oq2": [2.0, -3.0, 0.0, 1.0, 0.0, 0.0, 2.0], + "mnk2": [2.0, -3.0, 0.0, 1.0, 0.0, 0.0, 0.0], + "3n2": [2.0, -3.0, 0.0, 3.0, 0.0, 0.0, 0.0], + "eps2": [2.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0], + "mns2": [2.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0], + "mnus2": [2.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0], + "2ml2s2": [2.0, -3.0, 4.0, -1.0, 0.0, 0.0, 2.0], + "mnk2s2": [2.0, -3.0, 4.0, 1.0, 0.0, 0.0, 0.0], + "2ms2k2": [2.0, -2.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "2mk2": [2.0, -2.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "o2": [2.0, -2.0, 0.0, 0.0, 0.0, 0.0, 2.0], + "2n2'": [2.0, -2.0, 0.0, 1.0, 0.0, 0.0, 1.0], + "2n2": [2.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0], + "2nm2": [2.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0], + "2ms2": [2.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "mu2": [2.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "2mk2s2": [2.0, -2.0, 4.0, 0.0, 0.0, 0.0, 0.0], + "omg2": [2.0, -2.0, 3.0, 0.0, 0.0, -1.0, 0.0], + "nsk2": [2.0, -1.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "snk2": [2.0, -1.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "na2": [2.0, -1.0, -1.0, 1.0, 0.0, 0.0, 0.0], + "n2'": [2.0, -1.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "n2": [2.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0], + "2ml2": [2.0, -1.0, 0.0, 1.0, 0.0, 0.0, 2.0], + "nb2": [2.0, -1.0, 1.0, 1.0, 0.0, 0.0, 0.0], + "nu2": [2.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0], + "mmun2": [2.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0], + "3m(sn)2": [2.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0], + "nks2": [2.0, -1.0, 2.0, 1.0, 0.0, 0.0, 0.0], + "nkp2": [2.0, -1.0, 2.0, 1.0, 0.0, 0.0, 2.0], + "mkl2s2": [2.0, -1.0, 4.0, -1.0, 0.0, 0.0, 2.0], + "2kn2s2": [2.0, -1.0, 4.0, 1.0, 0.0, 0.0, 0.0], + "msk2": [2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "op2": [2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 2.0], + "m2-2": [2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "gamma2": [2.0, 0.0, -2.0, 2.0, 0.0, 0.0, 2.0], + "gam2": [2.0, 0.0, -2.0, 2.0, 0.0, 0.0, 2.0], + "alp2": [2.0, 0.0, -1.0, 0.0, 0.0, 1.0, 2.0], + "alpha2": [2.0, 0.0, -1.0, 0.0, 0.0, 1.0, 2.0], + "m2a": [2.0, 0.0, -1.0, 0.0, 0.0, 1.0, 0.0], + "m2-1": [2.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0], + "ma2": [2.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0], + "m2-": [2.0, 0.0, 0.0, 0.0, -1.0, 0.0, 2.0], + "m2": [2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "ko2": [2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "m2+": [2.0, 0.0, 0.0, 0.0, 1.0, 0.0, 2.0], + "m2'": [2.0, 0.0, 0.0, 1.0, 0.0, 0.0, -1.0], + "mb2": [2.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0], + "m2+1": [2.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0], + "m2b": [2.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0], + "beta2": [2.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0], + "delta2": [2.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "m2+2": [2.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "mks2": [2.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "m2(ks)2": [2.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0], + "2snmk2": [2.0, 1.0, -4.0, 1.0, 0.0, 0.0, 0.0], + "2sn(mk)2": [2.0, 1.0, -4.0, 1.0, 0.0, 0.0, 0.0], + "snm2": [2.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "lambda2": [2.0, 1.0, -2.0, 1.0, 0.0, 0.0, 2.0], + "2mn2": [2.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0], + "l2": [2.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0], + "l2a": [2.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0], + "l2'": [2.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.0], + "nkm2": [2.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0], + "l2b": [2.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0], + "lb2": [2.0, 1.0, 1.0, -1.0, 0.0, 0.0, 2.0], + "2sk2": [2.0, 2.0, -4.0, 0.0, 0.0, 0.0, 0.0], + "2t2": [2.0, 2.0, -4.0, 0.0, 0.0, 2.0, 0.0], + "s2-2": [2.0, 2.0, -4.0, 0.0, 0.0, 0.0, 0.0], + "s2-1": [2.0, 2.0, -3.0, 0.0, 0.0, 0.0, 0.0], + "t2": [2.0, 2.0, -3.0, 0.0, 0.0, 1.0, 0.0], + "kp2": [2.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "s2r": [2.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "s2": [2.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "r2": [2.0, 2.0, -1.0, 0.0, 0.0, -1.0, 2.0], + "s2+1": [2.0, 2.0, -1.0, 0.0, 0.0, 0.0, 0.0], + "s2+2": [2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "k2": [2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "kb2": [2.0, 2.0, 1.0, 0.0, 0.0, 0.0, 0.0], + "2ks2": [2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "2pmn2": [2.0, 3.0, -4.0, -1.0, 0.0, 0.0, 2.0], + "msnu2": [2.0, 3.0, -4.0, 1.0, 0.0, 0.0, 0.0], + "msn2": [2.0, 3.0, -2.0, -1.0, 0.0, 0.0, 0.0], + "zeta2": [2.0, 3.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "eta2": [2.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0], + "mkn2": [2.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0], + "kj2": [2.0, 3.0, 0.0, -1.0, 0.0, 0.0, 2.0], + "2kmsn2": [2.0, 3.0, 2.0, -1.0, 0.0, 0.0, 0.0], + "2km(sn)2": [2.0, 3.0, 2.0, -1.0, 0.0, 0.0, 0.0], + "2sm2": [2.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0], + "2ms2n2": [2.0, 4.0, -2.0, -2.0, 0.0, 0.0, 0.0], + "skm2": [2.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "2j2": [2.0, 4.0, 0.0, -2.0, 0.0, 0.0, 2.0], + "2k2": [2.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "2snu2": [2.0, 5.0, -6.0, 1.0, 0.0, 0.0, 0.0], + "3(sm)n2": [2.0, 5.0, -6.0, 1.0, 0.0, 0.0, 0.0], + "2sn2": [2.0, 5.0, -4.0, -1.0, 0.0, 0.0, 0.0], + "skn2": [2.0, 5.0, -2.0, -1.0, 0.0, 0.0, 0.0], + "2kn2": [2.0, 5.0, 0.0, -1.0, 0.0, 0.0, 0.0], + "3s2m2": [2.0, 6.0, -6.0, 0.0, 0.0, 0.0, 0.0], + "2sk2m2": [2.0, 6.0, -4.0, 0.0, 0.0, 0.0, 0.0], + "2oq3": [3.0, -4.0, 0.0, 1.0, 0.0, 0.0, 1.0], + "o3": [3.0, -3.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "nq3": [3.0, -3.0, 0.0, 2.0, 0.0, 0.0, -1.0], + "muo3": [3.0, -3.0, 2.0, 0.0, 0.0, 0.0, -1.0], + "mq3": [3.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0], + "no3": [3.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0], + "mnp3": [3.0, -2.0, 2.0, 1.0, 0.0, 0.0, 1.0], + "2op3": [3.0, -1.0, -2.0, 0.0, 0.0, 0.0, 1.0], + "2os3": [3.0, -1.0, -1.0, 0.0, 0.0, 0.0, 0.0], + "qms3": [3.0, -1.0, -1.0, 2.0, 0.0, 0.0, 2.0], + "mo3-": [3.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0], + "mo3": [3.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0], + "mo3+": [3.0, -1.0, 0.0, 0.0, 1.0, 0.0, -1.0], + "2mk3": [3.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0], + "e3n": [3.0, -1.0, 0.0, 1.0, -1.0, 0.0, 0.0], + "e3": [3.0, -1.0, 0.0, 1.0, 0.0, 0.0, 2.0], + "2no3": [3.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0], + "2nkm3": [3.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0], + "2ms3": [3.0, -1.0, 1.0, 0.0, 0.0, 0.0, 2.0], + "2mp3": [3.0, -1.0, 2.0, 0.0, 0.0, 0.0, 1.0], + "ns3": [3.0, 0.0, -1.0, 1.0, 0.0, 0.0, 2.0], + "2oj3": [3.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0], + "2mm3": [3.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0], + "m3": [3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "m3'": [3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0], + "nk3": [3.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0], + "mp3": [3.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0], + "so3": [3.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0], + "lambda3": [3.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "ms3": [3.0, 1.0, -1.0, 0.0, 0.0, 0.0, 2.0], + "pjrho3": [3.0, 1.0, 0.0, -2.0, 0.0, 0.0, -1.0], + "l3": [3.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0], + "mk3-": [3.0, 1.0, 0.0, 0.0, -1.0, 0.0, 1.0], + "mk3": [3.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "mk3+": [3.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0], + "l3b": [3.0, 1.0, 0.0, 1.0, 0.0, 0.0, 2.0], + "mks3": [3.0, 1.0, 1.0, 0.0, 0.0, 0.0, 2.0], + "mkp3": [3.0, 1.0, 2.0, 0.0, 0.0, 0.0, 1.0], + "nso3": [3.0, 2.0, -2.0, 1.0, 0.0, 0.0, 1.0], + "2mq3": [3.0, 2.0, 0.0, -1.0, 0.0, 0.0, 1.0], + "f3": [3.0, 2.0, 0.0, 0.0, 0.0, 0.0, 2.0], + "j3": [3.0, 2.0, 0.0, 0.0, 0.0, 0.0, 2.0], + "2t3": [3.0, 3.0, -5.0, 0.0, 0.0, 0.0, 2.0], + "t3": [3.0, 3.0, -4.0, 0.0, 0.0, 0.0, 2.0], + "sp3": [3.0, 3.0, -4.0, 0.0, 0.0, 0.0, -1.0], + "s3": [3.0, 3.0, -3.0, 0.0, 0.0, 0.0, 0.0], + "s3'": [3.0, 3.0, -3.0, 0.0, 0.0, 0.0, 2.0], + "r3": [3.0, 3.0, -2.0, 0.0, 0.0, 0.0, 2.0], + "sk3": [3.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0], + "2r3": [3.0, 3.0, -1.0, 0.0, 0.0, 0.0, 2.0], + "k3": [3.0, 3.0, 0.0, 0.0, 0.0, 0.0, -1.0], + "2so3": [3.0, 5.0, -4.0, 0.0, 0.0, 0.0, 1.0], + "2jp3": [3.0, 5.0, -2.0, -2.0, 0.0, 0.0, 1.0], + "kso3": [3.0, 5.0, -2.0, 0.0, 0.0, 0.0, 1.0], + "2jk3": [3.0, 5.0, -1.0, -2.0, 0.0, 0.0, 0.0], + "2ko3": [3.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "2sq3": [3.0, 6.0, -4.0, -1.0, 0.0, 0.0, 1.0], + "o4": [4.0, -4.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "2qm4": [4.0, -4.0, 0.0, 2.0, 0.0, 0.0, 2.0], + "4ms4": [4.0, -4.0, 4.0, 0.0, 0.0, 0.0, 0.0], + "4m2s4": [4.0, -4.0, 4.0, 0.0, 0.0, 0.0, 0.0], + "2mnk4": [4.0, -3.0, 0.0, 1.0, 0.0, 0.0, 0.0], + "moq4": [4.0, -3.0, 0.0, 1.0, 0.0, 0.0, 2.0], + "2mns4": [4.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0], + "2mnus4": [4.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0], + "3mk4": [4.0, -2.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "2om4": [4.0, -2.0, 0.0, 0.0, 0.0, 0.0, 2.0], + "n4": [4.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0], + "3ms4": [4.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "msnk4": [4.0, -1.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "mpq4": [4.0, -1.0, -2.0, 1.0, 0.0, 0.0, 2.0], + "mn4": [4.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0], + "mnu4": [4.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0], + "2mls4": [4.0, -1.0, 2.0, -1.0, 0.0, 0.0, 2.0], + "mnks4": [4.0, -1.0, 2.0, 1.0, 0.0, 0.0, 0.0], + "2msk4": [4.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "mop4": [4.0, 0.0, -2.0, 0.0, 0.0, 0.0, 2.0], + "ma4": [4.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0], + "m4": [4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "mb4": [4.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0], + "2mks4": [4.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "sn4": [4.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "3mn4": [4.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0], + "ml4": [4.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0], + "nk4": [4.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0], + "2smk4": [4.0, 2.0, -4.0, 0.0, 0.0, 0.0, 0.0], + "2pm4": [4.0, 2.0, -4.0, 0.0, 0.0, 0.0, 2.0], + "mt4": [4.0, 2.0, -3.0, 0.0, 0.0, 1.0, 0.0], + "ms4": [4.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "mr4": [4.0, 2.0, -1.0, 0.0, 0.0, -1.0, 2.0], + "mk4": [4.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "2snm4": [4.0, 3.0, -4.0, 1.0, 0.0, 0.0, 0.0], + "2msn4": [4.0, 3.0, -2.0, -1.0, 0.0, 0.0, 0.0], + "sl4": [4.0, 3.0, -2.0, -1.0, 0.0, 0.0, 2.0], + "2mkn4": [4.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0], + "mkj4": [4.0, 3.0, 0.0, -1.0, 0.0, 0.0, 2.0], + "2t4": [4.0, 4.0, -6.0, 0.0, 0.0, 0.0, 0.0], + "t4": [4.0, 4.0, -5.0, 0.0, 0.0, 0.0, 0.0], + "st4": [4.0, 4.0, -5.0, 0.0, 0.0, 1.0, 0.0], + "s4": [4.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0], + "r4": [4.0, 4.0, -3.0, 0.0, 0.0, 0.0, 0.0], + "2r4": [4.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "sk4": [4.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "3ks4": [4.0, 4.0, -1.0, 0.0, 0.0, 0.0, -1.0], + "k4": [4.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "3sm4": [4.0, 6.0, -6.0, 0.0, 0.0, 0.0, 0.0], + "2(kj)4": [4.0, 6.0, 0.0, -2.0, 0.0, 0.0, 2.0], + "2no5": [5.0, -3.0, 0.0, 2.0, 0.0, 0.0, -1.0], + "mno5": [5.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0], + "2mq5": [5.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0], + "2nkms5": [5.0, -2.0, 2.0, 2.0, 0.0, 0.0, 1.0], + "2mo5": [5.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0], + "mnm5": [5.0, -1.0, 0.0, 1.0, 0.0, 0.0, 2.0], + "2nk5": [5.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0], + "3ms5": [5.0, -1.0, 1.0, 0.0, 0.0, 0.0, 2.0], + "3mp5": [5.0, -1.0, 2.0, 0.0, 0.0, 0.0, 1.0], + "nso5": [5.0, 0.0, -2.0, 1.0, 0.0, 0.0, -1.0], + "m5": [5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0], + "mnk5": [5.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0], + "mb5": [5.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0], + "mso5": [5.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0], + "2mp5": [5.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0], + "2ms5": [5.0, 1.0, -1.0, 0.0, 0.0, 0.0, 2.0], + "2mk5": [5.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "nks5": [5.0, 2.0, -1.0, 1.0, 0.0, 0.0, 2.0], + "nsk5": [5.0, 2.0, -2.0, -1.0, 0.0, 0.0, 1.0], + "msm5": [5.0, 2.0, -2.0, 0.0, 0.0, 0.0, 2.0], + "snk5": [5.0, 2.0, -2.0, 1.0, 0.0, 0.0, -1.0], + "3mq5": [5.0, 2.0, 0.0, -1.0, 0.0, 0.0, 1.0], + "msp5": [5.0, 3.0, -4.0, 0.0, 0.0, 0.0, -1.0], + "msk5": [5.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0], + "3km5": [5.0, 3.0, 0.0, 0.0, 0.0, 0.0, -1.0], + "2sp5": [5.0, 5.0, -6.0, 0.0, 0.0, 0.0, -1.0], + "t5": [5.0, 5.0, -6.0, 0.0, 0.0, 0.0, 0.0], + "s5": [5.0, 5.0, -5.0, 0.0, 0.0, 0.0, 0.0], + "r5": [5.0, 5.0, -4.0, 0.0, 0.0, 0.0, 0.0], + "2sk5": [5.0, 5.0, -4.0, 0.0, 0.0, 0.0, 1.0], + "k5": [5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "o6": [6.0, -6.0, 0.0, 0.0, 0.0, 0.0, 2.0], + "2(mn)k6": [6.0, -4.0, 0.0, 2.0, 0.0, 0.0, 0.0], + "5mks6": [6.0, -4.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "2(mn)s6": [6.0, -4.0, 2.0, 2.0, 0.0, 0.0, 0.0], + "5m2s6": [6.0, -4.0, 4.0, 0.0, 0.0, 0.0, 0.0], + "3mnk6": [6.0, -3.0, 0.0, 1.0, 0.0, 0.0, 0.0], + "n6": [6.0, -3.0, 0.0, 3.0, 0.0, 0.0, 0.0], + "3mns6": [6.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0], + "2nmls6": [6.0, -3.0, 2.0, 1.0, 0.0, 0.0, 2.0], + "3nks6": [6.0, -3.0, 2.0, 3.0, 0.0, 0.0, 0.0], + "3mnus6": [6.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0], + "4mk6": [6.0, -2.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "2nm6": [6.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0], + "m2n6": [6.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0], + "4ms6": [6.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "2mlns6": [6.0, -2.0, 2.0, 0.0, 0.0, 0.0, 2.0], + "2mnls6": [6.0, -2.0, 2.0, 0.0, 0.0, 0.0, 2.0], + "2nmks6": [6.0, -2.0, 2.0, 2.0, 0.0, 0.0, 0.0], + "2msnk6": [6.0, -1.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "2mn6": [6.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0], + "2mnu6": [6.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0], + "3mls6": [6.0, -1.0, 2.0, -1.0, 0.0, 0.0, 2.0], + "2mno6": [6.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0], + "2mnks6": [6.0, -1.0, 2.0, 1.0, 0.0, 0.0, 0.0], + "3msk6": [6.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "ma6": [6.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0], + "m6": [6.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "2nk6": [6.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0], + "mb6": [6.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0], + "3mks6": [6.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "msn6": [6.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "4mn6": [6.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0], + "2ml6": [6.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0], + "mnk6": [6.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0], + "mkn6": [6.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0], + "mknu6": [6.0, 1.0, 2.0, -1.0, 0.0, 0.0, 0.0], + "2(ms)k6": [6.0, 2.0, -4.0, 0.0, 0.0, 0.0, 0.0], + "2mt6": [6.0, 2.0, -3.0, 0.0, 0.0, 1.0, 0.0], + "2ms6": [6.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "2mr6": [6.0, 2.0, -1.0, 0.0, 0.0, -1.0, 2.0], + "2mk6": [6.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "2sn6": [6.0, 3.0, -4.0, 1.0, 0.0, 0.0, 0.0], + "3msn6": [6.0, 3.0, -2.0, -1.0, 0.0, 0.0, 0.0], + "msl6": [6.0, 3.0, -2.0, -1.0, 0.0, 0.0, 2.0], + "snk6": [6.0, 3.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "mkl6": [6.0, 3.0, 0.0, -1.0, 0.0, 0.0, 2.0], + "3mkn6": [6.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0], + "2sm6": [6.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0], + "msk6": [6.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "2km6": [6.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "2(ms)n6": [6.0, 5.0, -4.0, -1.0, 0.0, 0.0, 0.0], + "2mskn6": [6.0, 5.0, -2.0, -1.0, 0.0, 0.0, 0.0], + "2t6": [6.0, 6.0, -8.0, 0.0, 0.0, 0.0, 0.0], + "t6": [6.0, 6.0, -7.0, 0.0, 0.0, 0.0, 0.0], + "s6": [6.0, 6.0, -6.0, 0.0, 0.0, 0.0, 0.0], + "r6": [6.0, 6.0, -5.0, 0.0, 0.0, 0.0, 0.0], + "2r6": [6.0, 6.0, -4.0, 0.0, 0.0, 0.0, 0.0], + "2sk6": [6.0, 6.0, -4.0, 0.0, 0.0, 0.0, 0.0], + "k6": [6.0, 6.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "4sm6": [6.0, 8.0, -8.0, 0.0, 0.0, 0.0, 0.0], + "2mno7": [7.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0], + "4mk7": [7.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0], + "3mo7": [7.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0], + "2nmk7": [7.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0], + "m7": [7.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0], + "3mp7": [7.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0], + "2mso7": [7.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0], + "3mk7": [7.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "2msk7": [7.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0], + "msko7": [7.0, 3.0, -2.0, 0.0, 0.0, 0.0, -1.0], + "2t7": [7.0, 7.0, -9.0, 0.0, 0.0, 0.0, 0.0], + "3sp7": [7.0, 7.0, -8.0, 0.0, 0.0, 0.0, -1.0], + "t7": [7.0, 7.0, -8.0, 0.0, 0.0, 0.0, 0.0], + "s7": [7.0, 7.0, -7.0, 0.0, 0.0, 0.0, 0.0], + "r7": [7.0, 7.0, -6.0, 0.0, 0.0, 0.0, 0.0], + "3sk7": [7.0, 7.0, -6.0, 0.0, 0.0, 0.0, 1.0], + "2r7": [7.0, 7.0, -5.0, 0.0, 0.0, 0.0, 0.0], + "3r7": [7.0, 7.0, -4.0, 0.0, 0.0, 0.0, 0.0], + "4r7": [7.0, 7.0, -3.0, 0.0, 0.0, 0.0, 0.0], + "k7": [7.0, 7.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "3m2ns8": [8.0, -4.0, 2.0, 2.0, 0.0, 0.0, 0.0], + "4mns8": [8.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0], + "5mk8": [8.0, -2.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "2mn8": [8.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0], + "2(mn)8": [8.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0], + "5ms8": [8.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0], + "3mn8": [8.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0], + "3mnu8": [8.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0], + "4mls8": [8.0, -1.0, 2.0, -1.0, 0.0, 0.0, 2.0], + "ma8": [8.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0], + "m8": [8.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "mb8": [8.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0], + "2msn8": [8.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "3ml8": [8.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0], + "2mnk8": [8.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0], + "3mt8": [8.0, 2.0, -3.0, 0.0, 0.0, 1.0, 0.0], + "3ms8": [8.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "3mk8": [8.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "2smn8": [8.0, 3.0, -4.0, 1.0, 0.0, 0.0, 0.0], + "2msl8": [8.0, 3.0, -2.0, -1.0, 0.0, 0.0, 2.0], + "msnk8": [8.0, 3.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "4msn8": [8.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0], + "2(ms)8": [8.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0], + "2msk8": [8.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "2(mk)8": [8.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "s8": [8.0, 8.0, -8.0, 0.0, 0.0, 0.0, 0.0], + "k8": [8.0, 8.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "4mo9": [9.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0], + "2(mn)k9": [9.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0], + "2m2nk9": [9.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0], + "3mnk9": [9.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0], + "4mp9": [9.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0], + "4ms9": [9.0, 1.0, -1.0, 0.0, 0.0, 0.0, 2.0], + "4mk9": [9.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "3msk9": [9.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0], + "s9": [9.0, 9.0, -9.0, 0.0, 0.0, 0.0, 0.0], + "k9": [9.0, 9.0, 0.0, 0.0, 0.0, 0.0, 1.0], + "4mn10": [10.0, -1, 0.0, 1.0, 0.0, 0.0, 0.0], + "m10": [10.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "3msn10": [10.0, 1.0, -2, 1.0, 0.0, 0.0, 0.0], + "4ms10": [10.0, 2.0, -2, 0.0, 0.0, 0.0, 0.0], + "4mk10": [10.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "3msl10": [10.0, 3.0, -2, -1.0, 0.0, 0.0, 2.0], + "3m2s10": [10.0, 4.0, -4, 0.0, 0.0, 0.0, 0.0], + "3msk10": [10.0, 4.0, -2, 0.0, 0.0, 0.0, 0.0], + "s10": [10.0, 10.0, -10.0, 0.0, 0.0, 0.0, 0.0], + "4msk11": [11.0, 3.0, -2, 0.0, 0.0, 0.0, 1.0], + "s11": [11.0, 11.0, -11.0, 0.0, 0.0, 0.0, 0.0], + "5mn12": [12.0, -1, 0.0, 1.0, 0.0, 0.0, 0.0], + "m12": [12.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "4msn12": [12.0, 1.0, -2, 1.0, 0.0, 0.0, 0.0], + "4mns12": [12.0, 1.0, -2, 1.0, 0.0, 0.0, 0.0], + "5ms12": [12.0, 2.0, -2, 0.0, 0.0, 0.0, 0.0], + "4msl12": [12.0, 3.0, -2, -1.0, 0.0, 0.0, 2.0], + "4m2s12": [12.0, 4.0, -4, 0.0, 0.0, 0.0, 0.0], + "s12": [12.0, 12.0, -12.0, 0.0, 0.0, 0.0, 0.0], + "m14": [14.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], + "5msn14": [14.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0], + "6ms14": [14.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0], + "5m2s14": [14.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0] +} \ No newline at end of file diff --git a/pyTMD/predict.py b/pyTMD/predict.py index fef60c56..14212edd 100644 --- a/pyTMD/predict.py +++ b/pyTMD/predict.py @@ -23,6 +23,7 @@ Updated 10/2024: use PREM as the default Earth model for Love numbers more descriptive error message if cannot infer minor constituents updated calculation of long-period equilibrium tides + added option to use Munk-Cartwright admittance interpolation for minor Updated 09/2024: verify order of minor constituents to infer fix to use case insensitive assertions of string argument values split infer minor function into short and long period calculations @@ -532,6 +533,11 @@ def _infer_semi_diurnal( time correction for converting to Ephemeris Time (days) minor: list or None, default None tidal constituent IDs of minor constituents for inference + method: str, default 'linear' + method for interpolating between major constituents + + * 'linear': linear interpolation + * 'admittance': Munk-Cartwright admittance interpolation raise_exception: bool, default False Raise a ``ValueError`` if major constituents are not found @@ -558,9 +564,12 @@ def _infer_semi_diurnal( """ # set default keyword arguments kwargs.setdefault('deltat', 0.0) + kwargs.setdefault('method', 'linear') kwargs.setdefault('raise_exception', False) # list of minor constituents kwargs.setdefault('minor', None) + # validate interpolation method + assert kwargs['method'].lower() in ('linear', 'admittance') # number of constituents npts, nc = np.shape(zmajor) nt = len(np.atleast_1d(t)) @@ -569,6 +578,7 @@ def _infer_semi_diurnal( # allocate for output elevation correction dh = np.ma.zeros((n)) # major constituents used for inferring semi-diurnal minor tides + # pivot waves listed in Table 6.7 of the 2010 IERS Conventions cindex = ['n2', 'm2', 's2'] # angular frequencies for major constituents omajor = pyTMD.arguments.frequency(cindex, **kwargs) @@ -584,6 +594,7 @@ def _infer_semi_diurnal( j = [j for j,val in enumerate(constituents) if (val.lower() == c)] if j: j1, = j + # "normalize" tide values z[:,i] = zmajor[:,j1]/amajor[i] nz += 1 @@ -639,13 +650,27 @@ def _infer_semi_diurnal( # sum over the minor tidal constituents of interest for k in minor_indices: - # linearly interpolate between major constituents - if (omajor[0] < omajor[1]) and (omega[k] < omajor[1]): - slope = (z[:,1] - z[:,0])/(omajor[1] - omajor[0]) - zmin = amin[k]*(z[:,0] + slope*(omega[k] - omajor[0])) - else: - slope = (z[:,2] - z[:,1])/(omajor[2] - omajor[1]) - zmin = amin[k]*(z[:,1] + slope*(omega[k] - omajor[1])) + # interpolate from major constituents + if (kwargs['method'].lower() == 'linear'): + # linearly interpolate between major constituents + if (omajor[0] < omajor[1]) and (omega[k] < omajor[1]): + slope = (z[:,1] - z[:,0])/(omajor[1] - omajor[0]) + zmin = amin[k]*(z[:,0] + slope*(omega[k] - omajor[0])) + else: + slope = (z[:,2] - z[:,1])/(omajor[2] - omajor[1]) + zmin = amin[k]*(z[:,1] + slope*(omega[k] - omajor[1])) + elif (kwargs['method'].lower() == 'admittance'): + # admittance interpolation using Munk-Cartwright approach + Ainv = np.array([[3.3133, -4.2538, 1.9405], + [-3.3133, 4.2538, -0.9405], + [1.5018, -3.2579, 1.7561]]) + coef = np.inner(Ainv, z) + # convert frequency to cycles per day + f = 2.0*omega[k]*86400.0 + # calculate interpolated values for constituent + interp = coef[0,:] + coef[1,:]*np.cos(f) + coef[2,:]*np.sin(f) + # rescale tide values + zmin = amin[k]*interp # sum over all tides th = G[:,k]*np.pi/180.0 + pu[:,k] dh += zmin.real*pf[:,k]*np.cos(th) - \ @@ -676,6 +701,11 @@ def _infer_diurnal( time correction for converting to Ephemeris Time (days) minor: list or None, default None tidal constituent IDs of minor constituents for inference + method: str, default 'linear' + method for interpolating between major constituents + + * 'linear': linear interpolation + * 'admittance': Munk-Cartwright admittance interpolation raise_exception: bool, default False Raise a ``ValueError`` if major constituents are not found @@ -691,9 +721,10 @@ def _infer_diurnal( Royal Society of London. Series A, Mathematical and Physical Sciences*, 259(1105), 533--581, (1966). `doi: 10.1098/rsta.1966.0024 `_ - .. [2] R. D. Ray, "A global ocean tide model from - Topex/Poseidon altimetry: GOT99.2", - NASA Goddard Space Flight Center, TM-1999-209478, (1999). + .. [2] R. D. Ray, "On Tidal Inference in the Diurnal Band", + Journal of Atmospheric and Oceanic Technology, 34(2), 437--446, + (2017). `doi: 10.1175/jtech-d-16-0142.1 + `_ .. [3] J. M. Wahr and T. Sasao, "A diurnal resonance in the ocean tide and in the Earth's load response due to the resonant free `core nutation`", *Geophysical Journal of the Royal Astronomical @@ -708,9 +739,12 @@ def _infer_diurnal( """ # set default keyword arguments kwargs.setdefault('deltat', 0.0) + kwargs.setdefault('method', 'linear') kwargs.setdefault('raise_exception', False) # list of minor constituents kwargs.setdefault('minor', None) + # validate interpolation method + assert kwargs['method'].lower() in ('linear', 'admittance') # number of constituents npts, nc = np.shape(zmajor) nt = len(np.atleast_1d(t)) @@ -719,6 +753,7 @@ def _infer_diurnal( # allocate for output elevation correction dh = np.ma.zeros((n)) # major constituents used for inferring diurnal minor tides + # pivot waves listed in Table 6.7 of the 2010 IERS Conventions cindex = ['q1', 'o1', 'k1'] # angular frequencies for major constituents omajor = pyTMD.arguments.frequency(cindex, **kwargs) @@ -737,7 +772,7 @@ def _infer_diurnal( # Love numbers of degree 2 for constituent h2, k2, l2 = _body_tide_love_numbers(omajor[i]) gamma_2 = (1.0 + k2 - h2) - # scaled tide + # "normalize" tide values z[:,i] = zmajor[:,j1]/(amajor[i]*gamma_2) nz += 1 @@ -799,13 +834,27 @@ def _infer_diurnal( # Love numbers of degree 2 for constituent h2, k2, l2 = _body_tide_love_numbers(omega[k]) gamma_2 = (1.0 + k2 - h2) - # linearly interpolate between major constituents - if (omajor[0] < omajor[1]) and (omega[k] < omajor[1]): - slope = (z[:,1] - z[:,0])/(omajor[1] - omajor[0]) - zmin = amin[k]*gamma_2*(z[:,0] + slope*(omega[k] - omajor[0])) - else: - slope = (z[:,2] - z[:,1])/(omajor[2] - omajor[1]) - zmin = amin[k]*gamma_2*(z[:,1] + slope*(omega[k] - omajor[1])) + # interpolate from major constituents + if (kwargs['method'].lower() == 'linear'): + # linearly interpolate between major constituents + if (omajor[0] < omajor[1]) and (omega[k] < omajor[1]): + slope = (z[:,1] - z[:,0])/(omajor[1] - omajor[0]) + zmin = amin[k]*gamma_2*(z[:,0] + slope*(omega[k] - omajor[0])) + else: + slope = (z[:,2] - z[:,1])/(omajor[2] - omajor[1]) + zmin = amin[k]*gamma_2*(z[:,1] + slope*(omega[k] - omajor[1])) + elif (kwargs['method'].lower() == 'admittance'): + # admittance interpolation using Munk-Cartwright approach + Ainv = np.array([[3.1214, -3.8494, 1.728], + [-3.1727, 3.9559, -0.7832], + [1.438, -3.0297, 1.5917]]) + coef = np.inner(Ainv, z) + # convert frequency to cycles per day + f = 2.0*omega[k]*86400.0 + # calculate interpolated values for constituent + interp = coef[0,:] + coef[1,:]*np.cos(f) + coef[2,:]*np.sin(f) + # rescale tide values + zmin = amin[k]*gamma_2*interp # sum over all tides th = G[:,k]*np.pi/180.0 + pu[:,k] dh += zmin.real*pf[:,k]*np.cos(th) - \ @@ -873,6 +922,7 @@ def _infer_long_period( # allocate for output elevation correction dh = np.ma.zeros((n)) # major constituents used for inferring long period minor tides + # pivot waves listed in Table 6.7 of the 2010 IERS Conventions cindex = ['node', 'mm', 'mf'] # angular frequencies for major constituents omajor = pyTMD.arguments.frequency(cindex, **kwargs) diff --git a/pyproject.toml b/pyproject.toml index e1d75c62..c0916fe3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -92,6 +92,7 @@ omit = [ "pyTMD/convert_ll_xy.py", "pyTMD/load_constituent.py", "pyTMD/load_nodal_corrections.py", + "test/_coefficients_to_json.py", "test/_def_to_json.py", "providers/*.py", ] diff --git a/scripts/compute_tidal_currents.py b/scripts/compute_tidal_currents.py index 31c34388..452f03af 100755 --- a/scripts/compute_tidal_currents.py +++ b/scripts/compute_tidal_currents.py @@ -57,6 +57,11 @@ -E X, --extrapolate X: Extrapolate with nearest-neighbors -c X, --cutoff X: Extrapolation cutoff in kilometers set to inf to extrapolate for all points + --nodal-corrections: Nodal corrections to apply + OTIS + FES + GOT + perth3 --infer-minor: Infer values for minor constituents --minor-constituents: Minor constituents to infer -f X, --fill-value X: Invalid value for spatial fields diff --git a/scripts/compute_tidal_elevations.py b/scripts/compute_tidal_elevations.py index 5e51c9d4..2c9ef0e9 100755 --- a/scripts/compute_tidal_elevations.py +++ b/scripts/compute_tidal_elevations.py @@ -58,6 +58,11 @@ -E X, --extrapolate X: Extrapolate with nearest-neighbors -c X, --cutoff X: Extrapolation cutoff in kilometers set to inf to extrapolate for all points + --nodal-corrections: Nodal corrections to apply + OTIS + FES + GOT + perth3 --infer-minor: Infer values for minor constituents --minor-constituents: Minor constituents to infer --append-node: Append equilibrium amplitudes for node tides diff --git a/test/_coefficients_to_json.py b/test/_coefficients_to_json.py new file mode 100644 index 00000000..9a6aa1d8 --- /dev/null +++ b/test/_coefficients_to_json.py @@ -0,0 +1,595 @@ +""" +coefficients_to_json.py (10/2024) +Converts the coefficients table to a json file +""" +import re +import copy +import json +import inspect +import pathlib +import argparse +import pyTMD.utilities +from collections import OrderedDict + +# current file path +filename = inspect.getframeinfo(inspect.currentframe()).filename +filepath = pathlib.Path(filename).absolute().parent + +def coefficients_table(): + coefficients = OrderedDict() + coefficients['z0'] = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['node'] = [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 2.0] + coefficients['omega0'] = [0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 2.0] + # With p' + coefficients['sa'] = [0.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0] + # # Without p' + # coefficients['sa'] = [0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['ssa'] = [0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0] + # With p' + coefficients['sta'] = [0.0, 0.0, 3.0, 0.0, 0.0, -1.0, 0.0] + # # Without p' + # coefficients['sta'] = [0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0] + coefficients['st'] = [0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0] + coefficients['msm'] = [0.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['mm'] = [0.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0] + # annual sideline + coefficients['msfa'] = [0.0, 2.0, -3.0, 0.0, 0.0, 0.0, 0.0] + coefficients['msf'] = [0.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] + # annual sideline + coefficients['msfb'] = [0.0, 2.0, -1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['mfa'] = [0.0, 2.0, -1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['mf-'] = [0.0, 2.0, 0.0, 0.0, -1.0, 0.0, 0.0] + coefficients['mf'] = [0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] + # nodal line + coefficients['mf+'] = [0.0, 2.0, 0.0, 0.0, 1.0, 0.0, 0.0] + # nodal line + coefficients['mfn'] = [0.0, 2.0, 0.0, 0.0, 1.0, 0.0, 0.0] + coefficients['mfb'] = [0.0, 2.0, 1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['sn0'] = [0.0, 3.0, -2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['mst'] = [0.0, 3.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['mt'] = [0.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] + coefficients['mtm'] = [0.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] + coefficients['msqm'] = [0.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['mq'] = [0.0, 4.0, 0.0, -2.0, 0.0, 0.0, 0.0] + coefficients['2smn0'] = [0.0, 5.0, -4.0, -1.0, 0.0, 0.0, 0.0] + coefficients['msp'] = [0.0, 5.0, -2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['mp'] = [0.0, 5.0, 0.0, -3.0, 0.0, 0.0, 0.0] + coefficients['2qj1'] = [1.0, -6.0, 0.0, 3.0, 0.0, 0.0, 1.0] + coefficients['2qk1'] = [1.0, -5.0, 0.0, 2.0, 0.0, 0.0, 1.0] + coefficients['2qs1'] = [1.0, -5.0, 1.0, 2.0, 0.0, 0.0, 0.0] + coefficients['2qp1'] = [1.0, -5.0, 2.0, 2.0, 0.0, 0.0, -1.0] + coefficients['2oj1'] = [1.0, -4.0, 0.0, 1.0, 0.0, 0.0, 1.0] + coefficients['alpha1'] = [1.0, -4.0, 2.0, 1.0, 0.0, 0.0, -1.0] + coefficients['2ok1'] = [1.0, -3.0, 0.0, 0.0, 0.0, 0.0, 1.0] + # 3rd degree terms + coefficients["2q1'"] = [1.0, -3.0, 0.0, 1.0, 0.0, 0.0, 2.0] + coefficients['2q1'] = [1.0, -3.0, 0.0, 2.0, 0.0, 0.0, -1.0] + coefficients['sigma1'] = [1.0, -3.0, 2.0, 0.0, 0.0, 0.0, -1.0] + # 3rd degree terms + coefficients["q1'"] = [1.0, -2.0, 0.0, 0.0, 0.0, 0.0, 2.0] + coefficients['q1'] = [1.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0] + coefficients['rho1'] = [1.0, -2.0, 2.0, -1.0, 0.0, 0.0, -1.0] + coefficients['np1'] = [1.0, -2.0, 2.0, 1.0, 0.0, 0.0, 1.0] + coefficients['opk1'] = [1.0, -1.0, -2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['oa1'] = [1.0, -1.0, -1.0, 0.0, 0.0, 0.0, -1.0] + # O1 nodal line + coefficients['o1n'] = [1.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0] + # O1 nodal line + coefficients['o1-'] = [1.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0] + coefficients['o1'] = [1.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] + # conjugate to nodal line + coefficients['o1+'] = [1.0, -1.0, 0.0, 0.0, 1.0, 0.0, -1.0] + # 3rd degree terms + coefficients["o1'"] = [1.0, -1.0, 0.0, 1.0, 0.0, 0.0, 2.0] + coefficients['ob1'] = [1.0, -1.0, 1.0, 0.0, 0.0, 0.0, -1.0] + coefficients['ms1'] = [1.0, -1.0, 1.0, 0.0, 0.0, 0.0, 2.0] + coefficients['mp1'] = [1.0, -1.0, 2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['tau1'] = [1.0, -1.0, 2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['beta1'] = [1.0, 0.0, -2.0, 1.0, 0.0, 0.0, 1.0] + coefficients['pqo1'] = [1.0, 0.0, -2.0, 1.0, 0.0, 0.0, -1.0] + coefficients['2oq1'] = [1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0] + # 3rd degree terms + coefficients["m1'"] = [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0] + coefficients['m1'] = [1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0] + coefficients['m1a'] = [1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0] + coefficients['m1b'] = [1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 1.0] + coefficients['no1'] = [1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0] + coefficients['chi1'] = [1.0, 0.0, 2.0, -1.0, 0.0, 0.0, 1.0] + coefficients['2pk1'] = [1.0, 1.0, -4.0, 0.0, 0.0, 0.0, 1.0] + coefficients['pi1'] = [1.0, 1.0, -3.0, 0.0, 0.0, 1.0, -1.0] + coefficients['tk1'] = [1.0, 1.0, -3.0, 0.0, 0.0, 1.0, -1.0] + coefficients['s1-1'] = [1.0, 1.0, -2.0, 0.0, 0.0, 0.0, 2.0] + coefficients['p1'] = [1.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] + coefficients['s1-'] = [1.0, 1.0, -1.0, 0.0, 0.0, -1.0, 1.0] + # Doodson's phase + coefficients['s1'] = [1.0, 1.0, -1.0, 0.0, 0.0, 0.0, 2.0] + coefficients['s1+'] = [1.0, 1.0, -1.0, 0.0, 0.0, 1.0, 1.0] + coefficients['ojm1'] = [1.0, 1.0, 0.0, -2.0, 0.0, 0.0, -1.0] + # 3rd degree terms + coefficients["k1'"] = [1.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0] + coefficients['k1-'] = [1.0, 1.0, 0.0, 0.0, -1.0, 0.0, -1.0] + coefficients['k1'] = [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0] + coefficients['s1+1'] = [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 2.0] + coefficients['k1+'] = [1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0] + coefficients['k1n'] = [1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0] + coefficients['k1++'] = [1.0, 1.0, 0.0, 0.0, 2.0, 0.0, -1.0] + coefficients['psi1'] = [1.0, 1.0, 1.0, 0.0, 0.0, -1.0, 1.0] + coefficients['rp1'] = [1.0, 1.0, 1.0, 0.0, 0.0, -1.0, -1.0] + coefficients['phi1'] = [1.0, 1.0, 2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['kp1'] = [1.0, 1.0, 2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['opq1'] = [1.0, 2.0, -2.0, -1.0, 0.0, 0.0, -1.0] + coefficients['the1'] = [1.0, 2.0, -2.0, 1.0, 0.0, 0.0, 1.0] + coefficients['theta1'] = [1.0, 2.0, -2.0, 1.0, 0.0, 0.0, 1.0] + coefficients['mq1'] = [1.0, 2.0, 0.0, -1.0, 0.0, 0.0, 1.0] + coefficients['j1'] = [1.0, 2.0, 0.0, -1.0, 0.0, 0.0, 1.0] + # 3rd degree terms + coefficients["j1'"] = [1.0, 2.0, 0.0, 0.0, 0.0, 0.0, 2.0] + coefficients['2po1'] = [1.0, 3.0, -4.0, 0.0, 0.0, 0.0, -1.0] + coefficients['so1'] = [1.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['oo1'] = [1.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0] + coefficients['kpq1'] = [1.0, 4.0, -2.0, -1.0, 0.0, 0.0, 1.0] + coefficients['ups1'] = [1.0, 4.0, 0.0, -1.0, 0.0, 0.0, 1.0] + coefficients['kq1'] = [1.0, 4.0, 0.0, -1.0, 0.0, 0.0, 1.0] + coefficients['2jo1'] = [1.0, 5.0, 0.0, -2.0, 0.0, 0.0, -1.0] + coefficients['kjq1'] = [1.0, 5.0, 0.0, -2.0, 0.0, 0.0, -1.0] + coefficients['2ook1'] = [1.0, 5.0, 0.0, 0.0, 0.0, 0.0, -1.0] + coefficients['2oop1'] = [1.0, 5.0, 2.0, 0.0, 0.0, 0.0, -1.0] + coefficients['2jq1'] = [1.0, 6.0, 0.0, -3.0, 0.0, 0.0, -1.0] + coefficients['2mn2s2'] = [2.0, -5.0, 4.0, 1.0, 0.0, 0.0, 0.0] + coefficients['2nk2'] = [2.0, -4.0, 0.0, 2.0, 0.0, 0.0, 0.0] + coefficients['3m(sk)2'] = [2.0, -4.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['3mks2'] = [2.0, -4.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2ns2'] = [2.0, -4.0, 2.0, 2.0, 0.0, 0.0, 0.0] + coefficients['3m2s2'] = [2.0, -4.0, 4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['oq2'] = [2.0, -3.0, 0.0, 1.0, 0.0, 0.0, 2.0] + coefficients['mnk2'] = [2.0, -3.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['3n2'] = [2.0, -3.0, 0.0, 3.0, 0.0, 0.0, 0.0] + coefficients['eps2'] = [2.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['mns2'] = [2.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0] + # coefficients['mns2'] = [2.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0] + coefficients['mnus2'] = [2.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2ml2s2'] = [2.0, -3.0, 4.0, -1.0, 0.0, 0.0, 2.0] + coefficients['mnk2s2'] = [2.0, -3.0, 4.0, 1.0, 0.0, 0.0, 0.0] + coefficients['2ms2k2'] = [2.0, -2.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2mk2'] = [2.0, -2.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['o2'] = [2.0, -2.0, 0.0, 0.0, 0.0, 0.0, 2.0] + # 3rd degree terms + coefficients["2n2'"] = [2.0, -2.0, 0.0, 1.0, 0.0, 0.0, 1.0] + coefficients['2n2'] = [2.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] + coefficients['2nm2'] = [2.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] + coefficients['2ms2'] = [2.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['mu2'] = [2.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2mk2s2'] = [2.0, -2.0, 4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['omg2'] = [2.0, -2.0, 3.0, 0.0, 0.0, -1.0, 0.0] + coefficients['nsk2'] = [2.0, -1.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['snk2'] = [2.0, -1.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['na2'] = [2.0, -1.0, -1.0, 1.0, 0.0, 0.0, 0.0] + # 3rd degree terms + coefficients["n2'"] = [2.0, -1.0, 0.0, 0.0, 0.0, 0.0, 1.0] + coefficients['n2'] = [2.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['2ml2'] = [2.0, -1.0, 0.0, 1.0, 0.0, 0.0, 2.0] + coefficients['nb2'] = [2.0, -1.0, 1.0, 1.0, 0.0, 0.0, 0.0] + coefficients['nu2'] = [2.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['mmun2'] = [2.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['3m(sn)2'] = [2.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['nks2'] = [2.0, -1.0, 2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['nkp2'] = [2.0, -1.0, 2.0, 1.0, 0.0, 0.0, 2.0] + coefficients['mkl2s2'] = [2.0, -1.0, 4.0, -1.0, 0.0, 0.0, 2.0] + coefficients['2kn2s2'] = [2.0, -1.0, 4.0, 1.0, 0.0, 0.0, 0.0] + coefficients['msk2'] = [2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['op2'] = [2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 2.0] + coefficients['m2-2'] = [2.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['gamma2'] = [2.0, 0.0, -2.0, 2.0, 0.0, 0.0, 2.0] + coefficients['gam2'] = [2.0, 0.0, -2.0, 2.0, 0.0, 0.0, 2.0] + coefficients['alp2'] = [2.0, 0.0, -1.0, 0.0, 0.0, 1.0, 2.0] + coefficients['alpha2'] = [2.0, 0.0, -1.0, 0.0, 0.0, 1.0, 2.0] + coefficients['m2a'] = [2.0, 0.0, -1.0, 0.0, 0.0, 1.0, 0.0] + coefficients['m2-1'] = [2.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['ma2'] = [2.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0] + # M2 nodal line + coefficients['m2-'] = [2.0, 0.0, 0.0, 0.0, -1.0, 0.0, 2.0] + coefficients['m2'] = [2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['ko2'] = [2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + # conjugate to nodal + coefficients['m2+'] = [2.0, 0.0, 0.0, 0.0, 1.0, 0.0, 2.0] + # 3rd degree terms + coefficients["m2'"] = [2.0, 0.0, 0.0, 1.0, 0.0, 0.0, -1.0] + coefficients['mb2'] = [2.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['m2+1'] = [2.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['m2b'] = [2.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0] + coefficients['beta2'] = [2.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0] + coefficients['delta2'] = [2.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['m2+2'] = [2.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['mks2'] = [2.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['m2(ks)2'] = [2.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2snmk2'] = [2.0, 1.0, -4.0, 1.0, 0.0, 0.0, 0.0] + coefficients['2sn(mk)2'] = [2.0, 1.0, -4.0, 1.0, 0.0, 0.0, 0.0] + coefficients['snm2'] = [2.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['lambda2'] = [2.0, 1.0, -2.0, 1.0, 0.0, 0.0, 2.0] + coefficients['2mn2'] = [2.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0] + coefficients['l2'] = [2.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0] + coefficients['l2a'] = [2.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0] + # 3rd degree terms + coefficients["l2'"] = [2.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.0] + coefficients['nkm2'] = [2.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['l2b'] = [2.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['lb2'] = [2.0, 1.0, 1.0, -1.0, 0.0, 0.0, 2.0] + coefficients['2sk2'] = [2.0, 2.0, -4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2t2'] = [2.0, 2.0, -4.0, 0.0, 0.0, 2.0, 0.0] + coefficients['s2-2'] = [2.0, 2.0, -4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['s2-1'] = [2.0, 2.0, -3.0, 0.0, 0.0, 0.0, 0.0] + coefficients['t2'] = [2.0, 2.0, -3.0, 0.0, 0.0, 1.0, 0.0] + coefficients['kp2'] = [2.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['s2r'] = [2.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['s2'] = [2.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['r2'] = [2.0, 2.0, -1.0, 0.0, 0.0, -1.0, 2.0] + coefficients['s2+1'] = [2.0, 2.0, -1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['s2+2'] = [2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['k2'] = [2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['kb2'] = [2.0, 2.0, 1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2ks2'] = [2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2pmn2'] = [2.0, 3.0, -4.0, -1.0, 0.0, 0.0, 2.0] + coefficients['msnu2'] = [2.0, 3.0, -4.0, 1.0, 0.0, 0.0, 0.0] + coefficients['msn2'] = [2.0, 3.0, -2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['zeta2'] = [2.0, 3.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['eta2'] = [2.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] + coefficients['mkn2'] = [2.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] + coefficients['kj2'] = [2.0, 3.0, 0.0, -1.0, 0.0, 0.0, 2.0] + coefficients['2kmsn2'] = [2.0, 3.0, 2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2km(sn)2'] = [2.0, 3.0, 2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2sm2'] = [2.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2ms2n2'] = [2.0, 4.0, -2.0, -2.0, 0.0, 0.0, 0.0] + coefficients['skm2'] = [2.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2j2'] = [2.0, 4.0, 0.0, -2.0, 0.0, 0.0, 2.0] + coefficients['2k2'] = [2.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2snu2'] = [2.0, 5.0, -6.0, 1.0, 0.0, 0.0, 0.0] + coefficients['3(sm)n2'] = [2.0, 5.0, -6.0, 1.0, 0.0, 0.0, 0.0] + coefficients['2sn2'] = [2.0, 5.0, -4.0, -1.0, 0.0, 0.0, 0.0] + coefficients['skn2'] = [2.0, 5.0, -2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2kn2'] = [2.0, 5.0, 0.0, -1.0, 0.0, 0.0, 0.0] + coefficients['3s2m2'] = [2.0, 6.0, -6.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2sk2m2'] = [2.0, 6.0, -4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2oq3'] = [3.0, -4.0, 0.0, 1.0, 0.0, 0.0, 1.0] + # compound 3 O1 + coefficients['o3'] = [3.0, -3.0, 0.0, 0.0, 0.0, 0.0, 1.0] + coefficients['nq3'] = [3.0, -3.0, 0.0, 2.0, 0.0, 0.0, -1.0] + coefficients['muo3'] = [3.0, -3.0, 2.0, 0.0, 0.0, 0.0, -1.0] + coefficients['mq3'] = [3.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0] + coefficients['no3'] = [3.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0] + coefficients['mnp3'] = [3.0, -2.0, 2.0, 1.0, 0.0, 0.0, 1.0] + coefficients['2op3'] = [3.0, -1.0, -2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['2os3'] = [3.0, -1.0, -1.0, 0.0, 0.0, 0.0, 0.0] + # Q1+M1+S1 + coefficients['qms3'] = [3.0, -1.0, -1.0, 2.0, 0.0, 0.0, 2.0] + coefficients['mo3-'] = [3.0, -1.0, 0.0, 0.0, -1.0, 0.0, -1.0] + coefficients['mo3'] = [3.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] + coefficients['mo3+'] = [3.0, -1.0, 0.0, 0.0, 1.0, 0.0, -1.0] + coefficients['2mk3'] = [3.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] + coefficients['e3n'] = [3.0, -1.0, 0.0, 1.0, -1.0, 0.0, 0.0] + # 3rd degree terms + coefficients['e3'] = [3.0, -1.0, 0.0, 1.0, 0.0, 0.0, 2.0] + coefficients['2no3'] = [3.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0] + coefficients['2nkm3'] = [3.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0] + coefficients['2ms3'] = [3.0, -1.0, 1.0, 0.0, 0.0, 0.0, 2.0] + coefficients['2mp3'] = [3.0, -1.0, 2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['ns3'] = [3.0, 0.0, -1.0, 1.0, 0.0, 0.0, 2.0] + coefficients['2oj3'] = [3.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0] + # 2M2 - M1 + coefficients['2mm3'] = [3.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0] + coefficients['m3'] = [3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + # 3rd degree terms + coefficients["m3'"] = [3.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0] + coefficients['nk3'] = [3.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['mp3'] = [3.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] + coefficients['so3'] = [3.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] + # 3rd degree terms + coefficients['lambda3'] = [3.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['ms3'] = [3.0, 1.0, -1.0, 0.0, 0.0, 0.0, 2.0] + coefficients['pjrho3'] = [3.0, 1.0, 0.0, -2.0, 0.0, 0.0, -1.0] + # 3rd degree terms + coefficients['l3'] = [3.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0] + coefficients['mk3-'] = [3.0, 1.0, 0.0, 0.0, -1.0, 0.0, 1.0] + coefficients['mk3'] = [3.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0] + coefficients['mk3+'] = [3.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0] + # 3rd degree terms + coefficients['l3b'] = [3.0, 1.0, 0.0, 1.0, 0.0, 0.0, 2.0] + coefficients['mks3'] = [3.0, 1.0, 1.0, 0.0, 0.0, 0.0, 2.0] + coefficients['mkp3'] = [3.0, 1.0, 2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['nso3'] = [3.0, 2.0, -2.0, 1.0, 0.0, 0.0, 1.0] + coefficients['2mq3'] = [3.0, 2.0, 0.0, -1.0, 0.0, 0.0, 1.0] + # 3rd degree terms + coefficients['f3'] = [3.0, 2.0, 0.0, 0.0, 0.0, 0.0, 2.0] + # 3rd degree terms + coefficients['j3'] = [3.0, 2.0, 0.0, 0.0, 0.0, 0.0, 2.0] + # s3 perturbation + coefficients['2t3'] = [3.0, 3.0, -5.0, 0.0, 0.0, 0.0, 2.0] + # s3 perturbation + coefficients['t3'] = [3.0, 3.0, -4.0, 0.0, 0.0, 0.0, 2.0] + # = 2SK3 + coefficients['sp3'] = [3.0, 3.0, -4.0, 0.0, 0.0, 0.0, -1.0] + coefficients['s3'] = [3.0, 3.0, -3.0, 0.0, 0.0, 0.0, 0.0] + # 3rd degree terms + coefficients["s3'"] = [3.0, 3.0, -3.0, 0.0, 0.0, 0.0, 2.0] + # s3 perturbation + coefficients['r3'] = [3.0, 3.0, -2.0, 0.0, 0.0, 0.0, 2.0] + coefficients['sk3'] = [3.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0] + # s3 perturbation + coefficients['2r3'] = [3.0, 3.0, -1.0, 0.0, 0.0, 0.0, 2.0] + coefficients['k3'] = [3.0, 3.0, 0.0, 0.0, 0.0, 0.0, -1.0] + coefficients['2so3'] = [3.0, 5.0, -4.0, 0.0, 0.0, 0.0, 1.0] + coefficients['2jp3'] = [3.0, 5.0, -2.0, -2.0, 0.0, 0.0, 1.0] + coefficients['kso3'] = [3.0, 5.0, -2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['2jk3'] = [3.0, 5.0, -1.0, -2.0, 0.0, 0.0, 0.0] + coefficients['2ko3'] = [3.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0] + coefficients['2sq3'] = [3.0, 6.0, -4.0, -1.0, 0.0, 0.0, 1.0] + coefficients['o4'] = [4.0, -4.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2qm4'] = [4.0, -4.0, 0.0, 2.0, 0.0, 0.0, 2.0] + coefficients['4ms4'] = [4.0, -4.0, 4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['4m2s4'] = [4.0, -4.0, 4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2mnk4'] = [4.0, -3.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['moq4'] = [4.0, -3.0, 0.0, 1.0, 0.0, 0.0, 2.0] + coefficients['2mns4'] = [4.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['2mns4'] = [4.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2mnus4'] = [4.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0] + coefficients['3mk4'] = [4.0, -2.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2om4'] = [4.0, -2.0, 0.0, 0.0, 0.0, 0.0, 2.0] + coefficients['n4'] = [4.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] + coefficients['3ms4'] = [4.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['msnk4'] = [4.0, -1.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['mpq4'] = [4.0, -1.0, -2.0, 1.0, 0.0, 0.0, 2.0] + coefficients['mn4'] = [4.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['mnu4'] = [4.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2mls4'] = [4.0, -1.0, 2.0, -1.0, 0.0, 0.0, 2.0] + coefficients['mnks4'] = [4.0, -1.0, 2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['2msk4'] = [4.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['mop4'] = [4.0, 0.0, -2.0, 0.0, 0.0, 0.0, 2.0] + coefficients['ma4'] = [4.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['m4'] = [4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['mb4'] = [4.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2mks4'] = [4.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['sn4'] = [4.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['3mn4'] = [4.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0] + coefficients['ml4'] = [4.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0] + coefficients['nk4'] = [4.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['2smk4'] = [4.0, 2.0, -4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2pm4'] = [4.0, 2.0, -4.0, 0.0, 0.0, 0.0, 2.0] + coefficients['mt4'] = [4.0, 2.0, -3.0, 0.0, 0.0, 1.0, 0.0] + coefficients['ms4'] = [4.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['mr4'] = [4.0, 2.0, -1.0, 0.0, 0.0, -1.0, 2.0] + coefficients['mk4'] = [4.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2snm4'] = [4.0, 3.0, -4.0, 1.0, 0.0, 0.0, 0.0] + coefficients['2msn4'] = [4.0, 3.0, -2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['sl4'] = [4.0, 3.0, -2.0, -1.0, 0.0, 0.0, 2.0] + coefficients['2mkn4'] = [4.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] + coefficients['mkj4'] = [4.0, 3.0, 0.0, -1.0, 0.0, 0.0, 2.0] + coefficients['2t4'] = [4.0, 4.0, -6.0, 0.0, 0.0, 0.0, 0.0] + coefficients['t4'] = [4.0, 4.0, -5.0, 0.0, 0.0, 0.0, 0.0] + coefficients['st4'] = [4.0, 4.0, -5.0, 0.0, 0.0, 1.0, 0.0] + coefficients['s4'] = [4.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['r4'] = [4.0, 4.0, -3.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2r4'] = [4.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['sk4'] = [4.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['3ks4'] = [4.0, 4.0, -1.0, 0.0, 0.0, 0.0, -1.0] + coefficients['k4'] = [4.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['3sm4'] = [4.0, 6.0, -6.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2(kj)4'] = [4.0, 6.0, 0.0, -2.0, 0.0, 0.0, 2.0] + coefficients['2no5'] = [5.0, -3.0, 0.0, 2.0, 0.0, 0.0, -1.0] + coefficients['mno5'] = [5.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0] + coefficients['2mq5'] = [5.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0] + coefficients['2nkms5'] = [5.0, -2.0, 2.0, 2.0, 0.0, 0.0, 1.0] + coefficients['2mo5'] = [5.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] + coefficients['mnm5'] = [5.0, -1.0, 0.0, 1.0, 0.0, 0.0, 2.0] + coefficients['2nk5'] = [5.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0] + coefficients['3ms5'] = [5.0, -1.0, 1.0, 0.0, 0.0, 0.0, 2.0] + coefficients['3mp5'] = [5.0, -1.0, 2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['nso5'] = [5.0, 0.0, -2.0, 1.0, 0.0, 0.0, -1.0] + coefficients['m5'] = [5.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0] + coefficients['mnk5'] = [5.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0] + coefficients['mb5'] = [5.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0] + coefficients['mso5'] = [5.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] + coefficients['2mp5'] = [5.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] + coefficients['2ms5'] = [5.0, 1.0, -1.0, 0.0, 0.0, 0.0, 2.0] + coefficients['2mk5'] = [5.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0] + # N2 + K2 + S1 + coefficients['nks5'] = [5.0, 2.0, -1.0, 1.0, 0.0, 0.0, 2.0] + coefficients['nsk5'] = [5.0, 2.0, -2.0, -1.0, 0.0, 0.0, 1.0] + coefficients['msm5'] = [5.0, 2.0, -2.0, 0.0, 0.0, 0.0, 2.0] + coefficients['snk5'] = [5.0, 2.0, -2.0, 1.0, 0.0, 0.0, -1.0] + coefficients['3mq5'] = [5.0, 2.0, 0.0, -1.0, 0.0, 0.0, 1.0] + coefficients['msp5'] = [5.0, 3.0, -4.0, 0.0, 0.0, 0.0, -1.0] + coefficients['msk5'] = [5.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['3km5'] = [5.0, 3.0, 0.0, 0.0, 0.0, 0.0, -1.0] + coefficients['2sp5'] = [5.0, 5.0, -6.0, 0.0, 0.0, 0.0, -1.0] + coefficients['t5'] = [5.0, 5.0, -6.0, 0.0, 0.0, 0.0, 0.0] + coefficients['s5'] = [5.0, 5.0, -5.0, 0.0, 0.0, 0.0, 0.0] + coefficients['r5'] = [5.0, 5.0, -4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2sk5'] = [5.0, 5.0, -4.0, 0.0, 0.0, 0.0, 1.0] + coefficients['k5'] = [5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0] + coefficients['o6'] = [6.0, -6.0, 0.0, 0.0, 0.0, 0.0, 2.0] + coefficients['2(mn)k6'] = [6.0, -4.0, 0.0, 2.0, 0.0, 0.0, 0.0] + coefficients['5mks6'] = [6.0, -4.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2(mn)s6'] = [6.0, -4.0, 2.0, 2.0, 0.0, 0.0, 0.0] + coefficients['5m2s6'] = [6.0, -4.0, 4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['3mnk6'] = [6.0, -3.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['n6'] = [6.0, -3.0, 0.0, 3.0, 0.0, 0.0, 0.0] + coefficients['3mns6'] = [6.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['2nmls6'] = [6.0, -3.0, 2.0, 1.0, 0.0, 0.0, 2.0] + coefficients['3nks6'] = [6.0, -3.0, 2.0, 3.0, 0.0, 0.0, 0.0] + coefficients['3mnus6'] = [6.0, -3.0, 4.0, -1.0, 0.0, 0.0, 0.0] + coefficients['4mk6'] = [6.0, -2.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2nm6'] = [6.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] + coefficients['m2n6'] = [6.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] + coefficients['4ms6'] = [6.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2mlns6'] = [6.0, -2.0, 2.0, 0.0, 0.0, 0.0, 2.0] + coefficients['2mnls6'] = [6.0, -2.0, 2.0, 0.0, 0.0, 0.0, 2.0] + coefficients['2nmks6'] = [6.0, -2.0, 2.0, 2.0, 0.0, 0.0, 0.0] + coefficients['2msnk6'] = [6.0, -1.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['2mn6'] = [6.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['2mnu6'] = [6.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2mn6'] = [6.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['3mls6'] = [6.0, -1.0, 2.0, -1.0, 0.0, 0.0, 2.0] + coefficients['2mno6'] = [6.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2mnks6'] = [6.0, -1.0, 2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['3msk6'] = [6.0, 0.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['ma6'] = [6.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['m6'] = [6.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2nk6'] = [6.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0] + coefficients['mb6'] = [6.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['3mks6'] = [6.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['msn6'] = [6.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['4mn6'] = [6.0, 1.0, 0.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2ml6'] = [6.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0] + coefficients['mnk6'] = [6.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['mkn6'] = [6.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['mknu6'] = [6.0, 1.0, 2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2(ms)k6'] = [6.0, 2.0, -4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2mt6'] = [6.0, 2.0, -3.0, 0.0, 0.0, 1.0, 0.0] + coefficients['2ms6'] = [6.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2mr6'] = [6.0, 2.0, -1.0, 0.0, 0.0, -1.0, 2.0] + coefficients['2mk6'] = [6.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2sn6'] = [6.0, 3.0, -4.0, 1.0, 0.0, 0.0, 0.0] + coefficients['3msn6'] = [6.0, 3.0, -2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['msl6'] = [6.0, 3.0, -2.0, -1.0, 0.0, 0.0, 2.0] + coefficients['snk6'] = [6.0, 3.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['mkl6'] = [6.0, 3.0, 0.0, -1.0, 0.0, 0.0, 2.0] + coefficients['3mkn6'] = [6.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2sm6'] = [6.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['msk6'] = [6.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2km6'] = [6.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2(ms)n6'] = [6.0, 5.0, -4.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2mskn6'] = [6.0, 5.0, -2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2t6'] = [6.0, 6.0, -8.0, 0.0, 0.0, 0.0, 0.0] + coefficients['t6'] = [6.0, 6.0, -7.0, 0.0, 0.0, 0.0, 0.0] + coefficients['s6'] = [6.0, 6.0, -6.0, 0.0, 0.0, 0.0, 0.0] + coefficients['r6'] = [6.0, 6.0, -5.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2r6'] = [6.0, 6.0, -4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2sk6'] = [6.0, 6.0, -4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['k6'] = [6.0, 6.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['4sm6'] = [6.0, 8.0, -8.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2mno7'] = [7.0, -2.0, 0.0, 1.0, 0.0, 0.0, -1.0] + coefficients['4mk7'] = [7.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] + coefficients['3mo7'] = [7.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] + coefficients['2nmk7'] = [7.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0] + # = 2MNK7 = MNKO7 + coefficients['m7'] = [7.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0] + coefficients['3mp7'] = [7.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] + coefficients['2mso7'] = [7.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] + coefficients['3mk7'] = [7.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0] + # = MSKO7 (noaa) + coefficients['2msk7'] = [7.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['msko7'] = [7.0, 3.0, -2.0, 0.0, 0.0, 0.0, -1.0] + coefficients['2t7'] = [7.0, 7.0, -9.0, 0.0, 0.0, 0.0, 0.0] + coefficients['3sp7'] = [7.0, 7.0, -8.0, 0.0, 0.0, 0.0, -1.0] + coefficients['t7'] = [7.0, 7.0, -8.0, 0.0, 0.0, 0.0, 0.0] + coefficients['s7'] = [7.0, 7.0, -7.0, 0.0, 0.0, 0.0, 0.0] + coefficients['r7'] = [7.0, 7.0, -6.0, 0.0, 0.0, 0.0, 0.0] + coefficients['3sk7'] = [7.0, 7.0, -6.0, 0.0, 0.0, 0.0, 1.0] + coefficients['2r7'] = [7.0, 7.0, -5.0, 0.0, 0.0, 0.0, 0.0] + coefficients['3r7'] = [7.0, 7.0, -4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['4r7'] = [7.0, 7.0, -3.0, 0.0, 0.0, 0.0, 0.0] + coefficients['k7'] = [7.0, 7.0, 0.0, 0.0, 0.0, 0.0, 1.0] + coefficients['3m2ns8'] = [8.0, -4.0, 2.0, 2.0, 0.0, 0.0, 0.0] + coefficients['4mns8'] = [8.0, -3.0, 2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['5mk8'] = [8.0, -2.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2mn8'] = [8.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] + coefficients['2(mn)8'] = [8.0, -2.0, 0.0, 2.0, 0.0, 0.0, 0.0] + coefficients['5ms8'] = [8.0, -2.0, 2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['3mn8'] = [8.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['3mnu8'] = [8.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['3mn8'] = [8.0, -1.0, 2.0, -1.0, 0.0, 0.0, 0.0] + coefficients['4mls8'] = [8.0, -1.0, 2.0, -1.0, 0.0, 0.0, 2.0] + coefficients['ma8'] = [8.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['m8'] = [8.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['mb8'] = [8.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2msn8'] = [8.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['3ml8'] = [8.0, 1.0, 0.0, -1.0, 0.0, 0.0, 2.0] + coefficients['2mnk8'] = [8.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['3mt8'] = [8.0, 2.0, -3.0, 0.0, 0.0, 1.0, 0.0] + coefficients['3ms8'] = [8.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['3mk8'] = [8.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2smn8'] = [8.0, 3.0, -4.0, 1.0, 0.0, 0.0, 0.0] + coefficients['2msl8'] = [8.0, 3.0, -2.0, -1.0, 0.0, 0.0, 2.0] + coefficients['msnk8'] = [8.0, 3.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['4msn8'] = [8.0, 3.0, 0.0, -1.0, 0.0, 0.0, 0.0] + coefficients['2(ms)8'] = [8.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2msk8'] = [8.0, 4.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['2(mk)8'] = [8.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['s8'] = [8.0, 8.0, -8.0, 0.0, 0.0, 0.0, 0.0] + coefficients['k8'] = [8.0, 8.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['4mo9'] = [9.0, -1.0, 0.0, 0.0, 0.0, 0.0, -1.0] + coefficients['2(mn)k9'] = [9.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0] + coefficients['2m2nk9'] = [9.0, -1.0, 0.0, 2.0, 0.0, 0.0, 1.0] + coefficients['3mnk9'] = [9.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0] + coefficients['4mp9'] = [9.0, 1.0, -2.0, 0.0, 0.0, 0.0, -1.0] + coefficients['4ms9'] = [9.0, 1.0, -1.0, 0.0, 0.0, 0.0, 2.0] + coefficients['4mk9'] = [9.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0] + coefficients['3msk9'] = [9.0, 3.0, -2.0, 0.0, 0.0, 0.0, 1.0] + coefficients['s9'] = [9.0, 9.0, -9.0, 0.0, 0.0, 0.0, 0.0] + coefficients['k9'] = [9.0, 9.0, 0.0, 0.0, 0.0, 0.0, 1.0] + coefficients['4mn10'] = [10.0, -1, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['m10'] = [10.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['3msn10'] = [10.0, 1.0, -2, 1.0, 0.0, 0.0, 0.0] + coefficients['4ms10'] = [10.0, 2.0, -2, 0.0, 0.0, 0.0, 0.0] + coefficients['4mk10'] = [10.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['3msl10'] = [10.0, 3.0, -2, -1.0, 0.0, 0.0, 2.0] + coefficients['3m2s10'] = [10.0, 4.0, -4, 0.0, 0.0, 0.0, 0.0] + coefficients['3msk10'] = [10.0, 4.0, -2, 0.0, 0.0, 0.0, 0.0] + coefficients['s10'] = [10.0, 10.0, -10.0, 0.0, 0.0, 0.0, 0.0] + coefficients['4msk11'] = [11.0, 3.0, -2, 0.0, 0.0, 0.0, 1.0] + coefficients['s11'] = [11.0, 11.0, -11.0, 0.0, 0.0, 0.0, 0.0] + coefficients['5mn12'] = [12.0, -1, 0.0, 1.0, 0.0, 0.0, 0.0] + coefficients['m12'] = [12.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['4msn12'] = [12.0, 1.0, -2, 1.0, 0.0, 0.0, 0.0] + coefficients['4mns12'] = [12.0, 1.0, -2, 1.0, 0.0, 0.0, 0.0] + coefficients['5ms12'] = [12.0, 2.0, -2, 0.0, 0.0, 0.0, 0.0] + coefficients['4msl12'] = [12.0, 3.0, -2, -1.0, 0.0, 0.0, 2.0] + coefficients['4m2s12'] = [12.0, 4.0, -4, 0.0, 0.0, 0.0, 0.0] + coefficients['s12'] = [12.0, 12.0, -12.0, 0.0, 0.0, 0.0, 0.0] + coefficients['m14'] = [14.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] + coefficients['5msn14'] = [14.0, 1.0, -2.0, 1.0, 0.0, 0.0, 0.0] + coefficients['6ms14'] = [14.0, 2.0, -2.0, 0.0, 0.0, 0.0, 0.0] + coefficients['5m2s14'] = [14.0, 4.0, -4.0, 0.0, 0.0, 0.0, 0.0] + # return the coefficients table + return coefficients + +def replace_and_join(match): + return " ".join(match.group().split()) + +# PURPOSE: create argument parser +def arguments(): + parser = argparse.ArgumentParser( + description="""Converts the coefficients table to a json file" + """, + fromfile_prefix_chars="@" + ) + # command line parameters + parser.add_argument('--pretty', '-p', + action='store_true', + help='Pretty print the json file') + parser.add_argument('--verbose', '-v', + action='store_true', + help='Verbose output') + return parser + +def main(): + # Read the system arguments listed after the program + parser = arguments() + args,_ = parser.parse_known_args() + + # coefficients dictionary + coefficients = coefficients_table() + # writing coefficients to JSON file + json_file = pyTMD.utilities.get_data_path(['data','doodson.json']) + print(f'\t{json_file}') if args.verbose else None + with open(json_file, 'w') as fid: + indent = 4 if args.pretty else None + temp1 = json.dumps(coefficients, indent=indent) + temp2 = re.sub(r"(?<=\[)[^\[\]]+(?=\])", replace_and_join, temp1) + fid.write(temp2) + # verify outputs + with open(json_file, 'r') as fid: + test = json.load(fid) + assert test == coefficients, 'Error in coefficients table' + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/test/test_arguments.py b/test/test_arguments.py index 3dc8a152..0ff77f37 100644 --- a/test/test_arguments.py +++ b/test/test_arguments.py @@ -6,6 +6,7 @@ UPDATE HISTORY: Updated 10/2024: add comparisons for formatted Doodson numbers + add function to parse tide potential tables Updated 08/2024: add comparisons for nodal corrections Written 01/2024 """ @@ -17,8 +18,13 @@ doodson_number, _arguments_table, _minor_table, + _parse_tide_potential_table, _to_doodson_number, - _from_doodson_number + _to_extended_doodson, + _from_doodson_number, + _from_extended_doodson, + _ct1971_table_5, + _ce1973_table_1 ) @pytest.mark.parametrize("corrections", ['OTIS', 'GOT']) @@ -691,35 +697,132 @@ def test_doodson(): exp['2q1'] = 125.755 exp['p1'] = 163.555 # long-period species - exp['mm'] = '065.455' - exp['ssa'] = '057.555' - exp['msf'] = '073.555' - exp['mf'] = '075.555' - exp['msqm'] = '093.555' - exp['mtm'] = '085.455' - exp['node'] = '055.565' + exp['mm'] = 065.455 + exp['ssa'] = 057.555 + exp['msf'] = 073.555 + exp['mf'] = 075.555 + exp['msqm'] = 093.555 + exp['mtm'] = 085.455 + exp['node'] = 055.565 # short-period species exp['m3'] = 355.555 exp['m4'] = 455.555 exp['m6'] = 655.555 exp['m8'] = 855.555 + # shallow water species + exp['2so3'] = '3X1.555' + exp['2jp3'] = '3X3.355' + exp['kso3'] = '3X3.555' + exp['2jk3'] = '3X4.355' + exp['2ko3'] = '3X5.555' + # 3rd degree terms + exp["2q1'"] = 125.655 + exp["q1'"] = 135.555 + exp["o1'"] = 145.655 + exp["m1'"] = 155.555 + exp["k1'"] = 165.455 + exp["j1'"] = 175.555 + exp["2n2'"] = 235.655 + exp["n2'"] = 245.555 + exp["m2'"] = 255.655 + exp["l2'"] = 265.555 + exp["m3'"] = 355.555 + exp['lambda3'] = 363.655 + exp["l3"] = 365.455 + exp["l3b"] = 365.655 + exp["f3"] = 375.555 + exp["j3"] = 375.555 + exp["s3'"] = 382.555 # get observed values for constituents obs = doodson_number(exp.keys()) cartwright = doodson_number(exp.keys(), formalism='Cartwright') # check values for key,val in exp.items(): - assert float(val) == obs[key] + assert val == obs[key] # check values when entered as string test = doodson_number(key) - assert float(val) == test - # check conversion to and from Doodson numbers + assert val == test + # check conversion to Doodson numbers doodson = _to_doodson_number(cartwright[key]) # check values when entered as Cartwright - assert float(val) == doodson + assert val == doodson # check values when entered as Doodson coefficients = _from_doodson_number(val) assert np.all(cartwright[key] == coefficients) +def test_extended(): + """ + Tests the calculation of UKHO Extended Doodson numbers + """ + # expected values + exp = {} + # semi-diurnal species + exp['m2'] = 'BZZZZZZ' + exp['s2'] = 'BBXZZZZ' + exp['n2'] = 'BYZAZZZ' + exp['nu2'] = 'BYBYZZZ' + exp['mu2'] = 'BXBZZZZ' + exp['2n2'] = 'BXZBZZZ' + exp['lambda2'] = 'BAXAZZB' + exp['l2'] = 'BAZYZZB' + exp['k2'] = 'BBZZZZZ' + # diurnal species + exp['m1'] = 'AZZZZZA' + exp['s1'] = 'AAYZZZA' + exp['o1'] = 'AYZZZZY' + exp['oo1'] = 'ACZZZZA' + exp['k1'] = 'AAZZZZA' + exp['q1'] = 'AXZAZZY' + exp['2q1'] = 'AWZBZZY' + exp['p1'] = 'AAXZZZY' + # long-period species + exp['mm'] = 'ZAZYZZZ' + exp['ssa'] = 'ZZBZZZZ' + exp['msf'] = 'ZBXZZZZ' + exp['mf'] = 'ZBZZZZZ' + exp['msqm'] = 'ZDXZZZZ' + exp['mtm'] = 'ZCZYZZZ' + exp['node'] = 'ZZZZAZB' + # short-period species + exp['m3'] = 'CZZZZZZ' + exp['m4'] = 'DZZZZZZ' + exp['n4'] = 'DXZBZZZ' + exp['m6'] = 'FZZZZZZ' + exp['n6'] = 'FWZCZZZ' + exp['m8'] = 'HZZZZZZ' + exp['m10'] = 'JZZZZZZ' + exp['m12'] = 'LZZZZZZ' + # shallow water species + exp['2so3'] = 'CEVZZZA' + exp['2jp3'] = 'CEXXZZA' + exp['kso3'] = 'CEXZZZA' + exp['2jk3'] = 'CEYXZZZ' + exp['2ko3'] = 'CEZZZZA' + # get observed values for constituents + obs = doodson_number(exp.keys(), formalism='Extended') + # check values + for key,val in exp.items(): + assert val == obs[key] + +def test_parse_tables(): + """ + Tests the parsing of tables for tide potential coefficients + """ + # Cartwright and Tayler (1971) table with 3rd-degree values + # Cartwright and Edden (1973) table with updated values + for table in [_ct1971_table_5, _ce1973_table_1]: + # parse table + CTE = _parse_tide_potential_table(table) + for i, line in enumerate(CTE): + # convert Doodson number to Cartwright numbers + tau, s, h, p, n, pp = _from_doodson_number(line['DO']) + assert tau == line['tau'], line + assert s == line['s'], line + assert h == line['h'], line + assert p == line['p'], line + assert n == line['n'], line + assert pp == line['pp'], line + def test_normalize_angle(): """ Tests the normalization of angles to between 0 and 360 degrees