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