OceanLoading#
- class OceanLoading(amplitudes: tuple, phases: tuple, rate_step: float = 60.0)#
Bases:
objectOcean-loading displacement of a station, from BLQ coefficients.
Ocean loading is the crust’s response to the weight of the ocean tide. The tide moves a large mass of water over the crust twice a day, and the crust sags under it. A coastal station moves by up to a few centimetres, and an inland one by a few millimetres. The response depends on the station and the ocean model, so it is given per station as the amplitudes and phases of a BLQ table, such as those from the Onsala loading service (http://holt.oso.chalmers.se/loading/).
For each constituent \(i\) with astronomical argument \(\theta_i + \chi_i\) (see
OceanLoadingInfo) and nodal corrections \(f_i, u_i\), the displacement in m is (Moyer, with the nodal corrections of IERS Conventions (2010), eq. 7.16):\[\begin{split}\Delta z &= \sum_i f_i A^r_i \cos(\theta_i + \chi_i + u_i - \phi^r_i) \\ \Delta n &= -\sum_i f_i A^S_i \cos(\theta_i + \chi_i + u_i - \phi^S_i) \\ \Delta e &= -\sum_i f_i A^W_i \cos(\theta_i + \chi_i + u_i - \phi^W_i)\end{split}\]Here \(A\) and \(\phi\) are the BLQ amplitudes and Greenwich phase lags of the radial, south and west components.
- Parameters:
- amplitudesarray_like, shape (3, 11)
Amplitudes, m. The rows are radial, west and south, and the columns are the constituents of
Constants.EARTH_OCEAN_LOADING, in the order of a BLQ table.- phasesarray_like, shape (3, 11)
Greenwich phase lags, degrees, in the same layout.
- rate_stepfloat, optional
Half-interval in seconds for the central difference that supplies the body-fixed rate, default 60.
Methods
arguments(epoch[, frame])Astronomical arguments \(\theta_i + \chi_i\) of the constituents, degrees.
displacement(position_body_fixed, epoch[, frame])Ocean-loading displacement of the station.
earth_rotation_angle(epoch, frame)Earth rotation angle of an Earth-fixed frame, radians.
from_blq(path, station[, rate_step])Read one station's coefficients from a BLQ file.
nodal_corrections(epoch)Nodal factors \(f_i\) and angles \(u_i\) of the constituents.
state_displacement(position_body_fixed, epoch)Ocean-loading displacement and its body-fixed rate.
Notes
The nodal corrections \(f\) and \(u\) follow the 18.6-year regression of the lunar node (
nodal_corrections()). Moyer leaves them out; they scale the lunar terms by up to 4% for M2 and 40% for Mf.The Doodson variable \(\tau\) needs UT1. When the station’s Earth-fixed frame is given it is read from that frame’s rotation, so the phase follows the same Earth rotation that places the station (see
arguments()); without a frame UTC stands in for UT1, which moves the phase by at most a few millidegrees.References
Moyer, T. D., Formulation for Observed and Computed Values of Deep Space Network Data Types for Navigation, JPL Publication 00-7, 2000.
IERS Conventions (2010), IERS Technical Note 36, Section 7.1.2, eq. 7.16.
- classmethod from_blq(path, station: str, rate_step: float = 60.0) OceanLoading#
Read one station’s coefficients from a BLQ file.
- Parameters:
- pathstr or path-like
BLQ file. Lines starting with
$$are comments. Each station is a name line followed by six rows of numbers: the radial, west and south amplitudes in m, then their phases in degrees.- stationstr
Station name as written in the file. Case and repeated spaces are ignored.
- rate_stepfloat, optional
Half-interval in seconds for the central difference that supplies the body-fixed rate, default 60.
- Returns:
- OceanLoading
Model holding that station’s amplitudes and phases.
- Raises:
- StationNotFoundError
If the station is not in the file, or its name is not followed by six rows of numbers.
- static arguments(epoch: float, frame: str = None) ndarray#
Astronomical arguments \(\theta_i + \chi_i\) of the constituents, degrees.
- Parameters:
- epochfloat
TDB seconds past J2000.
- framestr, optional
Earth-fixed frame whose rotation supplies UT1 for \(\tau\), through
earth_rotation_angle()and GMST from IERS 2010 eq. 5.32. When None, the default, UTC stands in for UT1.
- Returns:
- numpy.ndarray
One argument per constituent of
Constants.EARTH_OCEAN_LOADING.
References
IERS Conventions (2010), IERS Technical Note 36, Section 5.5.7, eq. 5.32.
- static earth_rotation_angle(epoch: float, frame: str) float#
Earth rotation angle of an Earth-fixed frame, radians.
- Parameters:
- epochfloat
TDB seconds past J2000.
- framestr
Earth-fixed frame, e.g.
"ITRF93".
- Returns:
- float
Angle from the celestial to the terrestrial intermediate origin, in \((-\pi, \pi]\).
Notes
With \(M\) the J2000-to-
framerotation, the third row of \(M\) is the pole \((X, Y, Z)\) in J2000. The CIO-based matrix \(Q = R_3(-E) R_2(-d) R_3(E) R_3(s)\) (IERS 2010 eq. 5.6) with \(E = \mathrm{atan2}(Y, X)\), \(d = \arccos Z\) (eq. 5.7) and \(s \approx -XY/2\), the leading term of eq. 5.9, leaves \(M Q = R_3(\theta)\) up to the polar motion, whose effect on \(\theta\) is second order. Through the IERS definition \(\theta = 2\pi(0.7790572732640 + 1.00273781191135448\,D_U)\) (eq. 5.14), with \(D_U\) the UT1 Julian date minus 2451545.0, this angle is UT1: for ITRF93 it recovers the tabulated UT1 - UTC to tens of microseconds.References
IERS Conventions (2010), IERS Technical Note 36, Section 5.4.4, eqs. 5.6, 5.7 and 5.9, and Section 5.5.3, eq. 5.14.
- static nodal_corrections(epoch: float) tuple#
Nodal factors \(f_i\) and angles \(u_i\) of the constituents.
- Parameters:
- epochfloat
TDB seconds past J2000.
- Returns:
- tuple of numpy.ndarray
(f, u): the amplitude factors, and the phase corrections in degrees, one per constituent ofConstants.EARTH_OCEAN_LOADING.
Notes
\(f = \sum_k a_k \cos kN\) and \(u = \sum_k b_k \sin kN\), with \(N\) the longitude of the Moon’s ascending node, the Delaunay \(\Omega\).
References
Pugh, D. T., Tides, Surges and Mean Sea-Level, Wiley, 1987, Table 4.3, after Schureman, P., Manual of Harmonic Analysis and Prediction of Tides, US Coast and Geodetic Survey Special Publication 98, 1958.
- displacement(position_body_fixed, epoch: float, frame: str = None) ArrayWUnits#
Ocean-loading displacement of the station.
- Parameters:
- position_body_fixedArrayWUnits, ArrayWFrame or array_like, shape (3,)
Undisplaced position, Earth-fixed. It only sets the local vertical, east and north directions. Bare numbers are km.
- epochfloat or EpochArray
TDB seconds past J2000.
- framestr or Frame, optional
Earth-fixed frame of the position. Its rotation supplies UT1 for the arguments (
arguments()); the displacement is returned in the axes of the position. When None, the default, UTC stands in for UT1.
- Returns:
- ArrayWUnits
Displacement in km, shape (3,).
- Raises:
- UndefinedVerticalError
If the position is at the body centre or on the rotation axis.
- state_displacement(position_body_fixed, epoch: float, frame: str = None) ArrayWUnits#
Ocean-loading displacement and its body-fixed rate.
The rate is a central difference over
rate_step. This is the method aGroundStationcalls through itssurface_displacement.- Parameters:
- position_body_fixedArrayWUnits, ArrayWFrame or array_like, shape (3,)
Undisplaced position, Earth-fixed. It only sets the local vertical, east and north directions. Bare numbers are km.
- epochfloat or EpochArray
TDB seconds past J2000.
- framestr or Frame, optional
Earth-fixed frame of the position, passed to
displacement(). Defaults toNone.
- Returns:
- ArrayWUnits
Displacement and rate, km and km/s, shape (6,).
- Raises:
- UndefinedVerticalError
If the position is at the body centre or on the rotation axis.
- STATE_UNITS = (km, km, km, km/sec, km/sec, km/sec)#
Row units of
state_displacement().
- exception CoefficientShapeError#
Bases:
ValueErrorRaised by the constructor when the amplitudes or phases are not 3 x (number of constituents) finite values.
- exception StationNotFoundError#
Bases:
KeyErrorRaised by
from_blq()when the station is not in the file, or its block has fewer than six rows of coefficients.
- exception UndefinedVerticalError#
Bases:
ValueErrorRaised when the position is at the body centre or on the rotation axis. The east direction is undefined there.