1 #ifndef ERFAHDEF 2 #define ERFAHDEF 3 4 /* 5 ** - - - - - - - 6 ** e r f a . h 7 ** - - - - - - - 8 ** 9 ** Prototype function declarations for ERFA library. 10 ** 11 ** Copyright (C) 2013-2021, NumFOCUS Foundation. 12 ** Derived, with permission, from the SOFA library. See notes at end of file. 13 */ 14 15 #include "math.h" 16 17 #ifdef __cplusplus 18 extern "C" { 19 #endif 20 21 /* Star-independent astrometry parameters */ 22 typedef struct { 23 double pmt; /* PM time interval (SSB, Julian years) */ 24 double eb[3]; /* SSB to observer (vector, au) */ 25 double eh[3]; /* Sun to observer (unit vector) */ 26 double em; /* distance from Sun to observer (au) */ 27 double v[3]; /* barycentric observer velocity (vector, c) */ 28 double bm1; /* sqrt(1-|v|^2): reciprocal of Lorenz factor */ 29 double bpn[3][3]; /* bias-precession-nutation matrix */ 30 double along; /* longitude + s' + dERA(DUT) (radians) */ 31 double phi; /* geodetic latitude (radians) */ 32 double xpl; /* polar motion xp wrt local meridian (radians) */ 33 double ypl; /* polar motion yp wrt local meridian (radians) */ 34 double sphi; /* sine of geodetic latitude */ 35 double cphi; /* cosine of geodetic latitude */ 36 double diurab; /* magnitude of diurnal aberration vector */ 37 double eral; /* "local" Earth rotation angle (radians) */ 38 double refa; /* refraction constant A (radians) */ 39 double refb; /* refraction constant B (radians) */ 40 } eraASTROM; 41 /* (Vectors eb, eh, em and v are all with respect to BCRS axes.) */ 42 43 /* Body parameters for light deflection */ 44 typedef struct { 45 double bm; /* mass of the body (solar masses) */ 46 double dl; /* deflection limiter (radians^2/2) */ 47 double pv[2][3]; /* barycentric PV of the body (au, au/day) */ 48 } eraLDBODY; 49 50 /* Astronomy/Calendars */ 51 int eraCal2jd(int iy, int im, int id, double *djm0, double *djm); 52 double eraEpb(double dj1, double dj2); 53 void eraEpb2jd(double epb, double *djm0, double *djm); 54 double eraEpj(double dj1, double dj2); 55 void eraEpj2jd(double epj, double *djm0, double *djm); 56 int eraJd2cal(double dj1, double dj2, 57 int *iy, int *im, int *id, double *fd); 58 int eraJdcalf(int ndp, double dj1, double dj2, int iymdf[4]); 59 60 /* Astronomy/Astrometry */ 61 void eraAb(double pnat[3], double v[3], double s, double bm1, 62 double ppr[3]); 63 void eraApcg(double date1, double date2, 64 double ebpv[2][3], double ehp[3], 65 eraASTROM *astrom); 66 void eraApcg13(double date1, double date2, eraASTROM *astrom); 67 void eraApci(double date1, double date2, 68 double ebpv[2][3], double ehp[3], 69 double x, double y, double s, 70 eraASTROM *astrom); 71 void eraApci13(double date1, double date2, 72 eraASTROM *astrom, double *eo); 73 void eraApco(double date1, double date2, 74 double ebpv[2][3], double ehp[3], 75 double x, double y, double s, double theta, 76 double elong, double phi, double hm, 77 double xp, double yp, double sp, 78 double refa, double refb, 79 eraASTROM *astrom); 80 int eraApco13(double utc1, double utc2, double dut1, 81 double elong, double phi, double hm, double xp, double yp, 82 double phpa, double tc, double rh, double wl, 83 eraASTROM *astrom, double *eo); 84 void eraApcs(double date1, double date2, double pv[2][3], 85 double ebpv[2][3], double ehp[3], 86 eraASTROM *astrom); 87 void eraApcs13(double date1, double date2, double pv[2][3], 88 eraASTROM *astrom); 89 void eraAper(double theta, eraASTROM *astrom); 90 void eraAper13(double ut11, double ut12, eraASTROM *astrom); 91 void eraApio(double sp, double theta, 92 double elong, double phi, double hm, double xp, double yp, 93 double refa, double refb, 94 eraASTROM *astrom); 95 int eraApio13(double utc1, double utc2, double dut1, 96 double elong, double phi, double hm, double xp, double yp, 97 double phpa, double tc, double rh, double wl, 98 eraASTROM *astrom); 99 void eraAtcc13(double rc, double dc, 100 double pr, double pd, double px, double rv, 101 double date1, double date2, 102 double *ra, double *da); 103 void eraAtccq(double rc, double dc, 104 double pr, double pd, double px, double rv, 105 eraASTROM *astrom, double *ra, double *da); 106 void eraAtci13(double rc, double dc, 107 double pr, double pd, double px, double rv, 108 double date1, double date2, 109 double *ri, double *di, double *eo); 110 void eraAtciq(double rc, double dc, double pr, double pd, 111 double px, double rv, eraASTROM *astrom, 112 double *ri, double *di); 113 void eraAtciqn(double rc, double dc, double pr, double pd, 114 double px, double rv, eraASTROM *astrom, 115 int n, eraLDBODY b[], double *ri, double *di); 116 void eraAtciqz(double rc, double dc, eraASTROM *astrom, 117 double *ri, double *di); 118 int eraAtco13(double rc, double dc, 119 double pr, double pd, double px, double rv, 120 double utc1, double utc2, double dut1, 121 double elong, double phi, double hm, double xp, double yp, 122 double phpa, double tc, double rh, double wl, 123 double *aob, double *zob, double *hob, 124 double *dob, double *rob, double *eo); 125 void eraAtic13(double ri, double di, 126 double date1, double date2, 127 double *rc, double *dc, double *eo); 128 void eraAticq(double ri, double di, eraASTROM *astrom, 129 double *rc, double *dc); 130 void eraAticqn(double ri, double di, eraASTROM *astrom, 131 int n, eraLDBODY b[], double *rc, double *dc); 132 int eraAtio13(double ri, double di, 133 double utc1, double utc2, double dut1, 134 double elong, double phi, double hm, double xp, double yp, 135 double phpa, double tc, double rh, double wl, 136 double *aob, double *zob, double *hob, 137 double *dob, double *rob); 138 void eraAtioq(double ri, double di, eraASTROM *astrom, 139 double *aob, double *zob, 140 double *hob, double *dob, double *rob); 141 int eraAtoc13(const char *type, double ob1, double ob2, 142 double utc1, double utc2, double dut1, 143 double elong, double phi, double hm, double xp, double yp, 144 double phpa, double tc, double rh, double wl, 145 double *rc, double *dc); 146 int eraAtoi13(const char *type, double ob1, double ob2, 147 double utc1, double utc2, double dut1, 148 double elong, double phi, double hm, double xp, double yp, 149 double phpa, double tc, double rh, double wl, 150 double *ri, double *di); 151 void eraAtoiq(const char *type, 152 double ob1, double ob2, eraASTROM *astrom, 153 double *ri, double *di); 154 void eraLd(double bm, double p[3], double q[3], double e[3], 155 double em, double dlim, double p1[3]); 156 void eraLdn(int n, eraLDBODY b[], double ob[3], double sc[3], 157 double sn[3]); 158 void eraLdsun(double p[3], double e[3], double em, double p1[3]); 159 void eraPmpx(double rc, double dc, double pr, double pd, 160 double px, double rv, double pmt, double pob[3], 161 double pco[3]); 162 int eraPmsafe(double ra1, double dec1, double pmr1, double pmd1, 163 double px1, double rv1, 164 double ep1a, double ep1b, double ep2a, double ep2b, 165 double *ra2, double *dec2, double *pmr2, double *pmd2, 166 double *px2, double *rv2); 167 void eraPvtob(double elong, double phi, double height, double xp, 168 double yp, double sp, double theta, double pv[2][3]); 169 void eraRefco(double phpa, double tc, double rh, double wl, 170 double *refa, double *refb); 171 172 /* Astronomy/Ephemerides */ 173 int eraEpv00(double date1, double date2, 174 double pvh[2][3], double pvb[2][3]); 175 void eraMoon98(double date1, double date2, double pv[2][3]); 176 int eraPlan94(double date1, double date2, int np, double pv[2][3]); 177 178 /* Astronomy/FundamentalArgs */ 179 double eraFad03(double t); 180 double eraFae03(double t); 181 double eraFaf03(double t); 182 double eraFaju03(double t); 183 double eraFal03(double t); 184 double eraFalp03(double t); 185 double eraFama03(double t); 186 double eraFame03(double t); 187 double eraFane03(double t); 188 double eraFaom03(double t); 189 double eraFapa03(double t); 190 double eraFasa03(double t); 191 double eraFaur03(double t); 192 double eraFave03(double t); 193 194 /* Astronomy/PrecNutPolar */ 195 void eraBi00(double *dpsibi, double *depsbi, double *dra); 196 void eraBp00(double date1, double date2, 197 double rb[3][3], double rp[3][3], double rbp[3][3]); 198 void eraBp06(double date1, double date2, 199 double rb[3][3], double rp[3][3], double rbp[3][3]); 200 void eraBpn2xy(double rbpn[3][3], double *x, double *y); 201 void eraC2i00a(double date1, double date2, double rc2i[3][3]); 202 void eraC2i00b(double date1, double date2, double rc2i[3][3]); 203 void eraC2i06a(double date1, double date2, double rc2i[3][3]); 204 void eraC2ibpn(double date1, double date2, double rbpn[3][3], 205 double rc2i[3][3]); 206 void eraC2ixy(double date1, double date2, double x, double y, 207 double rc2i[3][3]); 208 void eraC2ixys(double x, double y, double s, double rc2i[3][3]); 209 void eraC2t00a(double tta, double ttb, double uta, double utb, 210 double xp, double yp, double rc2t[3][3]); 211 void eraC2t00b(double tta, double ttb, double uta, double utb, 212 double xp, double yp, double rc2t[3][3]); 213 void eraC2t06a(double tta, double ttb, double uta, double utb, 214 double xp, double yp, double rc2t[3][3]); 215 void eraC2tcio(double rc2i[3][3], double era, double rpom[3][3], 216 double rc2t[3][3]); 217 void eraC2teqx(double rbpn[3][3], double gst, double rpom[3][3], 218 double rc2t[3][3]); 219 void eraC2tpe(double tta, double ttb, double uta, double utb, 220 double dpsi, double deps, double xp, double yp, 221 double rc2t[3][3]); 222 void eraC2txy(double tta, double ttb, double uta, double utb, 223 double x, double y, double xp, double yp, 224 double rc2t[3][3]); 225 double eraEo06a(double date1, double date2); 226 double eraEors(double rnpb[3][3], double s); 227 void eraFw2m(double gamb, double phib, double psi, double eps, 228 double r[3][3]); 229 void eraFw2xy(double gamb, double phib, double psi, double eps, 230 double *x, double *y); 231 void eraLtp(double epj, double rp[3][3]); 232 void eraLtpb(double epj, double rpb[3][3]); 233 void eraLtpecl(double epj, double vec[3]); 234 void eraLtpequ(double epj, double veq[3]); 235 void eraNum00a(double date1, double date2, double rmatn[3][3]); 236 void eraNum00b(double date1, double date2, double rmatn[3][3]); 237 void eraNum06a(double date1, double date2, double rmatn[3][3]); 238 void eraNumat(double epsa, double dpsi, double deps, double rmatn[3][3]); 239 void eraNut00a(double date1, double date2, double *dpsi, double *deps); 240 void eraNut00b(double date1, double date2, double *dpsi, double *deps); 241 void eraNut06a(double date1, double date2, double *dpsi, double *deps); 242 void eraNut80(double date1, double date2, double *dpsi, double *deps); 243 void eraNutm80(double date1, double date2, double rmatn[3][3]); 244 double eraObl06(double date1, double date2); 245 double eraObl80(double date1, double date2); 246 void eraP06e(double date1, double date2, 247 double *eps0, double *psia, double *oma, double *bpa, 248 double *bqa, double *pia, double *bpia, 249 double *epsa, double *chia, double *za, double *zetaa, 250 double *thetaa, double *pa, 251 double *gam, double *phi, double *psi); 252 void eraPb06(double date1, double date2, 253 double *bzeta, double *bz, double *btheta); 254 void eraPfw06(double date1, double date2, 255 double *gamb, double *phib, double *psib, double *epsa); 256 void eraPmat00(double date1, double date2, double rbp[3][3]); 257 void eraPmat06(double date1, double date2, double rbp[3][3]); 258 void eraPmat76(double date1, double date2, double rmatp[3][3]); 259 void eraPn00(double date1, double date2, double dpsi, double deps, 260 double *epsa, 261 double rb[3][3], double rp[3][3], double rbp[3][3], 262 double rn[3][3], double rbpn[3][3]); 263 void eraPn00a(double date1, double date2, 264 double *dpsi, double *deps, double *epsa, 265 double rb[3][3], double rp[3][3], double rbp[3][3], 266 double rn[3][3], double rbpn[3][3]); 267 void eraPn00b(double date1, double date2, 268 double *dpsi, double *deps, double *epsa, 269 double rb[3][3], double rp[3][3], double rbp[3][3], 270 double rn[3][3], double rbpn[3][3]); 271 void eraPn06(double date1, double date2, double dpsi, double deps, 272 double *epsa, 273 double rb[3][3], double rp[3][3], double rbp[3][3], 274 double rn[3][3], double rbpn[3][3]); 275 void eraPn06a(double date1, double date2, 276 double *dpsi, double *deps, double *epsa, 277 double rb[3][3], double rp[3][3], double rbp[3][3], 278 double rn[3][3], double rbpn[3][3]); 279 void eraPnm00a(double date1, double date2, double rbpn[3][3]); 280 void eraPnm00b(double date1, double date2, double rbpn[3][3]); 281 void eraPnm06a(double date1, double date2, double rnpb[3][3]); 282 void eraPnm80(double date1, double date2, double rmatpn[3][3]); 283 void eraPom00(double xp, double yp, double sp, double rpom[3][3]); 284 void eraPr00(double date1, double date2, 285 double *dpsipr, double *depspr); 286 void eraPrec76(double date01, double date02, 287 double date11, double date12, 288 double *zeta, double *z, double *theta); 289 double eraS00(double date1, double date2, double x, double y); 290 double eraS00a(double date1, double date2); 291 double eraS00b(double date1, double date2); 292 double eraS06(double date1, double date2, double x, double y); 293 double eraS06a(double date1, double date2); 294 double eraSp00(double date1, double date2); 295 void eraXy06(double date1, double date2, double *x, double *y); 296 void eraXys00a(double date1, double date2, 297 double *x, double *y, double *s); 298 void eraXys00b(double date1, double date2, 299 double *x, double *y, double *s); 300 void eraXys06a(double date1, double date2, 301 double *x, double *y, double *s); 302 303 /* Astronomy/RotationAndTime */ 304 double eraEe00(double date1, double date2, double epsa, double dpsi); 305 double eraEe00a(double date1, double date2); 306 double eraEe00b(double date1, double date2); 307 double eraEe06a(double date1, double date2); 308 double eraEect00(double date1, double date2); 309 double eraEqeq94(double date1, double date2); 310 double eraEra00(double dj1, double dj2); 311 double eraGmst00(double uta, double utb, double tta, double ttb); 312 double eraGmst06(double uta, double utb, double tta, double ttb); 313 double eraGmst82(double dj1, double dj2); 314 double eraGst00a(double uta, double utb, double tta, double ttb); 315 double eraGst00b(double uta, double utb); 316 double eraGst06(double uta, double utb, double tta, double ttb, 317 double rnpb[3][3]); 318 double eraGst06a(double uta, double utb, double tta, double ttb); 319 double eraGst94(double uta, double utb); 320 321 /* Astronomy/SpaceMotion */ 322 int eraPvstar(double pv[2][3], double *ra, double *dec, 323 double *pmr, double *pmd, double *px, double *rv); 324 int eraStarpv(double ra, double dec, 325 double pmr, double pmd, double px, double rv, 326 double pv[2][3]); 327 328 /* Astronomy/StarCatalogs */ 329 330 void eraFk425(double r1950, double d1950, 331 double dr1950, double dd1950, 332 double p1950, double v1950, 333 double *r2000, double *d2000, 334 double *dr2000, double *dd2000, 335 double *p2000, double *v2000); 336 void eraFk45z(double r1950, double d1950, double bepoch, 337 double *r2000, double *d2000); 338 void eraFk524(double r2000, double d2000, 339 double dr2000, double dd2000, 340 double p2000, double v2000, 341 double *r1950, double *d1950, 342 double *dr1950, double *dd1950, 343 double *p1950, double *v1950); 344 void eraFk52h(double r5, double d5, 345 double dr5, double dd5, double px5, double rv5, 346 double *rh, double *dh, 347 double *drh, double *ddh, double *pxh, double *rvh); 348 void eraFk54z(double r2000, double d2000, double bepoch, 349 double *r1950, double *d1950, 350 double *dr1950, double *dd1950); 351 void eraFk5hip(double r5h[3][3], double s5h[3]); 352 void eraFk5hz(double r5, double d5, double date1, double date2, 353 double *rh, double *dh); 354 void eraH2fk5(double rh, double dh, 355 double drh, double ddh, double pxh, double rvh, 356 double *r5, double *d5, 357 double *dr5, double *dd5, double *px5, double *rv5); 358 void eraHfk5z(double rh, double dh, double date1, double date2, 359 double *r5, double *d5, double *dr5, double *dd5); 360 int eraStarpm(double ra1, double dec1, 361 double pmr1, double pmd1, double px1, double rv1, 362 double ep1a, double ep1b, double ep2a, double ep2b, 363 double *ra2, double *dec2, 364 double *pmr2, double *pmd2, double *px2, double *rv2); 365 366 /* Astronomy/EclipticCoordinates */ 367 void eraEceq06(double date1, double date2, double dl, double db, 368 double *dr, double *dd); 369 void eraEcm06(double date1, double date2, double rm[3][3]); 370 void eraEqec06(double date1, double date2, double dr, double dd, 371 double *dl, double *db); 372 void eraLteceq(double epj, double dl, double db, double *dr, double *dd); 373 void eraLtecm(double epj, double rm[3][3]); 374 void eraLteqec(double epj, double dr, double dd, double *dl, double *db); 375 376 /* Astronomy/GalacticCoordinates */ 377 void eraG2icrs(double dl, double db, double *dr, double *dd); 378 void eraIcrs2g(double dr, double dd, double *dl, double *db); 379 380 /* Astronomy/GeodeticGeocentric */ 381 int eraEform(int n, double *a, double *f); 382 int eraGc2gd(int n, double xyz[3], 383 double *elong, double *phi, double *height); 384 int eraGc2gde(double a, double f, double xyz[3], 385 double *elong, double *phi, double *height); 386 int eraGd2gc(int n, double elong, double phi, double height, 387 double xyz[3]); 388 int eraGd2gce(double a, double f, 389 double elong, double phi, double height, double xyz[3]); 390 391 /* Astronomy/Timescales */ 392 int eraD2dtf(const char *scale, int ndp, double d1, double d2, 393 int *iy, int *im, int *id, int ihmsf[4]); 394 int eraDat(int iy, int im, int id, double fd, double *deltat); 395 double eraDtdb(double date1, double date2, 396 double ut, double elong, double u, double v); 397 int eraDtf2d(const char *scale, int iy, int im, int id, 398 int ihr, int imn, double sec, double *d1, double *d2); 399 int eraTaitt(double tai1, double tai2, double *tt1, double *tt2); 400 int eraTaiut1(double tai1, double tai2, double dta, 401 double *ut11, double *ut12); 402 int eraTaiutc(double tai1, double tai2, double *utc1, double *utc2); 403 int eraTcbtdb(double tcb1, double tcb2, double *tdb1, double *tdb2); 404 int eraTcgtt(double tcg1, double tcg2, double *tt1, double *tt2); 405 int eraTdbtcb(double tdb1, double tdb2, double *tcb1, double *tcb2); 406 int eraTdbtt(double tdb1, double tdb2, double dtr, 407 double *tt1, double *tt2); 408 int eraTttai(double tt1, double tt2, double *tai1, double *tai2); 409 int eraTttcg(double tt1, double tt2, double *tcg1, double *tcg2); 410 int eraTttdb(double tt1, double tt2, double dtr, 411 double *tdb1, double *tdb2); 412 int eraTtut1(double tt1, double tt2, double dt, 413 double *ut11, double *ut12); 414 int eraUt1tai(double ut11, double ut12, double dta, 415 double *tai1, double *tai2); 416 int eraUt1tt(double ut11, double ut12, double dt, 417 double *tt1, double *tt2); 418 int eraUt1utc(double ut11, double ut12, double dut1, 419 double *utc1, double *utc2); 420 int eraUtctai(double utc1, double utc2, double *tai1, double *tai2); 421 int eraUtcut1(double utc1, double utc2, double dut1, 422 double *ut11, double *ut12); 423 424 /* Astronomy/HorizonEquatorial */ 425 void eraAe2hd(double az, double el, double phi, 426 double *ha, double *dec); 427 void eraHd2ae(double ha, double dec, double phi, 428 double *az, double *el); 429 double eraHd2pa(double ha, double dec, double phi); 430 431 /* Astronomy/Gnomonic */ 432 int eraTpors(double xi, double eta, double a, double b, 433 double *a01, double *b01, double *a02, double *b02); 434 int eraTporv(double xi, double eta, double v[3], 435 double v01[3], double v02[3]); 436 void eraTpsts(double xi, double eta, double a0, double b0, 437 double *a, double *b); 438 void eraTpstv(double xi, double eta, double v0[3], double v[3]); 439 int eraTpxes(double a, double b, double a0, double b0, 440 double *xi, double *eta); 441 int eraTpxev(double v[3], double v0[3], double *xi, double *eta); 442 443 /* VectorMatrix/AngleOps */ 444 void eraA2af(int ndp, double angle, char *sign, int idmsf[4]); 445 void eraA2tf(int ndp, double angle, char *sign, int ihmsf[4]); 446 int eraAf2a(char s, int ideg, int iamin, double asec, double *rad); 447 double eraAnp(double a); 448 double eraAnpm(double a); 449 void eraD2tf(int ndp, double days, char *sign, int ihmsf[4]); 450 int eraTf2a(char s, int ihour, int imin, double sec, double *rad); 451 int eraTf2d(char s, int ihour, int imin, double sec, double *days); 452 453 /* VectorMatrix/BuildRotations */ 454 void eraRx(double phi, double r[3][3]); 455 void eraRy(double theta, double r[3][3]); 456 void eraRz(double psi, double r[3][3]); 457 458 /* VectorMatrix/CopyExtendExtract */ 459 void eraCp(double p[3], double c[3]); 460 void eraCpv(double pv[2][3], double c[2][3]); 461 void eraCr(double r[3][3], double c[3][3]); 462 void eraP2pv(double p[3], double pv[2][3]); 463 void eraPv2p(double pv[2][3], double p[3]); 464 465 /* VectorMatrix/Initialization */ 466 void eraIr(double r[3][3]); 467 void eraZp(double p[3]); 468 void eraZpv(double pv[2][3]); 469 void eraZr(double r[3][3]); 470 471 /* VectorMatrix/MatrixOps */ 472 void eraRxr(double a[3][3], double b[3][3], double atb[3][3]); 473 void eraTr(double r[3][3], double rt[3][3]); 474 475 /* VectorMatrix/MatrixVectorProducts */ 476 void eraRxp(double r[3][3], double p[3], double rp[3]); 477 void eraRxpv(double r[3][3], double pv[2][3], double rpv[2][3]); 478 void eraTrxp(double r[3][3], double p[3], double trp[3]); 479 void eraTrxpv(double r[3][3], double pv[2][3], double trpv[2][3]); 480 481 /* VectorMatrix/RotationVectors */ 482 void eraRm2v(double r[3][3], double w[3]); 483 void eraRv2m(double w[3], double r[3][3]); 484 485 /* VectorMatrix/SeparationAndAngle */ 486 double eraPap(double a[3], double b[3]); 487 double eraPas(double al, double ap, double bl, double bp); 488 double eraSepp(double a[3], double b[3]); 489 double eraSeps(double al, double ap, double bl, double bp); 490 491 /* VectorMatrix/SphericalCartesian */ 492 void eraC2s(double p[3], double *theta, double *phi); 493 void eraP2s(double p[3], double *theta, double *phi, double *r); 494 void eraPv2s(double pv[2][3], 495 double *theta, double *phi, double *r, 496 double *td, double *pd, double *rd); 497 void eraS2c(double theta, double phi, double c[3]); 498 void eraS2p(double theta, double phi, double r, double p[3]); 499 void eraS2pv(double theta, double phi, double r, 500 double td, double pd, double rd, 501 double pv[2][3]); 502 503 /* VectorMatrix/VectorOps */ 504 double eraPdp(double a[3], double b[3]); 505 double eraPm(double p[3]); 506 void eraPmp(double a[3], double b[3], double amb[3]); 507 void eraPn(double p[3], double *r, double u[3]); 508 void eraPpp(double a[3], double b[3], double apb[3]); 509 void eraPpsp(double a[3], double s, double b[3], double apsb[3]); 510 void eraPvdpv(double a[2][3], double b[2][3], double adb[2]); 511 void eraPvm(double pv[2][3], double *r, double *s); 512 void eraPvmpv(double a[2][3], double b[2][3], double amb[2][3]); 513 void eraPvppv(double a[2][3], double b[2][3], double apb[2][3]); 514 void eraPvu(double dt, double pv[2][3], double upv[2][3]); 515 void eraPvup(double dt, double pv[2][3], double p[3]); 516 void eraPvxpv(double a[2][3], double b[2][3], double axb[2][3]); 517 void eraPxp(double a[3], double b[3], double axb[3]); 518 void eraS2xpv(double s1, double s2, double pv[2][3], double spv[2][3]); 519 void eraSxp(double s, double p[3], double sp[3]); 520 void eraSxpv(double s, double pv[2][3], double spv[2][3]); 521 522 #ifdef __cplusplus 523 } 524 #endif 525 526 #endif 527 528 529 /*---------------------------------------------------------------------- 530 ** 531 ** 532 ** Copyright (C) 2013-2021, NumFOCUS Foundation. 533 ** All rights reserved. 534 ** 535 ** This library is derived, with permission, from the International 536 ** Astronomical Union's "Standards of Fundamental Astronomy" library, 537 ** available from http://www.iausofa.org. 538 ** 539 ** The ERFA version is intended to retain identical functionality to 540 ** the SOFA library, but made distinct through different function and 541 ** file names, as set out in the SOFA license conditions. The SOFA 542 ** original has a role as a reference standard for the IAU and IERS, 543 ** and consequently redistribution is permitted only in its unaltered 544 ** state. The ERFA version is not subject to this restriction and 545 ** therefore can be included in distributions which do not support the 546 ** concept of "read only" software. 547 ** 548 ** Although the intent is to replicate the SOFA API (other than 549 ** replacement of prefix names) and results (with the exception of 550 ** bugs; any that are discovered will be fixed), SOFA is not 551 ** responsible for any errors found in this version of the library. 552 ** 553 ** If you wish to acknowledge the SOFA heritage, please acknowledge 554 ** that you are using a library derived from SOFA, rather than SOFA 555 ** itself. 556 ** 557 ** 558 ** TERMS AND CONDITIONS 559 ** 560 ** Redistribution and use in source and binary forms, with or without 561 ** modification, are permitted provided that the following conditions 562 ** are met: 563 ** 564 ** 1 Redistributions of source code must retain the above copyright 565 ** notice, this list of conditions and the following disclaimer. 566 ** 567 ** 2 Redistributions in binary form must reproduce the above copyright 568 ** notice, this list of conditions and the following disclaimer in 569 ** the documentation and/or other materials provided with the 570 ** distribution. 571 ** 572 ** 3 Neither the name of the Standards Of Fundamental Astronomy Board, 573 ** the International Astronomical Union nor the names of its 574 ** contributors may be used to endorse or promote products derived 575 ** from this software without specific prior written permission. 576 ** 577 ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 578 ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 579 ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 580 ** FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 581 ** COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 582 ** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 583 ** BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 584 ** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 585 ** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 586 ** LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 587 ** ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 588 ** POSSIBILITY OF SUCH DAMAGE. 589 ** 590 */ 591