| 1 | /*
|
|---|
| 2 | *+
|
|---|
| 3 | * Name:
|
|---|
| 4 | * palTest
|
|---|
| 5 |
|
|---|
| 6 | * Purpose:
|
|---|
| 7 | * Test the PAL library
|
|---|
| 8 |
|
|---|
| 9 | * Language:
|
|---|
| 10 | * Starlink ANSI C
|
|---|
| 11 |
|
|---|
| 12 | * Type of Module:
|
|---|
| 13 | * Application
|
|---|
| 14 |
|
|---|
| 15 | * Description:
|
|---|
| 16 | * Test the PAL library is functioning correctly. Uses some of the SLA test code.
|
|---|
| 17 |
|
|---|
| 18 | * Authors:
|
|---|
| 19 | * TIMJ: Tim Jenness (JAC, Hawaii)
|
|---|
| 20 | * {enter_new_authors_here}
|
|---|
| 21 |
|
|---|
| 22 | * History:
|
|---|
| 23 | * 2012-02-08 (TIMJ):
|
|---|
| 24 | * Initial version
|
|---|
| 25 | * Adapted with permission from the Fortran SLALIB library.
|
|---|
| 26 | * {enter_further_changes_here}
|
|---|
| 27 |
|
|---|
| 28 | * Copyright:
|
|---|
| 29 | * Copyright (C) 2012 Science and Technology Facilities Council.
|
|---|
| 30 | * All Rights Reserved.
|
|---|
| 31 |
|
|---|
| 32 | * Licence:
|
|---|
| 33 | * This program is free software; you can redistribute it and/or
|
|---|
| 34 | * modify it under the terms of the GNU General Public License as
|
|---|
| 35 | * published by the Free Software Foundation; either version 3 of
|
|---|
| 36 | * the License, or (at your option) any later version.
|
|---|
| 37 | *
|
|---|
| 38 | * This program is distributed in the hope that it will be
|
|---|
| 39 | * useful, but WITHOUT ANY WARRANTY; without even the implied
|
|---|
| 40 | * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|---|
| 41 | * PURPOSE. See the GNU General Public License for more details.
|
|---|
| 42 | *
|
|---|
| 43 | * You should have received a copy of the GNU General Public License
|
|---|
| 44 | * along with this program; if not, write to the Free Software
|
|---|
| 45 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
|---|
| 46 | * USA.
|
|---|
| 47 |
|
|---|
| 48 | * Bugs:
|
|---|
| 49 | * {note_any_bugs_here}
|
|---|
| 50 | *-
|
|---|
| 51 | */
|
|---|
| 52 |
|
|---|
| 53 | #include <stdlib.h>
|
|---|
| 54 | #include <stdio.h>
|
|---|
| 55 | #include <string.h>
|
|---|
| 56 |
|
|---|
| 57 | #include "pal.h"
|
|---|
| 58 | #include "palmac.h"
|
|---|
| 59 |
|
|---|
| 60 | static int verbose = 1;
|
|---|
| 61 |
|
|---|
| 62 | /* Support functions to allow to test results.
|
|---|
| 63 | viv and vvd match the SOFA/ERFA implementations */
|
|---|
| 64 |
|
|---|
| 65 | static void viv(int ival, int ivalok, const char *func, const char *test,
|
|---|
| 66 | int *status)
|
|---|
| 67 | /*
|
|---|
| 68 | ** - - - -
|
|---|
| 69 | ** v i v
|
|---|
| 70 | ** - - - -
|
|---|
| 71 | **
|
|---|
| 72 | ** Validate an integer result.
|
|---|
| 73 | **
|
|---|
| 74 | ** Internal function used by t_sofa_c program.
|
|---|
| 75 | **
|
|---|
| 76 | ** Given:
|
|---|
| 77 | ** ival int value computed by function under test
|
|---|
| 78 | ** ivalok int correct value
|
|---|
| 79 | ** func char[] name of function under test
|
|---|
| 80 | ** test char[] name of individual test
|
|---|
| 81 | **
|
|---|
| 82 | ** Given and returned:
|
|---|
| 83 | ** status int set to FALSE if test fails
|
|---|
| 84 | **
|
|---|
| 85 | ** This revision: 2009 November 4
|
|---|
| 86 | */
|
|---|
| 87 | {
|
|---|
| 88 | if (ival != ivalok) {
|
|---|
| 89 | *status = 1;
|
|---|
| 90 | printf("%s failed: %s want %d got %d\n",
|
|---|
| 91 | func, test, ivalok, ival);
|
|---|
| 92 | } else if (verbose) {
|
|---|
| 93 | printf("%s passed: %s want %d got %d\n",
|
|---|
| 94 | func, test, ivalok, ival);
|
|---|
| 95 | }
|
|---|
| 96 | return;
|
|---|
| 97 | }
|
|---|
| 98 |
|
|---|
| 99 | static void vvd(double val, double valok, double dval,
|
|---|
| 100 | const char *func, const char *test, int *status)
|
|---|
| 101 | /*
|
|---|
| 102 | ** - - - -
|
|---|
| 103 | ** v v d
|
|---|
| 104 | ** - - - -
|
|---|
| 105 | **
|
|---|
| 106 | ** Validate a double result.
|
|---|
| 107 | **
|
|---|
| 108 | ** Internal function used by t_sofa_c program.
|
|---|
| 109 | **
|
|---|
| 110 | ** Given:
|
|---|
| 111 | ** val double value computed by function under test
|
|---|
| 112 | ** valok double expected value
|
|---|
| 113 | ** dval double maximum allowable error
|
|---|
| 114 | ** func char[] name of function under test
|
|---|
| 115 | ** test char[] name of individual test
|
|---|
| 116 | **
|
|---|
| 117 | ** Given and returned:
|
|---|
| 118 | ** status int set to FALSE if test fails
|
|---|
| 119 | **
|
|---|
| 120 | ** This revision: 2008 June 8
|
|---|
| 121 | */
|
|---|
| 122 | {
|
|---|
| 123 | double a, f; /* absolute and fractional error */
|
|---|
| 124 |
|
|---|
| 125 |
|
|---|
| 126 | a = val - valok;
|
|---|
| 127 | if (fabs(a) > dval) {
|
|---|
| 128 | f = fabs(valok / a);
|
|---|
| 129 | *status = 1;
|
|---|
| 130 | printf("%s failed: %s want %.20g got %.20g (1/%.3g)\n",
|
|---|
| 131 | func, test, valok, val, f);
|
|---|
| 132 | } else if (verbose) {
|
|---|
| 133 | printf("%s passed: %s want %.20g got %.20g\n",
|
|---|
| 134 | func, test, valok, val);
|
|---|
| 135 | }
|
|---|
| 136 | return;
|
|---|
| 137 | }
|
|---|
| 138 |
|
|---|
| 139 | /* Verify a string */
|
|---|
| 140 | static void vcs( const char * val, const char * valok,
|
|---|
| 141 | const char * func, const char * test,
|
|---|
| 142 | int *status ) {
|
|---|
| 143 |
|
|---|
| 144 | if (strcmp(val, valok) != 0) {
|
|---|
| 145 | *status = 1;
|
|---|
| 146 | printf("%s failed: %s want %s got %s\n",
|
|---|
| 147 | func, test, valok, val );
|
|---|
| 148 | } else if (verbose) {
|
|---|
| 149 | printf("%s passed: %s want %s got %s\n",
|
|---|
| 150 | func, test, valok, val );
|
|---|
| 151 | }
|
|---|
| 152 | return;
|
|---|
| 153 |
|
|---|
| 154 | }
|
|---|
| 155 |
|
|---|
| 156 | /* Verify the 3x3 rmat matrix */
|
|---|
| 157 | static void
|
|---|
| 158 | vrmat( double rmat[3][3], double expected[3][3], const char * func,
|
|---|
| 159 | double dval, int * status ) {
|
|---|
| 160 | int i;
|
|---|
| 161 | char buf[10];
|
|---|
| 162 | for( i = 0; i < 3; i++ ) {
|
|---|
| 163 | int j;
|
|---|
| 164 | for( j = 0; j < 3; j++ ) {
|
|---|
| 165 | sprintf( buf, "%d,%d", i, j );
|
|---|
| 166 | vvd( rmat[i][j], expected[i][j], dval, func, buf, status );
|
|---|
| 167 | }
|
|---|
| 168 | }
|
|---|
| 169 | }
|
|---|
| 170 |
|
|---|
| 171 | /* Verify a vector */
|
|---|
| 172 | static void
|
|---|
| 173 | vvec( int len, double *vec, double *expected, const char *func,
|
|---|
| 174 | int *status ) {
|
|---|
| 175 | int i;
|
|---|
| 176 | char buf[10];
|
|---|
| 177 | for( i = 0; i < len; i++ ) {
|
|---|
| 178 | sprintf( buf, "%d", i );
|
|---|
| 179 | vvd( vec[i], expected[i], 1e-12, func, buf, status );
|
|---|
| 180 | }
|
|---|
| 181 | }
|
|---|
| 182 |
|
|---|
| 183 | /******************************************************************/
|
|---|
| 184 | /* TEST FUNCTIONS */
|
|---|
| 185 |
|
|---|
| 186 | /* Adding E-terms */
|
|---|
| 187 |
|
|---|
| 188 | static void t_addet( int *status ) {
|
|---|
| 189 | double r1,d1,r2,d2;
|
|---|
| 190 | double rm = 2.;
|
|---|
| 191 | double dm = -1.;
|
|---|
| 192 | double eq = 1975.;
|
|---|
| 193 |
|
|---|
| 194 |
|
|---|
| 195 | palAddet ( rm, dm, eq, &r1, &d1 );
|
|---|
| 196 | vvd ( r1 - rm, 2.983864874295250e-6, 1e-12, "palAddet",
|
|---|
| 197 | "R", status );
|
|---|
| 198 | vvd ( d1 - dm, 2.379650804185118e-7, 1e-12, "palAddet",
|
|---|
| 199 | "D", status );
|
|---|
| 200 |
|
|---|
| 201 | palSubet ( r1, d1, eq, &r2, &d2 );
|
|---|
| 202 | vvd ( r2 - rm, 0, 1e-12, "palSubet", "R", status );
|
|---|
| 203 | vvd ( d2 - dm, 0, 1e-12, "palSubet", "D", status );
|
|---|
| 204 |
|
|---|
| 205 | }
|
|---|
| 206 |
|
|---|
| 207 | static void t_afin( int * status ) {
|
|---|
| 208 |
|
|---|
| 209 | int j;
|
|---|
| 210 | int i = 1;
|
|---|
| 211 | double d = 0.0;
|
|---|
| 212 | const char * s = "12 34 56.7 |";
|
|---|
| 213 | const char * s2 = "45 00 00.000 ";
|
|---|
| 214 |
|
|---|
| 215 | palDafin (s, &i, &d, &j);
|
|---|
| 216 | viv ( i, 12, "palDafin", "I", status );
|
|---|
| 217 | vvd ( d, 0.2196045986911432, 1e-12, "palDafin", "A",
|
|---|
| 218 | status );
|
|---|
| 219 | viv ( j, 0, "palDafin", "J", status );
|
|---|
| 220 |
|
|---|
| 221 | i = 1;
|
|---|
| 222 | palDafin (s2, &i, &d, &j);
|
|---|
| 223 | viv ( i, 14, "palDafin", "I", status );
|
|---|
| 224 | vvd ( d, PAL__DPI/4.0, 1e-12, "palDafin", "A",
|
|---|
| 225 | status );
|
|---|
| 226 | viv ( j, 0, "palDafin", "J", status );
|
|---|
| 227 | }
|
|---|
| 228 |
|
|---|
| 229 | /* Altaz */
|
|---|
| 230 |
|
|---|
| 231 | static void t_altaz( int *status ) {
|
|---|
| 232 | double az, azd, azdd, el, eld, eldd, pa, pad, padd;
|
|---|
| 233 | palAltaz( 0.7, -0.7, -0.65,
|
|---|
| 234 | &az, &azd, &azdd, &el, &eld, &eldd, &pa, &pad, &padd );
|
|---|
| 235 |
|
|---|
| 236 | vvd ( az, 4.400560746660174, 1e-12, "palAltaz",
|
|---|
| 237 | "AZ", status );
|
|---|
| 238 | vvd ( azd, -0.2015438937145421, 1e-13, "palAltaz",
|
|---|
| 239 | "AZD", status );
|
|---|
| 240 | vvd ( azdd, -0.4381266949668748, 1e-13, "palAltaz",
|
|---|
| 241 | "AZDD", status );
|
|---|
| 242 | vvd ( el, 1.026646506651396, 1e-12, "palAltaz",
|
|---|
| 243 | "EL", status );
|
|---|
| 244 | vvd ( eld, -0.7576920683826450, 1e-13, "palAltaz",
|
|---|
| 245 | "ELD", status );
|
|---|
| 246 | vvd ( eldd, 0.04922465406857453, 1e-14, "palAltaz",
|
|---|
| 247 | "ELDD", status );
|
|---|
| 248 | vvd ( pa, 1.707639969653937, 1e-12, "palAltaz",
|
|---|
| 249 | "PA", status );
|
|---|
| 250 | vvd ( pad, 0.4717832355365627, 1e-13, "palAltaz",
|
|---|
| 251 | "PAD", status );
|
|---|
| 252 | vvd ( padd, -0.2957914128185515, 1e-13, "palAltaz",
|
|---|
| 253 | "PADD", status );
|
|---|
| 254 | }
|
|---|
| 255 |
|
|---|
| 256 | /* Airmass */
|
|---|
| 257 |
|
|---|
| 258 | static void t_airmas( int *status ) {
|
|---|
| 259 | vvd ( palAirmas ( 1.2354 ), 3.015698990074724,
|
|---|
| 260 | 1e-12, "palAirmas", " ", status );
|
|---|
| 261 | }
|
|---|
| 262 |
|
|---|
| 263 | /* Apparent to mean place */
|
|---|
| 264 |
|
|---|
| 265 | static void t_amp ( int *status ) {
|
|---|
| 266 | double rm, dm;
|
|---|
| 267 |
|
|---|
| 268 | /* Original SLA test is not accurate since palMapqk
|
|---|
| 269 | differs from slaMapqk */
|
|---|
| 270 | palAmp ( 2.345, -1.234, 50100, 1990, &rm, &dm );
|
|---|
| 271 | vvd ( rm, 2.344472180027961, 1e-6, "palAmp", "R",
|
|---|
| 272 | status );
|
|---|
| 273 | vvd ( dm, -1.233573099847705, 1e-7, "palAmp", "D",
|
|---|
| 274 | status );
|
|---|
| 275 |
|
|---|
| 276 | /* This is the palMapqk test */
|
|---|
| 277 | palAmp( 1.234, -0.567, 55927.0, 2010.0, &rm, &dm );
|
|---|
| 278 | vvd( rm, 1.233512033578303857, 1.0E-12, "palAmp", "rm", status );
|
|---|
| 279 | vvd( dm, -0.56702909748530827549, 1.0E-12, "palAmp", "dm", status );
|
|---|
| 280 | }
|
|---|
| 281 |
|
|---|
| 282 | /* Apparent to Observed place */
|
|---|
| 283 |
|
|---|
| 284 | static void t_aop ( int *status ) {
|
|---|
| 285 |
|
|---|
| 286 | int i;
|
|---|
| 287 |
|
|---|
| 288 | double rap, dap, date, dut, elongm, phim, hm, xp, yp,
|
|---|
| 289 | tdk, pmb, rh, wl, tlr, aob, zob, hob, dob, rob, aoprms[14];
|
|---|
| 290 |
|
|---|
| 291 | dap = -0.1234;
|
|---|
| 292 | date = 51000.1;
|
|---|
| 293 | dut = 25.0;
|
|---|
| 294 | elongm = 2.1;
|
|---|
| 295 | phim = 0.5;
|
|---|
| 296 | hm = 3000.0;
|
|---|
| 297 | xp = -0.5e-6;
|
|---|
| 298 | yp = 1.0e-6;
|
|---|
| 299 | tdk = 280.0;
|
|---|
| 300 | pmb = 550.0;
|
|---|
| 301 | rh = 0.6;
|
|---|
| 302 | tlr = 0.006;
|
|---|
| 303 |
|
|---|
| 304 | for (i=1; i<=3; i++) {
|
|---|
| 305 |
|
|---|
| 306 | if ( i == 1 ) {
|
|---|
| 307 | rap = 2.7;
|
|---|
| 308 | wl = 0.45;
|
|---|
| 309 | } else if ( i == 2 ) {
|
|---|
| 310 | rap = 2.345;
|
|---|
| 311 | } else {
|
|---|
| 312 | wl = 1.0e6;
|
|---|
| 313 | }
|
|---|
| 314 |
|
|---|
| 315 | palAop ( rap, dap, date, dut, elongm, phim, hm, xp, yp,
|
|---|
| 316 | tdk, pmb, rh, wl, tlr, &aob, &zob, &hob, &dob, &rob );
|
|---|
| 317 |
|
|---|
| 318 | if ( i == 1 ) {
|
|---|
| 319 | vvd( aob, 1.812817787123283034, 1e-10, "palAop",
|
|---|
| 320 | "lo aob", status );
|
|---|
| 321 | vvd( zob, 1.393860816635714034, 1e-8, "palAop",
|
|---|
| 322 | "lo zob", status );
|
|---|
| 323 | vvd( hob, -1.297808009092456683, 1e-8, "palAop",
|
|---|
| 324 | "lo hob", status );
|
|---|
| 325 | vvd( dob, -0.122967060534561, 1e-8, "palAop",
|
|---|
| 326 | "lo dob", status );
|
|---|
| 327 | vvd( rob, 2.699270287872084, 1e-8, "palAop",
|
|---|
| 328 | "lo rob", status );
|
|---|
| 329 | } else if ( i == 2 ) {
|
|---|
| 330 | vvd( aob, 2.019928026670621442, 1e-10, "palAop",
|
|---|
| 331 | "aob/o", status );
|
|---|
| 332 | vvd( zob, 1.101316172427482466, 1e-10, "palAop",
|
|---|
| 333 | "zob/o", status );
|
|---|
| 334 | vvd( hob, -0.9432923558497740862, 1e-10, "palAop",
|
|---|
| 335 | "hob/o", status );
|
|---|
| 336 | vvd( dob, -0.1232144708194224, 1e-10, "palAop",
|
|---|
| 337 | "dob/o", status );
|
|---|
| 338 | vvd( rob, 2.344754634629428, 1e-10, "palAop",
|
|---|
| 339 | "rob/o", status );
|
|---|
| 340 | } else {
|
|---|
| 341 | vvd( aob, 2.019928026670621442, 1e-10, "palAop",
|
|---|
| 342 | "aob/r", status );
|
|---|
| 343 | vvd( zob, 1.101267532198003760, 1e-10, "palAop",
|
|---|
| 344 | "zob/r", status );
|
|---|
| 345 | vvd( hob, -0.9432533138143315937, 1e-10, "palAop",
|
|---|
| 346 | "hob/r", status );
|
|---|
| 347 | vvd( dob, -0.1231850665614878, 1e-10, "palAop",
|
|---|
| 348 | "dob/r", status );
|
|---|
| 349 | vvd( rob, 2.344715592593984, 1e-10, "palAop",
|
|---|
| 350 | "rob/r", status );
|
|---|
| 351 | }
|
|---|
| 352 | }
|
|---|
| 353 |
|
|---|
| 354 | date = 48000.3;
|
|---|
| 355 | wl = 0.45;
|
|---|
| 356 |
|
|---|
| 357 | palAoppa ( date, dut, elongm, phim, hm, xp, yp, tdk,
|
|---|
| 358 | pmb, rh, wl, tlr, aoprms );
|
|---|
| 359 | vvd( aoprms[0], 0.4999993892136306, 1e-13, "palAoppa",
|
|---|
| 360 | "0", status );
|
|---|
| 361 | vvd( aoprms[1], 0.4794250025886467, 1e-13, "palAoppa",
|
|---|
| 362 | "1", status );
|
|---|
| 363 | vvd( aoprms[2], 0.8775828547167932, 1e-13, "palAoppa",
|
|---|
| 364 | "2", status );
|
|---|
| 365 | vvd( aoprms[3], 1.363180872136126e-6, 1e-13, "palAoppa",
|
|---|
| 366 | "3", status );
|
|---|
| 367 | vvd( aoprms[4], 3000.0, 1e-10, "palAoppa", "4",
|
|---|
| 368 | status );
|
|---|
| 369 | vvd( aoprms[5], 280.0, 1e-11, "palAoppa", "5",
|
|---|
| 370 | status );
|
|---|
| 371 | vvd( aoprms[6], 550.0, 1e-11, "palAoppa", "6",
|
|---|
| 372 | status );
|
|---|
| 373 | vvd( aoprms[7], 0.6, 1e-13, "palAoppa", "7",
|
|---|
| 374 | status );
|
|---|
| 375 | vvd( aoprms[8], 0.45, 1e-13, "palAoppa", "8",
|
|---|
| 376 | status );
|
|---|
| 377 | vvd( aoprms[9], 0.006, 1e-15, "palAoppa", "9",
|
|---|
| 378 | status );
|
|---|
| 379 | vvd( aoprms[10], 0.0001562803328459898, 1e-13,
|
|---|
| 380 | "palAoppa", "10", status );
|
|---|
| 381 | vvd( aoprms[11], -1.792293660141e-7, 1e-13,
|
|---|
| 382 | "palAoppa", "11", status );
|
|---|
| 383 | vvd( aoprms[12], 2.101874231495843, 1e-13,
|
|---|
| 384 | "palAoppa", "12", status );
|
|---|
| 385 | vvd( aoprms[13], 7.601916802079765, 1e-8,
|
|---|
| 386 | "palAoppa", "13", status );
|
|---|
| 387 |
|
|---|
| 388 | palOap ( "r", 1.6, -1.01, date, dut, elongm, phim,
|
|---|
| 389 | hm, xp, yp, tdk, pmb, rh, wl, tlr, &rap, &dap );
|
|---|
| 390 | vvd( rap, 1.601197569844787, 1e-10, "palOap",
|
|---|
| 391 | "rr", status );
|
|---|
| 392 | vvd( dap, -1.012528566544262, 1e-10, "palOap",
|
|---|
| 393 | "rd", status );
|
|---|
| 394 | palOap ( "h", -1.234, 2.34, date, dut, elongm, phim,
|
|---|
| 395 | hm, xp, yp, tdk, pmb, rh, wl, tlr, &rap, &dap );
|
|---|
| 396 | vvd( rap, 5.693087688154886463, 1e-10, "palOap",
|
|---|
| 397 | "hr", status );
|
|---|
| 398 | vvd( dap, 0.8010281167405444, 1e-10, "palOap",
|
|---|
| 399 | "hd", status );
|
|---|
| 400 | palOap ( "a", 6.1, 1.1, date, dut, elongm, phim,
|
|---|
| 401 | hm, xp, yp, tdk, pmb, rh, wl, tlr, &rap, &dap );
|
|---|
| 402 | vvd( rap, 5.894305175192448940, 1e-10, "palOap",
|
|---|
| 403 | "ar", status );
|
|---|
| 404 | vvd( dap, 1.406150707974922, 1e-10, "palOap",
|
|---|
| 405 | "ad", status );
|
|---|
| 406 |
|
|---|
| 407 | palOapqk ( "r", 2.1, -0.345, aoprms, &rap, &dap );
|
|---|
| 408 | vvd( rap, 2.10023962776202, 1e-10, "palOapqk",
|
|---|
| 409 | "rr", status );
|
|---|
| 410 | vvd( dap, -0.3452428692888919, 1e-10, "palOapqk",
|
|---|
| 411 | "rd", status );
|
|---|
| 412 | palOapqk ( "h", -0.01, 1.03, aoprms, &rap, &dap );
|
|---|
| 413 | vvd( rap, 1.328731933634564995, 1e-10, "palOapqk",
|
|---|
| 414 | "hr", status );
|
|---|
| 415 | vvd( dap, 1.030091538647746, 1e-10, "palOapqk",
|
|---|
| 416 | "hd", status );
|
|---|
| 417 | palOapqk ( "a", 4.321, 0.987, aoprms, &rap, &dap );
|
|---|
| 418 | vvd( rap, 0.4375507112075065923, 1e-10, "palOapqk",
|
|---|
| 419 | "ar", status );
|
|---|
| 420 | vvd( dap, -0.01520898480744436, 1e-10, "palOapqk",
|
|---|
| 421 | "ad", status );
|
|---|
| 422 |
|
|---|
| 423 | palAoppat ( date + PAL__DS2R, aoprms );
|
|---|
| 424 | vvd( aoprms[13], 7.602374979243502, 1e-8, "palAoppat",
|
|---|
| 425 | " ", status );
|
|---|
| 426 | }
|
|---|
| 427 |
|
|---|
| 428 | /* Bearings */
|
|---|
| 429 |
|
|---|
| 430 | static void t_bear( int *status ) {
|
|---|
| 431 | double a1 = 1.234;
|
|---|
| 432 | double b1 = -0.123;
|
|---|
| 433 | double a2 = 2.345;
|
|---|
| 434 | double b2 = 0.789;
|
|---|
| 435 |
|
|---|
| 436 | double d1[3];
|
|---|
| 437 | double d2[3];
|
|---|
| 438 |
|
|---|
| 439 | vvd ( palDbear ( a1, b1, a2, b2 ), 0.7045970341781791,
|
|---|
| 440 | 1e-12, "palDbear", " ", status );
|
|---|
| 441 | palDcs2c ( a1, b1, d1 );
|
|---|
| 442 | palDcs2c ( a2, b2, d2 );
|
|---|
| 443 |
|
|---|
| 444 | vvd ( palDpav ( d1, d2 ), 0.7045970341781791,
|
|---|
| 445 | 1e-12, "palDpav", " ", status );
|
|---|
| 446 |
|
|---|
| 447 | }
|
|---|
| 448 |
|
|---|
| 449 | /* Calendar to MJD */
|
|---|
| 450 |
|
|---|
| 451 | static void t_caldj( int *status ) {
|
|---|
| 452 | int j;
|
|---|
| 453 | double djm;
|
|---|
| 454 |
|
|---|
| 455 | palCaldj ( 1999, 12, 31, &djm, &j );
|
|---|
| 456 | vvd ( djm, 51543, 0, "palCaldj", " ", status );
|
|---|
| 457 | viv ( j, 0, "palCaldj", "J", status );
|
|---|
| 458 | }
|
|---|
| 459 |
|
|---|
| 460 | /* palDaf2r */
|
|---|
| 461 |
|
|---|
| 462 | static void t_caf2r( int * status ) {
|
|---|
| 463 | int j;
|
|---|
| 464 | double dr;
|
|---|
| 465 |
|
|---|
| 466 | palDaf2r ( 76, 54, 32.1, &dr, &j );
|
|---|
| 467 | vvd ( dr, 1.342313819975276, 1e-12, "palDaf2r",
|
|---|
| 468 | "r", status );
|
|---|
| 469 | viv ( j, 0, "palDaf2r", "j", status );
|
|---|
| 470 | }
|
|---|
| 471 |
|
|---|
| 472 | /* Test palDcc2s routines */
|
|---|
| 473 |
|
|---|
| 474 | static void t_cc2s( int * status ) {
|
|---|
| 475 | double dv[3] = { 100., -50., 25. };
|
|---|
| 476 | double da, db;
|
|---|
| 477 |
|
|---|
| 478 | palDcc2s ( dv, &da, &db );
|
|---|
| 479 | vvd ( da, -0.4636476090008061, 1e-12, "palDcc2s",
|
|---|
| 480 | "A", status );
|
|---|
| 481 | vvd ( db, 0.2199879773954594, 1e-12, "palDcc2s",
|
|---|
| 482 | "B", status );
|
|---|
| 483 | }
|
|---|
| 484 |
|
|---|
| 485 | /* palDd2tf */
|
|---|
| 486 |
|
|---|
| 487 | static void t_cd2tf( int *status ) {
|
|---|
| 488 | int ihmsf[4];
|
|---|
| 489 | char s;
|
|---|
| 490 |
|
|---|
| 491 | palDd2tf ( 4, -0.987654321, &s, ihmsf );
|
|---|
| 492 | viv ( s, '-', "palDd2tf", "S", status );
|
|---|
| 493 | viv ( ihmsf[0], 23, "palDd2tf", "(1)", status );
|
|---|
| 494 | viv ( ihmsf[1], 42, "palDd2tf", "(2)", status );
|
|---|
| 495 | viv ( ihmsf[2], 13, "palDd2tf", "(3)", status );
|
|---|
| 496 | viv ( ihmsf[3], 3333, "palDd2tf", "(4)", status );
|
|---|
| 497 | }
|
|---|
| 498 |
|
|---|
| 499 | /* Calendar to MJD */
|
|---|
| 500 |
|
|---|
| 501 | static void t_cldj( int *status ) {
|
|---|
| 502 | double d;
|
|---|
| 503 | int j;
|
|---|
| 504 |
|
|---|
| 505 | palCldj ( 1899, 12, 31, &d, &j );
|
|---|
| 506 | vvd ( d, 15019, 0, "palCldj", "D", status );
|
|---|
| 507 | viv ( j, 0, "palCldj", "J", status );
|
|---|
| 508 | }
|
|---|
| 509 |
|
|---|
| 510 | /* palDr2af */
|
|---|
| 511 |
|
|---|
| 512 | static void t_cr2af( int *status ) {
|
|---|
| 513 | char s;
|
|---|
| 514 | int idmsf[4];
|
|---|
| 515 | palDr2af ( 4, 2.345, &s, idmsf );
|
|---|
| 516 | viv ( s, '+', "palDr2af", "S", status );
|
|---|
| 517 | viv ( idmsf[0], 134, "palDr2af", "(1)", status );
|
|---|
| 518 | viv ( idmsf[1], 21, "palDr2af", "(2)", status );
|
|---|
| 519 | viv ( idmsf[2], 30, "palDr2af", "(3)", status );
|
|---|
| 520 | viv ( idmsf[3], 9706, "palDr2af", "(4)", status );
|
|---|
| 521 | }
|
|---|
| 522 |
|
|---|
| 523 | /* palDr2tf */
|
|---|
| 524 |
|
|---|
| 525 | static void t_cr2tf( int *status ) {
|
|---|
| 526 | char s;
|
|---|
| 527 | int ihmsf[4];
|
|---|
| 528 | palDr2tf ( 4, -3.01234, &s, ihmsf );
|
|---|
| 529 | viv ( s, '-', "palDr2tf", "S", status );
|
|---|
| 530 | viv ( ihmsf[0], 11, "palDr2tf", "(1)", status );
|
|---|
| 531 | viv ( ihmsf[1], 30, "palDr2tf", "(2)", status );
|
|---|
| 532 | viv ( ihmsf[2], 22, "palDr2tf", "(3)", status );
|
|---|
| 533 | viv ( ihmsf[3], 6484, "palDr2tf", "(4)", status );
|
|---|
| 534 | }
|
|---|
| 535 |
|
|---|
| 536 | /* palDtf2d */
|
|---|
| 537 |
|
|---|
| 538 | static void t_ctf2d( int *status ) {
|
|---|
| 539 | double dd;
|
|---|
| 540 | int j;
|
|---|
| 541 |
|
|---|
| 542 | palDtf2d (23, 56, 59.1, &dd, &j);
|
|---|
| 543 | vvd ( dd, 0.99790625, 1e-12, "palDtf2d", "D", status );
|
|---|
| 544 | viv ( j, 0, "palDtf2d", "J", status );
|
|---|
| 545 | }
|
|---|
| 546 |
|
|---|
| 547 | /* palDtf2r */
|
|---|
| 548 |
|
|---|
| 549 | static void t_ctf2r( int *status ) {
|
|---|
| 550 | double dr;
|
|---|
| 551 | int j;
|
|---|
| 552 |
|
|---|
| 553 | palDtf2r (23, 56, 59.1, &dr, &j);
|
|---|
| 554 | vvd ( dr, 6.270029887942679, 1e-12, "palDtf2r",
|
|---|
| 555 | "R", status );
|
|---|
| 556 | viv ( j, 0, "palDtf2r", "J", status );
|
|---|
| 557 | }
|
|---|
| 558 |
|
|---|
| 559 | static void t_dat ( int *status ) {
|
|---|
| 560 | vvd ( palDat ( 43900 ), 18, 0, "palDat",
|
|---|
| 561 | " ", status );
|
|---|
| 562 | vvd ( palDtt ( 40404 ), 39.709746, 1e-12, "palDtt",
|
|---|
| 563 | " ", status );
|
|---|
| 564 | vvd ( palDt ( 500 ), 4686.7, 1e-10, "palDt",
|
|---|
| 565 | "500", status );
|
|---|
| 566 | vvd ( palDt ( 1400 ), 408, 1e-11, "palDt",
|
|---|
| 567 | "1400", status );
|
|---|
| 568 | vvd ( palDt ( 1950 ), 27.99145626, 1e-12, "palDt",
|
|---|
| 569 | "1950", status );
|
|---|
| 570 | }
|
|---|
| 571 |
|
|---|
| 572 | /* Dates */
|
|---|
| 573 |
|
|---|
| 574 | static void t_djcal( int *status ) {
|
|---|
| 575 | const double djm = 50123.9999;
|
|---|
| 576 | int iy, im, id;
|
|---|
| 577 | int iydmf[4];
|
|---|
| 578 | int j;
|
|---|
| 579 | double f;
|
|---|
| 580 |
|
|---|
| 581 | palDjcal ( 4, djm, iydmf, &j );
|
|---|
| 582 | viv ( iydmf[0], 1996, "palDjcal", "Y", status );
|
|---|
| 583 | viv ( iydmf[1], 2, "palDjcal", "M", status );
|
|---|
| 584 | viv ( iydmf[2], 10, "palDjcal", "D", status );
|
|---|
| 585 | viv ( iydmf[3], 9999, "palDjcal", "F", status );
|
|---|
| 586 | viv ( j, 0, "palDjcal", "J", status );
|
|---|
| 587 |
|
|---|
| 588 | palDjcl ( djm, &iy, &im, &id, &f, &j );
|
|---|
| 589 | viv ( iy, 1996, "palDjcl", "Y", status );
|
|---|
| 590 | viv ( im, 2, "palDjcl", "M", status );
|
|---|
| 591 | viv ( id, 10, "palDjcl", "D", status );
|
|---|
| 592 | vvd ( f, 0.9999, 1e-7, "palDjcl", "F", status );
|
|---|
| 593 | viv ( j, 0, "palDjcl", "J", status );
|
|---|
| 594 |
|
|---|
| 595 | }
|
|---|
| 596 |
|
|---|
| 597 | /* Matrix inversion */
|
|---|
| 598 |
|
|---|
| 599 | static void t_dmat( int *status ) {
|
|---|
| 600 | int j;
|
|---|
| 601 | int iw[3];
|
|---|
| 602 | double dd;
|
|---|
| 603 | double da[9] = {
|
|---|
| 604 | 2.22, 1.6578, 1.380522,
|
|---|
| 605 | 1.6578, 1.380522, 1.22548578,
|
|---|
| 606 | 1.380522, 1.22548578, 1.1356276122
|
|---|
| 607 | };
|
|---|
| 608 | double dv[3] = {
|
|---|
| 609 | 2.28625, 1.7128825, 1.429432225
|
|---|
| 610 | };
|
|---|
| 611 |
|
|---|
| 612 | palDmat( 3, da, dv, &dd, &j, iw );
|
|---|
| 613 | vvd ( da[0], 18.02550629769198,
|
|---|
| 614 | 1e-10, "palDmat", "a[0]", status );
|
|---|
| 615 | vvd ( da[1], -52.16386644917280607,
|
|---|
| 616 | 1e-10, "palDmat", "a[1]", status );
|
|---|
| 617 | vvd ( da[2], 34.37875949717850495,
|
|---|
| 618 | 1e-10, "palDmat", "a[2]", status );
|
|---|
| 619 | vvd ( da[3], -52.16386644917280607,
|
|---|
| 620 | 1e-10, "palDmat", "a[3]", status );
|
|---|
| 621 | vvd ( da[4], 168.1778099099805627,
|
|---|
| 622 | 1e-10, "palDmat", "a[4]", status );
|
|---|
| 623 | vvd ( da[5], -118.0722869694232670,
|
|---|
| 624 | 1e-10, "palDmat", "a[5]", status );
|
|---|
| 625 | vvd ( da[6], 34.37875949717850495,
|
|---|
| 626 | 1e-10, "palDmat", "a[6]", status );
|
|---|
| 627 | vvd ( da[7], -118.0722869694232670,
|
|---|
| 628 | 1e-10, "palDmat", "a[7]", status );
|
|---|
| 629 | vvd ( da[8], 86.50307003740151262,
|
|---|
| 630 | 1e-10, "palDmat", "a[8]", status );
|
|---|
| 631 | vvd ( dv[0], 1.002346480763383,
|
|---|
| 632 | 1e-12, "palDmat", "v[0]", status );
|
|---|
| 633 | vvd ( dv[1], 0.03285594016974583489,
|
|---|
| 634 | 1e-12, "palDmat", "v[1]", status );
|
|---|
| 635 | vvd ( dv[2], 0.004760688414885247309,
|
|---|
| 636 | 1e-12, "palDmat", "v[2]", status );
|
|---|
| 637 | vvd ( dd, 0.003658344147359863,
|
|---|
| 638 | 1e-12, "palDmat", "D", status );
|
|---|
| 639 | viv ( j, 0, "palDmat", "J", status );
|
|---|
| 640 |
|
|---|
| 641 | }
|
|---|
| 642 |
|
|---|
| 643 | /* Test palDe2h and palDh2e routines */
|
|---|
| 644 |
|
|---|
| 645 | static void t_e2h( int *status ) {
|
|---|
| 646 | double dh, dd, dp, da, de;
|
|---|
| 647 |
|
|---|
| 648 | dh = -0.3;
|
|---|
| 649 | dd = -1.1;
|
|---|
| 650 | dp = -0.7;
|
|---|
| 651 |
|
|---|
| 652 | palDe2h( dh, dd, dp, &da, &de );
|
|---|
| 653 | vvd( da, 2.820087515852369, 1e-12, "palDe2h",
|
|---|
| 654 | "AZ", status);
|
|---|
| 655 | vvd( de, 1.132711866443304, 1e-12, "palDe2h",
|
|---|
| 656 | "EL", status );
|
|---|
| 657 |
|
|---|
| 658 | palDh2e( da, de, dp, &dh, &dd );
|
|---|
| 659 | vvd( dh, -0.3, 1e-12, "palDh2e", "HA", status);
|
|---|
| 660 | vvd( dd, -1.1, 1e-12, "palDh2e", "DEC", status );
|
|---|
| 661 |
|
|---|
| 662 | }
|
|---|
| 663 |
|
|---|
| 664 | /* Epochs */
|
|---|
| 665 |
|
|---|
| 666 | static void t_epb( int *status ) {
|
|---|
| 667 | vvd ( palEpb( 45123 ), 1982.419793168669, 1e-8,
|
|---|
| 668 | "palEpb", " ", status );
|
|---|
| 669 | }
|
|---|
| 670 |
|
|---|
| 671 | static void t_epb2d( int *status ) {
|
|---|
| 672 | vvd ( palEpb2d( 1975.5 ), 42595.5995279655, 1e-7,
|
|---|
| 673 | "palEpb2d", " ", status );
|
|---|
| 674 | }
|
|---|
| 675 |
|
|---|
| 676 | static void t_epco( int *status ) {
|
|---|
| 677 | vvd ( palEpco ( 'B', 'J', 2000 ), 2000.001277513665,
|
|---|
| 678 | 1e-7, "palEpco", "BJ", status );
|
|---|
| 679 | vvd ( palEpco ( 'J', 'B', 1950 ), 1949.999790442300,
|
|---|
| 680 | 1e-7, "palEpco", "JB", status );
|
|---|
| 681 | vvd ( palEpco ( 'J', 'j', 2000 ), 2000,
|
|---|
| 682 | 1e-7, "palEpco", "JJ", status );
|
|---|
| 683 | }
|
|---|
| 684 |
|
|---|
| 685 | static void t_epj( int *status ) {
|
|---|
| 686 | vvd ( palEpj( 42999 ), 1976.603696098563,
|
|---|
| 687 | 1e-7, "palEpj", " ", status );
|
|---|
| 688 | }
|
|---|
| 689 |
|
|---|
| 690 | static void t_epj2d( int *status ) {
|
|---|
| 691 | vvd ( palEpj2d( 2010.077 ), 55225.124250,
|
|---|
| 692 | 1e-6, "palEpj2d", " ", status );
|
|---|
| 693 | }
|
|---|
| 694 |
|
|---|
| 695 | /* Equation of the equinoxes */
|
|---|
| 696 |
|
|---|
| 697 | /* Use SOFA/ERFA test because of change in precession model */
|
|---|
| 698 | static void t_eqeqx (int *status ) {
|
|---|
| 699 | vvd ( palEqeqx( 53736. ), -0.8834195072043790156e-5,
|
|---|
| 700 | 1e-15, "palEqeqx", " ", status );
|
|---|
| 701 | }
|
|---|
| 702 |
|
|---|
| 703 | /* E-terms */
|
|---|
| 704 |
|
|---|
| 705 | static void t_etrms( int * status ) {
|
|---|
| 706 | double ev[3];
|
|---|
| 707 |
|
|---|
| 708 | palEtrms ( 1976.9, ev );
|
|---|
| 709 |
|
|---|
| 710 | vvd ( ev[0], -1.621617102537041e-6, 1e-18, "palEtrms",
|
|---|
| 711 | "X", status );
|
|---|
| 712 | vvd ( ev[1], -3.310070088507914e-7, 1e-18, "palEtrms",
|
|---|
| 713 | "Y", status );
|
|---|
| 714 | vvd ( ev[2], -1.435296627515719e-7, 1e-18, "palEtrms",
|
|---|
| 715 | "Z", status );
|
|---|
| 716 | }
|
|---|
| 717 |
|
|---|
| 718 | /* J2000 to Galactic */
|
|---|
| 719 |
|
|---|
| 720 | static void t_eqgal( int *status ) {
|
|---|
| 721 | double dl, db;
|
|---|
| 722 |
|
|---|
| 723 | palEqgal ( 5.67, -1.23, &dl, &db );
|
|---|
| 724 |
|
|---|
| 725 | vvd ( dl, 5.612270780904526, 1e-12, "palEqgal",
|
|---|
| 726 | "DL", status );
|
|---|
| 727 | vvd ( db, -0.6800521449061520, 1e-12, "palEqgal",
|
|---|
| 728 | "DB", status );
|
|---|
| 729 | }
|
|---|
| 730 |
|
|---|
| 731 | /* Galactic to J2000 equatorial */
|
|---|
| 732 |
|
|---|
| 733 | static void t_galeq( int *status ) {
|
|---|
| 734 | double dr, dd;
|
|---|
| 735 |
|
|---|
| 736 | palGaleq ( 5.67, -1.23, &dr, &dd );
|
|---|
| 737 |
|
|---|
| 738 | vvd ( dr, 0.04729270418071426, 1e-12, "palGaleq",
|
|---|
| 739 | "DR", status );
|
|---|
| 740 | vvd ( dd, -0.7834003666745548, 1e-12, "palGaleq",
|
|---|
| 741 | "DD", status );
|
|---|
| 742 | }
|
|---|
| 743 |
|
|---|
| 744 | /* Galactic to supergalactic */
|
|---|
| 745 | static void t_galsup(int *status ) {
|
|---|
| 746 | double dsl, dsb;
|
|---|
| 747 |
|
|---|
| 748 | palGalsup ( 6.1, -1.4, &dsl, &dsb );
|
|---|
| 749 |
|
|---|
| 750 | vvd ( dsl, 4.567933268859171, 1e-12, "palGalsup",
|
|---|
| 751 | "DSL", status );
|
|---|
| 752 | vvd ( dsb, -0.01862369899731829, 1e-12, "palGalsup",
|
|---|
| 753 | "DSB", status );
|
|---|
| 754 | }
|
|---|
| 755 |
|
|---|
| 756 | /* Geocentric coordinates */
|
|---|
| 757 |
|
|---|
| 758 | /* This is not from sla_test.f */
|
|---|
| 759 |
|
|---|
| 760 | static void t_geoc( int *status ) {
|
|---|
| 761 | double r;
|
|---|
| 762 | double z;
|
|---|
| 763 | /* JCMT */
|
|---|
| 764 | const double lat = 19.822838905884 * PAL__DD2R;
|
|---|
| 765 | const double alt = 4120.0;
|
|---|
| 766 | palGeoc( lat, alt, &r, &z );
|
|---|
| 767 |
|
|---|
| 768 | /* Note the lower tolerance than normal since the models in SLA
|
|---|
| 769 | differ from the more up to date model in SOFA/ERFA */
|
|---|
| 770 | vvd( r, 4.01502667039618e-05, 1e-10, "palGeoc", "R", status );
|
|---|
| 771 | vvd( z, 1.43762411970295e-05, 1e-10, "palGeoc", "Z", status );
|
|---|
| 772 |
|
|---|
| 773 | }
|
|---|
| 774 |
|
|---|
| 775 | /* Galactic to Fk4 */
|
|---|
| 776 |
|
|---|
| 777 | static void t_ge50 ( int *status ) {
|
|---|
| 778 | double dr, dd;
|
|---|
| 779 | palGe50( 6.1, -1.55, &dr, &dd );
|
|---|
| 780 | vvd ( dr, 0.1966825219934508, 1e-12, "palGe50",
|
|---|
| 781 | "DR", status );
|
|---|
| 782 | vvd ( dd, -0.4924752701678960, 1e-12, "palGe50",
|
|---|
| 783 | "DD", status );
|
|---|
| 784 |
|
|---|
| 785 |
|
|---|
| 786 | }
|
|---|
| 787 |
|
|---|
| 788 | /* GMST */
|
|---|
| 789 |
|
|---|
| 790 | /* We use the SOFA/ERFA test values rather than the values from SLA
|
|---|
| 791 | because the precession models have changed */
|
|---|
| 792 |
|
|---|
| 793 | static void t_gmst( int *status ) {
|
|---|
| 794 | vvd ( palGmst( 53736. ), 1.754174971870091203,
|
|---|
| 795 | 1e-12, "palGmst", " ", status );
|
|---|
| 796 |
|
|---|
| 797 | vvd ( palGmsta( 53736., 0.0 ), 1.754174971870091203,
|
|---|
| 798 | 1e-12, "palGmsta", " ", status );
|
|---|
| 799 | }
|
|---|
| 800 |
|
|---|
| 801 | /* FK5 */
|
|---|
| 802 |
|
|---|
| 803 | static void t_fk52h ( int *status ) {
|
|---|
| 804 | double r5, d5, dr5, dd5, rh, dh;
|
|---|
| 805 |
|
|---|
| 806 | palFk5hz ( 1.234, -0.987, 1980, &rh, &dh );
|
|---|
| 807 | vvd ( rh, 1.234000136713611301, 1e-13, "palFk5hz",
|
|---|
| 808 | "R", status );
|
|---|
| 809 | vvd ( dh, -0.9869999702020807601, 1e-13, "palFk5hz",
|
|---|
| 810 | "D", status );
|
|---|
| 811 | palHfk5z ( rh, dh, 1980, &r5, &d5, &dr5, &dd5 );
|
|---|
| 812 | vvd ( r5, 1.234, 1e-13, "palHfk5z", "R", status );
|
|---|
| 813 | vvd ( d5, -0.987, 1e-13, "palHfk5z", "D", status );
|
|---|
| 814 | vvd ( dr5, 0.000000006822074, 1e-13, "palHfk5z",
|
|---|
| 815 | "DR", status );
|
|---|
| 816 | vvd ( dd5, -0.000000002334012, 1e-13, "palHfk5z",
|
|---|
| 817 | "DD", status );
|
|---|
| 818 |
|
|---|
| 819 | }
|
|---|
| 820 |
|
|---|
| 821 | static void t_intin( int *status ) {
|
|---|
| 822 | const char s[] = " -12345, , -0 2000 + ";
|
|---|
| 823 | /* 1234567890123456789012345678 */
|
|---|
| 824 | int i = 1;
|
|---|
| 825 | long n = 0;
|
|---|
| 826 | int j;
|
|---|
| 827 |
|
|---|
| 828 | palIntin ( s, &i, &n, &j );
|
|---|
| 829 | viv ( i, 10, "palIntin", "I1", status );
|
|---|
| 830 | viv ( n, -12345, "palIntin", "V1", status );
|
|---|
| 831 | viv ( j, -1, "palIntin", "J1", status );
|
|---|
| 832 |
|
|---|
| 833 | palIntin ( s, &i, &n, &j );
|
|---|
| 834 | viv ( i, 12, "palIntin", "I2", status );
|
|---|
| 835 | viv ( n, -12345, "palIntin", "V2", status );
|
|---|
| 836 | viv ( j, 1, "palIntin", "J2", status );
|
|---|
| 837 |
|
|---|
| 838 | palIntin ( s, &i, &n, &j );
|
|---|
| 839 | viv ( i, 17, "palIntin", "I3", status );
|
|---|
| 840 | viv ( n, 0, "palIntin", "V3", status );
|
|---|
| 841 | viv ( j, -1, "palIntin", "J3", status );
|
|---|
| 842 |
|
|---|
| 843 | palIntin ( s, &i, &n, &j );
|
|---|
| 844 | viv ( i, 23, "palIntin", "I4", status );
|
|---|
| 845 | viv ( n, 2000, "palIntin", "V4", status );
|
|---|
| 846 | viv ( j, 0, "palIntin", "J4", status );
|
|---|
| 847 |
|
|---|
| 848 | palIntin ( s, &i, &n, &j );
|
|---|
| 849 | viv ( i, 29, "palIntin", "I5", status );
|
|---|
| 850 | viv ( n, 2000, "palIntin", "V5", status );
|
|---|
| 851 | viv ( j, 1, "palIntin", "J5", status ); /* Note that strtol does not care about a + */
|
|---|
| 852 |
|
|---|
| 853 | }
|
|---|
| 854 |
|
|---|
| 855 |
|
|---|
| 856 | /* Moon */
|
|---|
| 857 |
|
|---|
| 858 | static void t_moon ( int *status ) {
|
|---|
| 859 | double pv[6];
|
|---|
| 860 |
|
|---|
| 861 | double expected1[] = {
|
|---|
| 862 | 0.00229161514616454,
|
|---|
| 863 | 0.000973912029208393,
|
|---|
| 864 | 0.000669931538978146,
|
|---|
| 865 | -3.44709700068209e-09,
|
|---|
| 866 | 5.44477533462392e-09,
|
|---|
| 867 | 2.11785724844417e-09
|
|---|
| 868 | };
|
|---|
| 869 |
|
|---|
| 870 | /* SLA test only include slaMoon so we use the
|
|---|
| 871 | example from SUN/67 */
|
|---|
| 872 | palDmoon( 48634.4687174074, pv );
|
|---|
| 873 | vvec( 6, pv, expected1, "palDmoon", status );
|
|---|
| 874 | }
|
|---|
| 875 |
|
|---|
| 876 | /* Nutation */
|
|---|
| 877 |
|
|---|
| 878 | static void t_nut( int *status ) {
|
|---|
| 879 | double dpsi, deps, eps0;
|
|---|
| 880 |
|
|---|
| 881 | double expected[3][3] = {
|
|---|
| 882 | { 9.999999969492166e-1, 7.166577986249302e-5, 3.107382973077677e-5 },
|
|---|
| 883 | { -7.166503970900504e-5, 9.999999971483732e-1, -2.381965032461830e-5 },
|
|---|
| 884 | { -3.107553669598237e-5, 2.381742334472628e-5, 9.999999992335206818e-1 }
|
|---|
| 885 | };
|
|---|
| 886 |
|
|---|
| 887 | double rmatn[3][3];
|
|---|
| 888 |
|
|---|
| 889 | /* SLA tests with low precision */
|
|---|
| 890 | palNut( 46012.32, rmatn );
|
|---|
| 891 | vrmat( rmatn, expected, "palNut", 1.0e-3, status );
|
|---|
| 892 |
|
|---|
| 893 | /* Use the SOFA/ERFA tests */
|
|---|
| 894 | palNutc( 54388.0, &dpsi, &deps, &eps0 );
|
|---|
| 895 | vvd( eps0, 0.4090749229387258204, 1e-14,
|
|---|
| 896 | "palNutc", "eps0", status);
|
|---|
| 897 |
|
|---|
| 898 | palNutc( 53736.0, &dpsi, &deps, &eps0 );
|
|---|
| 899 | vvd(dpsi, -0.9630912025820308797e-5, 1e-13,
|
|---|
| 900 | "palNutc", "dpsi", status);
|
|---|
| 901 | vvd(deps, 0.4063238496887249798e-4, 1e-13,
|
|---|
| 902 | "palNutc", "deps", status);
|
|---|
| 903 | }
|
|---|
| 904 |
|
|---|
| 905 | /* palPrebn */
|
|---|
| 906 |
|
|---|
| 907 | static void t_prebn( int *status ) {
|
|---|
| 908 | double rmatp[3][3];
|
|---|
| 909 | double prebn_expected[3][3] = {
|
|---|
| 910 | { 9.999257613786738e-1, -1.117444640880939e-2, -4.858341150654265e-3 },
|
|---|
| 911 | { 1.117444639746558e-2, 9.999375635561940e-1, -2.714797892626396e-5 },
|
|---|
| 912 | { 4.858341176745641e-3, -2.714330927085065e-5, 9.999881978224798e-1 },
|
|---|
| 913 | };
|
|---|
| 914 |
|
|---|
| 915 | palPrebn ( 1925., 1975., rmatp );
|
|---|
| 916 | vrmat( rmatp, prebn_expected, "palPrebn", 1.0e-12, status );
|
|---|
| 917 | }
|
|---|
| 918 |
|
|---|
| 919 | /* Range */
|
|---|
| 920 |
|
|---|
| 921 | static void t_range( int *status ) {
|
|---|
| 922 | vvd ( palDrange ( -4 ), 2.283185307179586,
|
|---|
| 923 | 1e-12, "palDrange", " ", status );
|
|---|
| 924 | }
|
|---|
| 925 |
|
|---|
| 926 | static void t_ranorm( int *status ) {
|
|---|
| 927 | vvd ( palDranrm ( -0.1 ), 6.183185307179587,
|
|---|
| 928 | 1e-12, "palDranrm", "2", status );
|
|---|
| 929 | }
|
|---|
| 930 |
|
|---|
| 931 | /* Separation routines */
|
|---|
| 932 |
|
|---|
| 933 | static void t_sep( int *status ) {
|
|---|
| 934 | double d1[3] = { 1.0, 0.1, 0.2 };
|
|---|
| 935 | double d2[3] = { -3.0, 1e-3, 0.2 };
|
|---|
| 936 | double ad1, bd1, ad2, bd2;
|
|---|
| 937 |
|
|---|
| 938 | palDcc2s( d1, &ad1, &bd1 );
|
|---|
| 939 | palDcc2s( d2, &ad2, &bd2 );
|
|---|
| 940 |
|
|---|
| 941 | vvd ( palDsep ( ad1, bd1, ad2, bd2 ),
|
|---|
| 942 | 2.8603919190246608, 1e-7, "palDsep", " ", status );
|
|---|
| 943 | vvd ( palDsepv ( d1, d2 ),
|
|---|
| 944 | 2.8603919190246608, 1e-7, "palDsepv", " ", status );
|
|---|
| 945 |
|
|---|
| 946 | }
|
|---|
| 947 |
|
|---|
| 948 | /* Supergalactic */
|
|---|
| 949 |
|
|---|
| 950 | static void t_supgal( int *status ) {
|
|---|
| 951 | double dl, db;
|
|---|
| 952 |
|
|---|
| 953 | palSupgal ( 6.1, -1.4, &dl, &db );
|
|---|
| 954 |
|
|---|
| 955 | vvd ( dl, 3.798775860769474, 1e-12, "palSupgal",
|
|---|
| 956 | "DL", status );
|
|---|
| 957 | vvd ( db, -0.1397070490669407, 1e-12, "palSupgal",
|
|---|
| 958 | "DB", status );
|
|---|
| 959 |
|
|---|
| 960 | }
|
|---|
| 961 |
|
|---|
| 962 | /* Test spherical tangent-plane-projection routines */
|
|---|
| 963 | static void t_tp( int *status ) {
|
|---|
| 964 |
|
|---|
| 965 | int j;
|
|---|
| 966 | double dr0, dd0, dr1, dd1, dx, dy, dr2, dd2, dr01,
|
|---|
| 967 | dd01, dr02, dd02;
|
|---|
| 968 |
|
|---|
| 969 | dr0 = 3.1;
|
|---|
| 970 | dd0 = -0.9;
|
|---|
| 971 | dr1 = dr0 + 0.2;
|
|---|
| 972 | dd1 = dd0 - 0.1;
|
|---|
| 973 | palDs2tp( dr1, dd1, dr0, dd0, &dx, &dy, &j );
|
|---|
| 974 | vvd( dx, 0.1086112301590404, 1e-12, "palDs2tp",
|
|---|
| 975 | "x", status );
|
|---|
| 976 | vvd( dy, -0.1095506200711452, 1e-12, "palDs2tp",
|
|---|
| 977 | "y", status );
|
|---|
| 978 | viv( j, 0, "palDs2tp", "j", status );
|
|---|
| 979 |
|
|---|
| 980 | palDtp2s( dx, dy, dr0, dd0, &dr2, &dd2 );
|
|---|
| 981 | vvd( dr2 - dr1, 0., 1e-12, "palDtp2s", "r", status );
|
|---|
| 982 | vvd( dd2 - dd1, 0., 1e-12, "palDtp2s", "d", status );
|
|---|
| 983 |
|
|---|
| 984 | palDtps2c( dx, dy, dr2, dd2, &dr01, &dd01, &dr02, &dd02, &j );
|
|---|
| 985 | vvd( dr01, 3.1, 1e-12, "palDtps2c", "r1", status);
|
|---|
| 986 | vvd( dd01, -0.9, 1e-12, "palDtps2c", "d1", status);
|
|---|
| 987 | vvd( dr02, 0.3584073464102072, 1e-12, "palDtps2c",
|
|---|
| 988 | "r2", status);
|
|---|
| 989 | vvd( dd02, -2.023361658234722, 1e-12, "palDtps2c",
|
|---|
| 990 | "d2", status );
|
|---|
| 991 | viv( j, 1, "palDtps2c", "n", status );
|
|---|
| 992 |
|
|---|
| 993 | }
|
|---|
| 994 |
|
|---|
| 995 | /* Test all the 3-vector and 3x3 matrix routines. */
|
|---|
| 996 |
|
|---|
| 997 | static void t_vecmat( int * status ) {
|
|---|
| 998 | int i;
|
|---|
| 999 |
|
|---|
| 1000 | /* palDav2m */
|
|---|
| 1001 | double drm1[3][3];
|
|---|
| 1002 | double dav[3] = { -0.123, 0.0987, 0.0654 };
|
|---|
| 1003 | double dav2m_expected[3][3] = {
|
|---|
| 1004 | { 0.9930075842721269, 0.05902743090199868, -0.1022335560329612 },
|
|---|
| 1005 | { -0.07113807138648245, 0.9903204657727545, -0.1191836812279541 },
|
|---|
| 1006 | { 0.09420887631983825, 0.1256229973879967, 0.9875948309655174 },
|
|---|
| 1007 | };
|
|---|
| 1008 |
|
|---|
| 1009 | /* palDeuler */
|
|---|
| 1010 | double drm2[3][3];
|
|---|
| 1011 | double deuler_expected[3][3] = {
|
|---|
| 1012 | { -0.1681574770810878, 0.1981362273264315, 0.9656423242187410 },
|
|---|
| 1013 | { -0.2285369373983370, 0.9450659587140423, -0.2337117924378156 },
|
|---|
| 1014 | { -0.9589024617479674, -0.2599853247796050, -0.1136384607117296 } };
|
|---|
| 1015 |
|
|---|
| 1016 | /* palDmxm */
|
|---|
| 1017 | double drm[3][3];
|
|---|
| 1018 | double dmxm_expected[3][3] = {
|
|---|
| 1019 | { -0.09010460088585805, 0.3075993402463796, 0.9472400998581048 },
|
|---|
| 1020 | { -0.3161868071070688, 0.8930686362478707, -0.3200848543149236 },
|
|---|
| 1021 | { -0.9444083141897035, -0.3283459407855694, 0.01678926022795169 },
|
|---|
| 1022 | };
|
|---|
| 1023 |
|
|---|
| 1024 | /* palDcs2c et al */
|
|---|
| 1025 | double dv1[3];
|
|---|
| 1026 | double dv2[3];
|
|---|
| 1027 | double dv3[3];
|
|---|
| 1028 | double dv4[3];
|
|---|
| 1029 | double dv5[3];
|
|---|
| 1030 | double dv6[3];
|
|---|
| 1031 | double dv7[3];
|
|---|
| 1032 | double dvm;
|
|---|
| 1033 |
|
|---|
| 1034 | /* palDav2m */
|
|---|
| 1035 | palDav2m( dav, drm1 );
|
|---|
| 1036 | vrmat( drm1, dav2m_expected, "palDav2m", 1.0e-12, status );
|
|---|
| 1037 |
|
|---|
| 1038 | /* Test palDeuler */
|
|---|
| 1039 | palDeuler( "YZY", 2.345, -0.333, 2.222, drm2 );
|
|---|
| 1040 | vrmat( drm2, deuler_expected, "palDeuler", 1.0e-12, status );
|
|---|
| 1041 |
|
|---|
| 1042 | /* palDmxm */
|
|---|
| 1043 | palDmxm( drm2, drm1, drm );
|
|---|
| 1044 | vrmat( drm, dmxm_expected, "palDmxm", 1.0e-12, status );
|
|---|
| 1045 |
|
|---|
| 1046 | /* palDcs2c */
|
|---|
| 1047 | palDcs2c( 3.0123, -0.999, dv1 );
|
|---|
| 1048 | vvd ( dv1[0], -0.5366267667260525, 1e-12,
|
|---|
| 1049 | "palDcs2c", "x", status );
|
|---|
| 1050 | vvd ( dv1[1], 0.06977111097651444, 1e-12,
|
|---|
| 1051 | "palDcs2c", "y", status );
|
|---|
| 1052 | vvd ( dv1[2], -0.8409302618566215, 1e-12,
|
|---|
| 1053 | "palDcs2c", "z", status );
|
|---|
| 1054 |
|
|---|
| 1055 | /* palDmxv */
|
|---|
| 1056 | palDmxv( drm1, dv1, dv2 );
|
|---|
| 1057 | palDmxv( drm2, dv2, dv3 );
|
|---|
| 1058 | vvd ( dv3[0], -0.7267487768696160, 1e-12,
|
|---|
| 1059 | "palDmxv", "x", status );
|
|---|
| 1060 | vvd ( dv3[1], 0.5011537352639822, 1e-12,
|
|---|
| 1061 | "palDmxv", "y", status );
|
|---|
| 1062 | vvd ( dv3[2], 0.4697671220397141, 1e-12,
|
|---|
| 1063 | "palDmxv", "z", status );
|
|---|
| 1064 |
|
|---|
| 1065 | /* palDimxv */
|
|---|
| 1066 | palDimxv( drm, dv3, dv4 );
|
|---|
| 1067 | vvd ( dv4[0], -0.5366267667260526, 1e-12,
|
|---|
| 1068 | "palDimxv", "X", status );
|
|---|
| 1069 | vvd ( dv4[1], 0.06977111097651445, 1e-12,
|
|---|
| 1070 | "palDimxv", "Y", status );
|
|---|
| 1071 | vvd ( dv4[2], -0.8409302618566215, 1e-12,
|
|---|
| 1072 | "palDimxv", "Z", status );
|
|---|
| 1073 |
|
|---|
| 1074 | /* palDm2av */
|
|---|
| 1075 | palDm2av( drm, dv5 );
|
|---|
| 1076 | vvd ( dv5[0], 0.006889040510209034, 1e-12,
|
|---|
| 1077 | "palDm2av", "X", status );
|
|---|
| 1078 | vvd ( dv5[1], -1.577473205461961, 1e-12,
|
|---|
| 1079 | "palDm2av", "Y", status );
|
|---|
| 1080 | vvd ( dv5[2], 0.5201843672856759, 1e-12,
|
|---|
| 1081 | "palDm2av", "Z", status );
|
|---|
| 1082 |
|
|---|
| 1083 | for (i=0; i<3; i++) {
|
|---|
| 1084 | dv5[i] *= 1000.0;
|
|---|
| 1085 | }
|
|---|
| 1086 |
|
|---|
| 1087 | /* palDvn */
|
|---|
| 1088 | palDvn( dv5, dv6, &dvm );
|
|---|
| 1089 | vvd ( dv6[0], 0.004147420704640065, 1e-12,
|
|---|
| 1090 | "palDvn", "X", status );
|
|---|
| 1091 | vvd ( dv6[1], -0.9496888606842218, 1e-12,
|
|---|
| 1092 | "palDvn", "Y", status );
|
|---|
| 1093 | vvd ( dv6[2], 0.3131674740355448, 1e-12,
|
|---|
| 1094 | "palDvn", "Z", status );
|
|---|
| 1095 | vvd ( dvm, 1661.042127339937, 1e-9, "palDvn",
|
|---|
| 1096 | "M", status );
|
|---|
| 1097 |
|
|---|
| 1098 | vvd ( palDvdv ( dv6, dv1 ), -0.3318384698006295,
|
|---|
| 1099 | 1e-12, "palDvn", " ", status );
|
|---|
| 1100 |
|
|---|
| 1101 | /* palDvxv */
|
|---|
| 1102 | palDvxv( dv6, dv1, dv7 );
|
|---|
| 1103 | vvd ( dv7[0], 0.7767720597123304, 1e-12,
|
|---|
| 1104 | "palDvxv", "X", status );
|
|---|
| 1105 | vvd ( dv7[1], -0.1645663574562769, 1e-12,
|
|---|
| 1106 | "palDvxv", "Y", status );
|
|---|
| 1107 | vvd ( dv7[2], -0.5093390925544726, 1e-12,
|
|---|
| 1108 | "palDvxv", "Z", status );
|
|---|
| 1109 |
|
|---|
| 1110 | }
|
|---|
| 1111 |
|
|---|
| 1112 | static void t_ecleq( int *status ) {
|
|---|
| 1113 | double dr;
|
|---|
| 1114 | double dd;
|
|---|
| 1115 | palEcleq( 1.234, -0.123, 43210.0, &dr, &dd );
|
|---|
| 1116 | vvd( dr, 1.229910118208851, 1e-5, "palEcleq",
|
|---|
| 1117 | "RA", status );
|
|---|
| 1118 | vvd( dd, 0.2638461400411088, 1e-5, "palEcleq",
|
|---|
| 1119 | "Dec", status );
|
|---|
| 1120 | }
|
|---|
| 1121 |
|
|---|
| 1122 | static void t_ecmat( int *status ) {
|
|---|
| 1123 | double rmat[3][3];
|
|---|
| 1124 | double expected[3][3] = {
|
|---|
| 1125 | { 1.0, 0.0, 0.0 },
|
|---|
| 1126 | { 0.0, 0.91749307789883549624, 0.3977517467060596168 },
|
|---|
| 1127 | { 0.0, -0.3977517467060596168, 0.91749307789883549624 } };
|
|---|
| 1128 |
|
|---|
| 1129 | palEcmat( 55966.46, rmat );
|
|---|
| 1130 | vrmat( rmat, expected, "palEcmat", 1.0e-12, status );
|
|---|
| 1131 | }
|
|---|
| 1132 |
|
|---|
| 1133 | static void t_eqecl ( int *status ) {
|
|---|
| 1134 | double dl, db;
|
|---|
| 1135 | palEqecl ( 0.789, -0.123, 46555, &dl, &db );
|
|---|
| 1136 |
|
|---|
| 1137 | /* Slight changes from SLA for 2006 precession/nutation */
|
|---|
| 1138 | vvd ( dl, 0.7036566430349022, 1e-6, "palEqecl",
|
|---|
| 1139 | "L", status );
|
|---|
| 1140 | vvd ( db, -0.4036047164116848, 1e-6, "palEqecl",
|
|---|
| 1141 | "B", status );
|
|---|
| 1142 | }
|
|---|
| 1143 |
|
|---|
| 1144 | static void t_prec( int *status ) {
|
|---|
| 1145 | double rmat[3][3];
|
|---|
| 1146 | double expected[3][3] = {
|
|---|
| 1147 | { 0.9999856154510, -0.0049192906204, -0.0021376320580 },
|
|---|
| 1148 | { 0.0049192906805, 0.9999879002027, -5.2297405698747e-06 },
|
|---|
| 1149 | { 0.0021376319197, -5.2859681191735e-06, 0.9999977152483 } };
|
|---|
| 1150 |
|
|---|
| 1151 | palPrec( 1990.0, 2012.0, rmat );
|
|---|
| 1152 | vrmat( rmat, expected, "palPrec", 1.0e-12, status );
|
|---|
| 1153 | }
|
|---|
| 1154 |
|
|---|
| 1155 | static void t_preces( int *status ) {
|
|---|
| 1156 | double ra;
|
|---|
| 1157 | double dc;
|
|---|
| 1158 | ra = 6.28;
|
|---|
| 1159 | dc = -1.123;
|
|---|
| 1160 | palPreces ( "FK4", 1925, 1950, &ra, &dc );
|
|---|
| 1161 | vvd ( ra, 0.002403604864728447, 1e-12, "palPreces",
|
|---|
| 1162 | "R", status );
|
|---|
| 1163 | vvd ( dc, -1.120570643322045, 1e-12, "palPreces",
|
|---|
| 1164 | "D", status );
|
|---|
| 1165 |
|
|---|
| 1166 | /* This is the SLA test but PAL now uses the IAU 2006
|
|---|
| 1167 | precession model so we need to loosen the comparison */
|
|---|
| 1168 | ra = 0.0123;
|
|---|
| 1169 | dc = 1.0987;
|
|---|
| 1170 | palPreces ( "FK5", 2050, 1990, &ra, &dc );
|
|---|
| 1171 | vvd ( ra, 6.282003602708382, 1e-6, "palPreces",
|
|---|
| 1172 | "R", status );
|
|---|
| 1173 | vvd ( dc, 1.092870326188383, 1e-6, "palPreces",
|
|---|
| 1174 | "D", status );
|
|---|
| 1175 |
|
|---|
| 1176 | }
|
|---|
| 1177 |
|
|---|
| 1178 | static void t_evp( int *status ) {
|
|---|
| 1179 | double dvb[3],dpb[3],dvh[3],dph[3];
|
|---|
| 1180 | double vbex[3] = { 1.6957348127008098514e-07,
|
|---|
| 1181 | -9.1093446116039685966e-08,
|
|---|
| 1182 | -3.9528532243991863036e-08 };
|
|---|
| 1183 | double pbex[3] = {-0.49771075259730546136,
|
|---|
| 1184 | -0.80273812396332311359,
|
|---|
| 1185 | -0.34851593942866060383 };
|
|---|
| 1186 | double vhex[3] = { 1.6964379181455713805e-07,
|
|---|
| 1187 | -9.1147224045727438391e-08,
|
|---|
| 1188 | -3.9553158272334222497e-08 };
|
|---|
| 1189 | double phex[3] = { -0.50169124421419830639,
|
|---|
| 1190 | -0.80650980174901798492,
|
|---|
| 1191 | -0.34997162028527262212 };
|
|---|
| 1192 |
|
|---|
| 1193 | double vbex2[3] = {
|
|---|
| 1194 | -0.0109187426811683,
|
|---|
| 1195 | -0.0124652546173285,
|
|---|
| 1196 | -0.0054047731809662
|
|---|
| 1197 | };
|
|---|
| 1198 | double pbex2[3] = {
|
|---|
| 1199 | -0.7714104440491060,
|
|---|
| 1200 | +0.5598412061824225,
|
|---|
| 1201 | +0.2425996277722475
|
|---|
| 1202 | };
|
|---|
| 1203 | double vhex2[3] = {
|
|---|
| 1204 | -0.0109189182414732,
|
|---|
| 1205 | -0.0124718726844084,
|
|---|
| 1206 | -0.0054075694180650
|
|---|
| 1207 | };
|
|---|
| 1208 | double phex2[3] = {
|
|---|
| 1209 | -0.7757238809297653,
|
|---|
| 1210 | +0.5598052241363390,
|
|---|
| 1211 | +0.2426998466481708
|
|---|
| 1212 | };
|
|---|
| 1213 |
|
|---|
| 1214 | palEvp( 2010.0, 2012.0, dvb, dpb, dvh, dph );
|
|---|
| 1215 |
|
|---|
| 1216 | vvec( 3, dvb, vbex, "palEvp", status );
|
|---|
| 1217 | vvec( 3, dpb, pbex, "palEvp", status );
|
|---|
| 1218 | vvec( 3, dvh, vhex, "palEvp", status );
|
|---|
| 1219 | vvec( 3, dph, phex, "palEvp", status );
|
|---|
| 1220 |
|
|---|
| 1221 | palEpv ( 53411.52501161, dph, dvh, dpb, dvb );
|
|---|
| 1222 |
|
|---|
| 1223 | vvec( 3, dvb, vbex2, "palEpv", status );
|
|---|
| 1224 | vvec( 3, dpb, pbex2, "palEpv", status );
|
|---|
| 1225 | vvec( 3, dvh, vhex2, "palEpv", status );
|
|---|
| 1226 | vvec( 3, dph, phex2, "palEpv", status );
|
|---|
| 1227 |
|
|---|
| 1228 | }
|
|---|
| 1229 |
|
|---|
| 1230 | static void t_map( int *status ) {
|
|---|
| 1231 | double ra, da;
|
|---|
| 1232 | palMap ( 6.123, -0.999, 1.23e-5, -0.987e-5,
|
|---|
| 1233 | 0.123, 32.1, 1999, 43210.9, &ra, &da );
|
|---|
| 1234 |
|
|---|
| 1235 | /* These are the SLA tests but and they agree to 0.1 arcsec
|
|---|
| 1236 | with PAL/SOFA/ERFA. We expect a slight difference from the change
|
|---|
| 1237 | to nutation models. */
|
|---|
| 1238 | vvd ( ra, 6.117130429775647, 1e-6, "palMap",
|
|---|
| 1239 | "RA", status );
|
|---|
| 1240 | vvd ( da, -1.000880769038632, 1e-8, "palMap",
|
|---|
| 1241 | "DA", status );
|
|---|
| 1242 | }
|
|---|
| 1243 |
|
|---|
| 1244 | static void t_mappa( int *status ) {
|
|---|
| 1245 | double amprms[21];
|
|---|
| 1246 | double expected[21] = {1.9986310746064646082,
|
|---|
| 1247 | -0.1728200754134739392,
|
|---|
| 1248 | 0.88745394651412767839,
|
|---|
| 1249 | 0.38472374350184274094,
|
|---|
| 1250 | -0.17245634725219796679,
|
|---|
| 1251 | 0.90374808622520386159,
|
|---|
| 1252 | 0.3917884696321610738,
|
|---|
| 1253 | 2.0075929387510784968e-08,
|
|---|
| 1254 | -9.9464149073251757597e-05,
|
|---|
| 1255 | -1.6125306981057062306e-05,
|
|---|
| 1256 | -6.9897255793245634435e-06,
|
|---|
| 1257 | 0.99999999489900059935,
|
|---|
| 1258 | 0.99999983777998024959,
|
|---|
| 1259 | -0.00052248206600935195865,
|
|---|
| 1260 | -0.00022683144398381763045,
|
|---|
| 1261 | 0.00052248547063364874764,
|
|---|
| 1262 | 0.99999986339269864022,
|
|---|
| 1263 | 1.4950491424992534218e-05,
|
|---|
| 1264 | 0.00022682360163333854623,
|
|---|
| 1265 | -1.5069005133483779417e-05,
|
|---|
| 1266 | 0.99999997416198904698};
|
|---|
| 1267 |
|
|---|
| 1268 | palMappa( 2010.0, 55927.0, amprms );
|
|---|
| 1269 | vvec( 21, amprms, expected, "palMappa", status );
|
|---|
| 1270 | }
|
|---|
| 1271 |
|
|---|
| 1272 | static void t_mapqk( int *status ) {
|
|---|
| 1273 | /* Test mapqk by taking the geocentric apparent positions of Arcturus
|
|---|
| 1274 | as downloaded from aa.usno.mil/data/docs/geocentric.php and trying
|
|---|
| 1275 | to calculate it from Arcturus' mean position, proper motion, parallax,
|
|---|
| 1276 | and radial velocity */
|
|---|
| 1277 |
|
|---|
| 1278 | double amprms[21];
|
|---|
| 1279 | double ra_0, dec_0; /* mean position */
|
|---|
| 1280 | double ra_app, dec_app; /* geocentric apparent position */
|
|---|
| 1281 | double ra_test, dec_test;
|
|---|
| 1282 | double px, pm_ra, pm_dec, v_rad;
|
|---|
| 1283 | int j;
|
|---|
| 1284 | int iposn;
|
|---|
| 1285 |
|
|---|
| 1286 | /*
|
|---|
| 1287 | The data below represents the position of Arcturus on
|
|---|
| 1288 | JD (UT) 2457000.375 as reported by
|
|---|
| 1289 | http://aa.usno.navy.mil/data/docs/geocentric.php
|
|---|
| 1290 | */
|
|---|
| 1291 |
|
|---|
| 1292 | const char radec_0[] = "14 15 39.67207 19 10 56.673";
|
|---|
| 1293 | const char radec_app[] = "14 16 19.59 19 6 19.56";
|
|---|
| 1294 |
|
|---|
| 1295 | iposn = 1;
|
|---|
| 1296 | palDafin(radec_0, &iposn, &ra_0, &j);
|
|---|
| 1297 | palDafin(radec_0, &iposn, &dec_0, &j);
|
|---|
| 1298 | ra_0 *= 15.0;
|
|---|
| 1299 |
|
|---|
| 1300 | pm_ra = -1.0939*PAL__DAS2R;
|
|---|
| 1301 | pm_ra /= cos(dec_0);
|
|---|
| 1302 | pm_dec = -2.00006*PAL__DAS2R;
|
|---|
| 1303 | v_rad = -5.19;
|
|---|
| 1304 | px = 0.08883*PAL__DAS2R;
|
|---|
| 1305 |
|
|---|
| 1306 | palMappa(2000.0, 56999.87537249177, amprms); /* time is the TDB MJD calculated from
|
|---|
| 1307 | a JD of 2457000.375 with astropy.time */
|
|---|
| 1308 |
|
|---|
| 1309 | palMapqk(ra_0, dec_0, pm_ra, pm_dec, px, v_rad, amprms, &ra_test, &dec_test);
|
|---|
| 1310 |
|
|---|
| 1311 | iposn = 1;
|
|---|
| 1312 | palDafin(radec_app, &iposn, &ra_app, &j);
|
|---|
| 1313 | palDafin(radec_app, &iposn, &dec_app, &j);
|
|---|
| 1314 | ra_app *= 15.0;
|
|---|
| 1315 |
|
|---|
| 1316 | /* find the angular distance from the known mean position
|
|---|
| 1317 | to the calculated mean postion */
|
|---|
| 1318 | double dd;
|
|---|
| 1319 | dd = palDsep(ra_test, dec_test, ra_app, dec_app);
|
|---|
| 1320 | dd *= PAL__DR2AS;
|
|---|
| 1321 | vvd( dd, 0.0, 0.1, "palMapqk", "distance", status);
|
|---|
| 1322 | }
|
|---|
| 1323 |
|
|---|
| 1324 | static void t_mapqkz( int *status ) {
|
|---|
| 1325 | double amprms[21], ra, da, ra_c, da_c;
|
|---|
| 1326 |
|
|---|
| 1327 | /* Run inputs through mapqk with zero proper motion, parallax
|
|---|
| 1328 | and radial velocity. Then run the same inputs through mapqkz.
|
|---|
| 1329 | Verify that the results are the same */
|
|---|
| 1330 | palMappa( 2010.0, 55927.0, amprms );
|
|---|
| 1331 | palMapqk(1.234, -0.567, 0.0, 0.0, 0.0, 0.0, amprms, &ra_c, &da_c);
|
|---|
| 1332 | palMapqkz( 1.234, -0.567, amprms, &ra, &da );
|
|---|
| 1333 | vvd( ra, ra_c, 1.0E-12, "palMapqkz", "ra", status );
|
|---|
| 1334 | vvd( da, da_c, 1.0E-12, "palMapqkz", "da", status );
|
|---|
| 1335 | }
|
|---|
| 1336 |
|
|---|
| 1337 | static void t_ampqk( int *status ) {
|
|---|
| 1338 | double amprms[21], rm, dm;
|
|---|
| 1339 | palMappa( 2010.0, 55927.0, amprms );
|
|---|
| 1340 | palAmpqk( 1.234, -0.567, amprms, &rm, &dm );
|
|---|
| 1341 | vvd( rm, 1.233512033578303857, 1.0E-12, "palAmpqk", "rm", status );
|
|---|
| 1342 | vvd( dm, -0.56702909748530827549, 1.0E-12, "palAmpqk", "dm", status );
|
|---|
| 1343 | }
|
|---|
| 1344 |
|
|---|
| 1345 | static void t_fk45z( int *status ) {
|
|---|
| 1346 | double r2000, d2000;
|
|---|
| 1347 | palFk45z( 1.2, -0.3, 1960.0, &r2000, &d2000 );
|
|---|
| 1348 | vvd( r2000, 1.2097812228966762227, 1.0E-12, "palFk45z", "r2000", status );
|
|---|
| 1349 | vvd( d2000, -0.29826111711331398935, 1.0E-12, "palFk45z", "d2000", status );
|
|---|
| 1350 | }
|
|---|
| 1351 |
|
|---|
| 1352 | static void t_fk54z( int *status ) {
|
|---|
| 1353 | double r1950, d1950, dr1950, dd1950;
|
|---|
| 1354 | palFk54z( 1.2, -0.3, 1960.0, &r1950, &d1950, &dr1950, &dd1950 );
|
|---|
| 1355 | vvd( r1950, 1.1902221805755279771, 1.0E-12, "palFk54z", "r1950", status );
|
|---|
| 1356 | vvd( d1950, -0.30178317645793828472, 1.0E-12, "palFk54z", "d1950", status );
|
|---|
| 1357 | vvd( dr1950, -1.7830874775952945507e-08, 1.0E-12, "palFk54z", "dr1950", status );
|
|---|
| 1358 | vvd( dd1950, 7.196059425334821089e-09, 1.0E-12, "palFk54z", "dd1950", status );
|
|---|
| 1359 | }
|
|---|
| 1360 |
|
|---|
| 1361 | static void t_fk524( int *status ) {
|
|---|
| 1362 | double r1950, d1950, dr1950, dd1950, p1950, v1950;
|
|---|
| 1363 | palFk524(4.567, -1.23, -3e-5, 8e-6, 0.29,
|
|---|
| 1364 | -35.0, &r1950, &d1950, &dr1950, &dd1950, &p1950, &v1950);
|
|---|
| 1365 | vvd(r1950, 4.543778603272084, 1e-12, "palFk524", "r", status);
|
|---|
| 1366 | vvd(d1950, -1.229642790187574, 1e-12, "palFk524", "d", status);
|
|---|
| 1367 | vvd(dr1950, -2.957873121769244e-5, 1e-17, "palFk524", "dr", status);
|
|---|
| 1368 | vvd(dd1950, 8.117725309659079e-6, 1e-17, "palFk524", "dd", status);
|
|---|
| 1369 | vvd(p1950, 0.2898494999992917, 1e-12, "palFk524", "p", status);
|
|---|
| 1370 | vvd(v1950, -35.026862824252680, 1e-11, "palFk524", "v", status);
|
|---|
| 1371 | }
|
|---|
| 1372 |
|
|---|
| 1373 | static void t_flotin( int * status ) {
|
|---|
| 1374 |
|
|---|
| 1375 | int j;
|
|---|
| 1376 | const char * s = " 12.345, , -0 1E3-4 2000 E ";
|
|---|
| 1377 | /* 123456789012345678901234567890123 */
|
|---|
| 1378 | int i = 1;
|
|---|
| 1379 | double dv = 0.0;
|
|---|
| 1380 |
|
|---|
| 1381 | palDfltin ( s, &i, &dv, &j );
|
|---|
| 1382 | viv ( i, 10, "palDfltin", "I1", status );
|
|---|
| 1383 | vvd ( dv, 12.345, 1e-12, "palDfltin", "V1", status );
|
|---|
| 1384 | viv ( j, 0, "palDfltin", "J1", status );
|
|---|
| 1385 |
|
|---|
| 1386 | palDfltin ( s, &i, &dv, &j );
|
|---|
| 1387 | viv ( i, 12, "palDfltin", "I2", status );
|
|---|
| 1388 | vvd ( dv, 12.345, 1e-12, "palDfltin", "V2", status );
|
|---|
| 1389 | viv ( j, 1, "palDfltin", "J2", status );
|
|---|
| 1390 |
|
|---|
| 1391 | palDfltin ( s, &i, &dv, &j );
|
|---|
| 1392 | viv ( i, 16, "palDfltin", "I3", status );
|
|---|
| 1393 | vvd ( dv, 0, 0, "palDfltin", "V3", status );
|
|---|
| 1394 | viv ( j, -1, "palDfltin", "J3", status );
|
|---|
| 1395 |
|
|---|
| 1396 | palDfltin ( s, &i, &dv, &j );
|
|---|
| 1397 | viv ( i, 19, "palDfltin", "I4", status );
|
|---|
| 1398 | vvd ( dv, 1000, 0, "palDfltin", "V4", status );
|
|---|
| 1399 | viv ( j, 0, "palDfltin", "J4", status );
|
|---|
| 1400 |
|
|---|
| 1401 | palDfltin ( s, &i, &dv, &j );
|
|---|
| 1402 | viv ( i, 22, "palDfltin", "I5", status );
|
|---|
| 1403 | vvd ( dv, -4, 0, "palDfltin", "V5", status );
|
|---|
| 1404 | viv ( j, -1, "palDfltin", "J5", status );
|
|---|
| 1405 |
|
|---|
| 1406 | palDfltin ( s, &i, &dv, &j );
|
|---|
| 1407 | viv ( i, 28, "palDfltin", "I6", status );
|
|---|
| 1408 | vvd ( dv, 2000, 0, "palDfltin", "V6", status );
|
|---|
| 1409 | viv ( j, 0, "palDfltin", "J6", status );
|
|---|
| 1410 |
|
|---|
| 1411 | palDfltin ( s, &i, &dv, &j );
|
|---|
| 1412 | viv ( i, 34, "palDfltin", "I7", status );
|
|---|
| 1413 | vvd ( dv, 2000, 0, "palDfltin", "V7", status );
|
|---|
| 1414 | viv ( j, 1, "palDfltin", "J7", status ); /* differs from slaDfltin */
|
|---|
| 1415 |
|
|---|
| 1416 | /* Now test overflow and underflow */
|
|---|
| 1417 | i = 1;
|
|---|
| 1418 | palDfltin( " 1D600 ", &i, &dv, &j );
|
|---|
| 1419 | viv ( i, 8, "palDfltin", "I8", status );
|
|---|
| 1420 | vvd ( dv, HUGE_VAL, 0, "palDfltin", "V8", status );
|
|---|
| 1421 | viv ( j, 2, "palDfltin", "J8", status );
|
|---|
| 1422 |
|
|---|
| 1423 | }
|
|---|
| 1424 |
|
|---|
| 1425 | static void t_obs( int * status ) {
|
|---|
| 1426 |
|
|---|
| 1427 | char shortname[11];
|
|---|
| 1428 | char longname[41];
|
|---|
| 1429 | double w, p, h;
|
|---|
| 1430 | int lstat;
|
|---|
| 1431 |
|
|---|
| 1432 | lstat = palObs( 0, "MMT", shortname, sizeof(shortname),
|
|---|
| 1433 | longname, sizeof(longname), &w, &p, &h );
|
|---|
| 1434 | vcs ( shortname, "MMT", "palObs", "1/C", status );
|
|---|
| 1435 | vcs ( longname, "MMT 6.5m, Mt Hopkins", "palObs", "1/NAME",
|
|---|
| 1436 | status );
|
|---|
| 1437 | vvd ( w, 1.935300584055477, 1e-8, "palObs",
|
|---|
| 1438 | "1/W", status );
|
|---|
| 1439 | vvd ( p, 0.5530735081550342238, 1e-10, "palObs",
|
|---|
| 1440 | "1/P", status );
|
|---|
| 1441 | vvd ( h, 2608, 1e-10, "palObs",
|
|---|
| 1442 | "1/H", status );
|
|---|
| 1443 | viv( lstat, 0, "palObs", "retval", status );
|
|---|
| 1444 |
|
|---|
| 1445 | lstat = palObs ( 61, NULL, shortname, sizeof(shortname),
|
|---|
| 1446 | longname, sizeof(longname), &w, &p, &h );
|
|---|
| 1447 | vcs ( shortname, "KECK1", "palObs", "2/C", status );
|
|---|
| 1448 | vcs ( longname, "Keck 10m Telescope #1", "palObs",
|
|---|
| 1449 | "2/NAME", status );
|
|---|
| 1450 | vvd ( w, 2.713545757918895, 1e-8, "palObs",
|
|---|
| 1451 | "2/W", status );
|
|---|
| 1452 | vvd ( p, 0.3460280563536619, 1e-8, "palObs",
|
|---|
| 1453 | "2/P", status );
|
|---|
| 1454 | vvd ( h, 4160, 1e-10, "palObs",
|
|---|
| 1455 | "2/H", status );
|
|---|
| 1456 | viv( lstat, 0, "palObs", "retval", status );
|
|---|
| 1457 |
|
|---|
| 1458 | lstat = palObs ( 83, NULL, shortname, sizeof(shortname),
|
|---|
| 1459 | longname, sizeof(longname), &w, &p, &h );
|
|---|
| 1460 | vcs ( shortname, "MAGELLAN2", "palObs", "3/C", status );
|
|---|
| 1461 | vcs ( longname, "Magellan 2, 6.5m, Las Campanas",
|
|---|
| 1462 | "palObs", "3/NAME", status );
|
|---|
| 1463 | vvd ( w, 1.233819305534497, 1e-8, "palObs",
|
|---|
| 1464 | "3/W", status );
|
|---|
| 1465 | vvd ( p, -0.506389344359954, 1e-8, "palObs",
|
|---|
| 1466 | "3/P", status );
|
|---|
| 1467 | vvd ( h, 2408, 1e-10, "palObs",
|
|---|
| 1468 | "3/H", status );
|
|---|
| 1469 | viv( lstat, 0, "palObs", "retval", status );
|
|---|
| 1470 |
|
|---|
| 1471 | /* the first argument here should be 1 greater than the number of items
|
|---|
| 1472 | * in const struct telData defined in palObs.c
|
|---|
| 1473 | */
|
|---|
| 1474 | lstat = palObs ( 86, NULL, shortname, sizeof(shortname),
|
|---|
| 1475 | longname, sizeof(longname), &w, &p, &h );
|
|---|
| 1476 | vcs ( longname, "?", "palObs", "4/NAME", status );
|
|---|
| 1477 | viv( lstat, -1, "palObs", "retval", status );
|
|---|
| 1478 |
|
|---|
| 1479 | lstat = palObs ( 0, "MISSING", shortname, sizeof(shortname),
|
|---|
| 1480 | longname, sizeof(longname), &w, &p, &h );
|
|---|
| 1481 | vcs ( longname, "?", "palObs", "5/NAME", status );
|
|---|
| 1482 | viv( lstat, -1, "palObs", "retval", status );
|
|---|
| 1483 |
|
|---|
| 1484 | lstat = palObs( 0, "mmt", shortname, sizeof(shortname),
|
|---|
| 1485 | longname, sizeof(longname), &w, &p, &h );
|
|---|
| 1486 | vcs ( shortname, "MMT", "palObs", "6/C", status );
|
|---|
| 1487 | vcs ( longname, "MMT 6.5m, Mt Hopkins", "palObs", "6/NAME",
|
|---|
| 1488 | status );
|
|---|
| 1489 | vvd ( w, 1.935300584055477, 1e-8, "palObs",
|
|---|
| 1490 | "6/W", status );
|
|---|
| 1491 | vvd ( p, 0.5530735081550342238, 1e-10, "palObs",
|
|---|
| 1492 | "6/P", status );
|
|---|
| 1493 | vvd ( h, 2608, 1e-10, "palObs",
|
|---|
| 1494 | "6/H", status );
|
|---|
| 1495 | viv( lstat, 0, "palObs", "retval", status );
|
|---|
| 1496 |
|
|---|
| 1497 | }
|
|---|
| 1498 |
|
|---|
| 1499 | static void t_pa( int *status ) {
|
|---|
| 1500 | vvd ( palPa ( -1.567, 1.5123, 0.987 ),
|
|---|
| 1501 | -1.486288540423851, 1e-12, "palPa", " ", status );
|
|---|
| 1502 | vvd ( palPa ( 0, 0.789, 0.789 ),
|
|---|
| 1503 | 0, 0, "palPa", "zenith", status );
|
|---|
| 1504 | }
|
|---|
| 1505 |
|
|---|
| 1506 | static void t_pcd( int *status ) {
|
|---|
| 1507 | double disco, x, y;
|
|---|
| 1508 | disco = 178.585;
|
|---|
| 1509 | x = 0.0123;
|
|---|
| 1510 | y = -0.00987;
|
|---|
| 1511 |
|
|---|
| 1512 | palPcd ( disco, &x, &y );
|
|---|
| 1513 | vvd ( x, 0.01284630845735895, 1e-14, "palPcd", "x", status );
|
|---|
| 1514 | vvd ( y, -0.01030837922553926, 1e-14, "palPcd", "y", status );
|
|---|
| 1515 |
|
|---|
| 1516 | palUnpcd ( disco, &x, &y );
|
|---|
| 1517 | vvd ( x, 0.0123, 1e-14, "palUnpcd", "x", status );
|
|---|
| 1518 | vvd ( y, -0.00987, 1e-14, "palUnpcd", "y,", status );
|
|---|
| 1519 |
|
|---|
| 1520 | /* Now negative disco round trip */
|
|---|
| 1521 | disco = -0.3333333;
|
|---|
| 1522 | x = 0.0123;
|
|---|
| 1523 | y = -0.00987;
|
|---|
| 1524 | palPcd ( disco, &x, &y );
|
|---|
| 1525 | palUnpcd ( disco, &x, &y );
|
|---|
| 1526 | vvd ( x, 0.0123, 1e-14, "palUnpcd", "x", status );
|
|---|
| 1527 | vvd ( y, -0.00987, 1e-14, "palUnpcd", "y,", status );
|
|---|
| 1528 | }
|
|---|
| 1529 |
|
|---|
| 1530 | static void t_planet( int * status ) {
|
|---|
| 1531 | int j;
|
|---|
| 1532 | double pv[6];
|
|---|
| 1533 | double u[13];
|
|---|
| 1534 | double expected1[6] = { 0., 0., 0., 0., 0., 0. };
|
|---|
| 1535 | double expectedue1[13] = {
|
|---|
| 1536 | 1.000878908362435284, -0.3336263027874777288, 50000.,
|
|---|
| 1537 | 2.840425801310305210, 0.1264380368035014224, -0.2287711835229143197,
|
|---|
| 1538 | -0.01301062595106185195, 0.5657102158104651697, 0.2189745287281794885,
|
|---|
| 1539 | 2.852427310959998500, -0.01552349065435120900,
|
|---|
| 1540 | 50000., 0.0
|
|---|
| 1541 | };
|
|---|
| 1542 | double expectedue2[13] = {
|
|---|
| 1543 | 1.00006, -4.856142884511782, 50000., 0.3, -0.2,
|
|---|
| 1544 | 0.1, -0.4520378601821727, 0.4018114312730424,
|
|---|
| 1545 | -.3515850023639121, 0.3741657386773941,
|
|---|
| 1546 | -0.2511321445456515, 50000., 0.
|
|---|
| 1547 | };
|
|---|
| 1548 | double expectedue3[13] = {
|
|---|
| 1549 | 1.000000000000000,
|
|---|
| 1550 | -0.3329769417028020949,
|
|---|
| 1551 | 50100.,
|
|---|
| 1552 | 2.638884303608524597,
|
|---|
| 1553 | 1.070994304747824305,
|
|---|
| 1554 | 0.1544112080167568589,
|
|---|
| 1555 | -0.2188240619161439344,
|
|---|
| 1556 | 0.5207557453451906385,
|
|---|
| 1557 | 0.2217782439275216936,
|
|---|
| 1558 | 2.852118859689216658,
|
|---|
| 1559 | 0.01452010174371893229,
|
|---|
| 1560 | 50100.,
|
|---|
| 1561 | 0.
|
|---|
| 1562 | };
|
|---|
| 1563 | double expectedpv[6] = {
|
|---|
| 1564 | 0.07944764084631667011, -0.04118141077419014775,
|
|---|
| 1565 | 0.002915180702063625400, -0.6890132370721108608e-6,
|
|---|
| 1566 | 0.4326690733487621457e-6, -0.1763249096254134306e-6,
|
|---|
| 1567 | };
|
|---|
| 1568 | double expectedpv2[6] = {
|
|---|
| 1569 | 1.947628959288897677,
|
|---|
| 1570 | -1.013736058752235271,
|
|---|
| 1571 | -0.3536409947732733647,
|
|---|
| 1572 | 2.742247411571786194e-8,
|
|---|
| 1573 | 1.170467244079075911e-7,
|
|---|
| 1574 | 3.709878268217564005e-8
|
|---|
| 1575 | };
|
|---|
| 1576 |
|
|---|
| 1577 | double ra,dec,diam, r;
|
|---|
| 1578 | int jform;
|
|---|
| 1579 | double epoch, orbinc, anode, perih, aorq, e, aorl,
|
|---|
| 1580 | dm;
|
|---|
| 1581 |
|
|---|
| 1582 | /* palEl2ue */
|
|---|
| 1583 | palEl2ue ( 50000, 1, 49000, 0.1, 2, 0.2,
|
|---|
| 1584 | 3, 0.05, 3, 0.003312, u, &j );
|
|---|
| 1585 | vvec( 13, u, expectedue1, "palEl2ue", status );
|
|---|
| 1586 | viv ( j, 0, "palEl2ue", "J", status );
|
|---|
| 1587 |
|
|---|
| 1588 | /* palPertel */
|
|---|
| 1589 | palPertel ( 2, 43000., 43200., 43000.,
|
|---|
| 1590 | 0.2, 3, 4, 5, 0.02, 6,
|
|---|
| 1591 | &epoch, &orbinc, &anode, &perih, &aorq, &e, &aorl, &j );
|
|---|
| 1592 | vvd ( epoch, 43200., 1e-10, "palPertel",
|
|---|
| 1593 | "EPOCH", status );
|
|---|
| 1594 | vvd ( orbinc, 0.1995661466545422381, 1e-7, "palPertel",
|
|---|
| 1595 | "ORBINC", status );
|
|---|
| 1596 | vvd ( anode, 2.998052737821591215, 1e-7, "palPertel",
|
|---|
| 1597 | "ANODE", status );
|
|---|
| 1598 | vvd ( perih, 4.009516448441143636, 1e-6, "palPertel",
|
|---|
| 1599 | "PERIH", status );
|
|---|
| 1600 | vvd ( aorq, 5.014216294790922323, 1e-7, "palPertel",
|
|---|
| 1601 | "AORQ", status );
|
|---|
| 1602 | vvd ( e, 0.02281386258309823607, 1e-7, "palPertel",
|
|---|
| 1603 | "E", status );
|
|---|
| 1604 | vvd ( aorl, 0.01735248648779583748, 1e-6, "palPertel",
|
|---|
| 1605 | "AORL", status );
|
|---|
| 1606 | viv ( j, 0, "palPertel", "J", status );
|
|---|
| 1607 |
|
|---|
| 1608 | /* palPertue */
|
|---|
| 1609 | palPertue ( 50100, u, &j );
|
|---|
| 1610 | vvec( 13, u, expectedue3, "palPertue", status );
|
|---|
| 1611 | viv ( j, 0, "palPertue", "J", status );
|
|---|
| 1612 |
|
|---|
| 1613 | /* palPlanel */
|
|---|
| 1614 | palPlanel ( 50600, 2, 50500, 0.1, 3, 5,
|
|---|
| 1615 | 2, 0.3, 4, 0, pv, &j );
|
|---|
| 1616 | vvec( 6, pv, expectedpv2, "palPlanel", status );
|
|---|
| 1617 | viv ( j, 0, "palPlanel", "J", status );
|
|---|
| 1618 |
|
|---|
| 1619 | /* palPlanet */
|
|---|
| 1620 |
|
|---|
| 1621 | palPlanet( 1e6, 0, pv, &j );
|
|---|
| 1622 | vvec( 6, pv, expected1, "palPlanet 1", status );
|
|---|
| 1623 | viv ( j, -1, "palPlanet", "J 1", status );
|
|---|
| 1624 |
|
|---|
| 1625 | palPlanet( 1e6, 9, pv, &j);
|
|---|
| 1626 | viv ( j, -1, "palPlanet", "J 2", status );
|
|---|
| 1627 |
|
|---|
| 1628 | palPlanet ( -320000, 3, pv, &j );
|
|---|
| 1629 | vvd ( pv[0], 0.9308038666827242603, 1e-11, "palPlanet",
|
|---|
| 1630 | "pv[0] 3", status );
|
|---|
| 1631 | vvd ( pv[1], 0.3258319040252137618, 1e-11, "palPlanet",
|
|---|
| 1632 | "pv[1] 3", status );
|
|---|
| 1633 | vvd ( pv[2], 0.1422794544477122021, 1e-11, "palPlanet",
|
|---|
| 1634 | "pv[2] 3", status );
|
|---|
| 1635 | vvd ( pv[3], -7.441503423889371696e-8, 1e-17, "palPlanet",
|
|---|
| 1636 | "pv[3] 3", status );
|
|---|
| 1637 | vvd ( pv[4], 1.699734557528650689e-7, 1e-17, "palPlanet",
|
|---|
| 1638 | "pv[4] 3", status );
|
|---|
| 1639 | vvd ( pv[5], 7.415505123001430864e-8, 1e-17, "palPlanet",
|
|---|
| 1640 | "pv[5] 3", status );
|
|---|
| 1641 | viv ( j, 1, "palPlanet", "J 3", status );
|
|---|
| 1642 |
|
|---|
| 1643 | palPlanet ( 43999.9, 1, pv, &j );
|
|---|
| 1644 | vvd ( pv[0], 0.2945293959257422246, 1e-11, "palPlanet",
|
|---|
| 1645 | "pv[0] 4", status );
|
|---|
| 1646 | vvd ( pv[1], -0.2452204176601052181, 1e-11, "palPlanet",
|
|---|
| 1647 | "pv[1] 4", status );
|
|---|
| 1648 | vvd ( pv[2], -0.1615427700571978643, 1e-11, "palPlanet",
|
|---|
| 1649 | "pv[2] 4", status );
|
|---|
| 1650 | vvd ( pv[3], 1.636421147459047057e-7, 1e-18, "palPlanet",
|
|---|
| 1651 | "pv[3] 4", status );
|
|---|
| 1652 | vvd ( pv[4], 2.252949422574889753e-7, 1e-18, "palPlanet",
|
|---|
| 1653 | "pv[4] 4", status );
|
|---|
| 1654 | vvd ( pv[5], 1.033542799062371839e-7, 1e-18, "palPlanet",
|
|---|
| 1655 | "pv[5] 4", status );
|
|---|
| 1656 | viv ( j, 0, "palPlanet", "J 4", status );
|
|---|
| 1657 |
|
|---|
| 1658 | /* palPlante test would go here */
|
|---|
| 1659 |
|
|---|
| 1660 | palPlante ( 50600., -1.23, 0.456, 2, 50500.,
|
|---|
| 1661 | 0.1, 3., 5., 2., 0.3, 4.,
|
|---|
| 1662 | 0., &ra, &dec, &r, &j );
|
|---|
| 1663 | vvd ( ra, 6.222958101333794007, 1e-6, "palPlante",
|
|---|
| 1664 | "RA", status );
|
|---|
| 1665 | vvd ( dec, 0.01142220305739771601, 1e-6, "palPlante",
|
|---|
| 1666 | "DEC", status );
|
|---|
| 1667 | vvd ( r, 2.288902494080167624, 1e-8, "palPlante",
|
|---|
| 1668 | "R", status );
|
|---|
| 1669 | viv ( j, 0, "palPlante", "J", status );
|
|---|
| 1670 |
|
|---|
| 1671 | u[0] = 1.0005;
|
|---|
| 1672 | u[1] = -0.3;
|
|---|
| 1673 | u[2] = 55000.;
|
|---|
| 1674 | u[3] = 2.8;
|
|---|
| 1675 | u[4] = 0.1;
|
|---|
| 1676 | u[5] = -0.2;
|
|---|
| 1677 | u[6] = -0.01;
|
|---|
| 1678 | u[7] = 0.5;
|
|---|
| 1679 | u[8] = 0.22;
|
|---|
| 1680 | u[9] = 2.8;
|
|---|
| 1681 | u[10] = -0.015;
|
|---|
| 1682 | u[11] = 55001.;
|
|---|
| 1683 | u[12] = 0;
|
|---|
| 1684 |
|
|---|
| 1685 | /* palPlantu */
|
|---|
| 1686 |
|
|---|
| 1687 | palPlantu ( 55001., -1.23, 0.456, u, &ra, &dec, &r, &j );
|
|---|
| 1688 | vvd ( ra, 0.3531814831241686647, 1e-6, "palPlantu",
|
|---|
| 1689 | "RA", status );
|
|---|
| 1690 | vvd ( dec, 0.06940344580567131328, 1e-6, "palPlantu",
|
|---|
| 1691 | "DEC", status );
|
|---|
| 1692 | vvd ( r, 3.031687170873274464, 1e-8, "palPlantu",
|
|---|
| 1693 | "R", status );
|
|---|
| 1694 | viv ( j, 0, "palPlantu", "J", status );
|
|---|
| 1695 |
|
|---|
| 1696 | /* palPv2el */
|
|---|
| 1697 |
|
|---|
| 1698 | pv[0] = 0.3;
|
|---|
| 1699 | pv[1] = -0.2;
|
|---|
| 1700 | pv[2] = 0.1;
|
|---|
| 1701 | pv[3] = -0.9e-7;
|
|---|
| 1702 | pv[4] = 0.8e-7;
|
|---|
| 1703 | pv[5] = -0.7e-7;
|
|---|
| 1704 |
|
|---|
| 1705 | palPv2el ( pv, 50000, 0.00006, 1,
|
|---|
| 1706 | &jform, &epoch, &orbinc, &anode, &perih,
|
|---|
| 1707 | &aorq, &e, &aorl, &dm, &j );
|
|---|
| 1708 | viv ( jform, 1, "palPv2el", "JFORM", status );
|
|---|
| 1709 | vvd ( epoch, 50000, 1e-10, "palPv2el",
|
|---|
| 1710 | "EPOCH", status );
|
|---|
| 1711 | vvd ( orbinc, 1.52099895268912, 1e-12, "palPv2el",
|
|---|
| 1712 | "ORBINC", status );
|
|---|
| 1713 | vvd ( anode, 2.720503180538650, 1e-12, "palPv2el",
|
|---|
| 1714 | "ANODE", status );
|
|---|
| 1715 | vvd ( perih, 2.194081512031836, 1e-12, "palPv2el",
|
|---|
| 1716 | "PERIH", status );
|
|---|
| 1717 | vvd ( aorq, 0.2059371035373771, 1e-12, "palPv2el",
|
|---|
| 1718 | "AORQ", status );
|
|---|
| 1719 | vvd ( e, 0.9866822985810528, 1e-12, "palPv2el",
|
|---|
| 1720 | "E", status );
|
|---|
| 1721 | vvd ( aorl, 0.2012758344836794, 1e-12, "palPv2el",
|
|---|
| 1722 | "AORL", status );
|
|---|
| 1723 | vvd ( dm, 0.1840740507951820, 1e-12, "palPv2el",
|
|---|
| 1724 | "DM", status );
|
|---|
| 1725 | viv ( j, 0, "palPv2el", "J", status );
|
|---|
| 1726 |
|
|---|
| 1727 | /* palPv2ue */
|
|---|
| 1728 | palPv2ue ( pv, 50000., 0.00006, u, &j );
|
|---|
| 1729 | vvec( 13, u, expectedue2, "palPv2ue", status );
|
|---|
| 1730 | viv ( j, 0, "palPv2ue", "J", status );
|
|---|
| 1731 |
|
|---|
| 1732 | /* Planets */
|
|---|
| 1733 | palRdplan ( 40999.9, 0, 0.1, -0.9, &ra, &dec, &diam );
|
|---|
| 1734 | vvd ( ra, 5.772270359389275837, 1e-6, "palRdplan",
|
|---|
| 1735 | "ra 0", status );
|
|---|
| 1736 | vvd ( dec, -0.2089207338795416192, 1e-7, "palRdplan",
|
|---|
| 1737 | "dec 0", status );
|
|---|
| 1738 | vvd ( diam, 9.415338935229717875e-3, 1e-10, "palRdplan",
|
|---|
| 1739 | "diam 0", status );
|
|---|
| 1740 | palRdplan ( 41999.9, 1, 1.1, -0.9, &ra, &dec, &diam );
|
|---|
| 1741 | vvd ( ra, 3.866363420052936653, 1e-6, "palRdplan",
|
|---|
| 1742 | "ra 1", status );
|
|---|
| 1743 | vvd ( dec, -0.2594430577550113130, 1e-7, "palRdplan",
|
|---|
| 1744 | "dec 1", status );
|
|---|
| 1745 | vvd ( diam, 4.638468996795023071e-5, 1e-14, "palRdplan",
|
|---|
| 1746 | "diam 1", status );
|
|---|
| 1747 | palRdplan ( 42999.9, 2, 2.1, 0.9, &ra, &dec, &diam );
|
|---|
| 1748 | vvd ( ra, 2.695383203184077378, 1e-6, "palRdplan",
|
|---|
| 1749 | "ra 2", status );
|
|---|
| 1750 | vvd ( dec, 0.2124044506294805126, 1e-7, "palRdplan",
|
|---|
| 1751 | "dec 2", status );
|
|---|
| 1752 | vvd ( diam, 4.892222838681000389e-5, 1e-14, "palRdplan",
|
|---|
| 1753 | "diam 2", status );
|
|---|
| 1754 | palRdplan ( 43999.9, 3, 3.1, 0.9, &ra, &dec, &diam );
|
|---|
| 1755 | vvd ( ra, 2.908326678461540165, 1e-7, "palRdplan",
|
|---|
| 1756 | "ra 3", status );
|
|---|
| 1757 | vvd ( dec, 0.08729783126905579385, 1e-7, "palRdplan",
|
|---|
| 1758 | "dec 3", status );
|
|---|
| 1759 | vvd ( diam, 8.581305866034962476e-3, 1e-7, "palRdplan",
|
|---|
| 1760 | "diam 3", status );
|
|---|
| 1761 | palRdplan ( 44999.9, 4, -0.1, 1.1, &ra, &dec, &diam );
|
|---|
| 1762 | vvd ( ra, 3.429840787472851721, 1e-6, "palRdplan",
|
|---|
| 1763 | "ra 4", status );
|
|---|
| 1764 | vvd ( dec, -0.06979851055261161013, 1e-7, "palRdplan",
|
|---|
| 1765 | "dec 4", status );
|
|---|
| 1766 | vvd ( diam, 4.540536678439300199e-5, 1e-14, "palRdplan",
|
|---|
| 1767 | "diam 4", status );
|
|---|
| 1768 | palRdplan ( 45999.9, 5, -1.1, 0.1, &ra, &dec, &diam );
|
|---|
| 1769 | vvd ( ra, 4.864669466449422548, 1e-6, "palRdplan",
|
|---|
| 1770 | "ra 5", status );
|
|---|
| 1771 | vvd ( dec, -0.4077714497908953354, 1e-7, "palRdplan",
|
|---|
| 1772 | "dec 5", status );
|
|---|
| 1773 | vvd ( diam, 1.727945579027815576e-4, 1e-14, "palRdplan",
|
|---|
| 1774 | "diam 5", status );
|
|---|
| 1775 | palRdplan ( 46999.9, 6, -2.1, -0.1, &ra, &dec, &diam );
|
|---|
| 1776 | vvd ( ra, 4.432929829176388766, 1e-6, "palRdplan",
|
|---|
| 1777 | "ra 6", status );
|
|---|
| 1778 | vvd ( dec, -0.3682820877854730530, 1e-7, "palRdplan",
|
|---|
| 1779 | "dec 6", status );
|
|---|
| 1780 | vvd ( diam, 8.670829016099083311e-5, 1e-14, "palRdplan",
|
|---|
| 1781 | "diam 6", status );
|
|---|
| 1782 | palRdplan ( 47999.9, 7, -3.1, -1.1, &ra, &dec, &diam );
|
|---|
| 1783 | vvd ( ra, 4.894972492286818487, 1e-6, "palRdplan",
|
|---|
| 1784 | "ra 7", status );
|
|---|
| 1785 | vvd ( dec, -0.4084068901053653125, 1e-7, "palRdplan",
|
|---|
| 1786 | "dec 7", status );
|
|---|
| 1787 | vvd ( diam, 1.793916783975974163e-5, 1e-14, "palRdplan",
|
|---|
| 1788 | "diam 7", status );
|
|---|
| 1789 | palRdplan ( 48999.9, 8, 0, 0, &ra, &dec, &diam );
|
|---|
| 1790 | vvd ( ra, 5.066050284760144000, 1e-6, "palRdplan",
|
|---|
| 1791 | "ra 8", status );
|
|---|
| 1792 | vvd ( dec, -0.3744690779683850609, 1e-7, "palRdplan",
|
|---|
| 1793 | "dec 8", status );
|
|---|
| 1794 | vvd ( diam, 1.062210086082700563e-5, 1e-14, "palRdplan",
|
|---|
| 1795 | "diam 8", status );
|
|---|
| 1796 |
|
|---|
| 1797 | /* palUe2el */
|
|---|
| 1798 | palUe2el ( u, 1, &jform, &epoch, &orbinc, &anode, &perih,
|
|---|
| 1799 | &aorq, &e, &aorl, &dm, &j );
|
|---|
| 1800 | viv ( jform, 1, "palUe2el", "JFORM", status );
|
|---|
| 1801 | vvd ( epoch, 50000.00000000000, 1e-10, "palUe2el",
|
|---|
| 1802 | "EPOCH", status );
|
|---|
| 1803 | vvd ( orbinc, 1.520998952689120, 1e-12, "palUe2el",
|
|---|
| 1804 | "ORBINC", status );
|
|---|
| 1805 | vvd ( anode, 2.720503180538650, 1e-12, "palUe2el",
|
|---|
| 1806 | "ANODE", status );
|
|---|
| 1807 | vvd ( perih, 2.194081512031836, 1e-12, "palUe2el",
|
|---|
| 1808 | "PERIH", status );
|
|---|
| 1809 | vvd ( aorq, 0.2059371035373771, 1e-12, "palUe2el",
|
|---|
| 1810 | "AORQ", status );
|
|---|
| 1811 | vvd ( e, 0.9866822985810528, 1e-12, "palUe2el",
|
|---|
| 1812 | "E", status );
|
|---|
| 1813 | vvd ( aorl, 0.2012758344836794, 1e-12, "palUe2el",
|
|---|
| 1814 | "AORL", status );
|
|---|
| 1815 | viv ( j, 0, "palUe2el", "J", status );
|
|---|
| 1816 |
|
|---|
| 1817 | /* palUe2pv */
|
|---|
| 1818 | palUe2pv( 50010., u, pv, &j );
|
|---|
| 1819 |
|
|---|
| 1820 | /* Update the final two elements of the expecte UE array */
|
|---|
| 1821 | expectedue2[11] = 50010.;
|
|---|
| 1822 | expectedue2[12] = 0.7194308220038886856;
|
|---|
| 1823 |
|
|---|
| 1824 | vvec( 13, u, expectedue2, "palUe2pv", status );
|
|---|
| 1825 | vvec( 6, pv, expectedpv, "palUe2pv", status );
|
|---|
| 1826 | viv ( j, 0, "palUe2pv", "J", status );
|
|---|
| 1827 |
|
|---|
| 1828 | }
|
|---|
| 1829 |
|
|---|
| 1830 | static void t_pm( int * status ) {
|
|---|
| 1831 | double ra2, dec2;
|
|---|
| 1832 | double ra1, dec1, pmr1, pmd1, px1, rv1;
|
|---|
| 1833 |
|
|---|
| 1834 | ra1 = 5.43;
|
|---|
| 1835 | dec1 = -0.87;
|
|---|
| 1836 | pmr1 = -0.33e-5;
|
|---|
| 1837 | pmd1 = 0.77e-5;
|
|---|
| 1838 | px1 = 0.7;
|
|---|
| 1839 | rv1 = 50.3*365.2422/365.25;
|
|---|
| 1840 |
|
|---|
| 1841 | palPm ( ra1, dec1, pmr1, pmd1, px1, rv1,
|
|---|
| 1842 | 1899, 1943,
|
|---|
| 1843 | &ra2, &dec2 );
|
|---|
| 1844 | vvd ( ra2, 5.429855087793875, 1e-10, "palPm",
|
|---|
| 1845 | "R", status );
|
|---|
| 1846 | vvd ( dec2, -0.8696617307805072, 1e-10, "palPm",
|
|---|
| 1847 | "D", status );
|
|---|
| 1848 |
|
|---|
| 1849 | /* SOFA/ERFA test */
|
|---|
| 1850 | ra1 = 0.01686756;
|
|---|
| 1851 | dec1 = -1.093989828;
|
|---|
| 1852 | pmr1 = -1.78323516e-5;
|
|---|
| 1853 | pmd1 = 2.336024047e-6;
|
|---|
| 1854 | px1 = 0.74723;
|
|---|
| 1855 | rv1 = -21.6;
|
|---|
| 1856 |
|
|---|
| 1857 | palPm(ra1, dec1, pmr1, pmd1, px1, rv1,
|
|---|
| 1858 | palEpj(50083.0), palEpj(53736.0),
|
|---|
| 1859 | &ra2, &dec2);
|
|---|
| 1860 | vvd(ra2, 0.01668919069414242368, 1e-13,
|
|---|
| 1861 | "palPm", "ra", status);
|
|---|
| 1862 | vvd(dec2, -1.093966454217127879, 1e-13,
|
|---|
| 1863 | "palPm", "dec", status);
|
|---|
| 1864 |
|
|---|
| 1865 |
|
|---|
| 1866 | }
|
|---|
| 1867 |
|
|---|
| 1868 | static void t_polmo( int *status ) {
|
|---|
| 1869 | double elong, phi, daz;
|
|---|
| 1870 |
|
|---|
| 1871 | palPolmo( 0.7, -0.5, 1.0e-6, -2.0e-6, &elong, &phi, &daz );
|
|---|
| 1872 | vvd(elong, 0.7000004837322044, 1.0e-12, "palPolmo", "elong", status );
|
|---|
| 1873 | vvd(phi, -0.4999979467222241, 1.0e-12, "palPolmo", "phi", status );
|
|---|
| 1874 | vvd(daz, 1.008982781275728e-6, 1.0e-12, "palPolmo", "daz", status );
|
|---|
| 1875 | }
|
|---|
| 1876 |
|
|---|
| 1877 | static void t_pvobs( int *status ) {
|
|---|
| 1878 | double pv[6];
|
|---|
| 1879 | double expected[6] = { -4.7683600138836167813e-06,
|
|---|
| 1880 | 1.0419056712717953176e-05,
|
|---|
| 1881 | 4.099831053320363277e-05,
|
|---|
| 1882 | -7.5976959740661272483e-10,
|
|---|
| 1883 | -3.4771429582640930371e-10,
|
|---|
| 1884 | 0.0};
|
|---|
| 1885 | palPvobs( 1.3, 10000.0, 2.0, pv );
|
|---|
| 1886 | vvec( 6, pv, expected, "palPvobs", status );
|
|---|
| 1887 | }
|
|---|
| 1888 |
|
|---|
| 1889 | static void t_rv( int *status ) {
|
|---|
| 1890 | vvd ( palRverot ( -0.777, 5.67, -0.3, 3.19 ),
|
|---|
| 1891 | -0.1948098355075913, 1e-6,
|
|---|
| 1892 | "palRverot", " ", status );
|
|---|
| 1893 | vvd ( palRvgalc ( 1.11E0, -0.99E0 ),
|
|---|
| 1894 | 158.9630759840254, 1e-3, "palRvgalc", " ", status );
|
|---|
| 1895 | vvd ( palRvlg ( 3.97E0, 1.09E0 ),
|
|---|
| 1896 | -197.818762175363, 1e-3, "palRvlg", " ", status );
|
|---|
| 1897 | vvd ( palRvlsrd ( 6.01E0, 0.1E0 ),
|
|---|
| 1898 | -4.082811335150567, 1e-4, "palRvlsrd", " ", status );
|
|---|
| 1899 | vvd ( palRvlsrk ( 6.01E0, 0.1E0 ),
|
|---|
| 1900 | -5.925180579830265, 1e-4, "palRvlsrk", " ", status );
|
|---|
| 1901 | }
|
|---|
| 1902 |
|
|---|
| 1903 | static void t_rvgalc( int *status ) {
|
|---|
| 1904 | double rv;
|
|---|
| 1905 | rv = palRvgalc( 2.7, -1.0 );
|
|---|
| 1906 | vvd( rv, 213.98084425751144977, 1.0E-12, "palRvgalc", "rv", status );
|
|---|
| 1907 | }
|
|---|
| 1908 |
|
|---|
| 1909 | static void t_rvlg( int *status ) {
|
|---|
| 1910 | double rv;
|
|---|
| 1911 | rv = palRvlg( 2.7, -1.0 );
|
|---|
| 1912 | vvd( rv, 291.79205281252404802, 1.0E-12, "palRvlg", "rv", status );
|
|---|
| 1913 | }
|
|---|
| 1914 |
|
|---|
| 1915 | static void t_rvlsrd( int *status ) {
|
|---|
| 1916 | double rv;
|
|---|
| 1917 | rv = palRvlsrd( 2.7, -1.0 );
|
|---|
| 1918 | vvd( rv, 9.620674692097630043, 1.0E-12, "palRvlsrd", "rv", status );
|
|---|
| 1919 | }
|
|---|
| 1920 |
|
|---|
| 1921 | static void t_rvlsrk( int *status ) {
|
|---|
| 1922 | double rv;
|
|---|
| 1923 | rv = palRvlsrk( 2.7, -1.0 );
|
|---|
| 1924 | vvd( rv, 12.556356851411955233, 1.0E-12, "palRvlsrk", "rv", status );
|
|---|
| 1925 | }
|
|---|
| 1926 |
|
|---|
| 1927 | static void t_refco( int *status ) {
|
|---|
| 1928 | double phpa, tc, rh, wl, refa, refb;
|
|---|
| 1929 | phpa = 800.0;
|
|---|
| 1930 | tc = 10.0 + 273.15; /* SLA uses kelvin */
|
|---|
| 1931 | rh = 0.9;
|
|---|
| 1932 | wl = 0.4;
|
|---|
| 1933 | palRefcoq(tc, phpa, rh, wl, &refa, &refb);
|
|---|
| 1934 | vvd(refa, 0.2264949956241415009e-3, 1e-15,
|
|---|
| 1935 | "palRefcoq", "refa", status);
|
|---|
| 1936 | vvd(refb, -0.2598658261729343970e-6, 1e-18,
|
|---|
| 1937 | "palRefcoq", "refb", status);
|
|---|
| 1938 | }
|
|---|
| 1939 |
|
|---|
| 1940 | static void t_ref( int *status ) {
|
|---|
| 1941 | double ref, refa, refb, refa2, refb2, vu[3], vr[3], zr;
|
|---|
| 1942 |
|
|---|
| 1943 | palRefro( 1.4, 3456.7, 280, 678.9, 0.9, 0.55,
|
|---|
| 1944 | -0.3, 0.006, 1e-9, &ref );
|
|---|
| 1945 | vvd( ref, 0.00106715763018568, 1e-12, "palRefro",
|
|---|
| 1946 | "o", status );
|
|---|
| 1947 |
|
|---|
| 1948 | palRefro( 1.4, 3456.7, 280, 678.9, 0.9, 1000,
|
|---|
| 1949 | -0.3, 0.006, 1e-9, &ref );
|
|---|
| 1950 | vvd( ref, 0.001296416185295403, 1e-12, "palRefro",
|
|---|
| 1951 | "r", status );
|
|---|
| 1952 |
|
|---|
| 1953 | palRefcoq( 275.9, 709.3, 0.9, 101, &refa, &refb );
|
|---|
| 1954 | vvd( refa, 2.324736903790639e-4, 1e-12, "palRefcoq",
|
|---|
| 1955 | "a/r", status );
|
|---|
| 1956 | vvd( refb, -2.442884551059e-7, 1e-15, "palRefcoq",
|
|---|
| 1957 | "b/r", status );
|
|---|
| 1958 |
|
|---|
| 1959 | palRefco( 2111.1, 275.9, 709.3, 0.9, 101,
|
|---|
| 1960 | -1.03, 0.0067, 1e-12, &refa, &refb );
|
|---|
| 1961 | vvd( refa, 2.324673985217244e-4, 1e-12, "palRefco",
|
|---|
| 1962 | "a/r", status );
|
|---|
| 1963 | vvd( refb, -2.265040682496e-7, 1e-15, "palRefco",
|
|---|
| 1964 | "b/r", status );
|
|---|
| 1965 |
|
|---|
| 1966 | palRefcoq( 275.9, 709.3, 0.9, 0.77, &refa, &refb );
|
|---|
| 1967 | vvd( refa, 2.007406521596588e-4, 1e-12, "palRefcoq",
|
|---|
| 1968 | "a", status );
|
|---|
| 1969 | vvd( refb, -2.264210092590e-7, 1e-15, "palRefcoq",
|
|---|
| 1970 | "b", status );
|
|---|
| 1971 |
|
|---|
| 1972 | palRefco( 2111.1, 275.9, 709.3, 0.9, 0.77,
|
|---|
| 1973 | -1.03, 0.0067, 1e-12, &refa, &refb );
|
|---|
| 1974 | vvd( refa, 2.007202720084551e-4, 1e-12, "palRefco",
|
|---|
| 1975 | "a", status );
|
|---|
| 1976 | vvd( refb, -2.223037748876e-7, 1e-15, "palRefco",
|
|---|
| 1977 | "b", status );
|
|---|
| 1978 |
|
|---|
| 1979 | palAtmdsp ( 275.9, 709.3, 0.9, 0.77,
|
|---|
| 1980 | refa, refb, 0.5, &refa2, &refb2 );
|
|---|
| 1981 | vvd ( refa2, 2.034523658888048e-4, 1e-12, "palAtmdsp",
|
|---|
| 1982 | "a", status );
|
|---|
| 1983 | vvd ( refb2, -2.250855362179e-7, 1e-15, "palAtmdsp",
|
|---|
| 1984 | "b", status );
|
|---|
| 1985 |
|
|---|
| 1986 | palDcs2c ( 0.345, 0.456, vu );
|
|---|
| 1987 | palRefv ( vu, refa, refb, vr );
|
|---|
| 1988 | vvd ( vr[0], 0.8447487047790478, 1e-12, "palRefv",
|
|---|
| 1989 | "x1", status );
|
|---|
| 1990 | vvd ( vr[1], 0.3035794890562339, 1e-12, "palRefv",
|
|---|
| 1991 | "y1", status );
|
|---|
| 1992 | vvd ( vr[2], 0.4407256738589851, 1e-12, "palRefv",
|
|---|
| 1993 | "z1", status );
|
|---|
| 1994 |
|
|---|
| 1995 | palDcs2c ( 3.7, 0.03, vu );
|
|---|
| 1996 | palRefv ( vu, refa, refb, vr );
|
|---|
| 1997 | vvd ( vr[0], -0.8476187691681673, 1e-12, "palRefv",
|
|---|
| 1998 | "x2", status );
|
|---|
| 1999 | vvd ( vr[1], -0.5295354802804889, 1e-12, "palRefv",
|
|---|
| 2000 | "y2", status );
|
|---|
| 2001 | vvd ( vr[2], 0.0322914582168426, 1e-12, "palRefv",
|
|---|
| 2002 | "z2", status );
|
|---|
| 2003 |
|
|---|
| 2004 | palRefz ( 0.567, refa, refb, &zr );
|
|---|
| 2005 | vvd ( zr, 0.566872285910534, 1e-12, "palRefz",
|
|---|
| 2006 | "hi el", status );
|
|---|
| 2007 |
|
|---|
| 2008 | palRefz ( 1.55, refa, refb, &zr );
|
|---|
| 2009 | vvd ( zr, 1.545697350690958, 1e-12, "palRefz",
|
|---|
| 2010 | "lo el", status );
|
|---|
| 2011 |
|
|---|
| 2012 |
|
|---|
| 2013 |
|
|---|
| 2014 | }
|
|---|
| 2015 |
|
|---|
| 2016 | static void t_vers( int *status ) {
|
|---|
| 2017 | char verstring[32];
|
|---|
| 2018 |
|
|---|
| 2019 | int ver = palVers( verstring, sizeof(verstring));
|
|---|
| 2020 | printf("PAL Version %s (%d)\n", verstring, ver);
|
|---|
| 2021 | if ( ver < 6000 ) {
|
|---|
| 2022 | *status = 1; /* palVers introduced at v0.6.0 */
|
|---|
| 2023 | }
|
|---|
| 2024 | }
|
|---|
| 2025 |
|
|---|
| 2026 | /**********************************************************************/
|
|---|
| 2027 |
|
|---|
| 2028 | int main (void) {
|
|---|
| 2029 |
|
|---|
| 2030 | /* Use the SLA and SOFA/ERFA conventions */
|
|---|
| 2031 | int status = 0; /* Unix and SAE convention */
|
|---|
| 2032 |
|
|---|
| 2033 | t_addet(&status);
|
|---|
| 2034 | t_afin(&status);
|
|---|
| 2035 | t_altaz(&status);
|
|---|
| 2036 | t_ampqk(&status);
|
|---|
| 2037 | t_aop(&status);
|
|---|
| 2038 | t_airmas(&status);
|
|---|
| 2039 | t_amp(&status);
|
|---|
| 2040 | t_bear(&status);
|
|---|
| 2041 | t_caf2r(&status);
|
|---|
| 2042 | t_caldj(&status);
|
|---|
| 2043 | t_cc2s(&status);
|
|---|
| 2044 | t_cd2tf(&status);
|
|---|
| 2045 | t_cldj(&status);
|
|---|
| 2046 | t_cr2af(&status);
|
|---|
| 2047 | t_cr2tf(&status);
|
|---|
| 2048 | t_ctf2d(&status);
|
|---|
| 2049 | t_ctf2r(&status);
|
|---|
| 2050 | t_dat(&status);
|
|---|
| 2051 | t_djcal(&status);
|
|---|
| 2052 | t_dmat(&status);
|
|---|
| 2053 | t_epb(&status);
|
|---|
| 2054 | t_epb2d(&status);
|
|---|
| 2055 | t_epco(&status);
|
|---|
| 2056 | t_epj(&status);
|
|---|
| 2057 | t_epj2d(&status);
|
|---|
| 2058 | t_eqecl(&status);
|
|---|
| 2059 | t_eqeqx(&status);
|
|---|
| 2060 | t_etrms(&status);
|
|---|
| 2061 | t_eqgal(&status);
|
|---|
| 2062 | t_evp(&status);
|
|---|
| 2063 | t_fk45z(&status);
|
|---|
| 2064 | t_fk54z(&status);
|
|---|
| 2065 | t_fk524(&status);
|
|---|
| 2066 | t_flotin(&status);
|
|---|
| 2067 | t_galeq(&status);
|
|---|
| 2068 | t_galsup(&status);
|
|---|
| 2069 | t_ge50(&status);
|
|---|
| 2070 | t_geoc(&status);
|
|---|
| 2071 | t_gmst(&status);
|
|---|
| 2072 | t_fk52h(&status);
|
|---|
| 2073 | t_intin(&status);
|
|---|
| 2074 | t_prec(&status);
|
|---|
| 2075 | t_preces(&status);
|
|---|
| 2076 | t_ecleq(&status);
|
|---|
| 2077 | t_ecmat(&status);
|
|---|
| 2078 | t_e2h(&status);
|
|---|
| 2079 | t_map(&status);
|
|---|
| 2080 | t_mappa(&status);
|
|---|
| 2081 | t_mapqk(&status);
|
|---|
| 2082 | t_mapqkz(&status);
|
|---|
| 2083 | t_moon(&status);
|
|---|
| 2084 | t_nut(&status);
|
|---|
| 2085 | t_obs(&status);
|
|---|
| 2086 | t_pa(&status);
|
|---|
| 2087 | t_pcd(&status);
|
|---|
| 2088 | t_planet(&status);
|
|---|
| 2089 | t_pm(&status);
|
|---|
| 2090 | t_polmo(&status);
|
|---|
| 2091 | t_prebn(&status);
|
|---|
| 2092 | t_pvobs(&status);
|
|---|
| 2093 | t_range(&status);
|
|---|
| 2094 | t_ranorm(&status);
|
|---|
| 2095 | t_ref(&status);
|
|---|
| 2096 | t_refco(&status);
|
|---|
| 2097 | t_rv(&status);
|
|---|
| 2098 | t_rvgalc(&status);
|
|---|
| 2099 | t_rvlg(&status);
|
|---|
| 2100 | t_rvlsrd(&status);
|
|---|
| 2101 | t_rvlsrk(&status);
|
|---|
| 2102 | t_sep(&status);
|
|---|
| 2103 | t_supgal(&status);
|
|---|
| 2104 | t_tp(&status);
|
|---|
| 2105 | t_vecmat(&status);
|
|---|
| 2106 | t_vers(&status);
|
|---|
| 2107 | return status;
|
|---|
| 2108 | }
|
|---|