| 1 | #ifndef PALMACDEF
|
|---|
| 2 | #define PALMACDEF
|
|---|
| 3 |
|
|---|
| 4 | /*
|
|---|
| 5 | *+
|
|---|
| 6 | * Name:
|
|---|
| 7 | * palmac.h
|
|---|
| 8 |
|
|---|
| 9 | * Purpose:
|
|---|
| 10 | * Macros used by the PAL library
|
|---|
| 11 |
|
|---|
| 12 | * Language:
|
|---|
| 13 | * Starlink ANSI C
|
|---|
| 14 |
|
|---|
| 15 | * Type of Module:
|
|---|
| 16 | * Include file
|
|---|
| 17 |
|
|---|
| 18 | * Description:
|
|---|
| 19 | * A collection of useful macros provided and used by the PAL library
|
|---|
| 20 |
|
|---|
| 21 | * Authors:
|
|---|
| 22 | * TIMJ: Tim Jenness (JAC, Hawaii)
|
|---|
| 23 | * DSB: David Berry (JAC, Hawaii)
|
|---|
| 24 | * {enter_new_authors_here}
|
|---|
| 25 |
|
|---|
| 26 | * Notes:
|
|---|
| 27 | *
|
|---|
| 28 |
|
|---|
| 29 | * History:
|
|---|
| 30 | * 2012-02-08 (TIMJ):
|
|---|
| 31 | * Initial version.
|
|---|
| 32 | * Adapted with permission from the Fortran SLALIB library.
|
|---|
| 33 | * 2012-04-13 (DSB):
|
|---|
| 34 | * Added PAL__DR2H and PAL__DR2S
|
|---|
| 35 | * {enter_further_changes_here}
|
|---|
| 36 |
|
|---|
| 37 | * Copyright:
|
|---|
| 38 | * Copyright (C) 2012 Science and Technology Facilities Council.
|
|---|
| 39 | * All Rights Reserved.
|
|---|
| 40 |
|
|---|
| 41 | * Licence:
|
|---|
| 42 | * This program is free software: you can redistribute it and/or
|
|---|
| 43 | * modify it under the terms of the GNU Lesser General Public
|
|---|
| 44 | * License as published by the Free Software Foundation, either
|
|---|
| 45 | * version 3 of the License, or (at your option) any later
|
|---|
| 46 | * version.
|
|---|
| 47 | *
|
|---|
| 48 | * This program is distributed in the hope that it will be useful,
|
|---|
| 49 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|---|
| 50 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|---|
| 51 | * GNU Lesser General Public License for more details.
|
|---|
| 52 | *
|
|---|
| 53 | * You should have received a copy of the GNU Lesser General
|
|---|
| 54 | * License along with this program. If not, see
|
|---|
| 55 | * <http://www.gnu.org/licenses/>.
|
|---|
| 56 |
|
|---|
| 57 | * Bugs:
|
|---|
| 58 | * {note_any_bugs_here}
|
|---|
| 59 | *-
|
|---|
| 60 | */
|
|---|
| 61 |
|
|---|
| 62 | /* Pi */
|
|---|
| 63 | static const double PAL__DPI = 3.1415926535897932384626433832795028841971693993751;
|
|---|
| 64 |
|
|---|
| 65 | /* 2Pi */
|
|---|
| 66 | static const double PAL__D2PI = 6.2831853071795864769252867665590057683943387987502;
|
|---|
| 67 |
|
|---|
| 68 | /* pi/2: 90 degrees in radians */
|
|---|
| 69 | static const double PAL__DPIBY2 = 1.5707963267948966192313216916397514420985846996876;
|
|---|
| 70 |
|
|---|
| 71 | /* pi/180: degrees to radians */
|
|---|
| 72 | static const double PAL__DD2R = 0.017453292519943295769236907684886127134428718885417;
|
|---|
| 73 |
|
|---|
| 74 | /* Radians to arcseconds */
|
|---|
| 75 | static const double PAL__DR2AS = 2.0626480624709635515647335733077861319665970087963e5;
|
|---|
| 76 |
|
|---|
| 77 | /* Arcseconds to radians */
|
|---|
| 78 | static const double PAL__DAS2R = 4.8481368110953599358991410235794797595635330237270e-6;
|
|---|
| 79 |
|
|---|
| 80 | /* Radians to degrees */
|
|---|
| 81 | static const double PAL__DR2D = 57.295779513082320876798154814105170332405472466564;
|
|---|
| 82 |
|
|---|
| 83 | /* Hours to radians */
|
|---|
| 84 | static const double PAL__DH2R = 0.26179938779914943653855361527329190701643078328126;
|
|---|
| 85 |
|
|---|
| 86 | /* Radians to hours */
|
|---|
| 87 | static const double PAL__DR2H = 3.8197186342054880584532103209403446888270314977709;
|
|---|
| 88 |
|
|---|
| 89 | /* Radians to seconds of time */
|
|---|
| 90 | static const double PAL__DR2S = 1.3750987083139757010431557155385240879777313391975e4;
|
|---|
| 91 |
|
|---|
| 92 | /* Seconds of time to radians */
|
|---|
| 93 | static const double PAL__DS2R = 7.272205216643039903848712e-5;
|
|---|
| 94 |
|
|---|
| 95 | /* Start of SLA modified Julian date epoch */
|
|---|
| 96 | static const double PAL__MJD0 = 2400000.5;
|
|---|
| 97 |
|
|---|
| 98 | /* Light time for 1 AU (sec) */
|
|---|
| 99 | static const double PAL__CR = 499.004782;
|
|---|
| 100 |
|
|---|
| 101 | /* Seconds per day */
|
|---|
| 102 | static const double PAL__SPD = 86400.0;
|
|---|
| 103 |
|
|---|
| 104 | /* Km per sec to AU per tropical century
|
|---|
| 105 | = 86400 * 36524.2198782 / 149597870 */
|
|---|
| 106 | static const double PAL__VF = 21.095;
|
|---|
| 107 |
|
|---|
| 108 | /* Radians per year to arcsec per century. This needs to be a macro since it
|
|---|
| 109 | is an expression including other constants. */
|
|---|
| 110 | #define PAL__PMF (100.0*60.0*60.0*360.0/PAL__D2PI);
|
|---|
| 111 |
|
|---|
| 112 | /* Mean sidereal rate - the rotational angular velocity of Earth
|
|---|
| 113 | in radians/sec from IERS Conventions (2003). */
|
|---|
| 114 | static const double PAL__SR = 7.2921150e-5;
|
|---|
| 115 |
|
|---|
| 116 | /* Gaussian gravitational constant (exact) */
|
|---|
| 117 | static const double PAL__GCON = 0.01720209895;
|
|---|
| 118 |
|
|---|
| 119 | /* DINT(A) - truncate to nearest whole number towards zero (double) */
|
|---|
| 120 | #define DINT(A) ((A)<0.0?ceil(A):floor(A))
|
|---|
| 121 |
|
|---|
| 122 | /* DNINT(A) - round to nearest whole number (double) */
|
|---|
| 123 | #define DNINT(A) ((A)<0.0?ceil((A)-0.5):floor((A)+0.5))
|
|---|
| 124 |
|
|---|
| 125 | /* DMAX(A,B) - return maximum value - evaluates arguments multiple times */
|
|---|
| 126 | #define DMAX(A,B) ((A) > (B) ? (A) : (B) )
|
|---|
| 127 |
|
|---|
| 128 | /* DMIN(A,B) - return minimum value - evaluates arguments multiple times */
|
|---|
| 129 | #define DMIN(A,B) ((A) < (B) ? (A) : (B) )
|
|---|
| 130 |
|
|---|
| 131 | /* We actually prefer to use C99 copysign() but we define this here as a backup
|
|---|
| 132 | but it will not detect -0.0 so is not useful for palDfltin. */
|
|---|
| 133 | /* DSIGN(A,B) - magnitude of A with sign of B (double) */
|
|---|
| 134 | #define DSIGN(A,B) ((B)<0.0?-fabs(A):fabs(A))
|
|---|
| 135 |
|
|---|
| 136 | #endif
|
|---|