Astrodynamics coordinate frame transforms
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

coordinate: extract nutation table and fundamental args (merlint E005)

+120 -116
+120 -116
lib/coordinate.ml
··· 91 91 92 92 (* IAU-1980 nutation: full 106-term model. 93 93 Coefficients from ERFA/SOFA nut80.c (Seidelmann 1982) in 0.1 mas units. 94 - Fundamental arguments: l, l', F, D, Omega (Delaunay variables). *) 95 - let nutation_dpsi_deps t = 94 + Each row: nl, nlp, nf, nd, nom, sp, spt, ce, cet. *) 95 + let nutation_terms = 96 + [| 97 + (0, 0, 0, 0, 1, -171996., -174.2, 92025., 8.9); 98 + (0, 0, 0, 0, 2, 2062., 0.2, -895., 0.5); 99 + (-2, 0, 2, 0, 1, 46., 0., -24., 0.); 100 + (2, 0, -2, 0, 0, 11., 0., 0., 0.); 101 + (-2, 0, 2, 0, 2, -3., 0., 1., 0.); 102 + (1, -1, 0, -1, 0, -3., 0., 0., 0.); 103 + (0, -2, 2, -2, 1, -2., 0., 1., 0.); 104 + (2, 0, -2, 0, 1, 1., 0., 0., 0.); 105 + (0, 0, 2, -2, 2, -13187., -1.6, 5736., -3.1); 106 + (0, 1, 0, 0, 0, 1426., -3.4, 54., -0.1); 107 + (0, 1, 2, -2, 2, -517., 1.2, 224., -0.6); 108 + (0, -1, 2, -2, 2, 217., -0.5, -95., 0.3); 109 + (0, 0, 2, -2, 1, 129., 0.1, -70., 0.); 110 + (2, 0, 0, -2, 0, 48., 0., 1., 0.); 111 + (0, 0, 2, -2, 0, -22., 0., 0., 0.); 112 + (0, 2, 0, 0, 0, 17., -0.1, 0., 0.); 113 + (0, 1, 0, 0, 1, -15., 0., 9., 0.); 114 + (0, 2, 2, -2, 2, -16., 0.1, 7., 0.); 115 + (0, -1, 0, 0, 1, -12., 0., 6., 0.); 116 + (-2, 0, 0, 2, 1, -6., 0., 3., 0.); 117 + (0, -1, 2, -2, 1, -5., 0., 3., 0.); 118 + (2, 0, 0, -2, 1, 4., 0., -2., 0.); 119 + (0, 1, 2, -2, 1, 4., 0., -2., 0.); 120 + (1, 0, 0, -1, 0, -4., 0., 0., 0.); 121 + (2, 1, 0, -2, 0, 1., 0., 0., 0.); 122 + (0, 0, -2, 2, 1, 1., 0., 0., 0.); 123 + (0, 1, -2, 2, 0, -1., 0., 0., 0.); 124 + (0, 1, 0, 0, 2, 1., 0., 0., 0.); 125 + (-1, 0, 0, 1, 1, 1., 0., 0., 0.); 126 + (0, 1, 2, -2, 0, -1., 0., 0., 0.); 127 + (0, 0, 2, 0, 2, -2274., -0.2, 977., -0.5); 128 + (1, 0, 0, 0, 0, 712., 0.1, -7., 0.); 129 + (0, 0, 2, 0, 1, -386., -0.4, 200., 0.); 130 + (1, 0, 2, 0, 2, -301., 0., 129., -0.1); 131 + (1, 0, 0, -2, 0, -158., 0., -1., 0.); 132 + (-1, 0, 2, 0, 2, 123., 0., -53., 0.); 133 + (0, 0, 0, 2, 0, 63., 0., -2., 0.); 134 + (1, 0, 0, 0, 1, 63., 0.1, -33., 0.); 135 + (-1, 0, 0, 0, 1, -58., -0.1, 32., 0.); 136 + (-1, 0, 2, 2, 2, -59., 0., 26., 0.); 137 + (1, 0, 2, 0, 1, -51., 0., 27., 0.); 138 + (0, 0, 2, 2, 2, -38., 0., 16., 0.); 139 + (2, 0, 0, 0, 0, 29., 0., -1., 0.); 140 + (1, 0, 2, -2, 2, 29., 0., -12., 0.); 141 + (2, 0, 2, 0, 2, -31., 0., 13., 0.); 142 + (0, 0, 2, 0, 0, 26., 0., -1., 0.); 143 + (-1, 0, 2, 0, 1, 21., 0., -10., 0.); 144 + (-1, 0, 0, 2, 1, 16., 0., -8., 0.); 145 + (1, 0, 0, -2, 1, -13., 0., 7., 0.); 146 + (-1, 0, 2, 2, 1, -10., 0., 5., 0.); 147 + (1, 1, 0, -2, 0, -7., 0., 0., 0.); 148 + (0, 1, 2, 0, 2, 7., 0., -3., 0.); 149 + (0, -1, 2, 0, 2, -7., 0., 3., 0.); 150 + (1, 0, 2, 2, 2, -8., 0., 3., 0.); 151 + (1, 0, 0, 2, 0, 6., 0., 0., 0.); 152 + (2, 0, 2, -2, 2, 6., 0., -3., 0.); 153 + (0, 0, 0, 2, 1, -6., 0., 3., 0.); 154 + (0, 0, 2, 2, 1, -7., 0., 3., 0.); 155 + (1, 0, 2, -2, 1, 6., 0., -3., 0.); 156 + (0, 0, 0, -2, 1, -5., 0., 3., 0.); 157 + (1, -1, 0, 0, 0, 5., 0., 0., 0.); 158 + (2, 0, 2, 0, 1, -5., 0., 3., 0.); 159 + (0, 1, 0, -2, 0, -4., 0., 0., 0.); 160 + (1, 0, -2, 0, 0, 4., 0., 0., 0.); 161 + (0, 0, 0, 1, 0, -4., 0., 0., 0.); 162 + (1, 1, 0, 0, 0, -3., 0., 0., 0.); 163 + (1, 0, 2, 0, 0, 3., 0., 0., 0.); 164 + (1, -1, 2, 0, 2, -3., 0., 1., 0.); 165 + (-1, -1, 2, 2, 2, -3., 0., 1., 0.); 166 + (-2, 0, 0, 0, 1, -2., 0., 1., 0.); 167 + (3, 0, 2, 0, 2, -3., 0., 1., 0.); 168 + (0, -1, 2, 2, 2, -3., 0., 1., 0.); 169 + (1, 1, 2, 0, 2, 2., 0., -1., 0.); 170 + (-1, 0, 2, -2, 1, -2., 0., 1., 0.); 171 + (2, 0, 0, 0, 1, 2., 0., -1., 0.); 172 + (1, 0, 0, 0, 2, -2., 0., 1., 0.); 173 + (3, 0, 0, 0, 0, 2., 0., 0., 0.); 174 + (0, 0, 2, 1, 2, 2., 0., -1., 0.); 175 + (-1, 0, 0, 0, 2, 1., 0., -1., 0.); 176 + (1, 0, 0, -4, 0, -1., 0., 0., 0.); 177 + (-2, 0, 2, 2, 2, 1., 0., -1., 0.); 178 + (-1, 0, 2, 4, 2, -2., 0., 1., 0.); 179 + (2, 0, 0, -4, 0, -1., 0., 0., 0.); 180 + (1, 1, 2, -2, 2, 1., 0., -1., 0.); 181 + (1, 0, 2, 2, 1, -1., 0., 1., 0.); 182 + (-2, 0, 2, 4, 2, -1., 0., 1., 0.); 183 + (-1, 0, 4, 0, 2, 1., 0., 0., 0.); 184 + (1, -1, 0, -2, 0, 1., 0., 0., 0.); 185 + (2, 0, 2, -2, 1, 1., 0., -1., 0.); 186 + (2, 0, 2, 2, 2, -1., 0., 0., 0.); 187 + (1, 0, 0, 2, 1, -1., 0., 0., 0.); 188 + (0, 0, 4, -2, 2, 1., 0., 0., 0.); 189 + (3, 0, 2, -2, 2, 1., 0., 0., 0.); 190 + (1, 0, 2, -2, 0, -1., 0., 0., 0.); 191 + (0, 1, 2, 0, 1, 1., 0., 0., 0.); 192 + (-1, -1, 0, 2, 1, 1., 0., 0., 0.); 193 + (0, 0, -2, 0, 1, -1., 0., 0., 0.); 194 + (0, 0, 2, -1, 2, -1., 0., 0., 0.); 195 + (0, 1, 0, 2, 0, -1., 0., 0., 0.); 196 + (1, 0, -2, -2, 0, -1., 0., 0., 0.); 197 + (0, -1, 2, 0, 1, -1., 0., 0., 0.); 198 + (1, 1, 0, -2, 1, -1., 0., 0., 0.); 199 + (1, 0, -2, 2, 0, -1., 0., 0., 0.); 200 + (2, 0, 0, 2, 0, 1., 0., 0., 0.); 201 + (0, 0, 2, 4, 2, -1., 0., 0., 0.); 202 + (0, 1, 0, 1, 0, 1., 0., 0., 0.); 203 + |] 204 + 205 + (* Fundamental arguments l, l', F, D, Omega (Delaunay variables) 206 + for the IAU-1980 nutation model, in radians. *) 207 + let nutation_fundamental_args t = 96 208 let t2 = t *. t in 97 209 let t3 = t2 *. t in 98 - (* Fundamental arguments (arcsec, mod 360 deg → radians) *) 99 210 let to_rad a = 100 211 let a_deg = Float.rem (a /. 3600.0) 360.0 in 101 212 deg_to_rad (if a_deg < 0.0 then a_deg +. 360.0 else a_deg) ··· 130 241 +. (((-5.0 *. 360.0 *. 3600.0) -. 482890.539) *. t) 131 242 +. (7.455 *. t2) +. (0.008 *. t3)) 132 243 in 133 - (* Full 106 terms: nl, nlp, nf, nd, nom, sp (0.1mas), spt, ce, cet. 134 - Source: ERFA/SOFA nut80.c (Seidelmann 1982, Table 1). *) 135 - let terms = 136 - [| 137 - (0, 0, 0, 0, 1, -171996., -174.2, 92025., 8.9); 138 - (0, 0, 0, 0, 2, 2062., 0.2, -895., 0.5); 139 - (-2, 0, 2, 0, 1, 46., 0., -24., 0.); 140 - (2, 0, -2, 0, 0, 11., 0., 0., 0.); 141 - (-2, 0, 2, 0, 2, -3., 0., 1., 0.); 142 - (1, -1, 0, -1, 0, -3., 0., 0., 0.); 143 - (0, -2, 2, -2, 1, -2., 0., 1., 0.); 144 - (2, 0, -2, 0, 1, 1., 0., 0., 0.); 145 - (0, 0, 2, -2, 2, -13187., -1.6, 5736., -3.1); 146 - (0, 1, 0, 0, 0, 1426., -3.4, 54., -0.1); 147 - (0, 1, 2, -2, 2, -517., 1.2, 224., -0.6); 148 - (0, -1, 2, -2, 2, 217., -0.5, -95., 0.3); 149 - (0, 0, 2, -2, 1, 129., 0.1, -70., 0.); 150 - (2, 0, 0, -2, 0, 48., 0., 1., 0.); 151 - (0, 0, 2, -2, 0, -22., 0., 0., 0.); 152 - (0, 2, 0, 0, 0, 17., -0.1, 0., 0.); 153 - (0, 1, 0, 0, 1, -15., 0., 9., 0.); 154 - (0, 2, 2, -2, 2, -16., 0.1, 7., 0.); 155 - (0, -1, 0, 0, 1, -12., 0., 6., 0.); 156 - (-2, 0, 0, 2, 1, -6., 0., 3., 0.); 157 - (0, -1, 2, -2, 1, -5., 0., 3., 0.); 158 - (2, 0, 0, -2, 1, 4., 0., -2., 0.); 159 - (0, 1, 2, -2, 1, 4., 0., -2., 0.); 160 - (1, 0, 0, -1, 0, -4., 0., 0., 0.); 161 - (2, 1, 0, -2, 0, 1., 0., 0., 0.); 162 - (0, 0, -2, 2, 1, 1., 0., 0., 0.); 163 - (0, 1, -2, 2, 0, -1., 0., 0., 0.); 164 - (0, 1, 0, 0, 2, 1., 0., 0., 0.); 165 - (-1, 0, 0, 1, 1, 1., 0., 0., 0.); 166 - (0, 1, 2, -2, 0, -1., 0., 0., 0.); 167 - (0, 0, 2, 0, 2, -2274., -0.2, 977., -0.5); 168 - (1, 0, 0, 0, 0, 712., 0.1, -7., 0.); 169 - (0, 0, 2, 0, 1, -386., -0.4, 200., 0.); 170 - (1, 0, 2, 0, 2, -301., 0., 129., -0.1); 171 - (1, 0, 0, -2, 0, -158., 0., -1., 0.); 172 - (-1, 0, 2, 0, 2, 123., 0., -53., 0.); 173 - (0, 0, 0, 2, 0, 63., 0., -2., 0.); 174 - (1, 0, 0, 0, 1, 63., 0.1, -33., 0.); 175 - (-1, 0, 0, 0, 1, -58., -0.1, 32., 0.); 176 - (-1, 0, 2, 2, 2, -59., 0., 26., 0.); 177 - (1, 0, 2, 0, 1, -51., 0., 27., 0.); 178 - (0, 0, 2, 2, 2, -38., 0., 16., 0.); 179 - (2, 0, 0, 0, 0, 29., 0., -1., 0.); 180 - (1, 0, 2, -2, 2, 29., 0., -12., 0.); 181 - (2, 0, 2, 0, 2, -31., 0., 13., 0.); 182 - (0, 0, 2, 0, 0, 26., 0., -1., 0.); 183 - (-1, 0, 2, 0, 1, 21., 0., -10., 0.); 184 - (-1, 0, 0, 2, 1, 16., 0., -8., 0.); 185 - (1, 0, 0, -2, 1, -13., 0., 7., 0.); 186 - (-1, 0, 2, 2, 1, -10., 0., 5., 0.); 187 - (1, 1, 0, -2, 0, -7., 0., 0., 0.); 188 - (0, 1, 2, 0, 2, 7., 0., -3., 0.); 189 - (0, -1, 2, 0, 2, -7., 0., 3., 0.); 190 - (1, 0, 2, 2, 2, -8., 0., 3., 0.); 191 - (1, 0, 0, 2, 0, 6., 0., 0., 0.); 192 - (2, 0, 2, -2, 2, 6., 0., -3., 0.); 193 - (0, 0, 0, 2, 1, -6., 0., 3., 0.); 194 - (0, 0, 2, 2, 1, -7., 0., 3., 0.); 195 - (1, 0, 2, -2, 1, 6., 0., -3., 0.); 196 - (0, 0, 0, -2, 1, -5., 0., 3., 0.); 197 - (1, -1, 0, 0, 0, 5., 0., 0., 0.); 198 - (2, 0, 2, 0, 1, -5., 0., 3., 0.); 199 - (0, 1, 0, -2, 0, -4., 0., 0., 0.); 200 - (1, 0, -2, 0, 0, 4., 0., 0., 0.); 201 - (0, 0, 0, 1, 0, -4., 0., 0., 0.); 202 - (1, 1, 0, 0, 0, -3., 0., 0., 0.); 203 - (1, 0, 2, 0, 0, 3., 0., 0., 0.); 204 - (1, -1, 2, 0, 2, -3., 0., 1., 0.); 205 - (-1, -1, 2, 2, 2, -3., 0., 1., 0.); 206 - (-2, 0, 0, 0, 1, -2., 0., 1., 0.); 207 - (3, 0, 2, 0, 2, -3., 0., 1., 0.); 208 - (0, -1, 2, 2, 2, -3., 0., 1., 0.); 209 - (1, 1, 2, 0, 2, 2., 0., -1., 0.); 210 - (-1, 0, 2, -2, 1, -2., 0., 1., 0.); 211 - (2, 0, 0, 0, 1, 2., 0., -1., 0.); 212 - (1, 0, 0, 0, 2, -2., 0., 1., 0.); 213 - (3, 0, 0, 0, 0, 2., 0., 0., 0.); 214 - (0, 0, 2, 1, 2, 2., 0., -1., 0.); 215 - (-1, 0, 0, 0, 2, 1., 0., -1., 0.); 216 - (1, 0, 0, -4, 0, -1., 0., 0., 0.); 217 - (-2, 0, 2, 2, 2, 1., 0., -1., 0.); 218 - (-1, 0, 2, 4, 2, -2., 0., 1., 0.); 219 - (2, 0, 0, -4, 0, -1., 0., 0., 0.); 220 - (1, 1, 2, -2, 2, 1., 0., -1., 0.); 221 - (1, 0, 2, 2, 1, -1., 0., 1., 0.); 222 - (-2, 0, 2, 4, 2, -1., 0., 1., 0.); 223 - (-1, 0, 4, 0, 2, 1., 0., 0., 0.); 224 - (1, -1, 0, -2, 0, 1., 0., 0., 0.); 225 - (2, 0, 2, -2, 1, 1., 0., -1., 0.); 226 - (2, 0, 2, 2, 2, -1., 0., 0., 0.); 227 - (1, 0, 0, 2, 1, -1., 0., 0., 0.); 228 - (0, 0, 4, -2, 2, 1., 0., 0., 0.); 229 - (3, 0, 2, -2, 2, 1., 0., 0., 0.); 230 - (1, 0, 2, -2, 0, -1., 0., 0., 0.); 231 - (0, 1, 2, 0, 1, 1., 0., 0., 0.); 232 - (-1, -1, 0, 2, 1, 1., 0., 0., 0.); 233 - (0, 0, -2, 0, 1, -1., 0., 0., 0.); 234 - (0, 0, 2, -1, 2, -1., 0., 0., 0.); 235 - (0, 1, 0, 2, 0, -1., 0., 0., 0.); 236 - (1, 0, -2, -2, 0, -1., 0., 0., 0.); 237 - (0, -1, 2, 0, 1, -1., 0., 0., 0.); 238 - (1, 1, 0, -2, 1, -1., 0., 0., 0.); 239 - (1, 0, -2, 2, 0, -1., 0., 0., 0.); 240 - (2, 0, 0, 2, 0, 1., 0., 0., 0.); 241 - (0, 0, 2, 4, 2, -1., 0., 0., 0.); 242 - (0, 1, 0, 1, 0, 1., 0., 0., 0.); 243 - |] 244 - in 244 + (el, elp, f, d, om) 245 + 246 + (* Compute IAU-1980 nutation in longitude (dpsi) and obliquity (deps). *) 247 + let nutation_dpsi_deps t = 248 + let el, elp, f, d, om = nutation_fundamental_args t in 245 249 let dpsi = ref 0.0 in 246 250 let deps = ref 0.0 in 247 251 Array.iter ··· 255 259 in 256 260 dpsi := !dpsi +. ((sp +. (spt *. t)) *. sin arg); 257 261 deps := !deps +. ((ce +. (cet *. t)) *. cos arg)) 258 - terms; 262 + nutation_terms; 259 263 (* Convert from 0.1 mas to radians *) 260 264 let mas_to_rad x = x *. 1e-4 *. Float.pi /. (180.0 *. 3600.0) in 261 265 (mas_to_rad !dpsi, mas_to_rad !deps)