1 /************************************************************ 2 definitions and constants SWISSEPH 3 4 Authors: Dieter Koch and Alois Treindl, Astrodienst Zurich 5 6 ************************************************************/ 7 /* Copyright (C) 1997 - 2021 Astrodienst AG, Switzerland. All rights reserved. 8 9 License conditions 10 ------------------ 11 12 This file is part of Swiss Ephemeris. 13 14 Swiss Ephemeris is distributed with NO WARRANTY OF ANY KIND. No author 15 or distributor accepts any responsibility for the consequences of using it, 16 or for whether it serves any particular purpose or works at all, unless he 17 or she says so in writing. 18 19 Swiss Ephemeris is made available by its authors under a dual licensing 20 system. The software developer, who uses any part of Swiss Ephemeris 21 in his or her software, must choose between one of the two license models, 22 which are 23 a) GNU Affero General Public License (AGPL) 24 b) Swiss Ephemeris Professional License 25 26 The choice must be made before the software developer distributes software 27 containing parts of Swiss Ephemeris to others, and before any public 28 service using the developed software is activated. 29 30 If the developer choses the AGPL software license, he or she must fulfill 31 the conditions of that license, which includes the obligation to place his 32 or her whole software project under the AGPL or a compatible license. 33 See https://www.gnu.org/licenses/agpl-3.0.html 34 35 If the developer choses the Swiss Ephemeris Professional license, 36 he must follow the instructions as found in http://www.astro.com/swisseph/ 37 and purchase the Swiss Ephemeris Professional Edition from Astrodienst 38 and sign the corresponding license contract. 39 40 The License grants you the right to use, copy, modify and redistribute 41 Swiss Ephemeris, but only under certain conditions described in the License. 42 Among other things, the License requires that the copyright notices and 43 this notice be preserved on all copies. 44 45 Authors of the Swiss Ephemeris: Dieter Koch and Alois Treindl 46 47 The authors of Swiss Ephemeris have no control or influence over any of 48 the derived works, i.e. over software or services created by other 49 programmers which use Swiss Ephemeris functions. 50 51 The names of the authors or of the copyright holder (Astrodienst) must not 52 be used for promoting any software, product or service which uses or contains 53 the Swiss Ephemeris. This copyright notice is the ONLY place where the 54 names of the authors can legally appear, except in cases where they have 55 given special permission in writing. 56 57 The trademarks 'Swiss Ephemeris' and 'Swiss Ephemeris inside' may be used 58 for promoting such software, products or services. 59 */ 60 61 /* 62 * move over from swephexp.h 63 */ 64 65 #define SE_VERSION "2.10" 66 67 #define J2000 2451545.0 /* 2000 January 1.5 */ 68 #define B1950 2433282.42345905 /* 1950 January 0.923 */ 69 #define J1900 2415020.0 /* 1900 January 0.5 */ 70 #define B1850 2396758.2035810 /* 1850 January 16:53 */ 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 /* 123 * earlier content 124 */ 125 126 #define PI M_PI /* 3.14159265358979323846, math.h */ 127 #define TWOPI (2.0 * PI) 128 129 #define ENDMARK -99 130 131 #define SEI_EPSILON -2 132 #define SEI_NUTATION -1 133 #define SEI_EMB 0 134 #define SEI_EARTH 0 135 #define SEI_SUN 0 136 #define SEI_MOON 1 137 #define SEI_MERCURY 2 138 #define SEI_VENUS 3 139 #define SEI_MARS 4 140 #define SEI_JUPITER 5 141 #define SEI_SATURN 6 142 #define SEI_URANUS 7 143 #define SEI_NEPTUNE 8 144 #define SEI_PLUTO 9 145 #define SEI_SUNBARY 10 /* barycentric sun */ 146 #define SEI_ANYBODY 11 /* any asteroid */ 147 #define SEI_CHIRON 12 148 #define SEI_PHOLUS 13 149 #define SEI_CERES 14 150 #define SEI_PALLAS 15 151 #define SEI_JUNO 16 152 #define SEI_VESTA 17 153 154 #define SEI_NPLANETS 18 155 156 #define SEI_MEAN_NODE 0 157 #define SEI_TRUE_NODE 1 158 #define SEI_MEAN_APOG 2 159 #define SEI_OSCU_APOG 3 160 #define SEI_INTP_APOG 4 161 #define SEI_INTP_PERG 5 162 163 #define SEI_NNODE_ETC 6 164 165 #define SEI_FLG_HELIO 1 166 #define SEI_FLG_ROTATE 2 167 #define SEI_FLG_ELLIPSE 4 168 #define SEI_FLG_EMBHEL 8 /* TRUE, if heliocentric earth is given 169 * instead of barycentric sun 170 * i.e. bary sun is computed from 171 * barycentric and heliocentric earth */ 172 173 #define SEI_FILE_PLANET 0 174 #define SEI_FILE_MOON 1 175 #define SEI_FILE_MAIN_AST 2 176 #define SEI_FILE_ANY_AST 3 177 #define SEI_FILE_FIXSTAR 4 178 #define SEI_FILE_PLMOON 5 179 180 #if 0 181 #define SEI_FILE_TEST_ENDIAN (97L * 65536L + 98L * 256L + 99L) /*abc*/ 182 #endif 183 #define SEI_FILE_TEST_ENDIAN (0x616263L) /* abc*/ 184 #define SEI_FILE_BIGENDIAN 0 185 #define SEI_FILE_NOREORD 0 186 #define SEI_FILE_LITENDIAN 1 187 #define SEI_FILE_REORD 2 188 189 #define SEI_FILE_NMAXPLAN 50 190 #define SEI_FILE_EFPOSBEGIN 500 191 192 #define SE_FILE_SUFFIX "se1" 193 194 #define SEI_NEPHFILES 7 195 #define SEI_CURR_FPOS -1 196 #define SEI_NMODELS 8 197 198 #define SEI_ECL_GEOALT_MAX 25000.0 199 #define SEI_ECL_GEOALT_MIN (-500.0) 200 201 /* Chiron's orbit becomes chaotic 202 * before 720 AD and after 4606 AD, because of close encounters 203 * with Saturn. Accepting a maximum error of 5 degrees, 204 * the ephemeris is good between the following dates: 205 */ 206 /*#define CHIRON_START 1958470.5 * 1.1.650 old limit until v. 2.00 */ 207 #define CHIRON_START 1967601.5 /* 1.1.675 */ 208 #define CHIRON_END 3419437.5 /* 1.1.4650 */ 209 210 /* Pholus's orbit is unstable as well, because he sometimes 211 * approaches Saturn. 212 * Accepting a maximum error of 5 degrees, 213 * the ephemeris is good after the following date: 214 */ 215 /* #define PHOLUS_START 314845.5 * 1.1.-3850 old limit until v. 2.00 */ 216 #define PHOLUS_START 640648.5 /* 1.1.-2958 jul */ 217 #define PHOLUS_END 4390617.5 /* 1.1.7309 */ 218 219 #define MOSHPLEPH_START 625000.5 220 #define MOSHPLEPH_END 2818000.5 221 #define MOSHLUEPH_START 625000.5 222 #define MOSHLUEPH_END 2818000.5 223 /*#define MOSHNDEPH_START -254900.5 */ /* 14 Feb -5410 00:00 ET jul.cal.*/ 224 /*#define MOSHNDEPH_END 3697000.5 */ /* 11 Dec 5409 00:00 ET, greg. cal */ 225 #define MOSHNDEPH_START -3100015.5 /* 15 Aug -13200 00:00 ET jul.cal.*/ 226 #define MOSHNDEPH_END 8000016.5 /* 15 Mar 17191 00:00 ET, greg. cal */ 227 /* 228 #define MOSHPLEPH_START -225000.5 229 #define MOSHPLEPH_END 3600000.5 230 #define MOSHLUEPH_START -225000.5 231 #define MOSHLUEPH_END 3600000.5 232 */ 233 #define JPL_DE431_START -3027215.5 234 #define JPL_DE431_END 7930192.5 235 236 #if FALSE /* Alois commented out, not used anywhere */ 237 #define JPLEPH_START 625307.5 /* about -3000 (DE406) */ 238 #define JPLEPH_END 2816848.5 /* about 3000 (DE406) */ 239 #define SWIEPH_START 625614.927151 240 #define SWIEPH_END 2813641.5 241 #define ALLEPH_START MOSHPLEPH_START 242 #define ALLEPH_END MOSHPLEPH_END 243 #define BEG_YEAR (-3000) 244 #define END_YEAR 3000 245 #endif 246 247 #define MAXORD 40 248 249 #define NCTIES 6.0 /* number of centuries per eph. file */ 250 251 #define OK (0) 252 #define ERR (-1) 253 #define NOT_AVAILABLE (-2) 254 #define BEYOND_EPH_LIMITS (-3) 255 256 #define J_TO_J2000 1 257 #define J2000_TO_J -1 258 259 /* we always use Astronomical Almanac constants, if available */ 260 #define MOON_MEAN_DIST 384400000.0 /* in m, AA 1996, F2 */ 261 #define MOON_MEAN_INCL 5.1453964 /* AA 1996, D2 */ 262 #define MOON_MEAN_ECC 0.054900489 /* AA 1996, F2 */ 263 /* #define SUN_EARTH_MRAT 328900.561400 Su/(Ea+Mo) AA 2006 K7 */ 264 #define SUN_EARTH_MRAT 332946.050895 /* Su / (Ea only) AA 2006 K7 */ 265 #define EARTH_MOON_MRAT (1 / 0.0123000383) /* AA 2006, K7 */ 266 #if 0 267 #define EARTH_MOON_MRAT 81.30056907419062 /* de431 */ 268 #endif 269 #if 0 270 #define EARTH_MOON_MRAT 81.30056 /* de406 */ 271 #endif 272 //#define AUNIT 1.49597870691e+11 /* au in meters, AA 2006 K6 */ 273 #define AUNIT 1.49597870700e+11 /* au in meters, DE431 */ 274 #define CLIGHT 2.99792458e+8 /* m/s, AA 1996 K6 / DE431 */ 275 #if 0 276 #define HELGRAVCONST 1.32712438e+20 /* G * M(sun), m^3/sec^2, AA 1996 K6 */ 277 #endif 278 #define HELGRAVCONST 1.32712440017987e+20 /* G * M(sun), m^3/sec^2, AA 2006 K6 */ 279 #define GEOGCONST 3.98600448e+14 /* G * M(earth) m^3/sec^2, AA 1996 K6 */ 280 #define KGAUSS 0.01720209895 /* Gaussian gravitational constant K6 */ 281 #define SUN_RADIUS (959.63 / 3600 * DEGTORAD) /* Meeus germ. p 391 */ 282 #define EARTH_RADIUS 6378136.6 /* AA 2006 K6 */ 283 //#define EARTH_OBLATENESS (1.0/ 298.257223563) /* AA 1998 K13 */ 284 #define EARTH_OBLATENESS (1.0/ 298.25642) /* AA 2006 K6 */ 285 #define EARTH_ROT_SPEED (7.2921151467e-5 * 86400) /* in rad/day, expl. suppl., p 162 */ 286 287 #define LIGHTTIME_AUNIT (499.0047838362/3600.0/24.0) /* 8.3167 minutes (days) */ 288 #define PARSEC_TO_AUNIT 206264.8062471 /* 648000/PI, according to IAU Resolution B2, 2016 */ 289 290 /* node of ecliptic measured on ecliptic 2000 */ 291 #define SSY_PLANE_NODE_E2000 (107.582569 * DEGTORAD) 292 /* node of ecliptic measured on solar system rotation plane */ 293 #define SSY_PLANE_NODE (107.58883388 * DEGTORAD) 294 /* inclination of ecliptic against solar system rotation plane */ 295 #define SSY_PLANE_INCL (1.578701 * DEGTORAD) 296 297 #define KM_S_TO_AU_CTY 21.095 /* km/s to AU/century */ 298 #define MOON_SPEED_INTV 0.00005 /* 4.32 seconds (in days) */ 299 #define PLAN_SPEED_INTV 0.0001 /* 8.64 seconds (in days) */ 300 #define MEAN_NODE_SPEED_INTV 0.001 301 #define NODE_CALC_INTV 0.0001 302 #define NODE_CALC_INTV_MOSH 0.1 303 #define NUT_SPEED_INTV 0.0001 304 #define DEFL_SPEED_INTV 0.0000005 305 306 #define SE_LAPSE_RATE 0.0065 /* deg K / m, for refraction */ 307 308 #define square_sum(x) (x[0]*x[0]+x[1]*x[1]+x[2]*x[2]) 309 #define dot_prod(x,y) (x[0]*y[0]+x[1]*y[1]+x[2]*y[2]) 310 311 #define PNOINT2JPL {J_EARTH, J_MOON, J_MERCURY, J_VENUS, J_MARS, J_JUPITER, J_SATURN, J_URANUS, J_NEPTUNE, J_PLUTO, J_SUN, } 312 313 /* planetary radii in meters */ 314 #define NDIAM (SE_VESTA + 1) 315 static const double pla_diam[NDIAM] = {1392000000.0, /* Sun */ 316 3476300.0, /* Moon */ 317 2439000.0 * 2, /* Mercury */ 318 6052000.0 * 2, /* Venus */ 319 3397200.0 * 2, /* Mars */ 320 71398000.0 * 2, /* Jupiter */ 321 60000000.0 * 2, /* Saturn */ 322 25400000.0 * 2, /* Uranus */ 323 24300000.0 * 2, /* Neptune */ 324 2500000.0 * 2, /* Pluto */ 325 0, 0, 0, 0, /* nodes and apogees */ 326 6378140.0 * 2, /* Earth */ 327 0.0, /* Chiron */ 328 0.0, /* Pholus */ 329 913000.0, /* Ceres */ 330 523000.0, /* Pallas */ 331 244000.0, /* Juno */ 332 501000.0, /* Vesta */ 333 }; 334 335 336 /* Ayanamsas 337 * For each ayanamsa, there are the following values: 338 * t0 epoch of ayanamsa, TDT (can be ET or UT) 339 * ayan_t0 ayanamsa value at epoch 340 * t0_is_UT true, if t0 is UT 341 * prec_offset is the precession model for which the ayanamsha 342 * has to be corrected by adding/subtracting a constant offset. 343 * 0, if no correction is needed 344 * -1, if correction is unclear or has not been investigated 345 * and therefore is not applied 346 */ 347 struct aya_init {double t0; 348 double ayan_t0; 349 AS_BOOL t0_is_UT; 350 int prec_offset;}; 351 static const struct aya_init ayanamsa[] = { 352 /* 0: Fagan/Bradley (Default) 353 "The American Sidereal Ephemeris, 1976-2000" (Astro Computing Services, 1981) 354 states on S.V.P. ("Synetic Vernal Point"): 355 "The S.V.P. is the Sidereal longitude of the Vernal Equinox (the 356 Tropical zero-point) in the Fagan-Bradley school of Western Sidereal 357 astrology. It was determined empirically, its mean value being defined 358 as 335°57'28".64 for the epoch 1950.0." 359 Fagan/Firebrace, "Primer of Sidereal Astrology", p. 13: 360 "It was during 1957 that Garth Allen .... experimenting ... But when 361 progressed for the dates of the calamities, all were found by him to be 362 slightly out, the mean error being equivalent to an increase of 0°06'05" 363 in the then-adopted sidereal longitude of the vernal point, determined 364 from Spica in 29 Virgo (i.e. 29°06'05" Virgo; D.K.), and the proper motion 365 having been allowed for. In short, for the epoch 1950.0 he proposed as the 366 mean longitude of the vernal point 335°57'28.64", proper motion being 367 disregarded." 368 If "1950.0" means the standard epoch B1950 = JD 2433282.423, and based 369 on the then-used precession model of Newcomb, this ayanamsha leads to 370 a true position of 29°06'05.965" Virgo, based on Hipparcos position of 371 the star. */ 372 {2433282.42346, 24.042044444, FALSE, SEMOD_PREC_NEWCOMB}, // 0: Fagan/Bradley 373 /*************************/ 374 /* 1: Standard Lahiri 375 according to program NOVA by Robert Hand: 376 {J1900, 360 - 337.53953}, 377 This corresponds to an ayanamsha 22°27'37.69 as given in 378 Indian Ephemeris and Nautical Almanac" 1965, p. 459. 379 Note, however, this value should only with a precession formula 380 where T is measured in tropical centuries. Swiss Ephemeris always 381 uses Julian centuries. 382 The following definition is according to: 383 Calendar Reform Committee 1956; the subtracted value is nutation: 384 {2435553.5, 23.25 - 0.00464207, FALSE}, 385 Lahiri (derived from: Indian Astronomical Ephemeris 1989, p. 556; 386 the subtracted value is nutation, according to Wahr 1980) */ 387 {2435553.5, 23.250182778 - 0.004658035, FALSE, SEMOD_PREC_IAU_1976}, // 1: Lahiri 388 /*************************/ 389 /* 2: Robert DeLuce (Constellational Astrology ... p. 5; 390 birth of Jesus assumed on 1 Jan 1 BC (= 0) jul., 391 based on Newcomb precession. 392 {J1900, 360 - 333.58695, FALSE, 0}, 393 Ayanamsha was corrected with SE 2.09 as follows: 394 Started at zero ayanamsha epoch with value 0 and 395 run with standard precession. 396 This makes a difference of 22" compared with previous version: */ 397 {1721057.5, 0, TRUE, 0}, // 2: DeLuce 398 /*************************/ 399 /* 3: B.V. Raman (Robert Hand) 400 See B.V. Raman, "Hindu Predictive Astrology" (1938, Introduction), 401 pp. 279, 287. 402 This ayanamsha is apparently not based on a valid precession theory (e.g. 403 Newcomb). We cannot reproduce precisely the ayanamsha values on p. 287. */ 404 {J1900, 360 - 338.98556, FALSE, SEMOD_PREC_NEWCOMB}, // 3: Raman 405 /*************************/ 406 /* 4: Usha/Shashi (Robert Hand) 407 Usha and Shashi, "Hindu Astrological Calculations" (1978, 408 Sagar Publications, New Delhi). 409 We do not have this book. */ 410 {J1900, 360 - 341.33904, FALSE, -1}, // 4: Usha/Shashi 411 /*************************/ 412 /* 5: Krishnamurti (Robert Hand) 413 K.S. Krishnamurti, "Reader 1", pp. 55-59. 414 Autor does not give precise information. Zero ayanamsha year is said to 415 be 291 CE, and there is an ayanamsha table with arc min precision for 416 1840 to 2000 on p. 58. 417 This ayanamsha reproduces the table quite well, if 1 Jan of each year 418 is taken. (Turn off Newcomb precession in order to verify.) 419 However, D. Senthilathiban believes the values are given for the date 420 of sidereal Aries ingress of each year. ("Study of KP Ayanamsa with 421 Modern Precession Theories", pp. 126f. */ 422 {J1900, 360 - 337.636111, FALSE, SEMOD_PREC_NEWCOMB}, // 5: Krishnamurti 423 /*************************/ 424 /* 6: Djwhal Khool (Graham Dawson), 425 "Channeled" information: Aquarius ingress of VP on 1 July 2117 426 See Philipp Lindsay, “The Beginning of the Age of Aquarius: 2,117 A.D.”, 427 http://esotericastrologer.org/newsletters/the-age-of-aquarius-ray-and-zodiac-cycles/ */ 428 /*************************/ 429 {J1900, 360 - 333.0369024, FALSE, 0}, // 6: Djwhal Khool 430 /* 7: Shri Yukteshwar; (David Cochrane) 431 This ayanamsha seems to be wrong. 432 Swami Sri Yukteswar, "The Holy Science", 1920 (1949, 1957 and 1977, 433 partly revised), Yogoda Satsanga Society of India. 434 Ayanamsha on the spring equinox 1893 was 20°54'36" (1894 according to 435 the revised edition of 1977) At the same time he believed that this was the 436 distance of the spring equinox from the star Revati, which he put at the 437 initial point of Aries. Unfortunately, this is wrong, because on that date 438 Revati was actually 18°23' away from the vernal point. The error is 439 explained from the fact that Yukteshwar used the zero ayanamsha year 499 CE 440 and an inaccurate Suryasiddhantic precession rate of 360°/24'000 years = 54 441 arcsec/year. It is obvious that Yukteshwar actually intended an ayanamsha 442 that starts at the star Revati. */ 443 {J1900, 360 - 338.917778, FALSE, -1}, // 7: Shri Yukteshwar 444 //{2412543.5, 20.91, TRUE, -1}, // 7: Shri Yukteshwar; (Holy Science, p. xx) 445 /*************************/ 446 /* 8: J.N. Bhasin; (David Cochrane) 447 We don't have any sources or detailed information about this ayanamsha. */ 448 {J1900, 360 - 338.634444, FALSE, -1}, // Bhasin 449 /*************************/ 450 /* 14 Sept. 2018: the following three ayanamshas have been wrong for 451 many years */ 452 /* 9 - 11: Babylonian, Kugler */ 453 {1684532.5, -5.66667, TRUE, -1}, /* 9: Babylonian, Kugler 1 */ 454 {1684532.5, -4.26667, TRUE, -1}, /* 10: Babylonian, Kugler 2 */ 455 {1684532.5, -3.41667, TRUE, -1}, /* 11: Babylonian, Kugler 3 */ 456 /*************************/ 457 /* 12: Babylonian, Huber 458 P. Huber, "Über den Nullpunkt der babylonischen Ekliptik", in: Centaurus 459 1958, 5, p. 192-208. 460 This ayanamsha had a wrong initial value until 14 Sept. 2018. */ 461 {1684532.5, -4.46667, TRUE, -1}, // 12: Baylonian, Huber 462 /*************************/ 463 /* 13: Babylonian, Mercier; eta Piscium culminates with zero point */ 464 {1673941, -5.079167, TRUE, -1}, // 13: Babylonian, Mercier 465 /*************************/ 466 /* 14: t0 is defined by Aldebaran at 15 Taurus in year -100 */ 467 {1684532.5, -4.44138598, TRUE, 0}, 468 /*************************/ 469 /* 15: Hipparchos */ 470 {1674484.0, -9.33333, TRUE, -1}, // 15: Hipparchos 471 /*************************/ 472 /* 16: Sassanian */ 473 {1927135.8747793, 0, TRUE, -1}, // 16: Sassanian 474 /*************************/ 475 /* 17: Galactic Center at 0 Sagittarius */ 476 {0, 0, FALSE, 0}, // 17: Galactic Center at 0 Sagittarius 477 /*************************/ 478 /* 18: J2000 */ 479 {J2000, 0, FALSE, 0}, /* 18: J2000 */ 480 /*************************/ 481 /* 19: J1900 */ 482 {J1900, 0, FALSE, 0}, /* 19: J1900 */ 483 /*************************/ 484 /* 20: B1950 */ 485 {B1950, 0, FALSE, 0}, /* 20: B1950 */ 486 /*************************/ 487 /* 21: Suryasiddhanta, assuming ingress of mean Sun into Aries at point of mean 488 equinox of date on 21.3.499, near noon, Ujjain (75.7684565 E) 489 = 7:30:31.57 UT = 12:33:36 LMT*/ 490 {1903396.8128654, 0, TRUE, 0}, // 21: 491 /*************************/ 492 /* 22: Suryasiddhanta, assuming ingress of mean Sun into Aries at true position 493 of mean Sun at same epoch */ 494 {1903396.8128654,-0.21463395, TRUE, 0}, // 22: 495 /*************************/ 496 /* 23: Aryabhata, same date, but UT 6:56:55.57 analogous to 21 */ 497 {1903396.7895321, 0, TRUE, 0}, // 23: 498 /*************************/ 499 /* 24: Aryabhata, analogous 22 */ 500 {1903396.7895321,-0.23763238, TRUE, 0}, // 24: 501 /*************************/ 502 /* 25: Suryasiddhanta, Revati/zePsc at polar long. 359°50'*/ 503 {1903396.8128654,-0.79167046, TRUE, 0}, // 25: 504 /*************************/ 505 /* 26: Suryasiddhanta, Citra/Spica at polar long. 180° */ 506 {1903396.8128654, 2.11070444, TRUE, 0}, // 26: 507 /*************************/ 508 /* 27: True Citra (Spica exactly at 0 Libra) */ 509 {0, 0, FALSE, 0}, // 27: True Citra 510 /*************************/ 511 /* 28: True Revati (zeta Psc exactly at 29°50' Pisces) */ 512 {0, 0, FALSE, 0}, // 28: True Revati 513 /*************************/ 514 /* 29: True Pushya (delta Cnc exactly a 16 Cancer */ 515 {0, 0, FALSE, 0}, // 29: True Pushya 516 /*************************/ 517 /* 30: R. Gil Brand; Galactic Center at golden section between 0 Sco and 0 Aqu; 518 note: 0° Aqu/Leo is the symmetric axis of rulerships */ 519 {0, 0, FALSE, 0}, // 30: Gil Brand 520 /*************************/ 521 /* 31: Galactic Equator IAU 1958, i.e. galactic/ecliptic intersection point 522 based on galactic coordinate system */ 523 {0, 0, FALSE, 0}, // 31: GE IAU 1958 524 /*************************/ 525 /* 32: Galactic Equator True, i.e. galactic/ecliptic intersection point based 526 on the galactic pole as given in: Liu/Zhu/Zhang, „Reconsidering the 527 galactic coordinate system“, A & A No. AA2010, Oct. 2010 */ 528 {0, 0, FALSE, 0}, // 32: GE true 529 /*************************/ 530 /* 33: Galactic Equator Mula, i.e. galactic/ecliptic intersection point in the 531 middle of lunar mansion Mula */ 532 {0, 0, FALSE, 0}, // 33: GE Mula 533 /*************************/ 534 /* 34: Skydram/Galactic Alignment (R. Mardyks); autumn equinox aligned with 535 Galactic Equator/Pole */ 536 {2451079.734892000, 30, FALSE, 0}, // 34: Skydram/Mardyks 537 /*************************/ 538 /* 35: Chandra Hari */ 539 {0, 0, FALSE, 0}, // 35: Chandra Hari 540 /*************************/ 541 /* 36: Dhruva Galactic Centre Middle of Mula (Ernst Wilhelm) */ 542 {0, 0, FALSE, 0}, // 36: Ernst Wilhelm 543 /*************************/ 544 /* 37: Kali 3623 = 522 CE, Ujjain (75.7684565), based on Kali midnight and 545 year length of Suryasiddhanta */ 546 {1911797.740782065, 0, TRUE, 0}, // 36: 0 ayanamsha in year 522 547 /*************************/ 548 /* 38: Babylonian (Britton 2010) 549 John P. Britton, "Studies in Babylonian lunar theory: part III. The 550 introduction of the uniform zodiac", in Arch. Hist. Exact. Sci. 551 (2010)64:617-663, p. 630. */ 552 {1721057.5, -3.2, TRUE, -1}, // 38: Babylonian (Britton 2010) 553 /*************************/ 554 /* 39: Sunil Sheoran ("Vedic") 555 S. Sheoran, "The Science of Time and Timeline of World History", 2017. */ 556 {0, 0, FALSE, 0}, // 39: Sunil Sheoran ("Vedic") 557 /*************************/ 558 /* 40: Galactic Center at 0 Capricon (Cochrane) */ 559 {0, 0, FALSE, 0}, // 40: Cochrane 560 /*************************/ 561 /* 41: "Galactic Equatorial" (N.A. Fiorenza) */ 562 {2451544.5, 25.0, TRUE, 0}, // 41: N.A. Fiorenza */ 563 /*************************/ 564 /* 42: Vettius Valens (Moon; derived from Holden 1995 p. 12 for epoch of Valens 565 1 Jan. 150 CE julian) */ 566 {1775845.5, -2.9422, TRUE, -1}, // 42: Vettius Valens 567 /*************************/ 568 /* 43: Lahiri (1940), book "Panchanga darpan": 569 22°26'45".50 + 50".25748T + 0".00011115T^2 */ 570 {J1900, 22.44597222, FALSE, SEMOD_PREC_NEWCOMB}, // 43: Lahiri (1940) 571 /*************************/ 572 /* 44: Lahiri (VP285), mean sun at 360° in 285CE; epoch for mean sun at 0 acc. 573 to Simon 1994, corrected for Vondrak precession 574 (Preface to Lahiri's "Indian Ephemeris" 1980) */ 575 {1825235.2458513028, 0.0, FALSE, 0}, // 44: Lahiri VP285 (1980) 576 /*************************/ 577 /* 45: Krishnamurti from mean equinox 291, based on Newcomb precession, 578 according to D. Senthilathiban, "Study of KP Ayanamsa with Modern 579 Precession Theories" (2019), but using precession Vondrak 2011 and 580 correction base on Newcomb precession. */ 581 //{1827424.752255678, 0.0, FALSE, SEMOD_PREC_NEWCOMB}, // 45: Krishnamurti VP291 582 {1827424.752255678, 0.0, FALSE, 0}, // 45: Krishnamurti VP291 583 /*************************/ 584 /* 46: Lahiri original: Calendar Reform Committee 1956, 585 before the correction by 0.658" in IAE 1985. 586 The subtracted value is nutation according to Woolard 1953. 587 However, nutation Woolard was used by IENA/IAE only from 1960 on, 588 so this value is not correct. In order to reproduce mean ayanamshas 589 of IENA >=1960, we could choose 23.25 - 0.00464207 + 0.07 / 3600.0 590 as initial value in 1956. However this will not help to reproduce 591 true ayanamshas. A deviation of around 0.1" remains, 592 for unknown reasons. The difference between Lahiri (1) and 593 Lahiri ICRC (45) amounts to 1.1". */ 594 {2435553.5, 23.25 - 0.00464207, FALSE, SEMOD_PREC_NEWCOMB}, 595 /*************************/ 596 /*{2061539.789532065, 6.83333333, TRUE, -1}, *41: Manjula's Laghumanasa, 10 March 932, 12 PM LMT Ujjain (75.7684565 E), ayanamsha = 6°50' */ 597 /* */ 598 {J1900, 0, FALSE, -1}, /*46: - */ 599 }; 600 601 #define PLAN_DATA struct plan_data 602 603 /* obliquity of ecliptic */ 604 struct epsilon { 605 double teps, eps, seps, ceps; /* jd, eps, sin(eps), cos(eps) */ 606 }; 607 608 /* 609 extern struct epsilon oec2000; 610 extern struct epsilon oec; 611 */ 612 613 struct plan_data { 614 /* the following data are read from file only once, immediately after 615 * file has been opened */ 616 int ibdy; /* internal body number */ 617 int32 iflg; /* contains several bit flags describing the data: 618 * SEI_FLG_HELIO: true if helio, false if bary 619 * SEI_FLG_ROTATE: TRUE if coefficients are referred 620 * to coordinate system of orbital plane 621 * SEI_FLG_ELLIPSE: TRUE if reference ellipse */ 622 int ncoe; /* # of coefficients of ephemeris polynomial, 623 is polynomial order + 1 */ 624 /* where is the segment index on the file */ 625 int32 lndx0; /* file position of begin of planet's index */ 626 int32 nndx; /* number of index entries on file: computed */ 627 double tfstart; /* file contains ephemeris for tfstart thru tfend */ 628 double tfend; /* for this particular planet !!! */ 629 double dseg; /* segment size (days covered by a polynomial) */ 630 /* orbital elements: */ 631 double telem; /* epoch of elements */ 632 double prot; 633 double qrot; 634 double dprot; 635 double dqrot; 636 double rmax; /* normalisation factor of cheby coefficients */ 637 /* in addition, if reference ellipse is used: */ 638 double peri; 639 double dperi; 640 double *refep; /* pointer to cheby coeffs of reference ellipse, 641 * size of data is 2 x ncoe */ 642 /* unpacked segment information, only updated when a segment is read: */ 643 double tseg0, tseg1; /* start and end jd of current segment */ 644 double *segp; /* pointer to unpacked cheby coeffs of segment; 645 * the size is 3 x ncoe */ 646 int neval; /* how many coefficients to evaluate. this may 647 * be less than ncoe */ 648 /* result of most recent data evaluation for this body: */ 649 double teval; /* time for which previous computation was made */ 650 int32 iephe; /* which ephemeris was used */ 651 double x[6]; /* position and speed vectors equatorial J2000 */ 652 int32 xflgs; /* hel., light-time, aberr., prec. flags etc. */ 653 double xreturn[24]; /* return positions: 654 * xreturn+0 ecliptic polar coordinates 655 * xreturn+6 ecliptic cartesian coordinates 656 * xreturn+12 equatorial polar coordinates 657 * xreturn+18 equatorial cartesian coordinates 658 */ 659 }; 660 661 /* 662 * stuff exported from swemplan.c and swemmoon.c 663 * and constants used inside these functions. 664 ************************************************************/ 665 666 #define STR 4.8481368110953599359e-6 /* radians per arc second */ 667 668 /* moon, s. moshmoon.c */ 669 extern int swi_mean_node(double jd, double *x, char *serr); 670 extern int swi_mean_apog(double jd, double *x, char *serr); 671 extern int swi_moshmoon(double tjd, AS_BOOL do_save, double *xpm, char *serr) ; 672 extern int swi_moshmoon2(double jd, double *x); 673 extern int swi_intp_apsides(double J, double *pol, int ipli); 674 675 /* planets, s. moshplan.c */ 676 extern int swi_moshplan(double tjd, int ipli, AS_BOOL do_save, double *xpret, double *xeret, char *serr); 677 extern int swi_moshplan2(double J, int iplm, double *pobj); 678 extern int swi_osc_el_plan(double tjd, double *xp, int ipl, int ipli, double *xearth, double *xsun, char *serr); 679 extern FILE *swi_fopen(int ifno, char *fname, char *ephepath, char *serr); 680 extern int32 swi_init_swed_if_start(void); 681 extern int32 swi_set_tid_acc(double tjd_ut, int32 iflag, int32 denum, char *serr); 682 extern int32 swi_get_tid_acc(double tjd_ut, int32 iflag, int32 denum, int32 *denumret, double *tid_acc, char *serr); 683 684 extern int32 swi_get_ayanamsa_ex(double tjd_et, int32 iflag, double *daya, char *serr); 685 extern int32 swi_get_ayanamsa_ex_ut(double tjd_ut, int32 iflag, double *daya, char *serr); 686 extern int32 swi_get_ayanamsa_with_speed(double tjd_et, int32 iflag, double *daya, char *serr); 687 688 extern double swi_armc_to_mc(double armc, double eps); 689 690 extern int32 swi_get_denum(int32 ipli, int32 iflag); 691 692 693 /* nutation */ 694 struct nut { 695 double tnut; 696 double nutlo[2]; /* nutation in longitude and obliquity */ 697 double snut, cnut; /* sine and cosine of nutation in obliquity */ 698 double matrix[3][3]; 699 }; 700 701 struct plantbl { 702 char max_harmonic[9]; 703 char max_power_of_t; 704 signed char *arg_tbl; 705 double *lon_tbl; 706 double *lat_tbl; 707 double *rad_tbl; 708 double distance; 709 }; 710 711 struct file_data { 712 char fnam[AS_MAXCH]; /* ephemeris file name */ 713 int fversion; /* version number of file */ 714 char astnam[50]; /* asteroid name, if asteroid file */ 715 int32 sweph_denum; /* DE number of JPL ephemeris, which this file 716 * is derived from. */ 717 FILE *fptr; /* ephemeris file pointer */ 718 double tfstart; /* file may be used from this date */ 719 double tfend; /* through this date */ 720 int32 iflg; /* byte reorder flag and little/bigendian flag */ 721 short npl; /* how many planets in file */ 722 int ipl[SEI_FILE_NMAXPLAN]; /* planet numbers */ 723 }; 724 725 struct gen_const { 726 double clight, 727 aunit, 728 helgravconst, 729 ratme, 730 sunradius; 731 }; 732 733 struct save_positions { 734 int ipl; 735 double tsave; 736 int32 iflgsave; 737 /* position at t = tsave, 738 * in ecliptic polar (offset 0), 739 * ecliptic cartesian (offset 6), 740 * equatorial polar (offset 12), 741 * and equatorial cartesian coordinates (offset 18). 742 * 6 doubles each for position and speed coordinates. 743 */ 744 double xsaves[24]; 745 }; 746 747 struct node_data { 748 /* result of most recent data evaluation for this body: */ 749 double teval; /* time for which last computation was made */ 750 int32 iephe; /* which ephemeris was used */ 751 double x[6]; /* position and speed vectors equatorial J2000 */ 752 int32 xflgs; /* hel., light-time, aberr., prec. flags etc. */ 753 double xreturn[24]; /* return positions: 754 * xreturn+0 ecliptic polar coordinates 755 * xreturn+6 ecliptic cartesian coordinates 756 * xreturn+12 equatorial polar coordinates 757 * xreturn+18 equatorial cartesian coordinates 758 */ 759 }; 760 761 struct topo_data { 762 double geolon, geolat, geoalt; 763 double teval; 764 double tjd_ut; 765 double xobs[6]; 766 }; 767 768 struct sid_data { 769 int32 sid_mode; 770 double ayan_t0; 771 double t0; 772 AS_BOOL t0_is_UT; 773 }; 774 775 #define SWI_STAR_LENGTH 40 776 struct fixed_star { 777 char skey[SWI_STAR_LENGTH + 2]; // may be prefixed with comma, one char more 778 char starname[SWI_STAR_LENGTH + 1]; 779 char starbayer[SWI_STAR_LENGTH + 1]; 780 char starno[10]; 781 double epoch, ra, de, ramot, demot, radvel, parall, mag; 782 }; 783 784 /* dpsi and deps loaded for 100 years after 1962 */ 785 #define SWE_DATA_DPSI_DEPS 36525 786 787 struct interpol { 788 double tjd_nut0, tjd_nut2; 789 double nut_dpsi0, nut_dpsi1, nut_dpsi2; 790 double nut_deps0, nut_deps1, nut_deps2; 791 }; 792 793 /* if this is changed, then also update initialisation in sweph.c */ 794 struct swe_data { 795 AS_BOOL ephe_path_is_set; 796 AS_BOOL jpl_file_is_open; 797 FILE *fixfp; /* fixed stars file pointer */ 798 char ephepath[AS_MAXCH]; 799 char jplfnam[AS_MAXCH]; 800 int32 jpldenum; 801 int32 last_epheflag; 802 AS_BOOL geopos_is_set; 803 AS_BOOL ayana_is_set; 804 AS_BOOL is_old_starfile; 805 double eop_tjd_beg; 806 double eop_tjd_beg_horizons; 807 double eop_tjd_end; 808 double eop_tjd_end_add; 809 int eop_dpsi_loaded; 810 double tid_acc; 811 AS_BOOL is_tid_acc_manual; 812 AS_BOOL init_dt_done; 813 AS_BOOL swed_is_initialised; 814 AS_BOOL delta_t_userdef_is_set; 815 double delta_t_userdef; 816 double ast_G; 817 double ast_H; 818 double ast_diam; 819 char astelem[AS_MAXCH * 10]; 820 int i_saved_planet_name; 821 char saved_planet_name[80]; 822 //double dpsi[36525]; /* works for 100 years after 1962 */ 823 //double deps[36525]; 824 double *dpsi; 825 double *deps; 826 int32 timeout; 827 int32 astro_models[SEI_NMODELS]; 828 AS_BOOL do_interpolate_nut; 829 struct interpol interpol; 830 struct file_data fidat[SEI_NEPHFILES]; 831 struct gen_const gcdat; 832 struct plan_data pldat[SEI_NPLANETS]; 833 #if 0 834 struct node_data nddat[SEI_NNODE_ETC]; 835 #else 836 struct plan_data nddat[SEI_NNODE_ETC]; 837 #endif 838 struct save_positions savedat[SE_NPLANETS+1]; 839 struct epsilon oec; 840 struct epsilon oec2000; 841 struct nut nut; 842 struct nut nut2000; 843 struct nut nutv; 844 struct topo_data topd; 845 struct sid_data sidd; 846 AS_BOOL n_fixstars_real; // real number of fixed stars in sefstars.txt 847 AS_BOOL n_fixstars_named; // number of fixed stars with tradtional name 848 AS_BOOL n_fixstars_records;// number of fixed stars records in fixed_stars 849 struct fixed_star *fixed_stars; 850 }; 851 852 extern TLS struct swe_data swed; 853