diff --git a/generate/codegen.c b/generate/codegen.c index f28218d9..32f58759 100644 --- a/generate/codegen.c +++ b/generate/codegen.c @@ -33,6 +33,7 @@ #define CG_MAX_LINE_LENGTH 200 #define MAX_DATA_PER_LINE 20 #define IAU_DATA_PER_ROW 11 +#define IAU_DATA_NUM_ROWS 77 #define ADDSOL_DATA_PER_ROW 8 static const double MJD_BASIS = 2400000.5; @@ -831,6 +832,27 @@ static int OptIauPython(cg_context_t *context, const double *data) return 0; } +static int OptIauC(cg_context_t *context, int lnum, const double *data) +{ + int i; + + fprintf(context->outfile, " { { %2.0lf", data[0]); + + for (i=1; i < 5; ++i) + fprintf(context->outfile, ", %2.0lf", data[i]); + + fprintf(context->outfile, " }, { %12.0lf", data[i]); + for (++i; i < 11; ++i) + fprintf(context->outfile, ", %12.0lf", data[i]); + + fprintf(context->outfile, " } }"); + if (lnum != IAU_DATA_NUM_ROWS) + fprintf(context->outfile, ","); + fprintf(context->outfile, "\n"); + + return 0; +} + static int OptIauData(cg_context_t *context) { int error = 1; @@ -844,6 +866,8 @@ static int OptIauData(cg_context_t *context) infile = fopen(filename, "rt"); if (infile == NULL) goto fail; + fprintf(context->outfile, "\n"); + lnum = 0; while (fgets(line, sizeof(line), infile)) { @@ -855,12 +879,18 @@ static int OptIauData(cg_context_t *context) CHECK(OptIauPython(context, data)); break; + case CODEGEN_LANGUAGE_C: + CHECK(OptIauC(context, lnum, data)); + break; + default: - error = LogError(context, "OptIauData: Unsupported language %d", context->language); - goto fail; + CHECK(LogError(context, "OptIauData: Unsupported language %d", context->language)); } } + if (lnum != IAU_DATA_NUM_ROWS) + CHECK(LogError(context, "OptIauData: expected %d rows, found %d\n", IAU_DATA_NUM_ROWS, lnum)); + error = 0; fail: if (infile == NULL) diff --git a/generate/template/astronomy.c b/generate/template/astronomy.c index f8f4bfbd..e8123b9e 100644 --- a/generate/template/astronomy.c +++ b/generate/template/astronomy.c @@ -637,166 +637,15 @@ static void iau2000b(astro_time_t *time) { /* Adapted from the NOVAS C 3.1 function of the same name. */ - static const short int nals_t[77][5] = + struct row_t { - { 0, 0, 0, 0, 1}, - { 0, 0, 2, -2, 2}, - { 0, 0, 2, 0, 2}, - { 0, 0, 0, 0, 2}, - { 0, 1, 0, 0, 0}, - { 0, 1, 2, -2, 2}, - { 1, 0, 0, 0, 0}, - { 0, 0, 2, 0, 1}, - { 1, 0, 2, 0, 2}, - { 0, -1, 2, -2, 2}, - { 0, 0, 2, -2, 1}, - {-1, 0, 2, 0, 2}, - {-1, 0, 0, 2, 0}, - { 1, 0, 0, 0, 1}, - {-1, 0, 0, 0, 1}, - {-1, 0, 2, 2, 2}, - { 1, 0, 2, 0, 1}, - {-2, 0, 2, 0, 1}, - { 0, 0, 0, 2, 0}, - { 0, 0, 2, 2, 2}, - { 0, -2, 2, -2, 2}, - {-2, 0, 0, 2, 0}, - { 2, 0, 2, 0, 2}, - { 1, 0, 2, -2, 2}, - {-1, 0, 2, 0, 1}, - { 2, 0, 0, 0, 0}, - { 0, 0, 2, 0, 0}, - { 0, 1, 0, 0, 1}, - {-1, 0, 0, 2, 1}, - { 0, 2, 2, -2, 2}, - { 0, 0, -2, 2, 0}, - { 1, 0, 0, -2, 1}, - { 0, -1, 0, 0, 1}, - {-1, 0, 2, 2, 1}, - { 0, 2, 0, 0, 0}, - { 1, 0, 2, 2, 2}, - {-2, 0, 2, 0, 0}, - { 0, 1, 2, 0, 2}, - { 0, 0, 2, 2, 1}, - { 0, -1, 2, 0, 2}, - { 0, 0, 0, 2, 1}, - { 1, 0, 2, -2, 1}, - { 2, 0, 2, -2, 2}, - {-2, 0, 0, 2, 1}, - { 2, 0, 2, 0, 1}, - { 0, -1, 2, -2, 1}, - { 0, 0, 0, -2, 1}, - {-1, -1, 0, 2, 0}, - { 2, 0, 0, -2, 1}, - { 1, 0, 0, 2, 0}, - { 0, 1, 2, -2, 1}, - { 1, -1, 0, 0, 0}, - {-2, 0, 2, 0, 2}, - { 3, 0, 2, 0, 2}, - { 0, -1, 0, 2, 0}, - { 1, -1, 2, 0, 2}, - { 0, 0, 0, 1, 0}, - {-1, -1, 2, 2, 2}, - {-1, 0, 2, 0, 0}, - { 0, -1, 2, 2, 2}, - {-2, 0, 0, 0, 1}, - { 1, 1, 2, 0, 2}, - { 2, 0, 0, 0, 1}, - {-1, 1, 0, 1, 0}, - { 1, 1, 0, 0, 0}, - { 1, 0, 2, 0, 0}, - {-1, 0, 2, -2, 1}, - { 1, 0, 0, 0, 2}, - {-1, 0, 0, 1, 0}, - { 0, 0, 2, 1, 2}, - {-1, 0, 2, 4, 2}, - {-1, 1, 0, 1, 1}, - { 0, -2, 2, -2, 1}, - { 1, 0, 2, 2, 1}, - {-2, 0, 2, 2, 2}, - {-1, 0, 0, 0, 2}, - { 1, 1, 2, -2, 2} + int nals[5]; + double cls[6]; }; - static const double cls_t[77][6] = - { - {-172064161.0, -174666.0, 33386.0, 92052331.0, 9086.0, 15377.0}, - { -13170906.0, -1675.0, -13696.0, 5730336.0, -3015.0, -4587.0}, - { -2276413.0, -234.0, 2796.0, 978459.0, -485.0, 1374.0}, - { 2074554.0, 207.0, -698.0, -897492.0, 470.0, -291.0}, - { 1475877.0, -3633.0, 11817.0, 73871.0, -184.0, -1924.0}, - { -516821.0, 1226.0, -524.0, 224386.0, -677.0, -174.0}, - { 711159.0, 73.0, -872.0, -6750.0, 0.0, 358.0}, - { -387298.0, -367.0, 380.0, 200728.0, 18.0, 318.0}, - { -301461.0, -36.0, 816.0, 129025.0, -63.0, 367.0}, - { 215829.0, -494.0, 111.0, -95929.0, 299.0, 132.0}, - { 128227.0, 137.0, 181.0, -68982.0, -9.0, 39.0}, - { 123457.0, 11.0, 19.0, -53311.0, 32.0, -4.0}, - { 156994.0, 10.0, -168.0, -1235.0, 0.0, 82.0}, - { 63110.0, 63.0, 27.0, -33228.0, 0.0, -9.0}, - { -57976.0, -63.0, -189.0, 31429.0, 0.0, -75.0}, - { -59641.0, -11.0, 149.0, 25543.0, -11.0, 66.0}, - { -51613.0, -42.0, 129.0, 26366.0, 0.0, 78.0}, - { 45893.0, 50.0, 31.0, -24236.0, -10.0, 20.0}, - { 63384.0, 11.0, -150.0, -1220.0, 0.0, 29.0}, - { -38571.0, -1.0, 158.0, 16452.0, -11.0, 68.0}, - { 32481.0, 0.0, 0.0, -13870.0, 0.0, 0.0}, - { -47722.0, 0.0, -18.0, 477.0, 0.0, -25.0}, - { -31046.0, -1.0, 131.0, 13238.0, -11.0, 59.0}, - { 28593.0, 0.0, -1.0, -12338.0, 10.0, -3.0}, - { 20441.0, 21.0, 10.0, -10758.0, 0.0, -3.0}, - { 29243.0, 0.0, -74.0, -609.0, 0.0, 13.0}, - { 25887.0, 0.0, -66.0, -550.0, 0.0, 11.0}, - { -14053.0, -25.0, 79.0, 8551.0, -2.0, -45.0}, - { 15164.0, 10.0, 11.0, -8001.0, 0.0, -1.0}, - { -15794.0, 72.0, -16.0, 6850.0, -42.0, -5.0}, - { 21783.0, 0.0, 13.0, -167.0, 0.0, 13.0}, - { -12873.0, -10.0, -37.0, 6953.0, 0.0, -14.0}, - { -12654.0, 11.0, 63.0, 6415.0, 0.0, 26.0}, - { -10204.0, 0.0, 25.0, 5222.0, 0.0, 15.0}, - { 16707.0, -85.0, -10.0, 168.0, -1.0, 10.0}, - { -7691.0, 0.0, 44.0, 3268.0, 0.0, 19.0}, - { -11024.0, 0.0, -14.0, 104.0, 0.0, 2.0}, - { 7566.0, -21.0, -11.0, -3250.0, 0.0, -5.0}, - { -6637.0, -11.0, 25.0, 3353.0, 0.0, 14.0}, - { -7141.0, 21.0, 8.0, 3070.0, 0.0, 4.0}, - { -6302.0, -11.0, 2.0, 3272.0, 0.0, 4.0}, - { 5800.0, 10.0, 2.0, -3045.0, 0.0, -1.0}, - { 6443.0, 0.0, -7.0, -2768.0, 0.0, -4.0}, - { -5774.0, -11.0, -15.0, 3041.0, 0.0, -5.0}, - { -5350.0, 0.0, 21.0, 2695.0, 0.0, 12.0}, - { -4752.0, -11.0, -3.0, 2719.0, 0.0, -3.0}, - { -4940.0, -11.0, -21.0, 2720.0, 0.0, -9.0}, - { 7350.0, 0.0, -8.0, -51.0, 0.0, 4.0}, - { 4065.0, 0.0, 6.0, -2206.0, 0.0, 1.0}, - { 6579.0, 0.0, -24.0, -199.0, 0.0, 2.0}, - { 3579.0, 0.0, 5.0, -1900.0, 0.0, 1.0}, - { 4725.0, 0.0, -6.0, -41.0, 0.0, 3.0}, - { -3075.0, 0.0, -2.0, 1313.0, 0.0, -1.0}, - { -2904.0, 0.0, 15.0, 1233.0, 0.0, 7.0}, - { 4348.0, 0.0, -10.0, -81.0, 0.0, 2.0}, - { -2878.0, 0.0, 8.0, 1232.0, 0.0, 4.0}, - { -4230.0, 0.0, 5.0, -20.0, 0.0, -2.0}, - { -2819.0, 0.0, 7.0, 1207.0, 0.0, 3.0}, - { -4056.0, 0.0, 5.0, 40.0, 0.0, -2.0}, - { -2647.0, 0.0, 11.0, 1129.0, 0.0, 5.0}, - { -2294.0, 0.0, -10.0, 1266.0, 0.0, -4.0}, - { 2481.0, 0.0, -7.0, -1062.0, 0.0, -3.0}, - { 2179.0, 0.0, -2.0, -1129.0, 0.0, -2.0}, - { 3276.0, 0.0, 1.0, -9.0, 0.0, 0.0}, - { -3389.0, 0.0, 5.0, 35.0, 0.0, -2.0}, - { 3339.0, 0.0, -13.0, -107.0, 0.0, 1.0}, - { -1987.0, 0.0, -6.0, 1073.0, 0.0, -2.0}, - { -1981.0, 0.0, 0.0, 854.0, 0.0, 0.0}, - { 4026.0, 0.0, -353.0, -553.0, 0.0, -139.0}, - { 1660.0, 0.0, -5.0, -710.0, 0.0, -2.0}, - { -1521.0, 0.0, 9.0, 647.0, 0.0, 4.0}, - { 1314.0, 0.0, 0.0, -700.0, 0.0, 0.0}, - { -1283.0, 0.0, 0.0, 672.0, 0.0, 0.0}, - { -1331.0, 0.0, 8.0, 663.0, 0.0, 4.0}, - { 1383.0, 0.0, -2.0, -594.0, 0.0, -2.0}, - { 1405.0, 0.0, 4.0, -610.0, 0.0, 2.0}, - { 1290.0, 0.0, 0.0, -556.0, 0.0, 0.0} + static const struct row_t row[77] = + { + $ASTRO_IAU_DATA() }; double t, el, elp, f, d, om, arg, dp, de, sarg, carg; @@ -814,11 +663,11 @@ static void iau2000b(astro_time_t *time) de = 0; for (i=76; i >= 0; --i) { - arg = fmod((nals_t[i][0]*el + nals_t[i][1]*elp + nals_t[i][2]*f + nals_t[i][3]*d + nals_t[i][4]*om), PI2); + arg = fmod((row[i].nals[0]*el + row[i].nals[1]*elp + row[i].nals[2]*f + row[i].nals[3]*d + row[i].nals[4]*om), PI2); sarg = sin(arg); carg = cos(arg); - dp += (cls_t[i][0] + cls_t[i][1] * t) * sarg + cls_t[i][2] * carg; - de += (cls_t[i][3] + cls_t[i][4] * t) * carg + cls_t[i][5] * sarg; + dp += (row[i].cls[0] + row[i].cls[1]*t) * sarg + row[i].cls[2]*carg; + de += (row[i].cls[3] + row[i].cls[4]*t) * carg + row[i].cls[5]*sarg; } time->psi = -0.000135 + (dp * 1.0e-7); diff --git a/source/c/astronomy.c b/source/c/astronomy.c index 2b6f9745..0fa3a4fa 100644 --- a/source/c/astronomy.c +++ b/source/c/astronomy.c @@ -728,166 +728,93 @@ static void iau2000b(astro_time_t *time) { /* Adapted from the NOVAS C 3.1 function of the same name. */ - static const short int nals_t[77][5] = + struct row_t { - { 0, 0, 0, 0, 1}, - { 0, 0, 2, -2, 2}, - { 0, 0, 2, 0, 2}, - { 0, 0, 0, 0, 2}, - { 0, 1, 0, 0, 0}, - { 0, 1, 2, -2, 2}, - { 1, 0, 0, 0, 0}, - { 0, 0, 2, 0, 1}, - { 1, 0, 2, 0, 2}, - { 0, -1, 2, -2, 2}, - { 0, 0, 2, -2, 1}, - {-1, 0, 2, 0, 2}, - {-1, 0, 0, 2, 0}, - { 1, 0, 0, 0, 1}, - {-1, 0, 0, 0, 1}, - {-1, 0, 2, 2, 2}, - { 1, 0, 2, 0, 1}, - {-2, 0, 2, 0, 1}, - { 0, 0, 0, 2, 0}, - { 0, 0, 2, 2, 2}, - { 0, -2, 2, -2, 2}, - {-2, 0, 0, 2, 0}, - { 2, 0, 2, 0, 2}, - { 1, 0, 2, -2, 2}, - {-1, 0, 2, 0, 1}, - { 2, 0, 0, 0, 0}, - { 0, 0, 2, 0, 0}, - { 0, 1, 0, 0, 1}, - {-1, 0, 0, 2, 1}, - { 0, 2, 2, -2, 2}, - { 0, 0, -2, 2, 0}, - { 1, 0, 0, -2, 1}, - { 0, -1, 0, 0, 1}, - {-1, 0, 2, 2, 1}, - { 0, 2, 0, 0, 0}, - { 1, 0, 2, 2, 2}, - {-2, 0, 2, 0, 0}, - { 0, 1, 2, 0, 2}, - { 0, 0, 2, 2, 1}, - { 0, -1, 2, 0, 2}, - { 0, 0, 0, 2, 1}, - { 1, 0, 2, -2, 1}, - { 2, 0, 2, -2, 2}, - {-2, 0, 0, 2, 1}, - { 2, 0, 2, 0, 1}, - { 0, -1, 2, -2, 1}, - { 0, 0, 0, -2, 1}, - {-1, -1, 0, 2, 0}, - { 2, 0, 0, -2, 1}, - { 1, 0, 0, 2, 0}, - { 0, 1, 2, -2, 1}, - { 1, -1, 0, 0, 0}, - {-2, 0, 2, 0, 2}, - { 3, 0, 2, 0, 2}, - { 0, -1, 0, 2, 0}, - { 1, -1, 2, 0, 2}, - { 0, 0, 0, 1, 0}, - {-1, -1, 2, 2, 2}, - {-1, 0, 2, 0, 0}, - { 0, -1, 2, 2, 2}, - {-2, 0, 0, 0, 1}, - { 1, 1, 2, 0, 2}, - { 2, 0, 0, 0, 1}, - {-1, 1, 0, 1, 0}, - { 1, 1, 0, 0, 0}, - { 1, 0, 2, 0, 0}, - {-1, 0, 2, -2, 1}, - { 1, 0, 0, 0, 2}, - {-1, 0, 0, 1, 0}, - { 0, 0, 2, 1, 2}, - {-1, 0, 2, 4, 2}, - {-1, 1, 0, 1, 1}, - { 0, -2, 2, -2, 1}, - { 1, 0, 2, 2, 1}, - {-2, 0, 2, 2, 2}, - {-1, 0, 0, 0, 2}, - { 1, 1, 2, -2, 2} + int nals[5]; + double cls[6]; }; - static const double cls_t[77][6] = - { - {-172064161.0, -174666.0, 33386.0, 92052331.0, 9086.0, 15377.0}, - { -13170906.0, -1675.0, -13696.0, 5730336.0, -3015.0, -4587.0}, - { -2276413.0, -234.0, 2796.0, 978459.0, -485.0, 1374.0}, - { 2074554.0, 207.0, -698.0, -897492.0, 470.0, -291.0}, - { 1475877.0, -3633.0, 11817.0, 73871.0, -184.0, -1924.0}, - { -516821.0, 1226.0, -524.0, 224386.0, -677.0, -174.0}, - { 711159.0, 73.0, -872.0, -6750.0, 0.0, 358.0}, - { -387298.0, -367.0, 380.0, 200728.0, 18.0, 318.0}, - { -301461.0, -36.0, 816.0, 129025.0, -63.0, 367.0}, - { 215829.0, -494.0, 111.0, -95929.0, 299.0, 132.0}, - { 128227.0, 137.0, 181.0, -68982.0, -9.0, 39.0}, - { 123457.0, 11.0, 19.0, -53311.0, 32.0, -4.0}, - { 156994.0, 10.0, -168.0, -1235.0, 0.0, 82.0}, - { 63110.0, 63.0, 27.0, -33228.0, 0.0, -9.0}, - { -57976.0, -63.0, -189.0, 31429.0, 0.0, -75.0}, - { -59641.0, -11.0, 149.0, 25543.0, -11.0, 66.0}, - { -51613.0, -42.0, 129.0, 26366.0, 0.0, 78.0}, - { 45893.0, 50.0, 31.0, -24236.0, -10.0, 20.0}, - { 63384.0, 11.0, -150.0, -1220.0, 0.0, 29.0}, - { -38571.0, -1.0, 158.0, 16452.0, -11.0, 68.0}, - { 32481.0, 0.0, 0.0, -13870.0, 0.0, 0.0}, - { -47722.0, 0.0, -18.0, 477.0, 0.0, -25.0}, - { -31046.0, -1.0, 131.0, 13238.0, -11.0, 59.0}, - { 28593.0, 0.0, -1.0, -12338.0, 10.0, -3.0}, - { 20441.0, 21.0, 10.0, -10758.0, 0.0, -3.0}, - { 29243.0, 0.0, -74.0, -609.0, 0.0, 13.0}, - { 25887.0, 0.0, -66.0, -550.0, 0.0, 11.0}, - { -14053.0, -25.0, 79.0, 8551.0, -2.0, -45.0}, - { 15164.0, 10.0, 11.0, -8001.0, 0.0, -1.0}, - { -15794.0, 72.0, -16.0, 6850.0, -42.0, -5.0}, - { 21783.0, 0.0, 13.0, -167.0, 0.0, 13.0}, - { -12873.0, -10.0, -37.0, 6953.0, 0.0, -14.0}, - { -12654.0, 11.0, 63.0, 6415.0, 0.0, 26.0}, - { -10204.0, 0.0, 25.0, 5222.0, 0.0, 15.0}, - { 16707.0, -85.0, -10.0, 168.0, -1.0, 10.0}, - { -7691.0, 0.0, 44.0, 3268.0, 0.0, 19.0}, - { -11024.0, 0.0, -14.0, 104.0, 0.0, 2.0}, - { 7566.0, -21.0, -11.0, -3250.0, 0.0, -5.0}, - { -6637.0, -11.0, 25.0, 3353.0, 0.0, 14.0}, - { -7141.0, 21.0, 8.0, 3070.0, 0.0, 4.0}, - { -6302.0, -11.0, 2.0, 3272.0, 0.0, 4.0}, - { 5800.0, 10.0, 2.0, -3045.0, 0.0, -1.0}, - { 6443.0, 0.0, -7.0, -2768.0, 0.0, -4.0}, - { -5774.0, -11.0, -15.0, 3041.0, 0.0, -5.0}, - { -5350.0, 0.0, 21.0, 2695.0, 0.0, 12.0}, - { -4752.0, -11.0, -3.0, 2719.0, 0.0, -3.0}, - { -4940.0, -11.0, -21.0, 2720.0, 0.0, -9.0}, - { 7350.0, 0.0, -8.0, -51.0, 0.0, 4.0}, - { 4065.0, 0.0, 6.0, -2206.0, 0.0, 1.0}, - { 6579.0, 0.0, -24.0, -199.0, 0.0, 2.0}, - { 3579.0, 0.0, 5.0, -1900.0, 0.0, 1.0}, - { 4725.0, 0.0, -6.0, -41.0, 0.0, 3.0}, - { -3075.0, 0.0, -2.0, 1313.0, 0.0, -1.0}, - { -2904.0, 0.0, 15.0, 1233.0, 0.0, 7.0}, - { 4348.0, 0.0, -10.0, -81.0, 0.0, 2.0}, - { -2878.0, 0.0, 8.0, 1232.0, 0.0, 4.0}, - { -4230.0, 0.0, 5.0, -20.0, 0.0, -2.0}, - { -2819.0, 0.0, 7.0, 1207.0, 0.0, 3.0}, - { -4056.0, 0.0, 5.0, 40.0, 0.0, -2.0}, - { -2647.0, 0.0, 11.0, 1129.0, 0.0, 5.0}, - { -2294.0, 0.0, -10.0, 1266.0, 0.0, -4.0}, - { 2481.0, 0.0, -7.0, -1062.0, 0.0, -3.0}, - { 2179.0, 0.0, -2.0, -1129.0, 0.0, -2.0}, - { 3276.0, 0.0, 1.0, -9.0, 0.0, 0.0}, - { -3389.0, 0.0, 5.0, 35.0, 0.0, -2.0}, - { 3339.0, 0.0, -13.0, -107.0, 0.0, 1.0}, - { -1987.0, 0.0, -6.0, 1073.0, 0.0, -2.0}, - { -1981.0, 0.0, 0.0, 854.0, 0.0, 0.0}, - { 4026.0, 0.0, -353.0, -553.0, 0.0, -139.0}, - { 1660.0, 0.0, -5.0, -710.0, 0.0, -2.0}, - { -1521.0, 0.0, 9.0, 647.0, 0.0, 4.0}, - { 1314.0, 0.0, 0.0, -700.0, 0.0, 0.0}, - { -1283.0, 0.0, 0.0, 672.0, 0.0, 0.0}, - { -1331.0, 0.0, 8.0, 663.0, 0.0, 4.0}, - { 1383.0, 0.0, -2.0, -594.0, 0.0, -2.0}, - { 1405.0, 0.0, 4.0, -610.0, 0.0, 2.0}, - { 1290.0, 0.0, 0.0, -556.0, 0.0, 0.0} + static const struct row_t row[77] = + { + + { { 0, 0, 0, 0, 1 }, { -172064161, -174666, 33386, 92052331, 9086, 15377 } }, + { { 0, 0, 2, -2, 2 }, { -13170906, -1675, -13696, 5730336, -3015, -4587 } }, + { { 0, 0, 2, 0, 2 }, { -2276413, -234, 2796, 978459, -485, 1374 } }, + { { 0, 0, 0, 0, 2 }, { 2074554, 207, -698, -897492, 470, -291 } }, + { { 0, 1, 0, 0, 0 }, { 1475877, -3633, 11817, 73871, -184, -1924 } }, + { { 0, 1, 2, -2, 2 }, { -516821, 1226, -524, 224386, -677, -174 } }, + { { 1, 0, 0, 0, 0 }, { 711159, 73, -872, -6750, 0, 358 } }, + { { 0, 0, 2, 0, 1 }, { -387298, -367, 380, 200728, 18, 318 } }, + { { 1, 0, 2, 0, 2 }, { -301461, -36, 816, 129025, -63, 367 } }, + { { 0, -1, 2, -2, 2 }, { 215829, -494, 111, -95929, 299, 132 } }, + { { 0, 0, 2, -2, 1 }, { 128227, 137, 181, -68982, -9, 39 } }, + { { -1, 0, 2, 0, 2 }, { 123457, 11, 19, -53311, 32, -4 } }, + { { -1, 0, 0, 2, 0 }, { 156994, 10, -168, -1235, 0, 82 } }, + { { 1, 0, 0, 0, 1 }, { 63110, 63, 27, -33228, 0, -9 } }, + { { -1, 0, 0, 0, 1 }, { -57976, -63, -189, 31429, 0, -75 } }, + { { -1, 0, 2, 2, 2 }, { -59641, -11, 149, 25543, -11, 66 } }, + { { 1, 0, 2, 0, 1 }, { -51613, -42, 129, 26366, 0, 78 } }, + { { -2, 0, 2, 0, 1 }, { 45893, 50, 31, -24236, -10, 20 } }, + { { 0, 0, 0, 2, 0 }, { 63384, 11, -150, -1220, 0, 29 } }, + { { 0, 0, 2, 2, 2 }, { -38571, -1, 158, 16452, -11, 68 } }, + { { 0, -2, 2, -2, 2 }, { 32481, 0, 0, -13870, 0, 0 } }, + { { -2, 0, 0, 2, 0 }, { -47722, 0, -18, 477, 0, -25 } }, + { { 2, 0, 2, 0, 2 }, { -31046, -1, 131, 13238, -11, 59 } }, + { { 1, 0, 2, -2, 2 }, { 28593, 0, -1, -12338, 10, -3 } }, + { { -1, 0, 2, 0, 1 }, { 20441, 21, 10, -10758, 0, -3 } }, + { { 2, 0, 0, 0, 0 }, { 29243, 0, -74, -609, 0, 13 } }, + { { 0, 0, 2, 0, 0 }, { 25887, 0, -66, -550, 0, 11 } }, + { { 0, 1, 0, 0, 1 }, { -14053, -25, 79, 8551, -2, -45 } }, + { { -1, 0, 0, 2, 1 }, { 15164, 10, 11, -8001, 0, -1 } }, + { { 0, 2, 2, -2, 2 }, { -15794, 72, -16, 6850, -42, -5 } }, + { { 0, 0, -2, 2, 0 }, { 21783, 0, 13, -167, 0, 13 } }, + { { 1, 0, 0, -2, 1 }, { -12873, -10, -37, 6953, 0, -14 } }, + { { 0, -1, 0, 0, 1 }, { -12654, 11, 63, 6415, 0, 26 } }, + { { -1, 0, 2, 2, 1 }, { -10204, 0, 25, 5222, 0, 15 } }, + { { 0, 2, 0, 0, 0 }, { 16707, -85, -10, 168, -1, 10 } }, + { { 1, 0, 2, 2, 2 }, { -7691, 0, 44, 3268, 0, 19 } }, + { { -2, 0, 2, 0, 0 }, { -11024, 0, -14, 104, 0, 2 } }, + { { 0, 1, 2, 0, 2 }, { 7566, -21, -11, -3250, 0, -5 } }, + { { 0, 0, 2, 2, 1 }, { -6637, -11, 25, 3353, 0, 14 } }, + { { 0, -1, 2, 0, 2 }, { -7141, 21, 8, 3070, 0, 4 } }, + { { 0, 0, 0, 2, 1 }, { -6302, -11, 2, 3272, 0, 4 } }, + { { 1, 0, 2, -2, 1 }, { 5800, 10, 2, -3045, 0, -1 } }, + { { 2, 0, 2, -2, 2 }, { 6443, 0, -7, -2768, 0, -4 } }, + { { -2, 0, 0, 2, 1 }, { -5774, -11, -15, 3041, 0, -5 } }, + { { 2, 0, 2, 0, 1 }, { -5350, 0, 21, 2695, 0, 12 } }, + { { 0, -1, 2, -2, 1 }, { -4752, -11, -3, 2719, 0, -3 } }, + { { 0, 0, 0, -2, 1 }, { -4940, -11, -21, 2720, 0, -9 } }, + { { -1, -1, 0, 2, 0 }, { 7350, 0, -8, -51, 0, 4 } }, + { { 2, 0, 0, -2, 1 }, { 4065, 0, 6, -2206, 0, 1 } }, + { { 1, 0, 0, 2, 0 }, { 6579, 0, -24, -199, 0, 2 } }, + { { 0, 1, 2, -2, 1 }, { 3579, 0, 5, -1900, 0, 1 } }, + { { 1, -1, 0, 0, 0 }, { 4725, 0, -6, -41, 0, 3 } }, + { { -2, 0, 2, 0, 2 }, { -3075, 0, -2, 1313, 0, -1 } }, + { { 3, 0, 2, 0, 2 }, { -2904, 0, 15, 1233, 0, 7 } }, + { { 0, -1, 0, 2, 0 }, { 4348, 0, -10, -81, 0, 2 } }, + { { 1, -1, 2, 0, 2 }, { -2878, 0, 8, 1232, 0, 4 } }, + { { 0, 0, 0, 1, 0 }, { -4230, 0, 5, -20, 0, -2 } }, + { { -1, -1, 2, 2, 2 }, { -2819, 0, 7, 1207, 0, 3 } }, + { { -1, 0, 2, 0, 0 }, { -4056, 0, 5, 40, 0, -2 } }, + { { 0, -1, 2, 2, 2 }, { -2647, 0, 11, 1129, 0, 5 } }, + { { -2, 0, 0, 0, 1 }, { -2294, 0, -10, 1266, 0, -4 } }, + { { 1, 1, 2, 0, 2 }, { 2481, 0, -7, -1062, 0, -3 } }, + { { 2, 0, 0, 0, 1 }, { 2179, 0, -2, -1129, 0, -2 } }, + { { -1, 1, 0, 1, 0 }, { 3276, 0, 1, -9, 0, 0 } }, + { { 1, 1, 0, 0, 0 }, { -3389, 0, 5, 35, 0, -2 } }, + { { 1, 0, 2, 0, 0 }, { 3339, 0, -13, -107, 0, 1 } }, + { { -1, 0, 2, -2, 1 }, { -1987, 0, -6, 1073, 0, -2 } }, + { { 1, 0, 0, 0, 2 }, { -1981, 0, 0, 854, 0, 0 } }, + { { -1, 0, 0, 1, 0 }, { 4026, 0, -353, -553, 0, -139 } }, + { { 0, 0, 2, 1, 2 }, { 1660, 0, -5, -710, 0, -2 } }, + { { -1, 0, 2, 4, 2 }, { -1521, 0, 9, 647, 0, 4 } }, + { { -1, 1, 0, 1, 1 }, { 1314, 0, 0, -700, 0, 0 } }, + { { 0, -2, 2, -2, 1 }, { -1283, 0, 0, 672, 0, 0 } }, + { { 1, 0, 2, 2, 1 }, { -1331, 0, 8, 663, 0, 4 } }, + { { -2, 0, 2, 2, 2 }, { 1383, 0, -2, -594, 0, -2 } }, + { { -1, 0, 0, 0, 2 }, { 1405, 0, 4, -610, 0, 2 } }, + { { 1, 1, 2, -2, 2 }, { 1290, 0, 0, -556, 0, 0 } } + }; double t, el, elp, f, d, om, arg, dp, de, sarg, carg; @@ -905,11 +832,11 @@ static void iau2000b(astro_time_t *time) de = 0; for (i=76; i >= 0; --i) { - arg = fmod((nals_t[i][0]*el + nals_t[i][1]*elp + nals_t[i][2]*f + nals_t[i][3]*d + nals_t[i][4]*om), PI2); + arg = fmod((row[i].nals[0]*el + row[i].nals[1]*elp + row[i].nals[2]*f + row[i].nals[3]*d + row[i].nals[4]*om), PI2); sarg = sin(arg); carg = cos(arg); - dp += (cls_t[i][0] + cls_t[i][1] * t) * sarg + cls_t[i][2] * carg; - de += (cls_t[i][3] + cls_t[i][4] * t) * carg + cls_t[i][5] * sarg; + dp += (row[i].cls[0] + row[i].cls[1]*t) * sarg + row[i].cls[2]*carg; + de += (row[i].cls[3] + row[i].cls[4]*t) * carg + row[i].cls[5]*sarg; } time->psi = -0.000135 + (dp * 1.0e-7); diff --git a/source/python/astronomy.py b/source/python/astronomy.py index 9851e71c..724d8c6b 100644 --- a/source/python/astronomy.py +++ b/source/python/astronomy.py @@ -320,6 +320,7 @@ class _iau2000b: dp = 0 de = 0 + sarg = math.sin(om) carg = math.cos(om) dp += (-172064161.0 - 174666.0*t)*sarg + 33386.0*carg