/usr/share/gnudatalanguage/astrolib/nutate.pro is in gdl-astrolib 2018.02.16+dfsg-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | pro nutate, jd, nut_long, nut_obliq
;+
; NAME:
; NUTATE
; PURPOSE:
; Return the nutation in longitude and obliquity for a given Julian date
;
; CALLING SEQUENCE:
; NUTATE, jd, Nut_long, Nut_obliq
;
; INPUT:
; jd - Julian ephemeris date, scalar or vector, double precision
; OUTPUT:
; Nut_long - the nutation in longitude, same # of elements as jd
; Nut_obliq - nutation in latitude, same # of elements as jd
;
; EXAMPLE:
; (1) Find the nutation in longitude and obliquity 1987 on Apr 10 at Oh.
; This is example 22.a from Meeus
; IDL> jdcnv,1987,4,10,0,jul
; IDL> nutate, jul, nut_long, nut_obliq
; ==> nut_long = -3.788 nut_obliq = 9.443
;
; (2) Plot the large-scale variation of the nutation in longitude
; during the 20th century
;
; IDL> yr = 1900 + indgen(100) ;Compute once a year
; IDL> jdcnv,yr,1,1,0,jul ;Find Julian date of first day of year
; IDL> nutate,jul, nut_long ;Nutation in longitude
; IDL> plot, yr, nut_long
;
; This plot will reveal the dominant (18.6 year) period, but a finer
; grid is needed to display the shorter periods in the nutation.
; METHOD:
; Uses the formula in Chapter 22 of ``Astronomical Algorithms'' by Jean
; Meeus (1998, 2nd ed.) which is based on the 1980 IAU Theory of Nutation
; and includes all terms larger than 0.0003".
;
; PROCEDURES CALLED:
; POLY() (from IDL User's Library)
; CIRRANGE, ISARRAY() (from IDL Astronomy Library)
;
; REVISION HISTORY:
; Written, W.Landsman (Goddard/HSTX) June 1996
; Converted to IDL V5.0 W. Landsman September 1997
; Corrected minor typos in values of d_lng W. Landsman December 2000
; Updated typo in cdelt term December 2000
; Avoid overflow for more than 32767 input dates W. Landsman January 2005
;-
compile_opt idl2
On_error,2
if N_params() LT 2 then begin
print,'Syntax - NUTATE, jd, nut_long, nut_obliq'
return
endif
dtor = !DPI/180.0d
; form time in Julian centuries from 1900.0
t = (jd[*] - 2451545.0d)/36525.0d0
; Mean elongation of the Moon
coeff1 = [297.85036d, 445267.111480d, -0.0019142, 1.d/189474d0 ]
d = poly(T, coeff1)*dtor
cirrange,d,/rad
; Sun's mean anomaly
coeff2 = [357.52772d, 35999.050340d, -0.0001603d, -1.d/3d5 ]
M = poly(T,coeff2)*dtor
cirrange, M,/rad
; Moon's mean anomaly
coeff3 = [134.96298d, 477198.867398d, 0.0086972d, 1.0/5.625d4 ]
Mprime = poly(T,coeff3)*dtor
cirrange, Mprime,/rad
; Moon's argument of latitude
coeff4 = [93.27191d, 483202.017538d, -0.0036825, -1.0d/3.27270d5 ]
F = poly(T, coeff4 )*dtor
cirrange, F,/RAD
; Longitude of the ascending node of the Moon's mean orbit on the ecliptic,
; measured from the mean equinox of the date
coeff5 = [125.04452d, -1934.136261d, 0.0020708d, 1.d/4.5d5]
omega = poly(T, coeff5)*dtor
cirrange,omega,/RAD
d_lng = [0,-2,0,0,0,0,-2,0,0,-2,-2,-2,0,2,0,2,0,0,-2,0,2,0,0,-2,0,-2,0,0,2,$
-2,0,-2,0,0,2,2,0,-2,0,2,2,-2,-2,2,2,0,-2,-2,0,-2,-2,0,-1,-2,1,0,0,-1,0,0, $
2,0,2]
m_lng = [0,0,0,0,1,0,1,0,0,-1,intarr(17),2,0,2,1,0,-1,0,0,0,1,1,-1,0, $
0,0,0,0,0,-1,-1,0,0,0,1,0,0,1,0,0,0,-1,1,-1,-1,0,-1]
mp_lng = [0,0,0,0,0,1,0,0,1,0,1,0,-1,0,1,-1,-1,1,2,-2,0,2,2,1,0,0,-1,0,-1, $
0,0,1,0,2,-1,1,0,1,0,0,1,2,1,-2,0,1,0,0,2,2,0,1,1,0,0,1,-2,1,1,1,-1,3,0]
f_lng = [0,2,2,0,0,0,2,2,2,2,0,2,2,0,0,2,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0, $
0,-2,2,2,2,0,2,2,0,2,2,0,0,0,2,0,2,0,2,-2,0,0,0,2,2,0,0,2,2,2,2]
om_lng = [1,2,2,2,0,0,2,1,2,2,0,1,2,0,1,2,1,1,0,1,2,2,0,2,0,0,1,0,1,2,1, $
1,1,0,1,2,2,0,2,1,0,2,1,1,1,0,1,1,1,1,1,0,0,0,0,0,2,0,0,2,2,2,2]
sin_lng = [-171996, -13187, -2274, 2062, 1426, 712, -517, -386, -301, 217, $
-158, 129, 123, 63, 63, -59, -58, -51, 48, 46, -38, -31, 29, 29, 26, -22, $
21, 17, 16, -16, -15, -13, -12, 11, -10, -8, 7, -7, -7, -7, $
6,6,6,-6,-6,5,-5,-5,-5,4,4,4,-4,-4,-4,3,-3,-3,-3,-3,-3,-3,-3 ]
sdelt = [-174.2, -1.6, -0.2, 0.2, -3.4, 0.1, 1.2, -0.4, 0, -0.5, 0, 0.1, $
0,0,0.1, 0,-0.1,dblarr(10), -0.1, 0, 0.1, dblarr(33) ]
cos_lng = [ 92025, 5736, 977, -895, 54, -7, 224, 200, 129, -95,0,-70,-53,0, $
-33, 26, 32, 27, 0, -24, 16,13,0,-12,0,0,-10,0,-8,7,9,7,6,0,5,3,-3,0,3,3,$
0,-3,-3,3,3,0,3,3,3, intarr(14) ]
cdelt = [8.9, -3.1, -0.5, 0.5, -0.1, 0.0, -0.6, 0.0, -0.1, 0.3, dblarr(53) ]
; Sum the periodic terms
n = N_elements(jd)
nut_long = dblarr(n)
nut_obliq = dblarr(n)
arg = d_lng#d + m_lng#m +mp_lng#mprime + f_lng#f +om_lng#omega
sarg = sin(arg)
carg = cos(arg)
for i=0L,n-1 do begin
nut_long[i] = 0.0001d*total( (sdelt*t[i] + sin_lng)*sarg[*,i] )
nut_obliq[i] = 0.0001d*total( (cdelt*t[i] + cos_lng)*carg[*,i] )
end
if ~isarray(jd) then begin
nut_long = nut_long[0]
nut_obliq = nut_obliq[0]
endif
return
end
|