1use crate::rfam::*;
2use crate::vector_matrix::angle_ops::anpm::*;
3use crate::utils::*;
4pub fn nut80(date1: f64, date2: f64, dpsi: &mut f64, deps: &mut f64)
47{
48
49const U2R: f64 = URSA_DAS2R / 1e4;
51
52struct Xls {
59 nl: i32, nlp: i32, nf: i32, nd: i32, nom: i32, sp: f64, spt: f64, ce: f64, cet: f64 }
63impl Xls {
64 pub const fn new(nl: i32,nlp: i32,nf: i32,nd: i32,nom: i32,sp: f64, spt: f64,ce: f64,cet: f64)->Self{
65 Xls { nl: nl, nlp: nlp, nf: nf, nd: nd, nom: nom, sp: sp, spt: spt, ce: ce, cet: cet }
66 }
67}
68const X:[Xls; 106] = [
69 Xls::new(0, 0, 0, 0, 1, -171996.0, -174.2, 92025.0, 8.9 ),
71 Xls::new( 0, 0, 0, 0, 2, 2062.0, 0.2, -895.0, 0.5 ),
72 Xls::new( -2, 0, 2, 0, 1, 46.0, 0.0, -24.0, 0.0 ),
73 Xls::new( 2, 0, -2, 0, 0, 11.0, 0.0, 0.0, 0.0 ),
74 Xls::new( -2, 0, 2, 0, 2, -3.0, 0.0, 1.0, 0.0 ),
75 Xls::new( 1, -1, 0, -1, 0, -3.0, 0.0, 0.0, 0.0 ),
76 Xls::new( 0, -2, 2, -2, 1, -2.0, 0.0, 1.0, 0.0 ),
77 Xls::new( 2, 0, -2, 0, 1, 1.0, 0.0, 0.0, 0.0 ),
78 Xls::new( 0, 0, 2, -2, 2, -13187.0, -1.6, 5736.0, -3.1 ),
79 Xls::new( 0, 1, 0, 0, 0, 1426.0, -3.4, 54.0, -0.1 ),
80
81 Xls::new( 0, 1, 2, -2, 2, -517.0, 1.2, 224.0, -0.6 ),
83 Xls::new( 0, -1, 2, -2, 2, 217.0, -0.5, -95.0, 0.3 ),
84 Xls::new( 0, 0, 2, -2, 1, 129.0, 0.1, -70.0, 0.0 ),
85 Xls::new( 2, 0, 0, -2, 0, 48.0, 0.0, 1.0, 0.0 ),
86 Xls::new( 0, 0, 2, -2, 0, -22.0, 0.0, 0.0, 0.0 ),
87 Xls::new( 0, 2, 0, 0, 0, 17.0, -0.1, 0.0, 0.0 ),
88 Xls::new( 0, 1, 0, 0, 1, -15.0, 0.0, 9.0, 0.0 ),
89 Xls::new( 0, 2, 2, -2, 2, -16.0, 0.1, 7.0, 0.0 ),
90 Xls::new( 0, -1, 0, 0, 1, -12.0, 0.0, 6.0, 0.0 ),
91 Xls::new( -2, 0, 0, 2, 1, -6.0, 0.0, 3.0, 0.0 ),
92
93 Xls::new( 0, -1, 2, -2, 1, -5.0, 0.0, 3.0, 0.0 ),
95 Xls::new( 2, 0, 0, -2, 1, 4.0, 0.0, -2.0, 0.0 ),
96 Xls::new( 0, 1, 2, -2, 1, 4.0, 0.0, -2.0, 0.0 ),
97 Xls::new( 1, 0, 0, -1, 0, -4.0, 0.0, 0.0, 0.0 ),
98 Xls::new( 2, 1, 0, -2, 0, 1.0, 0.0, 0.0, 0.0 ),
99 Xls::new( 0, 0, -2, 2, 1, 1.0, 0.0, 0.0, 0.0 ),
100 Xls::new( 0, 1, -2, 2, 0, -1.0, 0.0, 0.0, 0.0 ),
101 Xls::new( 0, 1, 0, 0, 2, 1.0, 0.0, 0.0, 0.0 ),
102 Xls::new( -1, 0, 0, 1, 1, 1.0, 0.0, 0.0, 0.0 ),
103 Xls::new( 0, 1, 2, -2, 0, -1.0, 0.0, 0.0, 0.0 ),
104
105 Xls::new( 0, 0, 2, 0, 2, -2274.0, -0.2, 977.0, -0.5 ),
107 Xls::new( 1, 0, 0, 0, 0, 712.0, 0.1, -7.0, 0.0 ),
108 Xls::new( 0, 0, 2, 0, 1, -386.0, -0.4, 200.0, 0.0 ),
109 Xls::new( 1, 0, 2, 0, 2, -301.0, 0.0, 129.0, -0.1 ),
110 Xls::new( 1, 0, 0, -2, 0, -158.0, 0.0, -1.0, 0.0 ),
111 Xls::new( -1, 0, 2, 0, 2, 123.0, 0.0, -53.0, 0.0 ),
112 Xls::new( 0, 0, 0, 2, 0, 63.0, 0.0, -2.0, 0.0 ),
113 Xls::new( 1, 0, 0, 0, 1, 63.0, 0.1, -33.0, 0.0 ),
114 Xls::new( -1, 0, 0, 0, 1, -58.0, -0.1, 32.0, 0.0 ),
115 Xls::new( -1, 0, 2, 2, 2, -59.0, 0.0, 26.0, 0.0 ),
116
117 Xls::new( 1, 0, 2, 0, 1, -51.0, 0.0, 27.0, 0.0 ),
119 Xls::new( 0, 0, 2, 2, 2, -38.0, 0.0, 16.0, 0.0 ),
120 Xls::new( 2, 0, 0, 0, 0, 29.0, 0.0, -1.0, 0.0 ),
121 Xls::new( 1, 0, 2, -2, 2, 29.0, 0.0, -12.0, 0.0 ),
122 Xls::new( 2, 0, 2, 0, 2, -31.0, 0.0, 13.0, 0.0 ),
123 Xls::new( 0, 0, 2, 0, 0, 26.0, 0.0, -1.0, 0.0 ),
124 Xls::new( -1, 0, 2, 0, 1, 21.0, 0.0, -10.0, 0.0 ),
125 Xls::new( -1, 0, 0, 2, 1, 16.0, 0.0, -8.0, 0.0 ),
126 Xls::new( 1, 0, 0, -2, 1, -13.0, 0.0, 7.0, 0.0 ),
127 Xls::new( -1, 0, 2, 2, 1, -10.0, 0.0, 5.0, 0.0 ),
128
129 Xls::new( 1, 1, 0, -2, 0, -7.0, 0.0, 0.0, 0.0 ),
131 Xls::new( 0, 1, 2, 0, 2, 7.0, 0.0, -3.0, 0.0 ),
132 Xls::new( 0, -1, 2, 0, 2, -7.0, 0.0, 3.0, 0.0 ),
133 Xls::new( 1, 0, 2, 2, 2, -8.0, 0.0, 3.0, 0.0 ),
134 Xls::new( 1, 0, 0, 2, 0, 6.0, 0.0, 0.0, 0.0 ),
135 Xls::new( 2, 0, 2, -2, 2, 6.0, 0.0, -3.0, 0.0 ),
136 Xls::new( 0, 0, 0, 2, 1, -6.0, 0.0, 3.0, 0.0 ),
137 Xls::new( 0, 0, 2, 2, 1, -7.0, 0.0, 3.0, 0.0 ),
138 Xls::new( 1, 0, 2, -2, 1, 6.0, 0.0, -3.0, 0.0 ),
139 Xls::new( 0, 0, 0, -2, 1, -5.0, 0.0, 3.0, 0.0 ),
140
141 Xls::new( 1, -1, 0, 0, 0, 5.0, 0.0, 0.0, 0.0 ),
143 Xls::new( 2, 0, 2, 0, 1, -5.0, 0.0, 3.0, 0.0 ),
144 Xls::new( 0, 1, 0, -2, 0, -4.0, 0.0, 0.0, 0.0 ),
145 Xls::new( 1, 0, -2, 0, 0, 4.0, 0.0, 0.0, 0.0 ),
146 Xls::new( 0, 0, 0, 1, 0, -4.0, 0.0, 0.0, 0.0 ),
147 Xls::new( 1, 1, 0, 0, 0, -3.0, 0.0, 0.0, 0.0 ),
148 Xls::new( 1, 0, 2, 0, 0, 3.0, 0.0, 0.0, 0.0 ),
149 Xls::new( 1, -1, 2, 0, 2, -3.0, 0.0, 1.0, 0.0 ),
150 Xls::new( -1, -1, 2, 2, 2, -3.0, 0.0, 1.0, 0.0 ),
151 Xls::new( -2, 0, 0, 0, 1, -2.0, 0.0, 1.0, 0.0 ),
152
153 Xls::new( 3, 0, 2, 0, 2, -3.0, 0.0, 1.0, 0.0 ),
155 Xls::new( 0, -1, 2, 2, 2, -3.0, 0.0, 1.0, 0.0 ),
156 Xls::new( 1, 1, 2, 0, 2, 2.0, 0.0, -1.0, 0.0 ),
157 Xls::new( -1, 0, 2, -2, 1, -2.0, 0.0, 1.0, 0.0 ),
158 Xls::new( 2, 0, 0, 0, 1, 2.0, 0.0, -1.0, 0.0 ),
159 Xls::new( 1, 0, 0, 0, 2, -2.0, 0.0, 1.0, 0.0 ),
160 Xls::new( 3, 0, 0, 0, 0, 2.0, 0.0, 0.0, 0.0 ),
161 Xls::new( 0, 0, 2, 1, 2, 2.0, 0.0, -1.0, 0.0 ),
162 Xls::new( -1, 0, 0, 0, 2, 1.0, 0.0, -1.0, 0.0 ),
163 Xls::new( 1, 0, 0, -4, 0, -1.0, 0.0, 0.0, 0.0 ),
164
165 Xls::new( -2, 0, 2, 2, 2, 1.0, 0.0, -1.0, 0.0 ),
167 Xls::new( -1, 0, 2, 4, 2, -2.0, 0.0, 1.0, 0.0 ),
168 Xls::new( 2, 0, 0, -4, 0, -1.0, 0.0, 0.0, 0.0 ),
169 Xls::new( 1, 1, 2, -2, 2, 1.0, 0.0, -1.0, 0.0 ),
170 Xls::new( 1, 0, 2, 2, 1, -1.0, 0.0, 1.0, 0.0 ),
171 Xls::new( -2, 0, 2, 4, 2, -1.0, 0.0, 1.0, 0.0 ),
172 Xls::new( -1, 0, 4, 0, 2, 1.0, 0.0, 0.0, 0.0 ),
173 Xls::new( 1, -1, 0, -2, 0, 1.0, 0.0, 0.0, 0.0 ),
174 Xls::new( 2, 0, 2, -2, 1, 1.0, 0.0, -1.0, 0.0 ),
175 Xls::new( 2, 0, 2, 2, 2, -1.0, 0.0, 0.0, 0.0 ),
176
177 Xls::new( 1, 0, 0, 2, 1, -1.0, 0.0, 0.0, 0.0 ),
179 Xls::new( 0, 0, 4, -2, 2, 1.0, 0.0, 0.0, 0.0 ),
180 Xls::new( 3, 0, 2, -2, 2, 1.0, 0.0, 0.0, 0.0 ),
181 Xls::new( 1, 0, 2, -2, 0, -1.0, 0.0, 0.0, 0.0 ),
182 Xls::new( 0, 1, 2, 0, 1, 1.0, 0.0, 0.0, 0.0 ),
183 Xls::new( -1, -1, 0, 2, 1, 1.0, 0.0, 0.0, 0.0 ),
184 Xls::new( 0, 0, -2, 0, 1, -1.0, 0.0, 0.0, 0.0 ),
185 Xls::new( 0, 0, 2, -1, 2, -1.0, 0.0, 0.0, 0.0 ),
186 Xls::new( 0, 1, 0, 2, 0, -1.0, 0.0, 0.0, 0.0 ),
187 Xls::new( 1, 0, -2, -2, 0, -1.0, 0.0, 0.0, 0.0 ),
188
189 Xls::new( 0, -1, 2, 0, 1, -1.0, 0.0, 0.0, 0.0 ),
191 Xls::new( 1, 1, 0, -2, 1, -1.0, 0.0, 0.0, 0.0 ),
192 Xls::new( 1, 0, -2, 2, 0, -1.0, 0.0, 0.0, 0.0 ),
193 Xls::new( 2, 0, 0, 2, 0, 1.0, 0.0, 0.0, 0.0 ),
194 Xls::new( 0, 0, 2, 4, 2, -1.0, 0.0, 0.0, 0.0 ),
195 Xls::new( 0, 1, 0, 1, 0, 1.0, 0.0, 0.0, 0.0 )
196 ];
197
198let t = ((date1 - URSA_DJ00) + date2) / URSA_DJC;
202
203let el = anpm(
209 (485866.733 + (715922.633 + (31.310 + 0.064 * t) * t) * t)
210 * URSA_DAS2R + fmod(1325.0 * t, 1.0) * URSA_D2PI);
211
212let elp = anpm(
214 (1287099.804 + (1292581.224 + (-0.577 - 0.012 * t) * t) * t)
215 * URSA_DAS2R + fmod(99.0 * t, 1.0) * URSA_D2PI);
216
217let f = anpm(
219 (335778.877 + (295263.137 + (-13.257 + 0.011 * t) * t) * t)
220 * URSA_DAS2R + fmod(1342.0 * t, 1.0) * URSA_D2PI);
221
222let d = anpm(
224 (1072261.307 + (1105601.328 + (-6.891 + 0.019 * t) * t) * t)
225 * URSA_DAS2R + fmod(1236.0 * t, 1.0) * URSA_D2PI);
226
227let om = anpm(
230 (450160.280 + (-482890.539 + (7.455 + 0.008 * t) * t) * t)
231 * URSA_DAS2R + fmod(-5.0 * t, 1.0) * URSA_D2PI);
232
233let mut dp = 0.0;
239let mut de = 0.0;
240
241for x_j in X.iter() {
243
244 let arg = x_j.nl as f64 * el
246 + x_j.nlp as f64 * elp
247 + x_j.nf as f64 * f
248 + x_j.nd as f64 * d
249 + x_j.nom as f64 * om;
250
251 let s = x_j.sp + x_j.spt * t;
253 let c = x_j.ce + x_j.cet * t;
254 if s != 0.0 {dp += s * sin(arg)};
255 if c != 0.0 {de += c * cos(arg)};
256 }
257
258*dpsi = dp * U2R;
260 *deps = de * U2R;
261
262}