1264 lines
40 KiB
Go
1264 lines
40 KiB
Go
// Copyright 2022 HE Boliang
|
|
// All rights reserved.
|
|
|
|
package gofa
|
|
|
|
// Earth Rotation and Sidereal Time
|
|
|
|
/*
|
|
Ee00 Equation of the equinoxes, IAU 2000
|
|
|
|
The equation of the equinoxes, compatible with IAU 2000 resolutions,
|
|
given the nutation in longitude and the mean obliquity.
|
|
|
|
Given:
|
|
date1,date2 float64 TT as a 2-part Julian Date (Note 1)
|
|
epsa float64 mean obliquity (Note 2)
|
|
dpsi float64 nutation in longitude (Note 3)
|
|
|
|
Returned (function value):
|
|
float64 equation of the equinoxes (Note 4)
|
|
|
|
Notes:
|
|
|
|
1) The TT date date1+date2 is a Julian Date, apportioned in any
|
|
convenient way between the two arguments. For example,
|
|
JD(TT)=2450123.7 could be expressed in any of these ways,
|
|
among others:
|
|
|
|
date1 date2
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in
|
|
cases where the loss of several decimal digits of resolution
|
|
is acceptable. The J2000 method is best matched to the way
|
|
the argument is handled internally and will deliver the
|
|
optimum resolution. The MJD method and the date & time methods
|
|
are both good compromises between resolution and convenience.
|
|
|
|
2) The obliquity, in radians, is mean of date.
|
|
|
|
3) The result, which is in radians, operates in the following sense:
|
|
|
|
Greenwich apparent ST = GMST + equation of the equinoxes
|
|
|
|
4) The result is compatible with the IAU 2000 resolutions. For
|
|
further details, see IERS Conventions 2003 and Capitaine et al.
|
|
(2002).
|
|
|
|
Called:
|
|
Eect00 equation of the equinoxes complementary terms
|
|
|
|
References:
|
|
|
|
Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
|
|
implement the IAU 2000 definition of UT1", Astronomy &
|
|
Astrophysics, 406, 1135-1149 (2003)
|
|
|
|
McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
|
|
IERS Technical Note No. 32, BKG (2004)
|
|
*/
|
|
func Ee00(date1, date2 float64, epsa, dpsi float64) float64 {
|
|
var ee float64
|
|
|
|
/* Equation of the equinoxes. */
|
|
ee = dpsi*cos(epsa) + Eect00(date1, date2)
|
|
|
|
return ee
|
|
}
|
|
|
|
/*
|
|
Ee00a Equation of the equinoxes, IAU 2000A
|
|
|
|
Equation of the equinoxes, compatible with IAU 2000 resolutions.
|
|
|
|
Given:
|
|
date1,date2 float64 TT as a 2-part Julian Date (Note 1)
|
|
|
|
Returned (function value):
|
|
float64 equation of the equinoxes (Note 2)
|
|
|
|
Notes:
|
|
|
|
1) The TT date date1+date2 is a Julian Date, apportioned in any
|
|
convenient way between the two arguments. For example,
|
|
JD(TT)=2450123.7 could be expressed in any of these ways,
|
|
among others:
|
|
|
|
date1 date2
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in
|
|
cases where the loss of several decimal digits of resolution
|
|
is acceptable. The J2000 method is best matched to the way
|
|
the argument is handled internally and will deliver the
|
|
optimum resolution. The MJD method and the date & time methods
|
|
are both good compromises between resolution and convenience.
|
|
|
|
2) The result, which is in radians, operates in the following sense:
|
|
|
|
Greenwich apparent ST = GMST + equation of the equinoxes
|
|
|
|
3) The result is compatible with the IAU 2000 resolutions. For
|
|
further details, see IERS Conventions 2003 and Capitaine et al.
|
|
(2002).
|
|
|
|
Called:
|
|
Pr00 IAU 2000 precession adjustments
|
|
Obl80 mean obliquity, IAU 1980
|
|
Nut00a nutation, IAU 2000A
|
|
Ee00 equation of the equinoxes, IAU 2000
|
|
|
|
References:
|
|
|
|
Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
|
|
implement the IAU 2000 definition of UT1", Astronomy &
|
|
Astrophysics, 406, 1135-1149 (2003).
|
|
|
|
McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
|
|
IERS Technical Note No. 32, BKG (2004).
|
|
*/
|
|
func Ee00a(date1, date2 float64) float64 {
|
|
var dpsipr, depspr, epsa, dpsi, deps, ee float64
|
|
|
|
/* IAU 2000 precession-rate adjustments. */
|
|
Pr00(date1, date2, &dpsipr, &depspr)
|
|
|
|
/* Mean obliquity, consistent with IAU 2000 precession-nutation. */
|
|
epsa = Obl80(date1, date2) + depspr
|
|
|
|
/* Nutation in longitude. */
|
|
Nut00a(date1, date2, &dpsi, &deps)
|
|
|
|
/* Equation of the equinoxes. */
|
|
ee = Ee00(date1, date2, epsa, dpsi)
|
|
|
|
return ee
|
|
}
|
|
|
|
/*
|
|
Ee00b Equation of the equinoxes, IAU 2000B
|
|
|
|
Equation of the equinoxes, compatible with IAU 2000 resolutions but
|
|
using the truncated nutation model IAU 2000B.
|
|
|
|
Given:
|
|
date1,date2 float64 TT as a 2-part Julian Date (Note 1)
|
|
|
|
Returned (function value):
|
|
float64 equation of the equinoxes (Note 2)
|
|
|
|
Notes:
|
|
|
|
1) The TT date date1+date2 is a Julian Date, apportioned in any
|
|
convenient way between the two arguments. For example,
|
|
JD(TT)=2450123.7 could be expressed in any of these ways,
|
|
among others:
|
|
|
|
date1 date2
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in
|
|
cases where the loss of several decimal digits of resolution
|
|
is acceptable. The J2000 method is best matched to the way
|
|
the argument is handled internally and will deliver the
|
|
optimum resolution. The MJD method and the date & time methods
|
|
are both good compromises between resolution and convenience.
|
|
|
|
2) The result, which is in radians, operates in the following sense:
|
|
|
|
Greenwich apparent ST = GMST + equation of the equinoxes
|
|
|
|
3) The result is compatible with the IAU 2000 resolutions except
|
|
that accuracy has been compromised (1 mas) for the sake of speed.
|
|
For further details, see McCarthy & Luzum (2003), IERS
|
|
Conventions 2003 and Capitaine et al. (2003).
|
|
|
|
Called:
|
|
Pr00 IAU 2000 precession adjustments
|
|
Obl80 mean obliquity, IAU 1980
|
|
Nut00b nutation, IAU 2000B
|
|
Ee00 equation of the equinoxes, IAU 2000
|
|
|
|
References:
|
|
|
|
Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
|
|
implement the IAU 2000 definition of UT1", Astronomy &
|
|
Astrophysics, 406, 1135-1149 (2003)
|
|
|
|
McCarthy, D.D. & Luzum, B.J., "An abridged model of the
|
|
precession-nutation of the celestial pole", Celestial Mechanics &
|
|
Dynamical Astronomy, 85, 37-49 (2003)
|
|
|
|
McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
|
|
IERS Technical Note No. 32, BKG (2004)
|
|
*/
|
|
func Ee00b(date1, date2 float64) float64 {
|
|
var dpsipr, depspr, epsa, dpsi, deps, ee float64
|
|
|
|
/* IAU 2000 precession-rate adjustments. */
|
|
Pr00(date1, date2, &dpsipr, &depspr)
|
|
|
|
/* Mean obliquity, consistent with IAU 2000 precession-nutation. */
|
|
epsa = Obl80(date1, date2) + depspr
|
|
|
|
/* Nutation in longitude. */
|
|
Nut00b(date1, date2, &dpsi, &deps)
|
|
|
|
/* Equation of the equinoxes. */
|
|
ee = Ee00(date1, date2, epsa, dpsi)
|
|
|
|
return ee
|
|
}
|
|
|
|
/*
|
|
Ee06a Equation of the equinoxes, IAU 2006/2000A
|
|
|
|
Equation of the equinoxes, compatible with IAU 2000 resolutions and
|
|
IAU 2006/2000A precession-nutation.
|
|
|
|
Given:
|
|
date1,date2 float64 TT as a 2-part Julian Date (Note 1)
|
|
|
|
Returned (function value):
|
|
float64 equation of the equinoxes (Note 2)
|
|
|
|
Notes:
|
|
|
|
1) The TT date date1+date2 is a Julian Date, apportioned in any
|
|
convenient way between the two arguments. For example,
|
|
JD(TT)=2450123.7 could be expressed in any of these ways,
|
|
among others:
|
|
|
|
date1 date2
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in
|
|
cases where the loss of several decimal digits of resolution
|
|
is acceptable. The J2000 method is best matched to the way
|
|
the argument is handled internally and will deliver the
|
|
optimum resolution. The MJD method and the date & time methods
|
|
are both good compromises between resolution and convenience.
|
|
|
|
2) The result, which is in radians, operates in the following sense:
|
|
|
|
Greenwich apparent ST = GMST + equation of the equinoxes
|
|
|
|
Called:
|
|
Anpm normalize angle into range +/- pi
|
|
Gst06a Greenwich apparent sidereal time, IAU 2006/2000A
|
|
Gmst06 Greenwich mean sidereal time, IAU 2006
|
|
|
|
Reference:
|
|
|
|
McCarthy, D. D., Petit, G. (eds.), 2004, IERS Conventions (2003),
|
|
IERS Technical Note No. 32, BKG
|
|
*/
|
|
func Ee06a(date1, date2 float64) float64 {
|
|
var gst06a, gmst06, ee float64
|
|
|
|
/* Apparent and mean sidereal times. */
|
|
gst06a = Gst06a(0.0, 0.0, date1, date2)
|
|
gmst06 = Gmst06(0.0, 0.0, date1, date2)
|
|
|
|
/* Equation of the equinoxes. */
|
|
ee = Anpm(gst06a - gmst06)
|
|
|
|
return ee
|
|
|
|
}
|
|
|
|
/*
|
|
Eect00 Equation of the equinoxes complementary terms, consistent with
|
|
IAU 2000 resolutions.
|
|
|
|
Given:
|
|
date1,date2 float64 TT as a 2-part Julian Date (Note 1)
|
|
|
|
Returned (function value):
|
|
float64 complementary terms (Note 2)
|
|
|
|
Notes:
|
|
|
|
1) The TT date date1+date2 is a Julian Date, apportioned in any
|
|
convenient way between the two arguments. For example,
|
|
JD(TT)=2450123.7 could be expressed in any of these ways,
|
|
among others:
|
|
|
|
date1 date2
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in
|
|
cases where the loss of several decimal digits of resolution
|
|
is acceptable. The J2000 method is best matched to the way
|
|
the argument is handled internally and will deliver the
|
|
optimum resolution. The MJD method and the date & time methods
|
|
are both good compromises between resolution and convenience.
|
|
|
|
2) The "complementary terms" are part of the equation of the
|
|
equinoxes (EE), classically the difference between apparent and
|
|
mean Sidereal Time:
|
|
|
|
GAST = GMST + EE
|
|
|
|
with:
|
|
|
|
EE = dpsi * cos(eps)
|
|
|
|
where dpsi is the nutation in longitude and eps is the obliquity
|
|
of date. However, if the rotation of the Earth were constant in
|
|
an inertial frame the classical formulation would lead to
|
|
apparent irregularities in the UT1 timescale traceable to side-
|
|
effects of precession-nutation. In order to eliminate these
|
|
effects from UT1, "complementary terms" were introduced in 1994
|
|
(IAU, 1994) and took effect from 1997 (Capitaine and Gontier,
|
|
1993):
|
|
|
|
GAST = GMST + CT + EE
|
|
|
|
By convention, the complementary terms are included as part of
|
|
the equation of the equinoxes rather than as part of the mean
|
|
Sidereal Time. This slightly compromises the "geometrical"
|
|
interpretation of mean sidereal time but is otherwise
|
|
inconsequential.
|
|
|
|
The present function computes CT in the above expression,
|
|
compatible with IAU 2000 resolutions (Capitaine et al., 2002, and
|
|
IERS Conventions 2003).
|
|
|
|
Called:
|
|
Fal03 mean anomaly of the Moon
|
|
Falp03 mean anomaly of the Sun
|
|
Faf03 mean argument of the latitude of the Moon
|
|
Fad03 mean elongation of the Moon from the Sun
|
|
Faom03 mean longitude of the Moon's ascending node
|
|
Fave03 mean longitude of Venus
|
|
Fae03 mean longitude of Earth
|
|
Fapa03 general accumulated precession in longitude
|
|
|
|
References:
|
|
|
|
Capitaine, N. & Gontier, A.-M., Astron.Astrophys., 275,
|
|
645-650 (1993)
|
|
|
|
Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
|
|
implement the IAU 2000 definition of UT1", Astron.Astrophys., 406,
|
|
1135-1149 (2003)
|
|
|
|
IAU Resolution C7, Recommendation 3 (1994)
|
|
|
|
McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
|
|
IERS Technical Note No. 32, BKG (2004)
|
|
*/
|
|
func Eect00(date1, date2 float64) float64 {
|
|
/* Time since J2000.0, in Julian centuries */
|
|
var t float64
|
|
|
|
/* Miscellaneous */
|
|
var i, j int
|
|
var a, s0, s1 float64
|
|
|
|
/* Fundamental arguments */
|
|
var fa [14]float64
|
|
|
|
/* Returned value. */
|
|
var eect float64
|
|
|
|
/* ----------------------------------------- */
|
|
/* The series for the EE complementary terms */
|
|
/* ----------------------------------------- */
|
|
|
|
type TERM struct {
|
|
nfa [8]int /* coefficients of l,l',F,D,Om,LVe,LE,pA */
|
|
s, c float64 /* sine and cosine coefficients */
|
|
}
|
|
|
|
/* Terms of order t^0 */
|
|
e0 := []TERM{
|
|
|
|
/* 1-10 */
|
|
{[8]int{0, 0, 0, 0, 1, 0, 0, 0}, 2640.96e-6, -0.39e-6},
|
|
{[8]int{0, 0, 0, 0, 2, 0, 0, 0}, 63.52e-6, -0.02e-6},
|
|
{[8]int{0, 0, 2, -2, 3, 0, 0, 0}, 11.75e-6, 0.01e-6},
|
|
{[8]int{0, 0, 2, -2, 1, 0, 0, 0}, 11.21e-6, 0.01e-6},
|
|
{[8]int{0, 0, 2, -2, 2, 0, 0, 0}, -4.55e-6, 0.00e-6},
|
|
{[8]int{0, 0, 2, 0, 3, 0, 0, 0}, 2.02e-6, 0.00e-6},
|
|
{[8]int{0, 0, 2, 0, 1, 0, 0, 0}, 1.98e-6, 0.00e-6},
|
|
{[8]int{0, 0, 0, 0, 3, 0, 0, 0}, -1.72e-6, 0.00e-6},
|
|
{[8]int{0, 1, 0, 0, 1, 0, 0, 0}, -1.41e-6, -0.01e-6},
|
|
{[8]int{0, 1, 0, 0, -1, 0, 0, 0}, -1.26e-6, -0.01e-6},
|
|
|
|
/* 11-20 */
|
|
{[8]int{1, 0, 0, 0, -1, 0, 0, 0}, -0.63e-6, 0.00e-6},
|
|
{[8]int{1, 0, 0, 0, 1, 0, 0, 0}, -0.63e-6, 0.00e-6},
|
|
{[8]int{0, 1, 2, -2, 3, 0, 0, 0}, 0.46e-6, 0.00e-6},
|
|
{[8]int{0, 1, 2, -2, 1, 0, 0, 0}, 0.45e-6, 0.00e-6},
|
|
{[8]int{0, 0, 4, -4, 4, 0, 0, 0}, 0.36e-6, 0.00e-6},
|
|
{[8]int{0, 0, 1, -1, 1, -8, 12, 0}, -0.24e-6, -0.12e-6},
|
|
{[8]int{0, 0, 2, 0, 0, 0, 0, 0}, 0.32e-6, 0.00e-6},
|
|
{[8]int{0, 0, 2, 0, 2, 0, 0, 0}, 0.28e-6, 0.00e-6},
|
|
{[8]int{1, 0, 2, 0, 3, 0, 0, 0}, 0.27e-6, 0.00e-6},
|
|
{[8]int{1, 0, 2, 0, 1, 0, 0, 0}, 0.26e-6, 0.00e-6},
|
|
|
|
/* 21-30 */
|
|
{[8]int{0, 0, 2, -2, 0, 0, 0, 0}, -0.21e-6, 0.00e-6},
|
|
{[8]int{0, 1, -2, 2, -3, 0, 0, 0}, 0.19e-6, 0.00e-6},
|
|
{[8]int{0, 1, -2, 2, -1, 0, 0, 0}, 0.18e-6, 0.00e-6},
|
|
{[8]int{0, 0, 0, 0, 0, 8, -13, -1}, -0.10e-6, 0.05e-6},
|
|
{[8]int{0, 0, 0, 2, 0, 0, 0, 0}, 0.15e-6, 0.00e-6},
|
|
{[8]int{2, 0, -2, 0, -1, 0, 0, 0}, -0.14e-6, 0.00e-6},
|
|
{[8]int{1, 0, 0, -2, 1, 0, 0, 0}, 0.14e-6, 0.00e-6},
|
|
{[8]int{0, 1, 2, -2, 2, 0, 0, 0}, -0.14e-6, 0.00e-6},
|
|
{[8]int{1, 0, 0, -2, -1, 0, 0, 0}, 0.14e-6, 0.00e-6},
|
|
{[8]int{0, 0, 4, -2, 4, 0, 0, 0}, 0.13e-6, 0.00e-6},
|
|
|
|
/* 31-33 */
|
|
{[8]int{0, 0, 2, -2, 4, 0, 0, 0}, -0.11e-6, 0.00e-6},
|
|
{[8]int{1, 0, -2, 0, -3, 0, 0, 0}, 0.11e-6, 0.00e-6},
|
|
{[8]int{1, 0, -2, 0, -1, 0, 0, 0}, 0.11e-6, 0.00e-6},
|
|
}
|
|
|
|
/* Terms of order t^1 */
|
|
e1 := []TERM{
|
|
{[8]int{0, 0, 0, 0, 1, 0, 0, 0}, -0.87e-6, 0.00e-6},
|
|
}
|
|
|
|
/* Number of terms in the series */
|
|
NE0 := len(e0)
|
|
NE1 := len(e1)
|
|
|
|
/* ------------------------------------------------------------------ */
|
|
|
|
/* Interval between fundamental epoch J2000.0 and current date (JC). */
|
|
t = ((date1 - DJ00) + date2) / DJC
|
|
|
|
/* Fundamental Arguments (from IERS Conventions 2003) */
|
|
|
|
/* Mean anomaly of the Moon. */
|
|
fa[0] = Fal03(t)
|
|
|
|
/* Mean anomaly of the Sun. */
|
|
fa[1] = Falp03(t)
|
|
|
|
/* Mean longitude of the Moon minus that of the ascending node. */
|
|
fa[2] = Faf03(t)
|
|
|
|
/* Mean elongation of the Moon from the Sun. */
|
|
fa[3] = Fad03(t)
|
|
|
|
/* Mean longitude of the ascending node of the Moon. */
|
|
fa[4] = Faom03(t)
|
|
|
|
/* Mean longitude of Venus. */
|
|
fa[5] = Fave03(t)
|
|
|
|
/* Mean longitude of Earth. */
|
|
fa[6] = Fae03(t)
|
|
|
|
/* General precession in longitude. */
|
|
fa[7] = Fapa03(t)
|
|
|
|
/* Evaluate the EE complementary terms. */
|
|
s0 = 0.0
|
|
s1 = 0.0
|
|
|
|
for i = NE0 - 1; i >= 0; i-- {
|
|
a = 0.0
|
|
for j = 0; j < 8; j++ {
|
|
a += float64(e0[i].nfa[j]) * fa[j]
|
|
}
|
|
s0 += e0[i].s*sin(a) + e0[i].c*cos(a)
|
|
}
|
|
|
|
for i = NE1 - 1; i >= 0; i-- {
|
|
a = 0.0
|
|
for j = 0; j < 8; j++ {
|
|
a += float64(e1[i].nfa[j]) * fa[j]
|
|
}
|
|
s1 += e1[i].s*sin(a) + e1[i].c*cos(a)
|
|
}
|
|
|
|
eect = (s0 + s1*t) * DAS2R
|
|
|
|
return eect
|
|
}
|
|
|
|
/*
|
|
Eqeq94 Equation of the equinoxes, IAU 1994
|
|
|
|
Equation of the equinoxes, IAU 1994 model.
|
|
|
|
Given:
|
|
date1,date2 float64 TDB date (Note 1)
|
|
|
|
Returned (function value):
|
|
float64 equation of the equinoxes (Note 2)
|
|
|
|
Notes:
|
|
|
|
1) The date date1+date2 is a Julian Date, apportioned in any
|
|
convenient way between the two arguments. For example,
|
|
JD(TT)=2450123.7 could be expressed in any of these ways,
|
|
among others:
|
|
|
|
date1 date2
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in
|
|
cases where the loss of several decimal digits of resolution
|
|
is acceptable. The J2000 method is best matched to the way
|
|
the argument is handled internally and will deliver the
|
|
optimum resolution. The MJD method and the date & time methods
|
|
are both good compromises between resolution and convenience.
|
|
|
|
2) The result, which is in radians, operates in the following sense:
|
|
|
|
Greenwich apparent ST = GMST + equation of the equinoxes
|
|
|
|
Called:
|
|
Anpm normalize angle into range +/- pi
|
|
Nut80 nutation, IAU 1980
|
|
Obl80 mean obliquity, IAU 1980
|
|
|
|
References:
|
|
|
|
IAU Resolution C7, Recommendation 3 (1994).
|
|
|
|
Capitaine, N. & Gontier, A.-M., 1993, Astron.Astrophys., 275,
|
|
645-650.
|
|
*/
|
|
func Eqeq94(date1, date2 float64) float64 {
|
|
var t, om, dpsi, deps, eps0, ee float64
|
|
|
|
/* Interval between fundamental epoch J2000.0 and given date (JC). */
|
|
t = ((date1 - DJ00) + date2) / DJC
|
|
|
|
/* Longitude of the mean ascending node of the lunar orbit on the */
|
|
/* ecliptic, measured from the mean equinox of date. */
|
|
om = Anpm((450160.280+(-482890.539+
|
|
(7.455+0.008*t)*t)*t)*DAS2R +
|
|
fmod(-5.0*t, 1.0)*D2PI)
|
|
|
|
/* Nutation components and mean obliquity. */
|
|
Nut80(date1, date2, &dpsi, &deps)
|
|
eps0 = Obl80(date1, date2)
|
|
|
|
/* Equation of the equinoxes. */
|
|
ee = dpsi*cos(eps0) + DAS2R*(0.00264*sin(om)+0.000063*sin(om+om))
|
|
|
|
return ee
|
|
}
|
|
|
|
/*
|
|
Era00 Earth Rotation Angle, IAU 2000
|
|
|
|
Given:
|
|
dj1,dj2 float64 UT1 as a 2-part Julian Date (see note)
|
|
|
|
Returned (function value):
|
|
float64 Earth rotation angle (radians), range 0-2pi
|
|
|
|
Notes:
|
|
|
|
1) The UT1 date dj1+dj2 is a Julian Date, apportioned in any
|
|
convenient way between the arguments dj1 and dj2. For example,
|
|
JD(UT1)=2450123.7 could be expressed in any of these ways,
|
|
among others:
|
|
|
|
dj1 dj2
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in
|
|
cases where the loss of several decimal digits of resolution
|
|
is acceptable. The J2000 and MJD methods are good compromises
|
|
between resolution and convenience. The date & time method is
|
|
best matched to the algorithm used: maximum precision is
|
|
delivered when the dj1 argument is for 0hrs UT1 on the day in
|
|
question and the dj2 argument lies in the range 0 to 1, or vice
|
|
versa.
|
|
|
|
2) The algorithm is adapted from Expression 22 of Capitaine et al.
|
|
2000. The time argument has been expressed in days directly,
|
|
and, to retain precision, integer contributions have been
|
|
eliminated. The same formulation is given in IERS Conventions
|
|
(2003), Chap. 5, Eq. 14.
|
|
|
|
Called:
|
|
Anp normalize angle into range 0 to 2pi
|
|
|
|
References:
|
|
|
|
Capitaine N., Guinot B. and McCarthy D.D, 2000, Astron.
|
|
Astrophys., 355, 398-405.
|
|
|
|
McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
|
|
IERS Technical Note No. 32, BKG (2004)
|
|
*/
|
|
func Era00(dj1, dj2 float64) float64 {
|
|
var d1, d2, t, f, theta float64
|
|
|
|
/* Days since fundamental epoch. */
|
|
if dj1 < dj2 {
|
|
d1 = dj1
|
|
d2 = dj2
|
|
} else {
|
|
d1 = dj2
|
|
d2 = dj1
|
|
}
|
|
t = d1 + (d2 - DJ00)
|
|
|
|
/* Fractional part of T (days). */
|
|
f = fmod(d1, 1.0) + fmod(d2, 1.0)
|
|
|
|
/* Earth rotation angle at this UT1. */
|
|
theta = Anp(D2PI * (f + 0.7790572732640 + 0.00273781191135448*t))
|
|
|
|
return theta
|
|
|
|
}
|
|
|
|
/*
|
|
Gmst00 Greenwich Mean Sidereal Time, IAU 2000
|
|
|
|
Greenwich mean sidereal time (model consistent with IAU 2000
|
|
resolutions).
|
|
|
|
Given:
|
|
uta,utb float64 UT1 as a 2-part Julian Date (Notes 1,2)
|
|
tta,ttb float64 TT as a 2-part Julian Date (Notes 1,2)
|
|
|
|
Returned (function value):
|
|
float64 Greenwich mean sidereal time (radians)
|
|
|
|
Notes:
|
|
|
|
1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
|
|
Julian Dates, apportioned in any convenient way between the
|
|
argument pairs. For example, JD(UT1)=2450123.7 could be
|
|
expressed in any of these ways, among others:
|
|
|
|
Part A Part B
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in
|
|
cases where the loss of several decimal digits of resolution
|
|
is acceptable (in the case of UT; the TT is not at all critical
|
|
in this respect). The J2000 and MJD methods are good compromises
|
|
between resolution and convenience. For UT, the date & time
|
|
method is best matched to the algorithm that is used by the Earth
|
|
Rotation Angle function, called internally: maximum precision is
|
|
delivered when the uta argument is for 0hrs UT1 on the day in
|
|
question and the utb argument lies in the range 0 to 1, or vice
|
|
versa.
|
|
|
|
2) Both UT1 and TT are required, UT1 to predict the Earth rotation
|
|
and TT to predict the effects of precession. If UT1 is used for
|
|
both purposes, errors of order 100 microarcseconds result.
|
|
|
|
3) This GMST is compatible with the IAU 2000 resolutions and must be
|
|
used only in conjunction with other IAU 2000 compatible
|
|
components such as precession-nutation and equation of the
|
|
equinoxes.
|
|
|
|
4) The result is returned in the range 0 to 2pi.
|
|
|
|
5) The algorithm is from Capitaine et al. (2003) and IERS
|
|
Conventions 2003.
|
|
|
|
Called:
|
|
Era00 Earth rotation angle, IAU 2000
|
|
Anp normalize angle into range 0 to 2pi
|
|
|
|
References:
|
|
|
|
Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
|
|
implement the IAU 2000 definition of UT1", Astronomy &
|
|
Astrophysics, 406, 1135-1149 (2003)
|
|
|
|
McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
|
|
IERS Technical Note No. 32, BKG (2004)
|
|
*/
|
|
func Gmst00(uta, utb float64, tta, ttb float64) float64 {
|
|
var t, gmst float64
|
|
|
|
/* TT Julian centuries since J2000.0. */
|
|
t = ((tta - DJ00) + ttb) / DJC
|
|
|
|
/* Greenwich Mean Sidereal Time, IAU 2000. */
|
|
gmst = Anp(Era00(uta, utb) +
|
|
(0.014506+
|
|
(4612.15739966+
|
|
(1.39667721+
|
|
(-0.00009344+
|
|
(0.00001882)*t)*t)*t)*t)*DAS2R)
|
|
|
|
return gmst
|
|
}
|
|
|
|
/*
|
|
Gmst06 Greenwich Mean Sidereal Time, IAU 2006
|
|
|
|
Greenwich mean sidereal time (consistent with IAU 2006 precession).
|
|
|
|
Given:
|
|
uta,utb float64 UT1 as a 2-part Julian Date (Notes 1,2)
|
|
tta,ttb float64 TT as a 2-part Julian Date (Notes 1,2)
|
|
|
|
Returned (function value):
|
|
float64 Greenwich mean sidereal time (radians)
|
|
|
|
Notes:
|
|
|
|
1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
|
|
Julian Dates, apportioned in any convenient way between the
|
|
argument pairs. For example, JD=2450123.7 could be expressed in
|
|
any of these ways, among others:
|
|
|
|
Part A Part B
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in
|
|
cases where the loss of several decimal digits of resolution
|
|
is acceptable (in the case of UT; the TT is not at all critical
|
|
in this respect). The J2000 and MJD methods are good compromises
|
|
between resolution and convenience. For UT, the date & time
|
|
method is best matched to the algorithm that is used by the Earth
|
|
rotation angle function, called internally: maximum precision is
|
|
delivered when the uta argument is for 0hrs UT1 on the day in
|
|
question and the utb argument lies in the range 0 to 1, or vice
|
|
versa.
|
|
|
|
2) Both UT1 and TT are required, UT1 to predict the Earth rotation
|
|
and TT to predict the effects of precession. If UT1 is used for
|
|
both purposes, errors of order 100 microarcseconds result.
|
|
|
|
3) This GMST is compatible with the IAU 2006 precession and must not
|
|
be used with other precession models.
|
|
|
|
4) The result is returned in the range 0 to 2pi.
|
|
|
|
Called:
|
|
Era00 Earth rotation angle, IAU 2000
|
|
Anp normalize angle into range 0 to 2pi
|
|
|
|
Reference:
|
|
|
|
Capitaine, N., Wallace, P.T. & Chapront, J., 2005,
|
|
Astron.Astrophys. 432, 355
|
|
*/
|
|
func Gmst06(uta, utb float64, tta, ttb float64) float64 {
|
|
var t, gmst float64
|
|
|
|
/* TT Julian centuries since J2000.0. */
|
|
t = ((tta - DJ00) + ttb) / DJC
|
|
|
|
/* Greenwich mean sidereal time, IAU 2006. */
|
|
gmst = Anp(Era00(uta, utb) +
|
|
(0.014506+
|
|
(4612.156534+
|
|
(1.3915817+
|
|
(-0.00000044+
|
|
(-0.000029956+
|
|
(-0.0000000368)*t)*t)*t)*t)*t)*DAS2R)
|
|
|
|
return gmst
|
|
}
|
|
|
|
/*
|
|
Gmst82 Greenwich Mean Sidereal Time, IAU 1982
|
|
|
|
Universal Time to Greenwich mean sidereal time (IAU 1982 model).
|
|
|
|
Given:
|
|
dj1,dj2 float64 UT1 Julian Date (see note)
|
|
|
|
Returned (function value):
|
|
float64 Greenwich mean sidereal time (radians)
|
|
|
|
Notes:
|
|
|
|
1) The UT1 date dj1+dj2 is a Julian Date, apportioned in any
|
|
convenient way between the arguments dj1 and dj2. For example,
|
|
JD(UT1)=2450123.7 could be expressed in any of these ways,
|
|
among others:
|
|
|
|
dj1 dj2
|
|
|
|
2450123.7 0 (JD method)
|
|
2451545 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in
|
|
cases where the loss of several decimal digits of resolution
|
|
is acceptable. The J2000 and MJD methods are good compromises
|
|
between resolution and convenience. The date & time method is
|
|
best matched to the algorithm used: maximum accuracy (or, at
|
|
least, minimum noise) is delivered when the dj1 argument is for
|
|
0hrs UT1 on the day in question and the dj2 argument lies in the
|
|
range 0 to 1, or vice versa.
|
|
|
|
2) The algorithm is based on the IAU 1982 expression. This is
|
|
always described as giving the GMST at 0 hours UT1. In fact, it
|
|
gives the difference between the GMST and the UT, the steady
|
|
4-minutes-per-day drawing-ahead of ST with respect to UT. When
|
|
whole days are ignored, the expression happens to equal the GMST
|
|
at 0 hours UT1 each day.
|
|
|
|
3) In this function, the entire UT1 (the sum of the two arguments
|
|
dj1 and dj2) is used directly as the argument for the standard
|
|
formula, the constant term of which is adjusted by 12 hours to
|
|
take account of the noon phasing of Julian Date. The UT1 is then
|
|
added, but omitting whole days to conserve accuracy.
|
|
|
|
Called:
|
|
Anp normalize angle into range 0 to 2pi
|
|
|
|
References:
|
|
|
|
Transactions of the International Astronomical Union,
|
|
XVIII B, 67 (1983).
|
|
|
|
Aoki et al., Astron.Astrophys., 105, 359-361 (1982).
|
|
*/
|
|
func Gmst82(dj1, dj2 float64) float64 {
|
|
/* Coefficients of IAU 1982 GMST-UT1 model */
|
|
A := 24110.54841 - DAYSEC/2.0
|
|
B := 8640184.812866
|
|
C := 0.093104
|
|
D := -6.2e-6
|
|
|
|
/* The first constant, A, has to be adjusted by 12 hours because the */
|
|
/* UT1 is supplied as a Julian date, which begins at noon. */
|
|
|
|
var d1, d2, t, f, gmst float64
|
|
|
|
/* Julian centuries since fundamental epoch. */
|
|
if dj1 < dj2 {
|
|
d1 = dj1
|
|
d2 = dj2
|
|
} else {
|
|
d1 = dj2
|
|
d2 = dj1
|
|
}
|
|
t = (d1 + (d2 - DJ00)) / DJC
|
|
|
|
/* Fractional part of JD(UT1), in seconds. */
|
|
f = DAYSEC * (fmod(d1, 1.0) + fmod(d2, 1.0))
|
|
|
|
/* GMST at this UT1. */
|
|
gmst = Anp(DS2R * ((A + (B+(C+D*t)*t)*t) + f))
|
|
|
|
return gmst
|
|
}
|
|
|
|
/*
|
|
Gst00a Greenwich Apparent Sidereal Time, IAU 2000A
|
|
|
|
Greenwich apparent sidereal time (consistent with IAU 2000
|
|
resolutions).
|
|
|
|
Given:
|
|
uta,utb float64 UT1 as a 2-part Julian Date (Notes 1,2)
|
|
tta,ttb float64 TT as a 2-part Julian Date (Notes 1,2)
|
|
|
|
Returned (function value):
|
|
float64 Greenwich apparent sidereal time (radians)
|
|
|
|
Notes:
|
|
|
|
1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
|
|
Julian Dates, apportioned in any convenient way between the
|
|
argument pairs. For example, JD(UT1)=2450123.7 could be
|
|
expressed in any of these ways, among others:
|
|
|
|
uta utb
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in
|
|
cases where the loss of several decimal digits of resolution
|
|
is acceptable (in the case of UT; the TT is not at all critical
|
|
in this respect). The J2000 and MJD methods are good compromises
|
|
between resolution and convenience. For UT, the date & time
|
|
method is best matched to the algorithm that is used by the Earth
|
|
Rotation Angle function, called internally: maximum precision is
|
|
delivered when the uta argument is for 0hrs UT1 on the day in
|
|
question and the utb argument lies in the range 0 to 1, or vice
|
|
versa.
|
|
|
|
2) Both UT1 and TT are required, UT1 to predict the Earth rotation
|
|
and TT to predict the effects of precession-nutation. If UT1 is
|
|
used for both purposes, errors of order 100 microarcseconds
|
|
result.
|
|
|
|
3) This GAST is compatible with the IAU 2000 resolutions and must be
|
|
used only in conjunction with other IAU 2000 compatible
|
|
components such as precession-nutation.
|
|
|
|
4) The result is returned in the range 0 to 2pi.
|
|
|
|
5) The algorithm is from Capitaine et al. (2003) and IERS
|
|
Conventions 2003.
|
|
|
|
Called:
|
|
Gmst00 Greenwich mean sidereal time, IAU 2000
|
|
Ee00a equation of the equinoxes, IAU 2000A
|
|
Anp normalize angle into range 0 to 2pi
|
|
|
|
References:
|
|
|
|
Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
|
|
implement the IAU 2000 definition of UT1", Astronomy &
|
|
Astrophysics, 406, 1135-1149 (2003)
|
|
|
|
McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
|
|
IERS Technical Note No. 32, BKG (2004)
|
|
*/
|
|
func Gst00a(uta, utb float64, tta, ttb float64) float64 {
|
|
var gmst00, ee00a, gst float64
|
|
|
|
gmst00 = Gmst00(uta, utb, tta, ttb)
|
|
ee00a = Ee00a(tta, ttb)
|
|
gst = Anp(gmst00 + ee00a)
|
|
|
|
return gst
|
|
}
|
|
|
|
/*
|
|
Gst00b Greenwich Apparent Sidereal Time, IAU 2000B
|
|
|
|
Greenwich apparent sidereal time (consistent with IAU 2000
|
|
resolutions but using the truncated nutation model IAU 2000B).
|
|
|
|
Given:
|
|
uta,utb float64 UT1 as a 2-part Julian Date (Notes 1,2)
|
|
|
|
Returned (function value):
|
|
float64 Greenwich apparent sidereal time (radians)
|
|
|
|
Notes:
|
|
|
|
1) The UT1 date uta+utb is a Julian Date, apportioned in any
|
|
convenient way between the argument pair. For example,
|
|
JD(UT1)=2450123.7 could be expressed in any of these ways,
|
|
among others:
|
|
|
|
uta utb
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in cases
|
|
where the loss of several decimal digits of resolution is
|
|
acceptable. The J2000 and MJD methods are good compromises
|
|
between resolution and convenience. For UT, the date & time
|
|
method is best matched to the algorithm that is used by the Earth
|
|
Rotation Angle function, called internally: maximum precision is
|
|
delivered when the uta argument is for 0hrs UT1 on the day in
|
|
question and the utb argument lies in the range 0 to 1, or vice
|
|
versa.
|
|
|
|
2) The result is compatible with the IAU 2000 resolutions, except
|
|
that accuracy has been compromised for the sake of speed and
|
|
convenience in two respects:
|
|
|
|
. UT is used instead of TDB (or TT) to compute the precession
|
|
component of GMST and the equation of the equinoxes. This
|
|
results in errors of order 0.1 mas at present.
|
|
|
|
. The IAU 2000B abridged nutation model (McCarthy & Luzum, 2003)
|
|
is used, introducing errors of up to 1 mas.
|
|
|
|
3) This GAST is compatible with the IAU 2000 resolutions and must be
|
|
used only in conjunction with other IAU 2000 compatible
|
|
components such as precession-nutation.
|
|
|
|
4) The result is returned in the range 0 to 2pi.
|
|
|
|
5) The algorithm is from Capitaine et al. (2003) and IERS
|
|
Conventions 2003.
|
|
|
|
Called:
|
|
Gmst00 Greenwich mean sidereal time, IAU 2000
|
|
Ee00b equation of the equinoxes, IAU 2000B
|
|
Anp normalize angle into range 0 to 2pi
|
|
|
|
References:
|
|
|
|
Capitaine, N., Wallace, P.T. and McCarthy, D.D., "Expressions to
|
|
implement the IAU 2000 definition of UT1", Astronomy &
|
|
Astrophysics, 406, 1135-1149 (2003)
|
|
|
|
McCarthy, D.D. & Luzum, B.J., "An abridged model of the
|
|
precession-nutation of the celestial pole", Celestial Mechanics &
|
|
Dynamical Astronomy, 85, 37-49 (2003)
|
|
|
|
McCarthy, D. D., Petit, G. (eds.), IERS Conventions (2003),
|
|
IERS Technical Note No. 32, BKG (2004)
|
|
*/
|
|
func Gst00b(uta, utb float64) float64 {
|
|
var gmst00, ee00b, gst float64
|
|
|
|
gmst00 = Gmst00(uta, utb, uta, utb)
|
|
ee00b = Ee00b(uta, utb)
|
|
gst = Anp(gmst00 + ee00b)
|
|
|
|
return gst
|
|
}
|
|
|
|
/*
|
|
Gst06 Greenwich Apparent Sidereal Time, IAU 2006 given NPB matrix
|
|
|
|
Given:
|
|
uta,utb float64 UT1 as a 2-part Julian Date (Notes 1,2)
|
|
tta,ttb float64 TT as a 2-part Julian Date (Notes 1,2)
|
|
rnpb [3][3]float64 nutation x precession x bias matrix
|
|
|
|
Returned (function value):
|
|
float64 Greenwich apparent sidereal time (radians)
|
|
|
|
Notes:
|
|
|
|
1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
|
|
Julian Dates, apportioned in any convenient way between the
|
|
argument pairs. For example, JD(UT1)=2450123.7 could be
|
|
expressed in any of these ways, among others:
|
|
|
|
uta utb
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in
|
|
cases where the loss of several decimal digits of resolution
|
|
is acceptable (in the case of UT; the TT is not at all critical
|
|
in this respect). The J2000 and MJD methods are good compromises
|
|
between resolution and convenience. For UT, the date & time
|
|
method is best matched to the algorithm that is used by the Earth
|
|
rotation angle function, called internally: maximum precision is
|
|
delivered when the uta argument is for 0hrs UT1 on the day in
|
|
question and the utb argument lies in the range 0 to 1, or vice
|
|
versa.
|
|
|
|
2) Both UT1 and TT are required, UT1 to predict the Earth rotation
|
|
and TT to predict the effects of precession-nutation. If UT1 is
|
|
used for both purposes, errors of order 100 microarcseconds
|
|
result.
|
|
|
|
3) Although the function uses the IAU 2006 series for s+XY/2, it is
|
|
otherwise independent of the precession-nutation model and can in
|
|
practice be used with any equinox-based NPB matrix.
|
|
|
|
4) The result is returned in the range 0 to 2pi.
|
|
|
|
Called:
|
|
Bpn2xy extract CIP X,Y coordinates from NPB matrix
|
|
S06 the CIO locator s, given X,Y, IAU 2006
|
|
Anp normalize angle into range 0 to 2pi
|
|
Era00 Earth rotation angle, IAU 2000
|
|
Eors equation of the origins, given NPB matrix and s
|
|
|
|
Reference:
|
|
|
|
Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
|
|
*/
|
|
func Gst06(uta, utb float64, tta, ttb float64, rnpb [3][3]float64) float64 {
|
|
var x, y, s, era, eors, gst float64
|
|
|
|
/* Extract CIP coordinates. */
|
|
Bpn2xy(rnpb, &x, &y)
|
|
|
|
/* The CIO locator, s. */
|
|
s = S06(tta, ttb, x, y)
|
|
|
|
/* Greenwich apparent sidereal time. */
|
|
era = Era00(uta, utb)
|
|
eors = Eors(rnpb, s)
|
|
gst = Anp(era - eors)
|
|
|
|
return gst
|
|
}
|
|
|
|
/*
|
|
Gst06a Greenwich Apparent Sidereal Time, IAU 2006/2000A
|
|
|
|
Greenwich apparent sidereal time (consistent with IAU 2000 and 2006
|
|
resolutions).
|
|
|
|
Given:
|
|
uta,utb float64 UT1 as a 2-part Julian Date (Notes 1,2)
|
|
tta,ttb float64 TT as a 2-part Julian Date (Notes 1,2)
|
|
|
|
Returned (function value):
|
|
float64 Greenwich apparent sidereal time (radians)
|
|
|
|
Notes:
|
|
|
|
1) The UT1 and TT dates uta+utb and tta+ttb respectively, are both
|
|
Julian Dates, apportioned in any convenient way between the
|
|
argument pairs. For example, JD(UT1)=2450123.7 could be
|
|
expressed in any of these ways, among others:
|
|
|
|
uta utb
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in
|
|
cases where the loss of several decimal digits of resolution
|
|
is acceptable (in the case of UT; the TT is not at all critical
|
|
in this respect). The J2000 and MJD methods are good compromises
|
|
between resolution and convenience. For UT, the date & time
|
|
method is best matched to the algorithm that is used by the Earth
|
|
rotation angle function, called internally: maximum precision is
|
|
delivered when the uta argument is for 0hrs UT1 on the day in
|
|
question and the utb argument lies in the range 0 to 1, or vice
|
|
versa.
|
|
|
|
2) Both UT1 and TT are required, UT1 to predict the Earth rotation
|
|
and TT to predict the effects of precession-nutation. If UT1 is
|
|
used for both purposes, errors of order 100 microarcseconds
|
|
result.
|
|
|
|
3) This GAST is compatible with the IAU 2000/2006 resolutions and
|
|
must be used only in conjunction with IAU 2006 precession and
|
|
IAU 2000A nutation.
|
|
|
|
4) The result is returned in the range 0 to 2pi.
|
|
|
|
Called:
|
|
Pnm06a classical NPB matrix, IAU 2006/2000A
|
|
Gst06 Greenwich apparent ST, IAU 2006, given NPB matrix
|
|
|
|
Reference:
|
|
|
|
Wallace, P.T. & Capitaine, N., 2006, Astron.Astrophys. 459, 981
|
|
*/
|
|
func Gst06a(uta, utb float64, tta, ttb float64) float64 {
|
|
var rnpb [3][3]float64
|
|
var gst float64
|
|
|
|
/* Classical nutation x precession x bias matrix, IAU 2000A. */
|
|
Pnm06a(tta, ttb, &rnpb)
|
|
|
|
/* Greenwich apparent sidereal time. */
|
|
gst = Gst06(uta, utb, tta, ttb, rnpb)
|
|
|
|
return gst
|
|
}
|
|
|
|
/*
|
|
Gst94 Greenwich Apparent Sidereal Time, IAU 1994
|
|
|
|
Greenwich apparent sidereal time (consistent with IAU 1982/94
|
|
resolutions).
|
|
|
|
Given:
|
|
uta,utb float64 UT1 as a 2-part Julian Date (Notes 1,2)
|
|
|
|
Returned (function value):
|
|
float64 Greenwich apparent sidereal time (radians)
|
|
|
|
Notes:
|
|
|
|
1) The UT1 date uta+utb is a Julian Date, apportioned in any
|
|
convenient way between the argument pair. For example,
|
|
JD(UT1)=2450123.7 could be expressed in any of these ways, among
|
|
others:
|
|
|
|
uta utb
|
|
|
|
2450123.7 0.0 (JD method)
|
|
2451545.0 -1421.3 (J2000 method)
|
|
2400000.5 50123.2 (MJD method)
|
|
2450123.5 0.2 (date & time method)
|
|
|
|
The JD method is the most natural and convenient to use in cases
|
|
where the loss of several decimal digits of resolution is
|
|
acceptable. The J2000 and MJD methods are good compromises
|
|
between resolution and convenience. For UT, the date & time
|
|
method is best matched to the algorithm that is used by the Earth
|
|
Rotation Angle function, called internally: maximum precision is
|
|
delivered when the uta argument is for 0hrs UT1 on the day in
|
|
question and the utb argument lies in the range 0 to 1, or vice
|
|
versa.
|
|
|
|
2) The result is compatible with the IAU 1982 and 1994 resolutions,
|
|
except that accuracy has been compromised for the sake of
|
|
convenience in that UT is used instead of TDB (or TT) to compute
|
|
the equation of the equinoxes.
|
|
|
|
3) This GAST must be used only in conjunction with contemporaneous
|
|
IAU standards such as 1976 precession, 1980 obliquity and 1982
|
|
nutation. It is not compatible with the IAU 2000 resolutions.
|
|
|
|
4) The result is returned in the range 0 to 2pi.
|
|
|
|
Called:
|
|
Gmst82 Greenwich mean sidereal time, IAU 1982
|
|
Eqeq94 equation of the equinoxes, IAU 1994
|
|
Anp normalize angle into range 0 to 2pi
|
|
|
|
References:
|
|
|
|
Explanatory Supplement to the Astronomical Almanac,
|
|
P. Kenneth Seidelmann (ed), University Science Books (1992)
|
|
|
|
IAU Resolution C7, Recommendation 3 (1994)
|
|
*/
|
|
func Gst94(uta, utb float64) float64 {
|
|
var gmst82, eqeq94, gst float64
|
|
|
|
gmst82 = Gmst82(uta, utb)
|
|
eqeq94 = Eqeq94(uta, utb)
|
|
gst = Anp(gmst82 + eqeq94)
|
|
|
|
return gst
|
|
}
|