swe4r 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ext/swe4r/extconf.rb +3 -0
- data/ext/swe4r/src/swemptab.c +10642 -0
- data/ext/swe4r/swe4r.c +129 -0
- data/ext/swe4r/swecl.c +4948 -0
- data/ext/swe4r/swedate.c +590 -0
- data/ext/swe4r/swedate.h +82 -0
- data/ext/swe4r/swehel.c +3445 -0
- data/ext/swe4r/swehouse.c +1727 -0
- data/ext/swe4r/swehouse.h +85 -0
- data/ext/swe4r/swejpl.c +937 -0
- data/ext/swe4r/swejpl.h +105 -0
- data/ext/swe4r/swemmoon.c +1824 -0
- data/ext/swe4r/swemplan.c +959 -0
- data/ext/swe4r/swenut2000a.h +2820 -0
- data/ext/swe4r/sweodef.h +325 -0
- data/ext/swe4r/sweph.c +6241 -0
- data/ext/swe4r/sweph.h +556 -0
- data/ext/swe4r/swephexp.h +749 -0
- data/ext/swe4r/swephlib.c +2581 -0
- data/ext/swe4r/swephlib.h +177 -0
- data/lib/swe4r.rb +2 -0
- metadata +66 -0
data/ext/swe4r/sweph.h
ADDED
@@ -0,0 +1,556 @@
|
|
1
|
+
/************************************************************
|
2
|
+
$Header: /home/dieter/sweph/RCS/sweph.h,v 1.74 2008/06/16 10:07:20 dieter Exp $
|
3
|
+
definitions and constants SWISSEPH
|
4
|
+
|
5
|
+
Authors: Dieter Koch and Alois Treindl, Astrodienst Zurich
|
6
|
+
|
7
|
+
************************************************************/
|
8
|
+
/* Copyright (C) 1997 - 2008 Astrodienst AG, Switzerland. All rights reserved.
|
9
|
+
|
10
|
+
License conditions
|
11
|
+
------------------
|
12
|
+
|
13
|
+
This file is part of Swiss Ephemeris.
|
14
|
+
|
15
|
+
Swiss Ephemeris is distributed with NO WARRANTY OF ANY KIND. No author
|
16
|
+
or distributor accepts any responsibility for the consequences of using it,
|
17
|
+
or for whether it serves any particular purpose or works at all, unless he
|
18
|
+
or she says so in writing.
|
19
|
+
|
20
|
+
Swiss Ephemeris is made available by its authors under a dual licensing
|
21
|
+
system. The software developer, who uses any part of Swiss Ephemeris
|
22
|
+
in his or her software, must choose between one of the two license models,
|
23
|
+
which are
|
24
|
+
a) GNU public license version 2 or later
|
25
|
+
b) Swiss Ephemeris Professional License
|
26
|
+
|
27
|
+
The choice must be made before the software developer distributes software
|
28
|
+
containing parts of Swiss Ephemeris to others, and before any public
|
29
|
+
service using the developed software is activated.
|
30
|
+
|
31
|
+
If the developer choses the GNU GPL software license, he or she must fulfill
|
32
|
+
the conditions of that license, which includes the obligation to place his
|
33
|
+
or her whole software project under the GNU GPL or a compatible license.
|
34
|
+
See http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
35
|
+
|
36
|
+
If the developer choses the Swiss Ephemeris Professional license,
|
37
|
+
he must follow the instructions as found in http://www.astro.com/swisseph/
|
38
|
+
and purchase the Swiss Ephemeris Professional Edition from Astrodienst
|
39
|
+
and sign the corresponding license contract.
|
40
|
+
|
41
|
+
The License grants you the right to use, copy, modify and redistribute
|
42
|
+
Swiss Ephemeris, but only under certain conditions described in the License.
|
43
|
+
Among other things, the License requires that the copyright notices and
|
44
|
+
this notice be preserved on all copies.
|
45
|
+
|
46
|
+
Authors of the Swiss Ephemeris: Dieter Koch and Alois Treindl
|
47
|
+
|
48
|
+
The authors of Swiss Ephemeris have no control or influence over any of
|
49
|
+
the derived works, i.e. over software or services created by other
|
50
|
+
programmers which use Swiss Ephemeris functions.
|
51
|
+
|
52
|
+
The names of the authors or of the copyright holder (Astrodienst) must not
|
53
|
+
be used for promoting any software, product or service which uses or contains
|
54
|
+
the Swiss Ephemeris. This copyright notice is the ONLY place where the
|
55
|
+
names of the authors can legally appear, except in cases where they have
|
56
|
+
given special permission in writing.
|
57
|
+
|
58
|
+
The trademarks 'Swiss Ephemeris' and 'Swiss Ephemeris inside' may be used
|
59
|
+
for promoting such software, products or services.
|
60
|
+
*/
|
61
|
+
|
62
|
+
/*
|
63
|
+
* move over from swephexp.h
|
64
|
+
*/
|
65
|
+
|
66
|
+
#define SE_VERSION "1.77.00"
|
67
|
+
|
68
|
+
#define J2000 2451545.0 /* 2000 January 1.5 */
|
69
|
+
#define B1950 2433282.42345905 /* 1950 January 0.923 */
|
70
|
+
#define J1900 2415020.0 /* 1900 January 0.5 */
|
71
|
+
|
72
|
+
#define MPC_CERES 1
|
73
|
+
#define MPC_PALLAS 2
|
74
|
+
#define MPC_JUNO 3
|
75
|
+
#define MPC_VESTA 4
|
76
|
+
#define MPC_CHIRON 2060
|
77
|
+
#define MPC_PHOLUS 5145
|
78
|
+
|
79
|
+
#define SE_NAME_SUN "Sun"
|
80
|
+
#define SE_NAME_MOON "Moon"
|
81
|
+
#define SE_NAME_MERCURY "Mercury"
|
82
|
+
#define SE_NAME_VENUS "Venus"
|
83
|
+
#define SE_NAME_MARS "Mars"
|
84
|
+
#define SE_NAME_JUPITER "Jupiter"
|
85
|
+
#define SE_NAME_SATURN "Saturn"
|
86
|
+
#define SE_NAME_URANUS "Uranus"
|
87
|
+
#define SE_NAME_NEPTUNE "Neptune"
|
88
|
+
#define SE_NAME_PLUTO "Pluto"
|
89
|
+
#define SE_NAME_MEAN_NODE "mean Node"
|
90
|
+
#define SE_NAME_TRUE_NODE "true Node"
|
91
|
+
#define SE_NAME_MEAN_APOG "mean Apogee"
|
92
|
+
#define SE_NAME_OSCU_APOG "osc. Apogee"
|
93
|
+
#define SE_NAME_INTP_APOG "intp. Apogee"
|
94
|
+
#define SE_NAME_INTP_PERG "intp. Perigee"
|
95
|
+
#define SE_NAME_EARTH "Earth"
|
96
|
+
#define SE_NAME_CERES "Ceres"
|
97
|
+
#define SE_NAME_PALLAS "Pallas"
|
98
|
+
#define SE_NAME_JUNO "Juno"
|
99
|
+
#define SE_NAME_VESTA "Vesta"
|
100
|
+
#define SE_NAME_CHIRON "Chiron"
|
101
|
+
#define SE_NAME_PHOLUS "Pholus"
|
102
|
+
|
103
|
+
|
104
|
+
#define SE_NAME_CUPIDO "Cupido"
|
105
|
+
#define SE_NAME_HADES "Hades"
|
106
|
+
#define SE_NAME_ZEUS "Zeus"
|
107
|
+
#define SE_NAME_KRONOS "Kronos"
|
108
|
+
#define SE_NAME_APOLLON "Apollon"
|
109
|
+
#define SE_NAME_ADMETOS "Admetos"
|
110
|
+
#define SE_NAME_VULKANUS "Vulkanus"
|
111
|
+
#define SE_NAME_POSEIDON "Poseidon"
|
112
|
+
#define SE_NAME_ISIS "Isis"
|
113
|
+
#define SE_NAME_NIBIRU "Nibiru"
|
114
|
+
#define SE_NAME_HARRINGTON "Harrington"
|
115
|
+
#define SE_NAME_NEPTUNE_LEVERRIER "Leverrier"
|
116
|
+
#define SE_NAME_NEPTUNE_ADAMS "Adams"
|
117
|
+
#define SE_NAME_PLUTO_LOWELL "Lowell"
|
118
|
+
#define SE_NAME_PLUTO_PICKERING "Pickering"
|
119
|
+
#define SE_NAME_VULCAN "Vulcan"
|
120
|
+
#define SE_NAME_WHITE_MOON "White Moon"
|
121
|
+
|
122
|
+
/* for delta t: intrinsic tidal acceleration in the mean motion of the moon,
|
123
|
+
* not given in the parameters list of the ephemeris files but computed
|
124
|
+
* by Chapront/Chapront-Touzé/Francou A&A 387 (2002), p. 705.
|
125
|
+
*/
|
126
|
+
#define SE_TIDAL_DE200 (-23.8946)
|
127
|
+
#define SE_TIDAL_DE403 (-25.580) /* was (-25.8) until V. 1.76.2 */
|
128
|
+
#define SE_TIDAL_DE404 (-25.580) /* was (-25.8) until V. 1.76.2 */
|
129
|
+
#define SE_TIDAL_DE405 (-25.826) /* was (-25.7376) until V. 1.76.2 */
|
130
|
+
#define SE_TIDAL_DE406 (-25.826) /* was (-25.7376) until V. 1.76.2 */
|
131
|
+
|
132
|
+
#define SE_TIDAL_26 (-26.0)
|
133
|
+
|
134
|
+
#define SE_TIDAL_DEFAULT SE_TIDAL_DE406
|
135
|
+
|
136
|
+
/*
|
137
|
+
* earlier content
|
138
|
+
*/
|
139
|
+
|
140
|
+
#define PI M_PI /* 3.14159265358979323846, math.h */
|
141
|
+
#define TWOPI (2.0 * PI)
|
142
|
+
|
143
|
+
#define ENDMARK -99
|
144
|
+
|
145
|
+
#define SEI_EPSILON -2
|
146
|
+
#define SEI_NUTATION -1
|
147
|
+
#define SEI_EMB 0
|
148
|
+
#define SEI_EARTH 0
|
149
|
+
#define SEI_SUN 0
|
150
|
+
#define SEI_MOON 1
|
151
|
+
#define SEI_MERCURY 2
|
152
|
+
#define SEI_VENUS 3
|
153
|
+
#define SEI_MARS 4
|
154
|
+
#define SEI_JUPITER 5
|
155
|
+
#define SEI_SATURN 6
|
156
|
+
#define SEI_URANUS 7
|
157
|
+
#define SEI_NEPTUNE 8
|
158
|
+
#define SEI_PLUTO 9
|
159
|
+
#define SEI_SUNBARY 10 /* barycentric sun */
|
160
|
+
#define SEI_ANYBODY 11 /* any asteroid */
|
161
|
+
#define SEI_CHIRON 12
|
162
|
+
#define SEI_PHOLUS 13
|
163
|
+
#define SEI_CERES 14
|
164
|
+
#define SEI_PALLAS 15
|
165
|
+
#define SEI_JUNO 16
|
166
|
+
#define SEI_VESTA 17
|
167
|
+
|
168
|
+
#define SEI_NPLANETS 18
|
169
|
+
|
170
|
+
#define SEI_MEAN_NODE 0
|
171
|
+
#define SEI_TRUE_NODE 1
|
172
|
+
#define SEI_MEAN_APOG 2
|
173
|
+
#define SEI_OSCU_APOG 3
|
174
|
+
#define SEI_INTP_APOG 4
|
175
|
+
#define SEI_INTP_PERG 5
|
176
|
+
|
177
|
+
#define SEI_NNODE_ETC 6
|
178
|
+
|
179
|
+
#define SEI_FLG_HELIO 1
|
180
|
+
#define SEI_FLG_ROTATE 2
|
181
|
+
#define SEI_FLG_ELLIPSE 4
|
182
|
+
#define SEI_FLG_EMBHEL 8 /* TRUE, if heliocentric earth is given
|
183
|
+
* instead of barycentric sun
|
184
|
+
* i.e. bary sun is computed from
|
185
|
+
* barycentric and heliocentric earth */
|
186
|
+
|
187
|
+
#define SEI_FILE_PLANET 0
|
188
|
+
#define SEI_FILE_MOON 1
|
189
|
+
#define SEI_FILE_MAIN_AST 2
|
190
|
+
#define SEI_FILE_ANY_AST 3
|
191
|
+
#define SEI_FILE_FIXSTAR 4
|
192
|
+
|
193
|
+
#if 0
|
194
|
+
#define SEI_FILE_TEST_ENDIAN (97L * 65536L + 98L * 256L + 99L) /*abc*/
|
195
|
+
#endif
|
196
|
+
#define SEI_FILE_TEST_ENDIAN (0x616263L) /* abc*/
|
197
|
+
#define SEI_FILE_BIGENDIAN 0
|
198
|
+
#define SEI_FILE_NOREORD 0
|
199
|
+
#define SEI_FILE_LITENDIAN 1
|
200
|
+
#define SEI_FILE_REORD 2
|
201
|
+
|
202
|
+
#define SEI_FILE_NMAXPLAN 50
|
203
|
+
#define SEI_FILE_EFPOSBEGIN 500
|
204
|
+
|
205
|
+
#define SE_FILE_SUFFIX "se1"
|
206
|
+
|
207
|
+
#define SEI_NEPHFILES 7
|
208
|
+
#define SEI_CURR_FPOS -1
|
209
|
+
|
210
|
+
/* Chiron's orbit becomes chaotic
|
211
|
+
* before 720 AD and after 4606 AD, because of close encounters
|
212
|
+
* with Saturn. Accepting a maximum error of 5 degrees,
|
213
|
+
* the ephemeris is good between the following dates:
|
214
|
+
*/
|
215
|
+
#define CHIRON_START 1958470.5 /* 1.1.650 */
|
216
|
+
#define CHIRON_END 3419437.5 /* 1.1.4650 */
|
217
|
+
|
218
|
+
/* Pholus's orbit is unstable as well, because he sometimes
|
219
|
+
* approaches Saturn.
|
220
|
+
* Accepting a maximum error of 5 degrees,
|
221
|
+
* the ephemeris is good after the following date:
|
222
|
+
*/
|
223
|
+
#define PHOLUS_START 314845.5 /* 1.1.-3850 */
|
224
|
+
|
225
|
+
#define MOSHPLEPH_START 625000.5
|
226
|
+
#define MOSHPLEPH_END 2818000.5
|
227
|
+
#define MOSHLUEPH_START 625000.5
|
228
|
+
#define MOSHLUEPH_END 2818000.5
|
229
|
+
#define MOSHNDEPH_START -254900.5 /* 14 Feb -5410 00:00 ET jul.cal.*/
|
230
|
+
#define MOSHNDEPH_END 3697000.5 /* 11 Dec 5409 00:00 ET, greg. cal */
|
231
|
+
/*
|
232
|
+
#define MOSHPLEPH_START -225000.5
|
233
|
+
#define MOSHPLEPH_END 3600000.5
|
234
|
+
#define MOSHLUEPH_START -225000.5
|
235
|
+
#define MOSHLUEPH_END 3600000.5
|
236
|
+
*/
|
237
|
+
#if FALSE /* Alois commented out, not used anywhere */
|
238
|
+
#define JPLEPH_START 625307.5 /* about -3000 (DE406) */
|
239
|
+
#define JPLEPH_END 2816848.5 /* about 3000 (DE406) */
|
240
|
+
#define SWIEPH_START 625614.927151
|
241
|
+
#define SWIEPH_END 2813641.5
|
242
|
+
#define ALLEPH_START MOSHPLEPH_START
|
243
|
+
#define ALLEPH_END MOSHPLEPH_END
|
244
|
+
#define BEG_YEAR (-3000)
|
245
|
+
#define END_YEAR 3000
|
246
|
+
#endif
|
247
|
+
|
248
|
+
#define MAXORD 40
|
249
|
+
|
250
|
+
#define NCTIES 6.0 /* number of centuries per eph. file */
|
251
|
+
|
252
|
+
#define OK (0)
|
253
|
+
#define ERR (-1)
|
254
|
+
#define NOT_AVAILABLE (-2)
|
255
|
+
#define BEYOND_EPH_LIMITS (-3)
|
256
|
+
|
257
|
+
#define J_TO_J2000 1
|
258
|
+
#define J2000_TO_J -1
|
259
|
+
|
260
|
+
/* we always use Astronomical Almanac constants, if available */
|
261
|
+
#define MOON_MEAN_DIST 384400000.0 /* in m, AA 1996, F2 */
|
262
|
+
#define MOON_MEAN_INCL 5.1453964 /* AA 1996, D2 */
|
263
|
+
#define MOON_MEAN_ECC 0.054900489 /* AA 1996, F2 */
|
264
|
+
/* #define SUN_EARTH_MRAT 328900.561400 Su/(Ea+Mo) AA 2006 K7 */
|
265
|
+
#define SUN_EARTH_MRAT 332946.050895 /* Su / (Ea only) AA 2006 K7 */
|
266
|
+
#define EARTH_MOON_MRAT (1 / 0.0123000383) /* AA 2006, K7 */
|
267
|
+
#if 0
|
268
|
+
#define EARTH_MOON_MRAT 81.30056 /* de406 */
|
269
|
+
#endif
|
270
|
+
#define AUNIT 1.49597870691e+11 /* au in meters, AA 2006 K6 */
|
271
|
+
#define CLIGHT 2.99792458e+8 /* m/s, AA 1996 K6 */
|
272
|
+
#if 0
|
273
|
+
#define HELGRAVCONST 1.32712438e+20 /* G * M(sun), m^3/sec^2, AA 1996 K6 */
|
274
|
+
#endif
|
275
|
+
#define HELGRAVCONST 1.32712440017987e+20 /* G * M(sun), m^3/sec^2, AA 2006 K6 */
|
276
|
+
#define GEOGCONST 3.98600448e+14 /* G * M(earth) m^3/sec^2, AA 1996 K6 */
|
277
|
+
#define KGAUSS 0.01720209895 /* Gaussian gravitational constant K6 */
|
278
|
+
#define SUN_RADIUS (959.63 / 3600 * DEGTORAD) /* Meeus germ. p 391 */
|
279
|
+
#define EARTH_RADIUS 6378136.6 /* AA 2006 K6 */
|
280
|
+
/*#define EARTH_OBLATENESS (1.0/ 298.257223563) * AA 1998 K13 */
|
281
|
+
#define EARTH_OBLATENESS (1.0/ 298.25642) /* AA 2006 K6 */
|
282
|
+
#define EARTH_ROT_SPEED (7.2921151467e-5 * 86400) /* in rad/day, expl. suppl., p 162 */
|
283
|
+
|
284
|
+
#define LIGHTTIME_AUNIT (499.0047838061/3600/24) /* 8.3167 minutes (days), AA 2006 K6 */
|
285
|
+
|
286
|
+
/* node of ecliptic measured on ecliptic 2000 */
|
287
|
+
#define SSY_PLANE_NODE_E2000 (107.582569 * DEGTORAD)
|
288
|
+
/* node of ecliptic measured on solar system rotation plane */
|
289
|
+
#define SSY_PLANE_NODE (107.58883388 * DEGTORAD)
|
290
|
+
/* inclination of ecliptic against solar system rotation plane */
|
291
|
+
#define SSY_PLANE_INCL (1.578701 * DEGTORAD)
|
292
|
+
|
293
|
+
#define KM_S_TO_AU_CTY 21.095 /* km/s to AU/century */
|
294
|
+
#define MOON_SPEED_INTV 0.00005 /* 4.32 seconds (in days) */
|
295
|
+
#define PLAN_SPEED_INTV 0.0001 /* 8.64 seconds (in days) */
|
296
|
+
#define MEAN_NODE_SPEED_INTV 0.001
|
297
|
+
#define NODE_CALC_INTV 0.0001
|
298
|
+
#define NODE_CALC_INTV_MOSH 0.1
|
299
|
+
#define NUT_SPEED_INTV 0.0001
|
300
|
+
#define DEFL_SPEED_INTV 0.0000005
|
301
|
+
|
302
|
+
#define SE_LAPSE_RATE 0.0065 /* deg K / m, for refraction */
|
303
|
+
|
304
|
+
#define square_sum(x) (x[0]*x[0]+x[1]*x[1]+x[2]*x[2])
|
305
|
+
#define dot_prod(x,y) (x[0]*y[0]+x[1]*y[1]+x[2]*y[2])
|
306
|
+
|
307
|
+
#define PNOINT2JPL {J_EARTH, J_MOON, J_MERCURY, J_VENUS, J_MARS, J_JUPITER, J_SATURN, J_URANUS, J_NEPTUNE, J_PLUTO, J_SUN, }
|
308
|
+
|
309
|
+
/* planetary radii in meters */
|
310
|
+
#define NDIAM (SE_VESTA + 1)
|
311
|
+
static const double pla_diam[NDIAM] = {1392000000.0, /* Sun */
|
312
|
+
3476300.0, /* Moon */
|
313
|
+
2439000.0 * 2, /* Mercury */
|
314
|
+
6052000.0 * 2, /* Venus */
|
315
|
+
3397200.0 * 2, /* Mars */
|
316
|
+
71398000.0 * 2, /* Jupiter */
|
317
|
+
60000000.0 * 2, /* Saturn */
|
318
|
+
25400000.0 * 2, /* Uranus */
|
319
|
+
24300000.0 * 2, /* Neptune */
|
320
|
+
2500000.0 * 2, /* Pluto */
|
321
|
+
0, 0, 0, 0, /* nodes and apogees */
|
322
|
+
6378140.0 * 2, /* Earth */
|
323
|
+
0.0, /* Chiron */
|
324
|
+
0.0, /* Pholus */
|
325
|
+
913000.0, /* Ceres */
|
326
|
+
523000.0, /* Pallas */
|
327
|
+
244000.0, /* Juno */
|
328
|
+
501000.0, /* Vesta */
|
329
|
+
};
|
330
|
+
|
331
|
+
|
332
|
+
/* Ayanamsas */
|
333
|
+
struct aya_init {double t0, ayan_t0;};
|
334
|
+
static const struct aya_init ayanamsa[] = {
|
335
|
+
{2433282.5, 24.042044444}, /* 0: Fagan/Bradley (Default) */
|
336
|
+
{J1900, 360 - 337.53953}, /* 1: Lahiri (Robert Hand) */
|
337
|
+
{J1900, 360 - 333.58695}, /* 2: De Luce (Robert Hand) */
|
338
|
+
{J1900, 360 - 338.98556}, /* 3: Raman (Robert Hand) */
|
339
|
+
{J1900, 360 - 341.33904}, /* 4: Ushashashi (Robert Hand) */
|
340
|
+
{J1900, 360 - 337.636111}, /* 5: Krishnamurti (Robert Hand) */
|
341
|
+
{J1900, 360 - 333.0369024}, /* 6: Djwhal Khool; (Graham Dawson)
|
342
|
+
* Aquarius entered on 1 July 2117 */
|
343
|
+
{J1900, 360 - 338.917778}, /* 7: Yukteshwar; (David Cochrane) */
|
344
|
+
{J1900, 360 - 338.634444}, /* 8: JN Bhasin; (David Cochrane) */
|
345
|
+
{1684532.5, -3.36667}, /* 9: Babylonian, Kugler 1 */
|
346
|
+
{1684532.5, -4.76667}, /*10: Babylonian, Kugler 2 */
|
347
|
+
{1684532.5, -5.61667}, /*11: Babylonian, Kugler 3 */
|
348
|
+
{1684532.5, -4.56667}, /*12: Babylonian, Huber */
|
349
|
+
{1673941, -5.079167}, /*13: Babylonian, Mercier;
|
350
|
+
* eta Piscium culminates with zero point */
|
351
|
+
{1684532.5, -4.44088389}, /*14: t0 is defined by Aldebaran at 15 Taurus */
|
352
|
+
{1674484, -9.33333}, /*15: Hipparchos */
|
353
|
+
{1927135.8747793, 0}, /*16: Sassanian */
|
354
|
+
/*{1746443.513, 0}, *17: Galactic Center at 0 Sagittarius */
|
355
|
+
{1746447.518, 0}, /*17: Galactic Center at 0 Sagittarius */
|
356
|
+
{J2000, 0}, /*18: J2000 */
|
357
|
+
{J1900, 0}, /*19: J1900 */
|
358
|
+
{B1950, 0}, /*20: B1950 */
|
359
|
+
};
|
360
|
+
|
361
|
+
#define PLAN_DATA struct plan_data
|
362
|
+
|
363
|
+
/* obliquity of ecliptic */
|
364
|
+
struct epsilon {
|
365
|
+
double teps, eps, seps, ceps; /* jd, eps, sin(eps), cos(eps) */
|
366
|
+
};
|
367
|
+
|
368
|
+
/*
|
369
|
+
extern struct epsilon oec2000;
|
370
|
+
extern struct epsilon oec;
|
371
|
+
*/
|
372
|
+
|
373
|
+
struct plan_data {
|
374
|
+
/* the following data are read from file only once, immediately after
|
375
|
+
* file has been opened */
|
376
|
+
int ibdy; /* internal body number */
|
377
|
+
int32 iflg; /* contains several bit flags describing the data:
|
378
|
+
* SEI_FLG_HELIO: true if helio, false if bary
|
379
|
+
* SEI_FLG_ROTATE: TRUE if coefficients are referred
|
380
|
+
* to coordinate system of orbital plane
|
381
|
+
* SEI_FLG_ELLIPSE: TRUE if reference ellipse */
|
382
|
+
int ncoe; /* # of coefficients of ephemeris polynomial,
|
383
|
+
is polynomial order + 1 */
|
384
|
+
/* where is the segment index on the file */
|
385
|
+
int32 lndx0; /* file position of begin of planet's index */
|
386
|
+
int32 nndx; /* number of index entries on file: computed */
|
387
|
+
double tfstart; /* file contains ephemeris for tfstart thru tfend */
|
388
|
+
double tfend; /* for this particular planet !!! */
|
389
|
+
double dseg; /* segment size (days covered by a polynomial) */
|
390
|
+
/* orbital elements: */
|
391
|
+
double telem; /* epoch of elements */
|
392
|
+
double prot;
|
393
|
+
double qrot;
|
394
|
+
double dprot;
|
395
|
+
double dqrot;
|
396
|
+
double rmax; /* normalisation factor of cheby coefficients */
|
397
|
+
/* in addition, if reference ellipse is used: */
|
398
|
+
double peri;
|
399
|
+
double dperi;
|
400
|
+
double *refep; /* pointer to cheby coeffs of reference ellipse,
|
401
|
+
* size of data is 2 x ncoe */
|
402
|
+
/* unpacked segment information, only updated when a segment is read: */
|
403
|
+
double tseg0, tseg1; /* start and end jd of current segment */
|
404
|
+
double *segp; /* pointer to unpacked cheby coeffs of segment;
|
405
|
+
* the size is 3 x ncoe */
|
406
|
+
int neval; /* how many coefficients to evaluate. this may
|
407
|
+
* be less than ncoe */
|
408
|
+
/* result of most recent data evaluation for this body: */
|
409
|
+
double teval; /* time for which previous computation was made */
|
410
|
+
int32 iephe; /* which ephemeris was used */
|
411
|
+
double x[6]; /* position and speed vectors equatorial J2000 */
|
412
|
+
int32 xflgs; /* hel., light-time, aberr., prec. flags etc. */
|
413
|
+
double xreturn[24]; /* return positions:
|
414
|
+
* xreturn+0 ecliptic polar coordinates
|
415
|
+
* xreturn+6 ecliptic cartesian coordinates
|
416
|
+
* xreturn+12 equatorial polar coordinates
|
417
|
+
* xreturn+18 equatorial cartesian coordinates
|
418
|
+
*/
|
419
|
+
};
|
420
|
+
|
421
|
+
/*
|
422
|
+
* stuff exported from swemplan.c and swemmoon.c
|
423
|
+
* and constants used inside these functions.
|
424
|
+
************************************************************/
|
425
|
+
|
426
|
+
#define STR 4.8481368110953599359e-6 /* radians per arc second */
|
427
|
+
|
428
|
+
/* moon, s. moshmoon.c */
|
429
|
+
extern int swi_mean_node(double jd, double *x, char *serr);
|
430
|
+
extern int swi_mean_apog(double jd, double *x, char *serr);
|
431
|
+
extern int swi_moshmoon(double tjd, AS_BOOL do_save, double *xpm, char *serr) ;
|
432
|
+
extern int swi_moshmoon2(double jd, double *x);
|
433
|
+
extern int swi_intp_apsides(double J, double *pol, int ipli);
|
434
|
+
|
435
|
+
/* planets, s. moshplan.c */
|
436
|
+
extern int swi_moshplan(double tjd, int ipli, AS_BOOL do_save, double *xpret, double *xeret, char *serr);
|
437
|
+
extern int swi_moshplan2(double J, int iplm, double *pobj);
|
438
|
+
extern int swi_osc_el_plan(double tjd, double *xp, int ipl, int ipli, double *xearth, double *xsun, char *serr);
|
439
|
+
extern FILE *swi_fopen(int ifno, char *fname, char *ephepath, char *serr);
|
440
|
+
|
441
|
+
/* nutation */
|
442
|
+
struct nut {
|
443
|
+
double tnut;
|
444
|
+
double nutlo[2]; /* nutation in longitude and obliquity */
|
445
|
+
double snut, cnut; /* sine and cosine of nutation in obliquity */
|
446
|
+
double matrix[3][3];
|
447
|
+
};
|
448
|
+
|
449
|
+
struct plantbl {
|
450
|
+
char max_harmonic[9];
|
451
|
+
char max_power_of_t;
|
452
|
+
signed char *arg_tbl;
|
453
|
+
double *lon_tbl;
|
454
|
+
double *lat_tbl;
|
455
|
+
double *rad_tbl;
|
456
|
+
double distance;
|
457
|
+
};
|
458
|
+
|
459
|
+
struct file_data {
|
460
|
+
char fnam[AS_MAXCH]; /* ephemeris file name */
|
461
|
+
int fversion; /* version number of file */
|
462
|
+
char astnam[50]; /* asteroid name, if asteroid file */
|
463
|
+
int32 sweph_denum; /* DE number of JPL ephemeris, which this file
|
464
|
+
* is derived from. */
|
465
|
+
FILE *fptr; /* ephemeris file pointer */
|
466
|
+
double tfstart; /* file may be used from this date */
|
467
|
+
double tfend; /* through this date */
|
468
|
+
int32 iflg; /* byte reorder flag and little/bigendian flag */
|
469
|
+
short npl; /* how many planets in file */
|
470
|
+
int ipl[SEI_FILE_NMAXPLAN]; /* planet numbers */
|
471
|
+
};
|
472
|
+
|
473
|
+
struct gen_const {
|
474
|
+
double clight,
|
475
|
+
aunit,
|
476
|
+
helgravconst,
|
477
|
+
ratme,
|
478
|
+
sunradius;
|
479
|
+
};
|
480
|
+
|
481
|
+
struct save_positions {
|
482
|
+
int ipl;
|
483
|
+
double tsave;
|
484
|
+
int32 iflgsave;
|
485
|
+
/* position at t = tsave,
|
486
|
+
* in ecliptic polar (offset 0),
|
487
|
+
* ecliptic cartesian (offset 6),
|
488
|
+
* equatorial polar (offset 12),
|
489
|
+
* and equatorial cartesian coordinates (offset 18).
|
490
|
+
* 6 doubles each for position and speed coordinates.
|
491
|
+
*/
|
492
|
+
double xsaves[24];
|
493
|
+
};
|
494
|
+
|
495
|
+
struct node_data {
|
496
|
+
/* result of most recent data evaluation for this body: */
|
497
|
+
double teval; /* time for which last computation was made */
|
498
|
+
int32 iephe; /* which ephemeris was used */
|
499
|
+
double x[6]; /* position and speed vectors equatorial J2000 */
|
500
|
+
int32 xflgs; /* hel., light-time, aberr., prec. flags etc. */
|
501
|
+
double xreturn[24]; /* return positions:
|
502
|
+
* xreturn+0 ecliptic polar coordinates
|
503
|
+
* xreturn+6 ecliptic cartesian coordinates
|
504
|
+
* xreturn+12 equatorial polar coordinates
|
505
|
+
* xreturn+18 equatorial cartesian coordinates
|
506
|
+
*/
|
507
|
+
};
|
508
|
+
|
509
|
+
struct topo_data {
|
510
|
+
double geolon, geolat, geoalt;
|
511
|
+
double teval;
|
512
|
+
double tjd_ut;
|
513
|
+
double xobs[6];
|
514
|
+
};
|
515
|
+
|
516
|
+
struct sid_data {
|
517
|
+
int32 sid_mode;
|
518
|
+
double ayan_t0;
|
519
|
+
double t0;
|
520
|
+
};
|
521
|
+
|
522
|
+
struct swe_data {
|
523
|
+
AS_BOOL ephe_path_is_set;
|
524
|
+
short jpl_file_is_open;
|
525
|
+
FILE *fixfp; /* fixed stars file pointer */
|
526
|
+
char ephepath[AS_MAXCH];
|
527
|
+
char jplfnam[AS_MAXCH];
|
528
|
+
short jpldenum;
|
529
|
+
AS_BOOL geopos_is_set;
|
530
|
+
AS_BOOL ayana_is_set;
|
531
|
+
AS_BOOL is_old_starfile;
|
532
|
+
struct file_data fidat[SEI_NEPHFILES];
|
533
|
+
struct gen_const gcdat;
|
534
|
+
struct plan_data pldat[SEI_NPLANETS];
|
535
|
+
#if 0
|
536
|
+
struct node_data nddat[SEI_NNODE_ETC];
|
537
|
+
#else
|
538
|
+
struct plan_data nddat[SEI_NNODE_ETC];
|
539
|
+
#endif
|
540
|
+
struct save_positions savedat[SE_NPLANETS+1];
|
541
|
+
struct epsilon oec;
|
542
|
+
struct epsilon oec2000;
|
543
|
+
struct nut nut;
|
544
|
+
struct nut nut2000;
|
545
|
+
struct nut nutv;
|
546
|
+
struct topo_data topd;
|
547
|
+
struct sid_data sidd;
|
548
|
+
char astelem[AS_MAXCH * 2];
|
549
|
+
double ast_G;
|
550
|
+
double ast_H;
|
551
|
+
double ast_diam;
|
552
|
+
int i_saved_planet_name;
|
553
|
+
char saved_planet_name[80];
|
554
|
+
};
|
555
|
+
|
556
|
+
extern struct swe_data FAR swed;
|