1 #ifndef PALHDEF
2 #define PALHDEF
3 
4 /*
5 *+
6 *  Name:
7 *     pal.h
8 
9 *  Purpose:
10 *     Function prototypes for PAL routines.
11 
12 *  Language:
13 *     Starlink ANSI C
14 
15 *  Type of Module:
16 *     Include file
17 
18 *  Description:
19 *     Function prototypes for PAL routines.
20 
21 *  Authors:
22 *     TIMJ: Tim Jenness (JAC, Hawaii)
23 *     {enter_new_authors_here}
24 
25 *  Notes:
26 *
27 
28 *  History:
29 *     2012-02-08 (TIMJ):
30 *        Initial version. Define all SLA prototypes in PAL form even
31 *        though none are implemented.
32 *        Adapted with permission from the Fortran SLALIB library.
33 *     {enter_further_changes_here}
34 
35 *  Copyright:
36 *     Copyright (C) 2012 Science and Technology Facilities Council.
37 *     All Rights Reserved.
38 
39 *  Licence:
40 *     This program is free software: you can redistribute it and/or
41 *     modify it under the terms of the GNU Lesser General Public
42 *     License as published by the Free Software Foundation, either
43 *     version 3 of the License, or (at your option) any later
44 *     version.
45 *
46 *     This program is distributed in the hope that it will be useful,
47 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
48 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
49 *     GNU Lesser General Public License for more details.
50 *
51 *     You should have received a copy of the GNU Lesser General
52 *     License along with this program.  If not, see
53 *     <http://www.gnu.org/licenses/>.
54 
55 *  Bugs:
56 *     {note_any_bugs_here}
57 *-
58 */
59 
60 #ifdef __cplusplus
61 extern "C" {
62 #endif
63 
64 #include <math.h>
65 #include <stdlib.h>
66 
67 void palAddet ( double rm, double dm, double eq, double *rc, double *dc );
68 
69 /* void palAfin ( const char *string, int *iptr, float *a, int *j ); */
70 
71 double palAirmas ( double zd );
72 
73 void palAltaz ( double ha, double dec, double phi,
74                 double *az, double *azd, double *azdd,
75                 double *el, double *eld, double *eldd,
76                 double *pa, double *pad, double *padd );
77 
78 void palAmp ( double ra, double da, double date, double eq,
79               double *rm, double *dm );
80 
81 void palAmpqk ( double ra, double da, double amprms[21],
82                 double *rm, double *dm );
83 
84 void palAop ( double rap, double dap, double date, double dut,
85               double elongm, double phim, double hm, double xp,
86               double yp, double tdk, double pmb, double rh,
87               double wl, double tlr,
88               double *aob, double *zob, double *hob,
89               double *dob, double *rob );
90 
91 void palAoppa ( double date, double dut, double elongm, double phim,
92                 double hm, double xp, double yp, double tdk, double pmb,
93                 double rh, double wl, double tlr, double aoprms[14] );
94 
95 void palAoppat ( double date, double aoprms[14] );
96 
97 void palAopqk ( double rap, double dap, const double aoprms[14],
98                 double *aob, double *zob, double *hob,
99                 double *dob, double *rob );
100 
101 void palAtmdsp ( double tdk, double pmb, double rh, double wl1,
102                  double a1, double b1, double wl2, double *a2, double *b2 );
103 
104 /* void palAv2m ( float axvec[3], float rmat[3][3] ); */
105 
106 /* float palBear ( float a1, float b1, float a2, float b2 ); */
107 
108 /* void palCaf2r ( int ideg, int iamin, float asec, float *rad, int *j ); */
109 
110 void palCaldj ( int iy, int im, int id, double *djm, int *j );
111 
112 /* void palCalyd ( int iy, int im, int id, int *ny, int *nd, int *j ); */
113 
114 /* void palCc2s ( float v[3], float *a, float *b ); */
115 
116 /* void palCc62s ( float v[6], float *a, float *b, float *r,
117  *                 float *ad, float *bd, float *rd ); */
118 
119 /* void palCd2tf ( int ndp, float days, char *sign, int ihmsf[4] ); */
120 
121 void palCldj ( int iy, int im, int id, double *djm, int *j );
122 
123 /* void palClyd ( int iy, int im, int id, int *ny, int *nd, int *jstat ); */
124 
125 /* void palCombn ( int nsel, int ncand, int list[], int *j ); */
126 
127 /* void palCr2af ( int ndp, float angle, char *sign, int idmsf[4] ); */
128 
129 /* void palCr2tf ( int ndp, float angle, char *sign, int ihmsf[4] ); */
130 
131 /* void palCs2c ( float a, float b, float v[3] ); */
132 
133 /* void palCs2c6 ( float a, float b, float r, float ad,
134  *                 float bd, float rd, float v[6] ); */
135 
136 /* void palCtf2d ( int ihour, int imin, float sec, float *days, int *j ); */
137 
138 /* void palCtf2r ( int ihour, int imin, float sec, float *rad, int *j ); */
139 
140 void palDaf2r ( int ideg, int iamin, double asec, double *rad, int *j );
141 
142 void palDafin ( const char *string, int *iptr, double *a, int *j );
143 
144 double palDat ( double dju );
145 
146 void palDav2m ( double axvec[3], double rmat[3][3] );
147 
148 double palDbear ( double a1, double b1, double a2, double b2 );
149 
150 /* void palDbjin ( const char *string, int *nstrt,
151  *                 double *dreslt, int *jf1, int *jf2 ); */
152 
153 /* void palDc62s ( double v[6], double *a, double *b, double *r,
154  *                 double *ad, double *bd, double *rd ); */
155 
156 void palDcc2s ( double v[3], double *a, double *b );
157 
158 void palDcmpf ( double coeffs[6], double *xz, double *yz, double *xs,
159                 double *ys, double *perp, double *orient );
160 
161 void palDcs2c ( double a, double b, double v[3] );
162 
163 void palDd2tf ( int ndp, double days, char *sign, int ihmsf[4] );
164 
165 void palDe2h ( double ha, double dec, double phi,
166                double *az, double *el );
167 
168 void palDeuler ( const char *order, double phi, double theta, double psi,
169                  double rmat[3][3] );
170 
171 void palDfltin ( const char *string, int *nstrt, double *dreslt, int *jflag );
172 
173 void palDh2e ( double az, double el, double phi, double *ha, double *dec);
174 
175 void palDimxv ( double dm[3][3], double va[3], double vb[3] );
176 
177 void palDjcal ( int ndp, double djm, int iymdf[4], int *j );
178 
179 void palDjcl ( double djm, int *iy, int *im, int *id, double *fd, int *j );
180 
181 void palDm2av ( double rmat[3][3], double axvec[3] );
182 
183 void palDmat ( int n, double *a, double *y, double *d, int *jf, int *iw );
184 
185 void palDmoon ( double date, double pv[6] );
186 
187 void palDmxm ( double a[3][3], double b[3][3], double c[3][3] );
188 
189 void palDmxv ( double dm[3][3], double va[3], double vb[3] );
190 
191 double palDpav ( double v1[3], double v2[3] );
192 
193 void palDr2af ( int ndp, double angle, char *sign, int idmsf[4] );
194 
195 void palDr2tf ( int ndp, double angle, char *sign, int ihmsf[4] );
196 
197 double palDrange ( double angle );
198 
199 double palDranrm ( double angle );
200 
201 /* void palDs2c6 ( double a, double b, double r, double ad, double bd,
202  *                 double rd, double v[6] ); */
203 
204 void palDs2tp ( double ra, double dec, double raz, double decz,
205                 double *xi, double *eta, int *j );
206 
207 double palDsep ( double a1, double b1, double a2, double b2 );
208 
209 double palDsepv ( double v1[3], double v2[3] );
210 
211 double palDt ( double epoch );
212 
213 void palDtf2d ( int ihour, int imin, double sec, double *days, int *j );
214 
215 void palDtf2r ( int ihour, int imin, double sec, double *rad, int *j );
216 
217 void palDtp2s ( double xi, double eta, double raz, double decz,
218                 double *ra, double *dec );
219 
220 /* void palDtp2v ( double xi, double eta, double v0[3], double v[3] ); */
221 
222 void palDtps2c ( double xi, double eta, double ra, double dec,
223                  double *raz1, double *decz1,
224                  double *raz2, double *decz2, int *n );
225 
226 /* void palDtpv2c ( double xi, double eta, double v[3],
227  *                  double v01[3], double v02[3], int *n ); */
228 
229 double palDtt ( double dju );
230 
231 /* void palDv2tp ( double v[3], double v0[3], double *xi, double *eta, int *j ); */
232 
233 double palDvdv ( double va[3], double vb[3] );
234 
235 void palDvn ( double v[3], double uv[3], double *vm );
236 
237 void palDvxv ( double va[3], double vb[3], double vc[3] );
238 
239 /* void palE2h ( float ha, float dec, float phi, float *az, float *el ); */
240 
241 /* void palEarth ( int iy, int id, float fd, float posvel[6] ); */
242 
243 void palEcleq ( double dl, double db, double date, double *dr, double *dd );
244 
245 void palEcmat ( double date, double rmat[3][3] );
246 
247 /* void palEcor ( float rm, float dm, int iy, int id, float fd,
248  *                float *rv, float *tl ); */
249 
250 /* void palEg50 ( double dr, double dd, double *dl, double *db ); */
251 
252 void palEl2ue ( double date, int jform, double epoch, double orbinc,
253                 double anode, double perih, double aorq, double e,
254                 double aorl, double dm, double u[13], int *jstat );
255 
256 double palEpb ( double date );
257 
258 double palEpb2d ( double epb );
259 
260 double palEpco ( char k0, char k, double e );
261 
262 double palEpj ( double date );
263 
264 double palEpj2d ( double epj );
265 
266 void palEpv( double date, double ph[3], double vh[3],
267              double pb[3], double vb[3] );
268 
269 void palEqecl ( double dr, double dd, double date, double *dl, double *db );
270 
271 double palEqeqx ( double date );
272 
273 void palEqgal ( double dr, double dd, double *dl, double *db );
274 
275 void palEtrms ( double ep, double ev[3] );
276 
277 /* void palEuler ( const char *order, float phi, float theta, float psi,
278  *                 float rmat[3][3] ); */
279 
280 void palEvp ( double date, double deqx,
281               double dvb[3], double dpb[3],
282               double dvh[3], double dph[3] );
283 
284 void palFitxy ( int itype, int np, double xye[][2], double xym[][2],
285                 double coeffs[6], int *j );
286 
287 void palFk425 ( double r1950, double d1950, double dr1950,
288                 double dd1950, double p1950, double v1950,
289                 double *r2000, double *d2000, double *dr2000,
290                 double *dd2000, double *p2000, double *v2000 );
291 
292 void palFk45z ( double r1950, double d1950, double bepoch,
293                 double *r2000, double *d2000 );
294 
295 void palFk524 ( double r2000, double d2000, double dr2000,
296                 double dd2000, double p2000, double v2000,
297                 double *r1950, double *d1950, double *dr1950,
298                 double *dd1950, double *p1950, double *v1950 );
299 
300 /* void palFk52h ( double r5, double d5, double dr5, double dd5,
301  *                 double *dr, double *dh, double *drh, double *ddh ); */
302 
303 void palFk54z ( double r2000, double d2000, double bepoch,
304                 double *r1950, double *d1950,
305                 double *dr1950, double *dd1950 );
306 
307 void palFk5hz ( double r5, double d5, double epoch,
308                 double *rh, double *dh );
309 
310 /* void palFlotin ( const char *string, int *nstrt, float *reslt, int *jflag ); */
311 
312 void palGaleq ( double dl, double db, double *dr, double *dd );
313 
314 void palGalsup ( double dl, double db, double *dsl, double *dsb );
315 
316 void palGe50 ( double dl, double db, double *dr, double *dd );
317 
318 void palGeoc ( double p, double h, double *r, double *z );
319 
320 double palGmst ( double ut1 );
321 
322 double palGmsta ( double date, double ut1 );
323 
324 /* void palH2e ( float az, float el, float phi, float *ha, float *dec ); */
325 
326 /* void palH2fk5 ( double dr, double dh, double drh, double ddh,
327  *                 double *r5, double *d5, double *dr5, double *dd5 ); */
328 
329 void palHfk5z ( double rh, double dh, double epoch,
330                 double *r5, double *d5, double *dr5, double *dd5 );
331 
332 /* void palImxv ( float rm[3][3], float va[3], float vb[3] ); */
333 
334 /* void palInt2in ( const char *string, int *nstrt, int *ireslt, int *jflag ); */
335 
336 void palIntin ( const char *string, int *nstrt, long *ireslt, int *jflag );
337 
338 void palInvf ( double fwds[6], double bkwds[6], int *j );
339 
340 /* void palKbj ( int jb, double e, char *k, int *j ); */
341 
342 /* void palM2av ( float rmat[3][3], float axvec[3] ); */
343 
344 void palMap ( double rm, double dm, double pr, double pd,
345               double px, double rv, double eq, double date,
346               double *ra, double *da );
347 
348 void palMappa ( double eq, double date, double amprms[21] );
349 
350 void palMapqk ( double rm, double dm, double pr, double pd,
351                 double px, double rv, double amprms[21],
352                 double *ra, double *da );
353 
354 void palMapqkz ( double rm, double dm, double amprms[21],
355                  double *ra, double *da );
356 
357 /* void palMoon ( int iy, int id, float fd, float posvel[6] ); */
358 
359 /* void palMxm ( float a[3][3], float b[3][3], float c[3][3] ); */
360 
361 /* void palMxv ( float rm[3][3], float va[3], float vb[3] ); */
362 
363 void palNut ( double date, double rmatn[3][3] );
364 
365 void palNutc ( double date, double *dpsi, double *deps, double *eps0 );
366 
367 /* void palNutc80 ( double date, double *dpsi, double *deps, double *eps0 ); */
368 
369 void palOap ( const char *type, double ob1, double ob2, double date,
370               double dut, double elongm, double phim, double hm,
371               double xp, double yp, double tdk, double pmb,
372               double rh, double wl, double tlr,
373               double *rap, double *dap );
374 
375 void palOapqk ( const char *type, double ob1, double ob2, const double aoprms[14],
376                 double *rap, double *dap );
377 
378 int palObs( size_t n, const char * c,
379             char * ident, size_t identlen,
380             char * name, size_t namelen,
381             double * w, double * p, double * h );
382 
383 double palPa ( double ha, double dec, double phi );
384 
385 /* double palPav ( float v1[3], float v2[3] ); */
386 
387 void palPcd ( double disco, double *x, double *y );
388 
389 /* void palPda2h ( double p, double d, double a,
390  *                 double *h1, int *j1, double *h2, int *j2 ); */
391 
392 /* void palPdq2h ( double p, double d, double q,
393  *                 double *h1, int *j1, double *h2, int *j2 ); */
394 
395 /* void palPermut ( int n, int istate[], int iorder[], int *j ); */
396 
397 void palPertel (int jform, double date0, double date1,
398                 double epoch0, double orbi0, double anode0,
399                 double perih0, double aorq0, double e0, double am0,
400                 double *epoch1, double *orbi1, double *anode1,
401                 double *perih1, double *aorq1, double *e1, double *am1,
402                 int *jstat );
403 
404 void palPertue ( double date, double u[13], int *jstat );
405 
406 void palPlanel ( double date, int jform, double epoch, double orbinc,
407                  double anode, double perih, double aorq,  double e,
408                  double aorl, double dm, double pv[6], int *jstat );
409 
410 void palPlanet ( double date, int np, double pv[6], int *j );
411 
412 void palPlante ( double date, double elong, double phi, int jform,
413                  double epoch, double orbinc, double anode, double perih,
414                  double aorq, double e, double aorl, double dm,
415                  double *ra, double *dec, double *r, int *jstat );
416 
417 void palPlantu ( double date, double elong, double phi, const double u[13],
418                  double *ra, double *dec, double *r, int *jstat );
419 
420 void palPm ( double r0, double d0, double pr, double pd,
421              double px, double rv, double ep0, double ep1,
422              double *r1, double *d1 );
423 
424 void palPolmo ( double elongm, double phim, double xp, double yp,
425                 double *elong, double *phi, double *daz );
426 
427 void palPrebn ( double bep0, double bep1, double rmatp[3][3] );
428 
429 void palPrec ( double ep0, double ep1, double rmatp[3][3] );
430 
431 /* void palPrecl ( double ep0, double ep1, double rmatp[3][3] ); */
432 
433 void palPreces ( const char sys[3], double ep0, double ep1,
434                  double *ra, double *dc );
435 
436 void palPrenut ( double epoch, double date, double rmatpn[3][3] );
437 
438 void palPv2el ( const double pv[6], double date, double pmass, int jformr,
439                 int *jform, double *epoch, double *orbinc,
440                 double *anode, double *perih, double *aorq, double *e,
441                 double *aorl, double *dm, int *jstat );
442 
443 void palPv2ue ( const double pv[6], double date, double pmass,
444                 double u[13], int *jstat );
445 
446 void palPvobs ( double p, double h, double stl, double pv[6] );
447 
448 void palPxy ( int np, double xye[][2], double xym[][2],
449               double coeffs[6],
450               double xyp[][2], double *xrms, double *yrms, double *rrms );
451 
452 /* float palRange ( float angle ); */
453 
454 float palRanorm ( float angle );
455 
456 /* double palRcc ( double tdb, double ut1, double wl, double u, double v ); */
457 
458 void palRdplan ( double date, int np, double elong, double phi,
459                  double *ra, double *dec, double *diam );
460 
461 void palRefco ( double hm, double tdk, double pmb, double rh,
462                 double wl, double phi, double tlr, double eps,
463                 double *refa, double *refb );
464 
465 void palRefcoq ( double tdk, double pmb, double rh, double wl,
466                 double *refa, double *refb );
467 
468 void palRefro ( double zobs, double hm, double tdk, double pmb,
469                 double rh, double wl, double phi, double tlr, double eps,
470                 double *ref );
471 
472 void palRefv ( double vu[3], double refa, double refb, double vr[3] );
473 
474 void palRefz ( double zu, double refa, double refb, double *zr );
475 
476 double palRverot ( double phi, double ra, double da, double st );
477 
478 double palRvgalc ( double r2000, double d2000 );
479 
480 double palRvlg ( double r2000, double d2000 );
481 
482 double palRvlsrd ( double r2000, double d2000 );
483 
484 double palRvlsrk ( double r2000, double d2000 );
485 
486 /* void palS2tp ( float ra, float dec, float raz, float decz,
487  *                float *xi, float *eta, int *j ); */
488 
489 /* float palSep ( float a1, float b1, float a2, float b2 ); */
490 
491 /* float palSepv ( float v1[3], float v2[3] ); */
492 
493 /* void palSmat ( int n, float *a, float *y, float *d, int *jf, int *iw ); */
494 
495 void palSubet ( double rc, double dc, double eq,
496                 double *rm, double *dm );
497 
498 void palSupgal ( double dsl, double dsb, double *dl, double *db );
499 
500 /* void palSvd ( int m, int n, int mp, int np,
501  *               double *a, double *w, double *v, double *work,
502  *               int *jstat ); */
503 
504 /* void palSvdcov ( int n, int np, int nc,
505  *                  double *w, double *v, double *work, double *cvm ); */
506 
507 /* void palSvdsol ( int m, int n, int mp, int np,
508  *                  double *b, double *u, double *w, double *v,
509  *                  double *work, double *x ); */
510 
511 /* void palTp2s ( float xi, float eta, float raz, float decz,
512  *                float *ra, float *dec ); */
513 
514 /* void palTp2v ( float xi, float eta, float v0[3], float v[3] ); */
515 
516 /* void palTps2c ( float xi, float eta, float ra, float dec,
517  *                 float *raz1, float *decz1,
518  *                 float *raz2, float *decz2, int *n ); */
519 
520 /* void palTpv2c ( float xi, float eta, float v[3],
521  *                 float v01[3], float v02[3], int *n ); */
522 
523 void palUe2el ( const double u[13], int jformr,
524                 int *jform, double *epoch, double *orbinc,
525                 double *anode, double *perih, double *aorq, double *e,
526                 double *aorl, double *dm, int *jstat );
527 
528 void palUe2pv ( double date, double u[13], double pv[], int *jstat );
529 
530 void palUnpcd ( double disco, double *x, double *y );
531 
532 /* void palV2tp ( float v[3], float v0[3], float *xi, float *eta, int *j ); */
533 
534 /* float palVdv ( float va[3], float vb[3] ); */
535 
536 int palVers ( char * verstring, size_t verlen );
537 
538 /* void palVn ( float v[3], float uv[3], float *vm ); */
539 
540 /* void palVxv ( float va[3], float vb[3], float vc[3] ); */
541 
542 void palXy2xy ( double x1, double y1, double coeffs[6],
543                 double *x2, double *y2 );
544 
545 /* double palZd ( double ha, double dec, double phi ); */
546 
547 #ifdef __cplusplus
548 }
549 #endif
550 
551 #endif
552