Nutation, IAU 1980 model.
Status: canonical model.
The DATE DATE1+DATE2 is a Julian Date, apportioned in any convenient way between the two arguments. For example, JD(TDB)=2450123.7 could be expressed in any of these ways, among others:
DATE1 DATE2
2450123.7D0 0D0 (JD method)
2451545D0 -1421.3D0 (J2000 method)
2400000.5D0 50123.2D0 (MJD method)
2450123.5D0 0.2D0 (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.
The nutation components are with respect to the ecliptic of date.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | date1 | TT as a 2-part Julian Date (Note 1) |
||
real(kind=wp), | intent(in) | :: | date2 | TT as a 2-part Julian Date (Note 1) |
||
real(kind=wp), | intent(out) | :: | dpsi | nutation in longitude (radians) |
||
real(kind=wp), | intent(out) | :: | deps | nutation in obliquity (radians) |
subroutine NUT80 ( date1, date2, dpsi, deps )
implicit none
real(wp),intent(in) :: date1 !! TT as a 2-part Julian Date (Note 1)
real(wp),intent(in) :: date2 !! TT as a 2-part Julian Date (Note 1)
real(wp),intent(out) :: dpsi !! nutation in longitude (radians)
real(wp),intent(out) :: deps !! nutation in obliquity (radians)
! Units of 0.1 milliarcsecond to radians
real(wp),parameter :: u2r = das2r/1.0e4_wp
real(wp) :: t, el, elp, f, d, om, dp, de, arg, s, c
integer :: i, j
! ------------------------------------------------
! Table of multiples of arguments and coefficients
! ------------------------------------------------
!
! The coefficient values are in 0.1 mas units and the rates of change
! are in mas per Julian millennium.
! Multiple of Longitude Obliquity
! L L' F D Omega coeff. of sin coeff. of cos
! 1 t 1 t
real(wp),dimension(9,106),parameter :: x = reshape([ &
0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 1.0_wp, -171996.0_wp, -1742.0_wp, 92025.0_wp, 89.0_wp, &
0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 2.0_wp, 2062.0_wp, 2.0_wp, -895.0_wp, 5.0_wp, &
-2.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 1.0_wp, 46.0_wp, 0.0_wp, -24.0_wp, 0.0_wp, &
2.0_wp, 0.0_wp, -2.0_wp, 0.0_wp, 0.0_wp, 11.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
-2.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 2.0_wp, -3.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, &
1.0_wp, -1.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, -3.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, -2.0_wp, 2.0_wp, -2.0_wp, 1.0_wp, -2.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, &
2.0_wp, 0.0_wp, -2.0_wp, 0.0_wp, 1.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 2.0_wp, -2.0_wp, 2.0_wp, -13187.0_wp, -16.0_wp, 5736.0_wp, -31.0_wp, &
0.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 1426.0_wp, -34.0_wp, 54.0_wp, -1.0_wp, &
0.0_wp, 1.0_wp, 2.0_wp, -2.0_wp, 2.0_wp, -517.0_wp, 12.0_wp, 224.0_wp, -6.0_wp, &
0.0_wp, -1.0_wp, 2.0_wp, -2.0_wp, 2.0_wp, 217.0_wp, -5.0_wp, -95.0_wp, 3.0_wp, &
0.0_wp, 0.0_wp, 2.0_wp, -2.0_wp, 1.0_wp, 129.0_wp, 1.0_wp, -70.0_wp, 0.0_wp, &
2.0_wp, 0.0_wp, 0.0_wp, -2.0_wp, 0.0_wp, 48.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 2.0_wp, -2.0_wp, 0.0_wp, -22.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 2.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 17.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 1.0_wp, -15.0_wp, 0.0_wp, 9.0_wp, 0.0_wp, &
0.0_wp, 2.0_wp, 2.0_wp, -2.0_wp, 2.0_wp, -16.0_wp, 1.0_wp, 7.0_wp, 0.0_wp, &
0.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 1.0_wp, -12.0_wp, 0.0_wp, 6.0_wp, 0.0_wp, &
-2.0_wp, 0.0_wp, 0.0_wp, 2.0_wp, 1.0_wp, -6.0_wp, 0.0_wp, 3.0_wp, 0.0_wp, &
0.0_wp, -1.0_wp, 2.0_wp, -2.0_wp, 1.0_wp, -5.0_wp, 0.0_wp, 3.0_wp, 0.0_wp, &
2.0_wp, 0.0_wp, 0.0_wp, -2.0_wp, 1.0_wp, 4.0_wp, 0.0_wp, -2.0_wp, 0.0_wp, &
0.0_wp, 1.0_wp, 2.0_wp, -2.0_wp, 1.0_wp, 4.0_wp, 0.0_wp, -2.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, -4.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
2.0_wp, 1.0_wp, 0.0_wp, -2.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, -2.0_wp, 2.0_wp, 1.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 1.0_wp, -2.0_wp, 2.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 2.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
-1.0_wp, 0.0_wp, 0.0_wp, 1.0_wp, 1.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 1.0_wp, 2.0_wp, -2.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 2.0_wp, -2274.0_wp, -2.0_wp, 977.0_wp, -5.0_wp, &
1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 712.0_wp, 1.0_wp, -7.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 1.0_wp, -386.0_wp, -4.0_wp, 200.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 2.0_wp, -301.0_wp, 0.0_wp, 129.0_wp, -1.0_wp, &
1.0_wp, 0.0_wp, 0.0_wp, -2.0_wp, 0.0_wp, -158.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, &
-1.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 2.0_wp, 123.0_wp, 0.0_wp, -53.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 63.0_wp, 0.0_wp, -2.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 1.0_wp, 63.0_wp, 1.0_wp, -33.0_wp, 0.0_wp, &
-1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 1.0_wp, -58.0_wp, -1.0_wp, 32.0_wp, 0.0_wp, &
-1.0_wp, 0.0_wp, 2.0_wp, 2.0_wp, 2.0_wp, -59.0_wp, 0.0_wp, 26.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 1.0_wp, -51.0_wp, 0.0_wp, 27.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 2.0_wp, 2.0_wp, 2.0_wp, -38.0_wp, 0.0_wp, 16.0_wp, 0.0_wp, &
2.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 29.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 2.0_wp, -2.0_wp, 2.0_wp, 29.0_wp, 0.0_wp, -12.0_wp, 0.0_wp, &
2.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 2.0_wp, -31.0_wp, 0.0_wp, 13.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 0.0_wp, 26.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, &
-1.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 1.0_wp, 21.0_wp, 0.0_wp, -10.0_wp, 0.0_wp, &
-1.0_wp, 0.0_wp, 0.0_wp, 2.0_wp, 1.0_wp, 16.0_wp, 0.0_wp, -8.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 0.0_wp, -2.0_wp, 1.0_wp, -13.0_wp, 0.0_wp, 7.0_wp, 0.0_wp, &
-1.0_wp, 0.0_wp, 2.0_wp, 2.0_wp, 1.0_wp, -10.0_wp, 0.0_wp, 5.0_wp, 0.0_wp, &
1.0_wp, 1.0_wp, 0.0_wp, -2.0_wp, 0.0_wp, -7.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 1.0_wp, 2.0_wp, 0.0_wp, 2.0_wp, 7.0_wp, 0.0_wp, -3.0_wp, 0.0_wp, &
0.0_wp, -1.0_wp, 2.0_wp, 0.0_wp, 2.0_wp, -7.0_wp, 0.0_wp, 3.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 2.0_wp, 2.0_wp, 2.0_wp, -8.0_wp, 0.0_wp, 3.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 6.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
2.0_wp, 0.0_wp, 2.0_wp, -2.0_wp, 2.0_wp, 6.0_wp, 0.0_wp, -3.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 0.0_wp, 2.0_wp, 1.0_wp, -6.0_wp, 0.0_wp, 3.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 2.0_wp, 2.0_wp, 1.0_wp, -7.0_wp, 0.0_wp, 3.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 2.0_wp, -2.0_wp, 1.0_wp, 6.0_wp, 0.0_wp, -3.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 0.0_wp, -2.0_wp, 1.0_wp, -5.0_wp, 0.0_wp, 3.0_wp, 0.0_wp, &
1.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 5.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
2.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 1.0_wp, -5.0_wp, 0.0_wp, 3.0_wp, 0.0_wp, &
0.0_wp, 1.0_wp, 0.0_wp, -2.0_wp, 0.0_wp, -4.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, -2.0_wp, 0.0_wp, 0.0_wp, 4.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, -4.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
1.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, -3.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 0.0_wp, 3.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
1.0_wp, -1.0_wp, 2.0_wp, 0.0_wp, 2.0_wp, -3.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, &
-1.0_wp, -1.0_wp, 2.0_wp, 2.0_wp, 2.0_wp, -3.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, &
-2.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 1.0_wp, -2.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, &
3.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 2.0_wp, -3.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, &
0.0_wp, -1.0_wp, 2.0_wp, 2.0_wp, 2.0_wp, -3.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, &
1.0_wp, 1.0_wp, 2.0_wp, 0.0_wp, 2.0_wp, 2.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, &
-1.0_wp, 0.0_wp, 2.0_wp, -2.0_wp, 1.0_wp, -2.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, &
2.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 1.0_wp, 2.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 2.0_wp, -2.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, &
3.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 2.0_wp, 1.0_wp, 2.0_wp, 2.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, &
-1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, 2.0_wp, 1.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 0.0_wp, -4.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
-2.0_wp, 0.0_wp, 2.0_wp, 2.0_wp, 2.0_wp, 1.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, &
-1.0_wp, 0.0_wp, 2.0_wp, 4.0_wp, 2.0_wp, -2.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, &
2.0_wp, 0.0_wp, 0.0_wp, -4.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
1.0_wp, 1.0_wp, 2.0_wp, -2.0_wp, 2.0_wp, 1.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 2.0_wp, 2.0_wp, 1.0_wp, -1.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, &
-2.0_wp, 0.0_wp, 2.0_wp, 4.0_wp, 2.0_wp, -1.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, &
-1.0_wp, 0.0_wp, 4.0_wp, 0.0_wp, 2.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
1.0_wp, -1.0_wp, 0.0_wp, -2.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
2.0_wp, 0.0_wp, 2.0_wp, -2.0_wp, 1.0_wp, 1.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, &
2.0_wp, 0.0_wp, 2.0_wp, 2.0_wp, 2.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 0.0_wp, 2.0_wp, 1.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 4.0_wp, -2.0_wp, 2.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
3.0_wp, 0.0_wp, 2.0_wp, -2.0_wp, 2.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, 2.0_wp, -2.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 1.0_wp, 2.0_wp, 0.0_wp, 1.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
-1.0_wp, -1.0_wp, 0.0_wp, 2.0_wp, 1.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, -2.0_wp, 0.0_wp, 1.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 2.0_wp, -1.0_wp, 2.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 1.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, -2.0_wp, -2.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, -1.0_wp, 2.0_wp, 0.0_wp, 1.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
1.0_wp, 1.0_wp, 0.0_wp, -2.0_wp, 1.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
1.0_wp, 0.0_wp, -2.0_wp, 2.0_wp, 0.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
2.0_wp, 0.0_wp, 0.0_wp, 2.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 0.0_wp, 2.0_wp, 4.0_wp, 2.0_wp, -1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp, &
0.0_wp, 1.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, 1.0_wp, 0.0_wp, 0.0_wp, 0.0_wp ], [9,106])
! Interval between fundamental epoch J2000.0 and given date (JC).
t = ( ( date1-dj00 ) + date2 ) / djc
!
! FUNDAMENTAL ARGUMENTS in the FK5 reference system
!
! Mean longitude of the Moon minus mean longitude of the Moon's
! perigee.
el = ANPM ( ( 485866.733_wp + ( 715922.633_wp + &
( 31.310_wp + 0.064_wp * t ) * t ) * t ) * das2r &
+ mod(1325.0_wp*t, 1.0_wp) * d2pi )
! Mean longitude of the Sun minus mean longitude of the Sun's perigee.
elp = ANPM ( ( 1287099.804_wp + ( 1292581.224_wp + &
( -0.577_wp -0.012_wp * t ) * t ) * t ) * das2r &
+ mod(99.0_wp*t, 1.0_wp) * d2pi )
! Mean longitude of the Moon minus mean longitude of the Moon's node.
f = ANPM ( ( 335778.877_wp + ( 295263.137_wp + &
( -13.257_wp + 0.011_wp * t ) * t ) * t ) * das2r &
+ mod(1342.0_wp*t, 1.0_wp) * d2pi )
! Mean elongation of the Moon from the Sun.
d = ANPM ( ( 1072261.307_wp + ( 1105601.328_wp + &
( -6.891_wp + 0.019_wp * t ) * t ) * t ) * das2r &
+ mod(1236.0_wp*t, 1.0_wp) * d2pi )
! Longitude of the mean ascending node of the lunar orbit on the
! ecliptic, measured from the mean equinox of date.
om = ANPM( ( 450160.280_wp + ( -482890.539_wp + &
( 7.455_wp + 0.008_wp * t ) * t ) * t ) * das2r &
+ mod( -5.0_wp*t, 1.0_wp) * d2pi )
! ---------------
! Nutation series
! ---------------
! Change time argument from centuries to millennia.
t = t / 10.0_wp
! Initialize nutation components.
dp = 0.0_wp
de = 0.0_wp
! Sum the nutation terms, ending with the biggest.
do j=106,1,-1
! Form argument for current term.
arg = x(1,j) * el &
+ x(2,j) * elp &
+ x(3,j) * f &
+ x(4,j) * d &
+ x(5,j) * om
! Accumulate current nutation term.
s = x(6,j) + x(7,j) * t
c = x(8,j) + x(9,j) * t
if ( s /= 0.0_wp ) dp = dp + s * sin(arg)
if ( c /= 0.0_wp ) de = de + c * cos(arg)
! Next term.
end do
! Convert results from 0.1 mas units to radians.
dpsi = dp * u2r
deps = de * u2r
end subroutine NUT80