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