diff --git a/generate/codegen.c b/generate/codegen.c
index 227fb27a..1c001db4 100644
--- a/generate/codegen.c
+++ b/generate/codegen.c
@@ -1387,12 +1387,26 @@ fail:
typedef struct
{
- double mu; /* mu = G(M+m), where M = Jupiter mass, m = moon mass. */
- double al[2]; /* mean longitude coefficients */
+ double mu; /* mu = G(M+m), where M = Jupiter mass, m = moon mass. */
+ double al[2]; /* mean longitude coefficients */
vsop_series_t a;
vsop_series_t l;
vsop_series_t z;
vsop_series_t zeta;
+}
+jupiter_moon_t;
+
+
+typedef struct
+{
+ /* angles that rotate Jupiter equatorial system to EQJ */
+ double incl;
+ double psi;
+
+ /* a rotation matrix calculated from incl and psi, for the convenience of the code generators. */
+ double rot[3][3];
+
+ jupiter_moon_t moon[NUM_JUPITER_MOONS];
vsop_term_t buffer[MAX_JUPITER_TERMS];
}
jupiter_moon_model_t;
@@ -1419,13 +1433,13 @@ static int ReadFixLine(char *line, size_t size, FILE *infile)
do{if ((nscanned) != (required)) FAIL("LoadJupiterMoonModel(%s line %d): expected %d tokens, found %d\n", filename, lnum, required, nscanned);}while(0)
-static int LoadJupiterMoonModel(jupiter_moon_model_t model[NUM_JUPITER_MOONS], const char *filename)
+static int LoadJupiterMoonModel(const char *filename, jupiter_moon_model_t *model)
{
int error;
FILE *infile;
int lnum;
char line[200];
- int nscanned, check, moon, nterms, tindex, var, next_term_index, read_mean_longitude;
+ int nscanned, check, mindex, nterms, tindex, var, next_term_index, read_mean_longitude;
vsop_series_t *series = NULL;
infile = fopen(filename, "rt");
@@ -1433,7 +1447,7 @@ static int LoadJupiterMoonModel(jupiter_moon_model_t model[NUM_JUPITER_MOONS], c
FAIL("LoadJupiterMoonModel: Cannot open file for read: %s\n", filename);
lnum = 0;
- moon = -1;
+ mindex = -1;
nterms = 0;
tindex = 0;
var = 3;
@@ -1445,9 +1459,33 @@ static int LoadJupiterMoonModel(jupiter_moon_model_t model[NUM_JUPITER_MOONS], c
if (lnum == 19)
{
/* G(M+m), where M = Jupiter mass, m = moon mass. */
- nscanned = sscanf(line, "%lf %lf %lf %lf", &model[0].mu, &model[1].mu, &model[2].mu, &model[3].mu);
+ nscanned = sscanf(line, "%lf %lf %lf %lf", &model->moon[0].mu, &model->moon[1].mu, &model->moon[2].mu, &model->moon[3].mu);
REQUIRE_NSCAN(4);
}
+ else if (lnum == 20)
+ {
+ double cp, sp, ci, si;
+
+ /* read angles that convert Jupiter equatorial coordinates into Earth J2000 equatorial coordinates. */
+ nscanned = sscanf(line, "%lf %lf", &model->psi, &model->incl);
+ REQUIRE_NSCAN(2);
+
+ /* calculate the corresponding rotation matrix. */
+ ci = cos(model->incl);
+ si = sin(model->incl);
+ cp = cos(model->psi);
+ sp = sin(model->psi);
+
+ model->rot[0][0] = +cp;
+ model->rot[1][0] = -sp*ci;
+ model->rot[2][0] = +sp*si;
+ model->rot[0][1] = +sp;
+ model->rot[1][1] = +cp*ci;
+ model->rot[2][1] = -cp*si;
+ model->rot[0][2] = 0.0;
+ model->rot[1][2] = +si;
+ model->rot[2][2] = +ci;
+ }
else if (lnum >= 21)
{
if (tindex < nterms)
@@ -1455,15 +1493,11 @@ static int LoadJupiterMoonModel(jupiter_moon_model_t model[NUM_JUPITER_MOONS], c
if (tindex == 0 && var == 1 && !read_mean_longitude)
{
/* Special case: there is an extra row of mean longitude values here. */
- nscanned = sscanf(line, "%d %lf %lf",
- &check,
- &model[moon].al[0],
- &model[moon].al[1]);
-
- REQUIRE_NSCAN(3);
- if (check != 0)
- FAIL("LoadJupiterMoonModel(%s line %d): invalid check value %d (expected 0 for mean longitude line)\n", filename, lnum, check);
+ nscanned = sscanf(line, "%lf %lf",
+ &model->moon[mindex].al[0],
+ &model->moon[mindex].al[1]);
+ REQUIRE_NSCAN(2);
read_mean_longitude = 1;
}
else
@@ -1491,8 +1525,8 @@ static int LoadJupiterMoonModel(jupiter_moon_model_t model[NUM_JUPITER_MOONS], c
{
/* Start the next moon. */
var = 0;
- ++moon;
- if (moon == NUM_JUPITER_MOONS)
+ ++mindex;
+ if (mindex == NUM_JUPITER_MOONS)
break; /* We are done loading data! (We don't care about the Tchebycheff polynomials.) */
}
else
@@ -1504,10 +1538,10 @@ static int LoadJupiterMoonModel(jupiter_moon_model_t model[NUM_JUPITER_MOONS], c
/* Select which variable corresponds to the value of 'var'. */
switch (var)
{
- case 0: series = &model[moon].a; break;
- case 1: series = &model[moon].l; break;
- case 2: series = &model[moon].z; break;
- case 3: series = &model[moon].zeta; break;
+ case 0: series = &model->moon[mindex].a; break;
+ case 1: series = &model->moon[mindex].l; break;
+ case 2: series = &model->moon[mindex].z; break;
+ case 3: series = &model->moon[mindex].zeta; break;
default:
FAIL("LoadJupiterMoonModel: Invalid var = %d\n", var);
}
@@ -1528,8 +1562,8 @@ static int LoadJupiterMoonModel(jupiter_moon_model_t model[NUM_JUPITER_MOONS], c
}
}
- if (moon != NUM_JUPITER_MOONS)
- FAIL("LoadJupiterMoonModel(%s): only loaded %d moons.\n", filename, moon);
+ if (mindex != NUM_JUPITER_MOONS)
+ FAIL("LoadJupiterMoonModel(%s): only loaded %d moons.\n", filename, mindex);
error = 0;
fail:
@@ -1538,31 +1572,42 @@ fail:
}
-static int JupiterMoons_C(cg_context_t *context, const jupiter_moon_model_t model[NUM_JUPITER_MOONS])
+static int JupiterMoons_C(cg_context_t *context, const jupiter_moon_model_t *model)
{
- int moon, var, i;
+ int mindex, var, i;
const char *moon_name[] = { "Io", "Europa", "Ganymede", "Callisto" };
const char *var_name[] = { "a", "l", "z", "zeta" };
vsop_series_t series[4];
- for (moon = 0; moon < NUM_JUPITER_MOONS; ++moon)
+ fprintf(context->outfile, "static const astro_rotation_t Rotation_JUP_EQJ =\n");
+ fprintf(context->outfile, "{\n");
+ fprintf(context->outfile, " ASTRO_SUCCESS,\n");
+ fprintf(context->outfile, " {\n");
+ fprintf(context->outfile, " { %23.16le, %23.16le, %23.16le },\n", model->rot[0][0], model->rot[0][1], model->rot[0][2]);
+ fprintf(context->outfile, " { %23.16le, %23.16le, %23.16le },\n", model->rot[1][0], model->rot[1][1], model->rot[1][2]);
+ fprintf(context->outfile, " { %23.16le, %23.16le, %23.16le }\n", model->rot[2][0], model->rot[2][1], model->rot[2][2]);
+ fprintf(context->outfile, " }\n");
+ fprintf(context->outfile, "};\n\n");
+
+ for (mindex = 0; mindex < NUM_JUPITER_MOONS; ++mindex)
{
- series[0] = model[moon].a;
- series[1] = model[moon].l;
- series[2] = model[moon].z;
- series[3] = model[moon].zeta;
+ series[0] = model->moon[mindex].a;
+ series[1] = model->moon[mindex].l;
+ series[2] = model->moon[mindex].z;
+ series[3] = model->moon[mindex].zeta;
for (var = 0; var < NUM_JM_VARS; ++var)
{
- fprintf(context->outfile, "static const vsop_term_t jm_%s_%s[] =\n", moon_name[moon], var_name[var]);
+ int nterms = series[var].nterms_total;
+ fprintf(context->outfile, "static const vsop_term_t jm_%s_%s[] =\n", moon_name[mindex], var_name[var]);
fprintf(context->outfile, "{\n");
- for (i = 0; i < series->nterms_total; ++i)
+ for (i = 0; i < nterms; ++i)
{
- const vsop_term_t *term = &series->term[i];
+ const vsop_term_t *term = &series[var].term[i];
fprintf(context->outfile, " { %23.16le, %23.16le, %23.16le }%s\n",
term->amplitude,
term->phase,
term->frequency,
- (i + 1 < series->nterms_total) ? "," : "");
+ (i+1 < nterms) ? "," : "");
}
fprintf(context->outfile, "};\n\n");
}
@@ -1570,35 +1615,35 @@ static int JupiterMoons_C(cg_context_t *context, const jupiter_moon_model_t mode
fprintf(context->outfile, "static jupiter_moon_t JupiterMoonModel[%d] =\n", NUM_JUPITER_MOONS);
fprintf(context->outfile, "{\n");
- for (moon = 0; moon < NUM_JUPITER_MOONS; ++moon)
+ for (mindex = 0; mindex < NUM_JUPITER_MOONS; ++mindex)
{
- series[0] = model[moon].a;
- series[1] = model[moon].l;
- series[2] = model[moon].z;
- series[3] = model[moon].zeta;
- fprintf(context->outfile, " { %0.16le, {%0.16le, %0.16le}", model[moon].mu, model[moon].al[0], model[moon].al[1]);
+ series[0] = model->moon[mindex].a;
+ series[1] = model->moon[mindex].l;
+ series[2] = model->moon[mindex].z;
+ series[3] = model->moon[mindex].zeta;
+ fprintf(context->outfile, " { %0.16le, {%0.16le, %0.16le}", model->moon[mindex].mu, model->moon[mindex].al[0], model->moon[mindex].al[1]);
for (var = 0; var < NUM_JM_VARS; ++var)
- fprintf(context->outfile, ", {%d, jm_%s_%s}", series[var].nterms_total, moon_name[moon], var_name[var]);
- fprintf(context->outfile, " }%s\n", ((moon + 1 < NUM_JUPITER_MOONS) ? "," : ""));
+ fprintf(context->outfile, ", {%d, jm_%s_%s}", series[var].nterms_total, moon_name[mindex], var_name[var]);
+ fprintf(context->outfile, " }%s\n", ((mindex + 1 < NUM_JUPITER_MOONS) ? "," : ""));
}
fprintf(context->outfile, "}");
return 0;
}
-static int JupiterMoons_CSharp(cg_context_t *context, const jupiter_moon_model_t model[NUM_JUPITER_MOONS])
+static int JupiterMoons_CSharp(cg_context_t *context, const jupiter_moon_model_t *model)
{
return LogError(context, "JupiterMoons_CSharp: NOT YET IMPLEMENTED.\n");
}
-static int JupiterMoons_JS(cg_context_t *context, const jupiter_moon_model_t model[NUM_JUPITER_MOONS])
+static int JupiterMoons_JS(cg_context_t *context, const jupiter_moon_model_t *model)
{
return LogError(context, "JupiterMoons_JS: NOT YET IMPLEMENTED.\n");
}
-static int JupiterMoons_Python(cg_context_t *context, const jupiter_moon_model_t model[NUM_JUPITER_MOONS])
+static int JupiterMoons_Python(cg_context_t *context, const jupiter_moon_model_t *model)
{
return LogError(context, "JupiterMoons_Python: NOT YET IMPLEMENTED.\n");
}
@@ -1609,11 +1654,11 @@ static int JupiterMoons(cg_context_t *context)
int error;
jupiter_moon_model_t *model;
- model = calloc(NUM_JUPITER_MOONS, sizeof(jupiter_moon_model_t));
+ model = calloc(1, sizeof(jupiter_moon_model_t));
if (model == NULL)
FAIL("JupiterMoons: memory allocation failure!\n");
- CHECK(LoadJupiterMoonModel(model, "jupiter_moons/fortran/BisL1.2.dat"));
+ CHECK(LoadJupiterMoonModel("jupiter_moons/fortran/BisL1.2.dat", model));
switch (context->language)
{
diff --git a/generate/ctest.c b/generate/ctest.c
index b6842aaf..3430dba0 100644
--- a/generate/ctest.c
+++ b/generate/ctest.c
@@ -3608,9 +3608,14 @@ static int JupiterMoons_CompareStellarium(void)
char line[200];
const char *inFileName = "jupiter_moons/horizons/stellarium.txt";
double prev_tt, tt, pos[3], vel[3];
+ double dx, dy, dz, diff;
int moon, nscanned;
astro_time_t time;
astro_jupiter_moons_t jm;
+ const double pos_tolerance = 1.0e-12;
+ const double vel_tolerance = 1.0e-12;
+
+ memset(&jm, 0, sizeof(jm));
infile = fopen(inFileName, "rt");
if (infile == NULL)
@@ -3624,15 +3629,39 @@ static int JupiterMoons_CompareStellarium(void)
if (lnum == 1) continue; /* ignore header line */
nscanned = sscanf(line, "%lf %d %lf %lf %lf %lf %lf %lf", &tt, &moon, &pos[0], &pos[1], &pos[2], &vel[0], &vel[1], &vel[2]);
if (nscanned != 8)
- FAIL("JupiterMoons_CompareStellarium(%s line %d): error scanning data\n", inFileName, lnum);
+ FAIL("C JupiterMoons_CompareStellarium(%s line %d): error scanning data\n", inFileName, lnum);
+
+ if (moon < 0 || moon > 3)
+ FAIL("C JupiterMoons_CompareStellarium(%s line %d): invalid moon = %d\n", inFileName, lnum, moon);
+
if (tt != prev_tt)
{
/* Calculate all 4 moons for this moment in time. */
prev_tt = tt;
time = AstroTerrestrialTime(tt);
jm = Astronomy_JupiterMoons(time);
- (void)jm;
+ CHECK_STATUS(jm.moon[0]);
+ CHECK_STATUS(jm.moon[1]);
+ CHECK_STATUS(jm.moon[2]);
+ CHECK_STATUS(jm.moon[3]);
}
+
+ DEBUG("C JupiterMoons_CompareStellarium: tt=%6.1lf ref pos=(%20.12le, %20.12le, %20.12le), vel=(%20.12le, %20.12le, %20.12le)\n", tt, pos[0], pos[1], pos[2], vel[0], vel[1], vel[2]);
+ DEBUG(" moon=%d calc pos=(%20.12le, %20.12le, %20.12le), vel=(%20.12le, %20.12le, %20.12le)\n\n", moon, jm.moon[moon].x, jm.moon[moon].y, jm.moon[moon].z, jm.moon[moon].vx, jm.moon[moon].vy, jm.moon[moon].vz);
+
+ dx = V(pos[0] - jm.moon[moon].x);
+ dy = V(pos[1] - jm.moon[moon].y);
+ dz = V(pos[2] - jm.moon[moon].z);
+ diff = sqrt(dx*dx + dy*dy + dz*dz);
+ if (diff > pos_tolerance)
+ FAIL("C JupiterMoons_CompareStellarium(%s line %d): EXCESSIVE POSITION ERROR: diff = %le\n", inFileName, lnum, diff);
+
+ dx = V(vel[0] - jm.moon[moon].vx);
+ dy = V(vel[1] - jm.moon[moon].vy);
+ dz = V(vel[2] - jm.moon[moon].vz);
+ diff = sqrt(dx*dx + dy*dy + dz*dz);
+ if (diff > vel_tolerance)
+ FAIL("C JupiterMoons_CompareStellarium(%s line %d): EXCESSIVE VELOCITY ERROR: diff = %le\n", inFileName, lnum, diff);
}
DEBUG("C JupiterMoons_Stellarium: PASS\n");
diff --git a/generate/jupiter_moons/fortran/L1.2.f b/generate/jupiter_moons/fortran/L1.2.f
index 7ae04e6d..b1c4bb7b 100644
--- a/generate/jupiter_moons/fortran/L1.2.f
+++ b/generate/jupiter_moons/fortran/L1.2.f
@@ -441,10 +441,10 @@
a= T1 ! -819.727638594856D0
b= T2 ! 812.721806990360D0
x=(T/365.25D0-0.5D0*(b+a))/(0.5D0*(b-a))
- if(abs(x).gt.1.d0) then
- write(*,*)'date',T,' out of interval of validity'
- return
- end if
+ if(abs(x).gt.1.d0) then
+ write(*,*)'date',T,' out of interval of validity'
+ return
+ end if
TN(0)=1.D0
TN(1)=x
do it=2,8
@@ -463,42 +463,43 @@
kv=1
s=0.d0
do k=1,nbterm(ks,kv)
- arg=phasc(k,ks,kv)+freqc(k,ks,kv)*T
- s=s+ampl(k,ks,kv)*cos(arg)
- end do
- elem(1)=s
+ arg=phasc(k,ks,kv)+freqc(k,ks,kv)*T
+ s=s+ampl(k,ks,kv)*cos(arg)
+ end do
+ elem(1)=s
kv=2
- s=al(1,ks) +al(2,ks)*T
+ s = al(1,ks) + al(2,ks)*T
do k=1,nbterm(ks,kv)
- arg=phasc(k,ks,kv)+freqc(k,ks,kv)*T
- s=s+ampl(k,ks,kv)*sin(arg)
- end do
- s=mod(s+val(1),pi2)
- if(s.lt.0) s=s+pi2
- elem(2)=s
+ arg=phasc(k,ks,kv)+freqc(k,ks,kv)*T
+ s=s+ampl(k,ks,kv)*sin(arg)
+ end do
+ s=mod(s+val(1),pi2)
+ if(s.lt.0) s=s+pi2
+ elem(2)=s
kv=3
- s1=0.d0
- s2=0.d0
+ s1=0.d0
+ s2=0.d0
do k=1,nbterm(ks,kv)
- arg=phasc(k,ks,kv)+freqc(k,ks,kv)*T
- s1=s1+ampl(k,ks,kv)*cos(arg)
- s2=s2+ampl(k,ks,kv)*sin(arg)
- end do
- elem(3)=s1+val(2)
- elem(4)=s2+val(3)
+ arg=phasc(k,ks,kv)+freqc(k,ks,kv)*T
+ s1=s1+ampl(k,ks,kv)*cos(arg)
+ s2=s2+ampl(k,ks,kv)*sin(arg)
+ end do
+ elem(3)=s1+val(2)
+ elem(4)=s2+val(3)
kv=4
- s1=0.d0
- s2=0.d0
+ s1=0.d0
+ s2=0.d0
do k=1,nbterm(ks,kv)
arg=phasc(k,ks,kv)+freqc(k,ks,kv)*T
s1=s1+ampl(k,ks,kv)*cos(arg)
s2=s2+ampl(k,ks,kv)*sin(arg)
- end do
- elem(5)=s1+val(4)
- elem(6)=s2+val(5)
+ end do
+
+ elem(5)=s1+val(4)
+ elem(6)=s2+val(5)
*
* computing cartesian coordinates from elements
*
@@ -571,7 +572,7 @@
* OMEGA is the longitude of ascending node on Fxy plane
* omega is the argument of pericentre such as
* OMEGA + omega represents the longitude of pericentre
-* and L (= OMEGA+omega+M) représents the mean longitude
+* and L (= OMEGA+omega+M) repr�sents the mean longitude
*
IMPLICIT DOUBLE PRECISION(A-H,O-Z)
PARAMETER(PI2=3.141592653589793D0*2.d0)
diff --git a/generate/template/astronomy.c b/generate/template/astronomy.c
index 8e82e710..0b65d9ae 100644
--- a/generate/template/astronomy.c
+++ b/generate/template/astronomy.c
@@ -345,6 +345,16 @@ static astro_vector_t VecError(astro_status_t status, astro_time_t time)
return vec;
}
+static astro_state_vector_t StateVecError(astro_status_t status, astro_time_t time)
+{
+ astro_state_vector_t vec;
+ vec.x = vec.y = vec.z = NAN;
+ vec.vx = vec.vy = vec.vz = NAN;
+ vec.t = time;
+ vec.status = status;
+ return vec;
+}
+
static astro_spherical_t SphereError(astro_status_t status)
{
astro_spherical_t sphere;
@@ -2329,13 +2339,130 @@ static astro_vector_t CalcPluto(astro_time_t time)
$ASTRO_JUPITER_MOONS();
+static astro_state_vector_t JupiterMoon_elem2pv(astro_time_t time, double mu, double elem[6])
+{
+ /* Translation of FORTRAN subroutine ELEM2PV from: */
+ /* https://ftp.imcce.fr/pub/ephem/satel/galilean/L1/L1.2/ */
+ astro_state_vector_t state;
+ double EE, DE, CE, SE, DLE, RSAM1, ASR, PHI, PSI, X1, Y1, VX1, VY1, F2, P2, Q2, PQ;
+
+ const double A = elem[0];
+ const double AL = elem[1];
+ const double K = elem[2];
+ const double H = elem[3];
+ const double Q = elem[4];
+ const double P = elem[5];
+
+ const double AN = sqrt(mu / (A*A*A));
+
+ EE = AL + K*sin(AL) - H*cos(AL);
+ do
+ {
+ CE = cos(EE);
+ SE = sin(EE);
+ DE = (AL - EE + K*SE - H*CE) / (1.0 - K*CE - H*SE);
+ EE += DE;
+ }
+ while (fabs(DE) >= 1.0e-12);
+
+ CE = cos(EE);
+ SE = sin(EE);
+ DLE = H*CE - K*SE;
+ RSAM1 = -K*CE - H*SE;
+ ASR = 1.0/(1.0 + RSAM1);
+ PHI = sqrt(1.0 - K*K - H*H);
+ PSI = 1.0/(1.0 + PHI);
+ X1 = A*(CE - K - PSI*H*DLE);
+ Y1 = A*(SE - H + PSI*K*DLE);
+ VX1 = AN*ASR*A*(-SE - PSI*H*RSAM1);
+ VY1 = AN*ASR*A*(+CE + PSI*K*RSAM1);
+ F2 = 2.0*sqrt(1.0 - Q*Q - P*P);
+ P2 = 1.0 - 2.0*P*P;
+ Q2 = 1.0 - 2.0*Q*Q;
+ PQ = 2.0*P*Q;
+
+ state.x = X1*P2 + Y1*PQ;
+ state.y = X1*PQ + Y1*Q2;
+ state.z = (Q*Y1 - X1*P)*F2;
+
+ state.vx = VX1*P2 + VY1*PQ;
+ state.vy = VX1*PQ + VY1*Q2;
+ state.vz = (Q*VY1 - VX1*P)*F2;
+
+ state.t = time;
+ state.status = ASTRO_SUCCESS;
+ return state;
+}
+
+static astro_state_vector_t CalcJupiterMoon(astro_time_t time, int mindex)
+{
+ /* This is a translation of FORTRAN code by Duriez, Lainey, and Vienne: */
+ /* https://ftp.imcce.fr/pub/ephem/satel/galilean/L1/L1.2/ */
+
+ astro_state_vector_t state;
+ int k;
+ double arg;
+ double elem[6];
+ const jupiter_moon_t *m = &JupiterMoonModel[mindex];
+ const double t = time.tt + 18262.5; /* t = time since 1950-01-01T00:00:00Z */
+
+ /* Calculate 6 orbital elements at the given time t. */
+
+ elem[0] = 0.0;
+ for (k = 0; k < m->a.nterms; ++k)
+ {
+ arg = m->a.term[k].phase + (t * m->a.term[k].frequency);
+ elem[0] += m->a.term[k].amplitude * cos(arg);
+ }
+
+ elem[1] = m->al[0] + (t * m->al[1]);
+ for (k = 0; k < m->l.nterms; ++k)
+ {
+ arg = m->l.term[k].phase + (t * m->l.term[k].frequency);
+ elem[1] += m->l.term[k].amplitude * sin(arg);
+ }
+ elem[1] = fmod(elem[1], PI2);
+ if (elem[1] < 0.0)
+ elem[1] += PI2;
+
+ elem[2] = elem[3] = 0.0;
+ for (k = 0; k < m->z.nterms; ++k)
+ {
+ arg = m->z.term[k].phase + (t * m->z.term[k].frequency);
+ elem[2] += m->z.term[k].amplitude * cos(arg);
+ elem[3] += m->z.term[k].amplitude * sin(arg);
+ }
+
+ elem[4] = elem[5] = 0.0;
+ for (k = 0; k < m->zeta.nterms; ++k)
+ {
+ arg = m->zeta.term[k].phase + (t * m->zeta.term[k].frequency);
+ elem[4] += m->zeta.term[k].amplitude * cos(arg);
+ elem[5] += m->zeta.term[k].amplitude * sin(arg);
+ }
+
+ /* Convert the oribital elements into position vectors in the Jupiter equatorial system (JUP). */
+ state = JupiterMoon_elem2pv(time, m->mu, elem);
+
+ /* Re-orient position and velocity vectors from Jupiter-equatorial (JUP) to Earth-equatorial in J2000 (EQJ). */
+ return Astronomy_RotateState(Rotation_JUP_EQJ, state);
+}
+
+
/**
- * @brief Calculates positions of Jupiter's largest 4 moons.
+ * @brief Calculates jovicentric positions of Jupiter's largest 4 moons.
*
- * Calculates jovicentric position vectors for Jupiter's
- * moons Io, Europa, Ganymede, and Callisto, at the given date and time.
- * See #astro_jupiter_moons_t for more information about the representation
- * of the position vectors.
+ * Calculates position vectors for Jupiter's moons
+ * Io, Europa, Ganymede, and Callisto, at the given date and time.
+ * The position vectors are jovicentric, meaning their coordinate origin
+ * is the center of Jupiter. Their orientation is the Earth's equatorial
+ * system at the J2000 epoch, called `EQJ`. The vector components
+ * are expressed in astronomical units (AU).
+ *
+ * To convert to heliocentric vectors, call #Astronomy_HelioVector
+ * with `BODY_JUPITER` to get Jupiter's heliocentric position, then
+ * add the jovicentric vectors. Likewise, you can call #Astronomy_GeoVector
+ * with `BODY_JUPITER` to convert to geocentric vectors.
*
* @param time The date and time for which to calculate the position vectors.
* @return Position vectors of Jupiter's largest 4 moons, as described above.
@@ -2343,13 +2470,10 @@ $ASTRO_JUPITER_MOONS();
astro_jupiter_moons_t Astronomy_JupiterMoons(astro_time_t time)
{
astro_jupiter_moons_t jm;
+ int mindex;
- (void)JupiterMoonModel;
-
- jm.moon[0] = VecError(ASTRO_NOT_INITIALIZED, time);
- jm.moon[1] = VecError(ASTRO_NOT_INITIALIZED, time);
- jm.moon[2] = VecError(ASTRO_NOT_INITIALIZED, time);
- jm.moon[3] = VecError(ASTRO_NOT_INITIALIZED, time);
+ for (mindex = 0; mindex < NUM_JUPITER_MOONS; ++mindex)
+ jm.moon[mindex] = CalcJupiterMoon(time, mindex);
return jm;
}
@@ -5889,6 +6013,45 @@ astro_vector_t Astronomy_RotateVector(astro_rotation_t rotation, astro_vector_t
}
+/**
+ * @brief
+ * Applies a rotation to a state vector, yielding a rotated vector.
+ *
+ * This function transforms a state vector in one orientation to a vector
+ * in another orientation.
+ *
+ * @param rotation
+ * A rotation matrix that specifies how the orientation of the vector is to be changed.
+ *
+ * @param state
+ * The state vector whose orientation is to be changed.
+ * Both the position and velocity components are transformed.
+ *
+ * @return
+ * A state vector in the orientation specified by `rotation`.
+ */
+astro_state_vector_t Astronomy_RotateState(astro_rotation_t rotation, astro_state_vector_t state)
+{
+ astro_state_vector_t target;
+
+ if (rotation.status != ASTRO_SUCCESS || state.status != ASTRO_SUCCESS)
+ return StateVecError(ASTRO_INVALID_PARAMETER, state.t);
+
+ target.status = ASTRO_SUCCESS;
+ target.t = state.t;
+
+ target.x = rotation.rot[0][0]*state.x + rotation.rot[1][0]*state.y + rotation.rot[2][0]*state.z;
+ target.y = rotation.rot[0][1]*state.x + rotation.rot[1][1]*state.y + rotation.rot[2][1]*state.z;
+ target.z = rotation.rot[0][2]*state.x + rotation.rot[1][2]*state.y + rotation.rot[2][2]*state.z;
+
+ target.vx = rotation.rot[0][0]*state.vx + rotation.rot[1][0]*state.vy + rotation.rot[2][0]*state.vz;
+ target.vy = rotation.rot[0][1]*state.vx + rotation.rot[1][1]*state.vy + rotation.rot[2][1]*state.vz;
+ target.vz = rotation.rot[0][2]*state.vx + rotation.rot[1][2]*state.vy + rotation.rot[2][2]*state.vz;
+
+ return target;
+}
+
+
/**
* @brief
* Calculates a rotation matrix from equatorial J2000 (EQJ) to ecliptic J2000 (ECL).
diff --git a/source/c/README.md b/source/c/README.md
index 7bf41960..ce264e76 100644
--- a/source/c/README.md
+++ b/source/c/README.md
@@ -822,11 +822,13 @@ Given a rotation matrix that performs some coordinate transform, this function r
### Astronomy_JupiterMoons(time) ⇒ [`astro_jupiter_moons_t`](#astro_jupiter_moons_t)
-**Calculates positions of Jupiter's largest 4 moons.**
+**Calculates jovicentric positions of Jupiter's largest 4 moons.**
-Calculates jovicentric position vectors for Jupiter's moons Io, Europa, Ganymede, and Callisto, at the given date and time. See [`astro_jupiter_moons_t`](#astro_jupiter_moons_t) for more information about the representation of the position vectors.
+Calculates position vectors for Jupiter's moons Io, Europa, Ganymede, and Callisto, at the given date and time. The position vectors are jovicentric, meaning their coordinate origin is the center of Jupiter. Their orientation is the Earth's equatorial system at the J2000 epoch, called `EQJ`. The vector components are expressed in astronomical units (AU).
+
+To convert to heliocentric vectors, call [`Astronomy_HelioVector`](#Astronomy_HelioVector) with `BODY_JUPITER` to get Jupiter's heliocentric position, then add the jovicentric vectors. Likewise, you can call [`Astronomy_GeoVector`](#Astronomy_GeoVector) with `BODY_JUPITER` to convert to geocentric vectors.
@@ -1232,6 +1234,31 @@ Given an altitude angle and a refraction option, calculates the amount of "lift"
Astronomy Engine uses dynamic memory allocation in only one place: it makes calculation of Pluto's orbit more efficient by caching 11 KB segments and recycling them. To force purging this cache and freeing all the dynamic memory, you can call this function at any time. It is always safe to call, although it will slow down the very next calculation of Pluto's position for a nearby time value. Calling this function before your program exits is optional, but it will be helpful for leak-checkers like valgrind.
+---
+
+
+### Astronomy_RotateState(rotation, state) ⇒ [`astro_state_vector_t`](#astro_state_vector_t)
+
+**Applies a rotation to a state vector, yielding a rotated vector.**
+
+
+
+This function transforms a state vector in one orientation to a vector in another orientation.
+
+
+
+**Returns:** A state vector in the orientation specified by `rotation`.
+
+
+
+| Type | Parameter | Description |
+| --- | --- | --- |
+| [`astro_rotation_t`](#astro_rotation_t) | `rotation` | A rotation matrix that specifies how the orientation of the vector is to be changed. |
+| [`astro_state_vector_t`](#astro_state_vector_t) | `state` | The state vector whose orientation is to be changed. Both the position and velocity components are transformed. |
+
+
+
+
---
@@ -2897,13 +2924,13 @@ Returned by the functions [`Astronomy_Illumination`](#Astronomy_Illumination) an
-The [`Astronomy_JupiterMoons`](#Astronomy_JupiterMoons) function returns this struct to report position vectors for Jupiter's largest 4 moons Io, Europa, Ganymede, and Callisto. Each vector is relative to the center of Jupiter and is oriented in the EQJ system (that is, using Earth's equator at the J2000 epoch.) The vector components are expressed in astronomical units (AU).
+The [`Astronomy_JupiterMoons`](#Astronomy_JupiterMoons) function returns this struct to report position and velocity vectors for Jupiter's largest 4 moons Io, Europa, Ganymede, and Callisto. Each vector is relative to the center of Jupiter and is oriented in the EQJ system (that is, using Earth's equator at the J2000 epoch.) The positions are expressed in astronomical units (AU), and the velocities in AU/day.
The following integer constants may be useful for indexing into the `moon` array: [`JM_IO`](#JM_IO), [`JM_EUROPA`](#JM_EUROPA), [`JM_GANYMEDE`](#JM_GANYMEDE), [`JM_CALLISTO`](#JM_CALLISTO).
| Type | Member | Description |
| ---- | ------ | ----------- |
-| [`astro_vector_t`](#astro_vector_t) | `moon` | Jovicentric coordinates of each moon, as described above. |
+| [`astro_state_vector_t`](#astro_state_vector_t) | `moon` | Jovicentric position and velocity of each moon, as described above. |
---
@@ -3062,6 +3089,27 @@ You can create this structure directly, or you can call the convenience function
| `double` | `dist` | Distance in AU. |
+---
+
+
+### `astro_state_vector_t`
+
+**A state vector that contains a position (AU) and velocity (AU/day).**
+
+
+
+| Type | Member | Description |
+| ---- | ------ | ----------- |
+| [`astro_status_t`](#astro_status_t) | `status` | `ASTRO_SUCCESS` if this struct is valid; otherwise an error code. |
+| `double` | `x` | The Cartesian position x-coordinate of the vector in AU. |
+| `double` | `y` | The Cartesian position y-coordinate of the vector in AU. |
+| `double` | `z` | The Cartesian position z-coordinate of the vector in AU. |
+| `double` | `vx` | The Cartesian velocity x-coordinate of the vector in AU/day. |
+| `double` | `vy` | The Cartesian velocity y-coordinate of the vector in AU/day. |
+| `double` | `vz` | The Cartesian velocity z-coordinate of the vector in AU/day. |
+| [`astro_time_t`](#astro_time_t) | `t` | The date and time at which this state vector is valid. |
+
+
---
diff --git a/source/c/astronomy.c b/source/c/astronomy.c
index 1853de89..722cfb44 100644
--- a/source/c/astronomy.c
+++ b/source/c/astronomy.c
@@ -345,6 +345,16 @@ static astro_vector_t VecError(astro_status_t status, astro_time_t time)
return vec;
}
+static astro_state_vector_t StateVecError(astro_status_t status, astro_time_t time)
+{
+ astro_state_vector_t vec;
+ vec.x = vec.y = vec.z = NAN;
+ vec.vx = vec.vy = vec.vz = NAN;
+ vec.t = time;
+ vec.status = status;
+ return vec;
+}
+
static astro_spherical_t SphereError(astro_status_t status)
{
astro_spherical_t sphere;
@@ -3379,6 +3389,16 @@ static astro_vector_t CalcPluto(astro_time_t time)
/*---------------------- begin Jupiter moons ----------------------*/
+static const astro_rotation_t Rotation_JUP_EQJ =
+{
+ ASTRO_SUCCESS,
+ {
+ { 9.9943276533865444e-01, -3.3677107469764142e-02, 0.0000000000000000e+00 },
+ { 3.0395942890628476e-02, 9.0205791235280897e-01, 4.3054338854229507e-01 },
+ { -1.4499455966335291e-02, -4.3029916940910073e-01, 9.0256988127375404e-01 }
+ }
+};
+
static const vsop_term_t jm_Io_a[] =
{
{ 2.8210960212903002e-03, 0.0000000000000000e+00, 0.0000000000000000e+00 },
@@ -3423,128 +3443,84 @@ static const vsop_term_t jm_Io_a[] =
static const vsop_term_t jm_Io_l[] =
{
- { 2.8210960212903002e-03, 0.0000000000000000e+00, 0.0000000000000000e+00 },
- { 7.6202458800000004e-08, 3.6392902322306000e+00, 3.5644591656241000e+00 },
- { 1.8090032399999999e-08, 9.9554707056521996e-01, 7.1289183312483004e+00 },
- { 1.7233765199999999e-08, 1.8196487820920999e+00, 1.7822295777568000e+00 },
- { 1.0172608000000000e-08, 2.8150559763861001e+00, 8.9111478635072991e+00 },
- { 9.4794085999999996e-09, 3.4760224933238999e+00, 8.0200331112799006e+00 },
- { 9.2196265999999993e-09, 4.6347004953370003e+00, 1.0693377436208999e+01 },
- { 5.8581604000000001e-09, 1.1586746335275999e+00, 2.6733443704265998e+00 },
- { -3.6218147999999998e-09, 2.3173675289587998e+00, 5.3466887181044003e+00 },
- { 3.4892754000000000e-09, 1.7122470613669000e-01, 1.2475607079684000e+01 },
- { 3.0842852000000000e-09, 3.6170311370435000e+00, 6.3501320826717000e+00 },
- { 2.0794650000000001e-09, 1.9906655633153001e+00, 1.4257836656755000e+01 },
- { 1.3655244000000000e-09, 4.9369712857368997e+00, 1.3584836518140001e-02 },
- { 1.1682572000000000e-09, 5.7934065580556000e+00, 1.3366721796637000e+01 },
- { -8.0319760000000004e-10, 6.6879731833041001e-01, 1.6040066232594999e+01 },
- { 7.3095099999999995e-10, 5.6300556878948997e+00, 1.7822295806244000e+01 },
- { 7.0141180000000002e-10, 4.3297377080514998e+00, 7.1002044886497000e+00 },
- { 6.5616239999999998e-10, 4.3188797534991004e+00, 1.3034138433509999e-02 },
- { 5.7530879999999998e-10, 5.4252179509841003e+00, 9.5251981240076002e+00 },
- { 4.3595480000000001e-10, 1.1670110887439999e+00, 1.9604525331796999e+01 },
- { 3.7119920000000002e-10, 1.4936154077537001e+00, 1.2938928912339999e-02 },
- { -3.4125759999999998e-10, 2.6346374300663999e+00, 1.5571117257959999e-02 },
- { 3.4329799999999998e-10, 1.7994723387341001e+00, 3.1750663461810000e+00 },
- { 3.2283440000000002e-10, 2.9861854159944001e+00, 2.1386754933987000e+01 },
- { 3.0144180000000000e-10, 1.9871924348983000e-01, 2.4675315510309999e-02 },
- { 1.7076700000000000e-10, 5.0718778620273000e+00, 3.5514255456604000e+00 },
- { 1.6558320000000000e-10, 2.9783205832994000e+00, 4.4555739317535998e+00 },
- { 1.6129100000000000e-10, 4.8058392680935000e+00, 2.3168984521460001e+01 },
- { 1.5279920000000001e-10, 1.8275651107266999e+00, 1.8713410599600000e+01 },
- { 1.5233120000000000e-10, 4.6323297275220003e+00, 4.4686092108182001e+00 },
- { 1.4497200000000001e-10, 1.9079860214666999e+00, 3.0506511533200001e-03 },
- { 1.1886880000000000e-10, 5.3321680658912003e+00, 7.0987549449082001e+00 },
- { 1.1292580000000000e-10, 9.5031497804419995e-01, 1.2700264165343000e+01 },
- { 9.8608600000000002e-11, 3.4190944178580002e-01, 2.4951214111224001e+01 },
- { -8.7772000000000002e-11, 3.6228267942948000e+00, 1.7958145576535001e+00 },
- { 8.5719400000000005e-11, 3.3682834215727002e+00, 5.9736711266729996e+00 },
- { -5.4549199999999999e-11, 1.9473964103154000e+00, 2.2929425718039999e-02 },
- { 3.2610199999999997e-11, 2.4880420823570999e+00, 2.5119610718869999e-02 }
+ { -1.9252583486660001e-04, 4.9369589722644998e+00, 1.3584836583050000e-02 },
+ { -9.7080359607600004e-05, 4.3188796477322002e+00, 1.3034138432430000e-02 },
+ { -8.9881741650000001e-05, 1.9080016428616999e+00, 3.0506486715799999e-03 },
+ { -5.5310105026200001e-05, 1.4936156681568999e+00, 1.2938928911549999e-02 },
+ { -5.0358442614999998e-05, 3.6410196089986999e+00, 3.5644591049605001e+00 },
+ { -4.4441277011600002e-05, 1.8196478828985001e+00, 1.7822295777568000e+00 },
+ { 4.1807887049000003e-05, 2.6346334480976998e+00, 1.5571117221300000e-02 },
+ { 3.7235659738800000e-05, 2.1402440902650000e+00, 1.4500977488899999e-03 },
+ { -2.3444053301599999e-05, 1.9871945729266999e-01, 2.4675315507400000e-02 },
+ { -1.6031316424000001e-05, 2.8203470990930999e+00, 9.5196190000000001e-05 },
+ { -1.1904975569800001e-05, 9.9521552502799004e-01, 7.1289183312483004e+00 },
+ { -1.0901426931999999e-05, 1.1586742711972999e+00, 2.6733443704265998e+00 },
+ { 8.7217118104000004e-06, 2.2995085327344000e+00, 4.4456805184999999e-04 },
+ { 8.2229455492000002e-06, 8.4723690387904005e-01, 5.4980078903000000e-04 },
+ { 7.5365481719999996e-06, 3.0644603245150002e+00, 6.4826749624000005e-04 },
+ { -6.1452803961999996e-06, 2.8150499448772002e+00, 8.9111478635072991e+00 },
+ { -5.7575824778000002e-06, 3.4760236756099001e+00, 8.0200331112799006e+00 },
+ { -5.3196302672000002e-06, 1.4952058549170999e+00, 2.9001290992300001e-03 },
+ { -5.1181206935999998e-06, 4.6347077042449003e+00, 1.0693377436208999e+01 },
+ { -4.7817413325999999e-06, 4.9236512419835003e+00, 3.0554833877799998e-03 },
+ { 4.5554015322000002e-06, 1.9585097634352000e+00, 2.2928625941210000e-02 },
+ { 4.3204134698000004e-06, 1.5842888614382999e+00, 1.5677112478190001e-02 },
+ { 3.7684098282000000e-06, 2.3173652780077001e+00, 5.3466887181044003e+00 },
+ { -3.1403738248000001e-06, 2.2184076281041998e+00, 2.5155489165510001e-02 },
+ { 2.4336535428000001e-06, 8.5320650238885998e-01, 2.5426968834400001e-03 },
+ { -2.0289901691999999e-06, 3.6168998565188000e+00, 6.3501320826717000e+00 },
+ { 1.8665438704000000e-06, 4.8458061649481001e+00, 1.3589674898130000e-02 },
+ { -1.8552431038000000e-06, 1.7086811529922000e-01, 1.2475607079684000e+01 },
+ { -1.6229875536000000e-06, 6.2803206871082002e+00, 6.0414171603999996e-04 },
+ { -1.3160987604000000e-06, 1.4718125754925000e+00, 1.4358460012319999e-02 },
+ { 8.0707298079999996e-07, 3.8735416148641000e-01, 3.7658680379100001e-03 },
+ { 2.6023976580000001e-07, 1.4337589305551000e+00, 4.5692429207999999e-03 }
};
static const vsop_term_t jm_Io_z[] =
{
- { 2.8210960212903002e-03, 0.0000000000000000e+00, 0.0000000000000000e+00 },
- { 7.6202458800000004e-08, 3.6392902322306000e+00, 3.5644591656241000e+00 },
- { 1.8090032399999999e-08, 9.9554707056521996e-01, 7.1289183312483004e+00 },
- { 1.7233765199999999e-08, 1.8196487820920999e+00, 1.7822295777568000e+00 },
- { 1.0172608000000000e-08, 2.8150559763861001e+00, 8.9111478635072991e+00 },
- { 9.4794085999999996e-09, 3.4760224933238999e+00, 8.0200331112799006e+00 },
- { 9.2196265999999993e-09, 4.6347004953370003e+00, 1.0693377436208999e+01 },
- { 5.8581604000000001e-09, 1.1586746335275999e+00, 2.6733443704265998e+00 },
- { -3.6218147999999998e-09, 2.3173675289587998e+00, 5.3466887181044003e+00 },
- { 3.4892754000000000e-09, 1.7122470613669000e-01, 1.2475607079684000e+01 },
- { 3.0842852000000000e-09, 3.6170311370435000e+00, 6.3501320826717000e+00 },
- { 2.0794650000000001e-09, 1.9906655633153001e+00, 1.4257836656755000e+01 },
- { 1.3655244000000000e-09, 4.9369712857368997e+00, 1.3584836518140001e-02 },
- { 1.1682572000000000e-09, 5.7934065580556000e+00, 1.3366721796637000e+01 },
- { -8.0319760000000004e-10, 6.6879731833041001e-01, 1.6040066232594999e+01 },
- { 7.3095099999999995e-10, 5.6300556878948997e+00, 1.7822295806244000e+01 },
- { 7.0141180000000002e-10, 4.3297377080514998e+00, 7.1002044886497000e+00 },
- { 6.5616239999999998e-10, 4.3188797534991004e+00, 1.3034138433509999e-02 },
- { 5.7530879999999998e-10, 5.4252179509841003e+00, 9.5251981240076002e+00 },
- { 4.3595480000000001e-10, 1.1670110887439999e+00, 1.9604525331796999e+01 },
- { 3.7119920000000002e-10, 1.4936154077537001e+00, 1.2938928912339999e-02 },
- { -3.4125759999999998e-10, 2.6346374300663999e+00, 1.5571117257959999e-02 },
- { 3.4329799999999998e-10, 1.7994723387341001e+00, 3.1750663461810000e+00 },
- { 3.2283440000000002e-10, 2.9861854159944001e+00, 2.1386754933987000e+01 },
- { 3.0144180000000000e-10, 1.9871924348983000e-01, 2.4675315510309999e-02 },
- { 1.7076700000000000e-10, 5.0718778620273000e+00, 3.5514255456604000e+00 },
- { 1.6558320000000000e-10, 2.9783205832994000e+00, 4.4555739317535998e+00 },
- { 1.6129100000000000e-10, 4.8058392680935000e+00, 2.3168984521460001e+01 },
- { 1.5279920000000001e-10, 1.8275651107266999e+00, 1.8713410599600000e+01 },
- { 1.5233120000000000e-10, 4.6323297275220003e+00, 4.4686092108182001e+00 },
- { 1.4497200000000001e-10, 1.9079860214666999e+00, 3.0506511533200001e-03 },
- { 1.1886880000000000e-10, 5.3321680658912003e+00, 7.0987549449082001e+00 },
- { 1.1292580000000000e-10, 9.5031497804419995e-01, 1.2700264165343000e+01 },
- { 9.8608600000000002e-11, 3.4190944178580002e-01, 2.4951214111224001e+01 },
- { -8.7772000000000002e-11, 3.6228267942948000e+00, 1.7958145576535001e+00 },
- { 8.5719400000000005e-11, 3.3682834215727002e+00, 5.9736711266729996e+00 },
- { -5.4549199999999999e-11, 1.9473964103154000e+00, 2.2929425718039999e-02 },
- { 3.2610199999999997e-11, 2.4880420823570999e+00, 2.5119610718869999e-02 }
+ { 4.1510849668155003e-03, 4.0899396355450000e+00, -1.2906864146660001e-02 },
+ { 6.2605214441129996e-04, 1.4461888986270000e+00, 3.5515522949801999e+00 },
+ { 3.5274734616900000e-05, 2.1256287034577999e+00, 1.2727416566999999e-04 },
+ { 1.9819448363599999e-05, 5.5835619926762003e+00, 3.2065751139999997e-05 },
+ { 1.4639984298900000e-05, 4.4137212696837003e-01, 2.6642533547699999e-03 },
+ { 9.8749504021000005e-06, 4.5076118781320001e-01, -3.5773660260022000e+00 },
+ { -9.6819265752999995e-06, 5.9097266550442002e+00, 1.7693227079461999e+00 },
+ { -8.3063168208999996e-06, 2.8751474873012001e-01, 8.7820791951527000e-01 },
+ { 5.9689735869000001e-06, 5.0740752477870998e+00, 7.1160118048917997e+00 },
+ { -5.2220588690000001e-06, 2.7460731023666001e+00, 6.7796100936000001e-04 },
+ { 4.6538995235999997e-06, 4.9143203339385000e+00, -5.3595956184346996e+00 },
+ { 4.5951340100999996e-06, 4.2533513770304001e+00, -4.4684808200577999e+00 },
+ { -3.7711061757000001e-06, 5.4120093562773004e+00, -1.7951364445825000e+00 },
+ { 3.7405126681000001e-06, 3.0946737347297000e+00, -7.1418251640915997e+00 },
+ { 2.2044764662999998e-06, 5.4360702580001004e+00, -2.6491700241240000e-02 },
+ { 1.8698303790000001e-06, 4.1124042914225996e+00, -2.7985797954588998e+00 },
+ { -1.5410375359999999e-06, 2.7141931505528998e+00, 2.7731236679899999e-03 },
+ { 1.3214613496000001e-06, 1.2750177723530001e+00, -8.9240547799787002e+00 },
+ { -1.2707585609000000e-06, 5.1141075152506996e+00, 3.7654227378982003e-01 },
+ { 1.2193607961999999e-06, 5.9977053365952999e+00, -9.8566169956899995e-03 },
+ { -1.1886104746999999e-06, 3.2658350285168001e+00, 5.3337818460633004e+00 },
+ { 8.7420351769999997e-07, 2.3903528311144000e+00, 2.5194921818800001e-03 },
+ { -7.6892157420000001e-07, 3.8308837306224999e+00, -2.7293225500100000e-03 }
};
static const vsop_term_t jm_Io_zeta[] =
{
- { 2.8210960212903002e-03, 0.0000000000000000e+00, 0.0000000000000000e+00 },
- { 7.6202458800000004e-08, 3.6392902322306000e+00, 3.5644591656241000e+00 },
- { 1.8090032399999999e-08, 9.9554707056521996e-01, 7.1289183312483004e+00 },
- { 1.7233765199999999e-08, 1.8196487820920999e+00, 1.7822295777568000e+00 },
- { 1.0172608000000000e-08, 2.8150559763861001e+00, 8.9111478635072991e+00 },
- { 9.4794085999999996e-09, 3.4760224933238999e+00, 8.0200331112799006e+00 },
- { 9.2196265999999993e-09, 4.6347004953370003e+00, 1.0693377436208999e+01 },
- { 5.8581604000000001e-09, 1.1586746335275999e+00, 2.6733443704265998e+00 },
- { -3.6218147999999998e-09, 2.3173675289587998e+00, 5.3466887181044003e+00 },
- { 3.4892754000000000e-09, 1.7122470613669000e-01, 1.2475607079684000e+01 },
- { 3.0842852000000000e-09, 3.6170311370435000e+00, 6.3501320826717000e+00 },
- { 2.0794650000000001e-09, 1.9906655633153001e+00, 1.4257836656755000e+01 },
- { 1.3655244000000000e-09, 4.9369712857368997e+00, 1.3584836518140001e-02 },
- { 1.1682572000000000e-09, 5.7934065580556000e+00, 1.3366721796637000e+01 },
- { -8.0319760000000004e-10, 6.6879731833041001e-01, 1.6040066232594999e+01 },
- { 7.3095099999999995e-10, 5.6300556878948997e+00, 1.7822295806244000e+01 },
- { 7.0141180000000002e-10, 4.3297377080514998e+00, 7.1002044886497000e+00 },
- { 6.5616239999999998e-10, 4.3188797534991004e+00, 1.3034138433509999e-02 },
- { 5.7530879999999998e-10, 5.4252179509841003e+00, 9.5251981240076002e+00 },
- { 4.3595480000000001e-10, 1.1670110887439999e+00, 1.9604525331796999e+01 },
- { 3.7119920000000002e-10, 1.4936154077537001e+00, 1.2938928912339999e-02 },
- { -3.4125759999999998e-10, 2.6346374300663999e+00, 1.5571117257959999e-02 },
- { 3.4329799999999998e-10, 1.7994723387341001e+00, 3.1750663461810000e+00 },
- { 3.2283440000000002e-10, 2.9861854159944001e+00, 2.1386754933987000e+01 },
- { 3.0144180000000000e-10, 1.9871924348983000e-01, 2.4675315510309999e-02 },
- { 1.7076700000000000e-10, 5.0718778620273000e+00, 3.5514255456604000e+00 },
- { 1.6558320000000000e-10, 2.9783205832994000e+00, 4.4555739317535998e+00 },
- { 1.6129100000000000e-10, 4.8058392680935000e+00, 2.3168984521460001e+01 },
- { 1.5279920000000001e-10, 1.8275651107266999e+00, 1.8713410599600000e+01 },
- { 1.5233120000000000e-10, 4.6323297275220003e+00, 4.4686092108182001e+00 },
- { 1.4497200000000001e-10, 1.9079860214666999e+00, 3.0506511533200001e-03 },
- { 1.1886880000000000e-10, 5.3321680658912003e+00, 7.0987549449082001e+00 },
- { 1.1292580000000000e-10, 9.5031497804419995e-01, 1.2700264165343000e+01 },
- { 9.8608600000000002e-11, 3.4190944178580002e-01, 2.4951214111224001e+01 },
- { -8.7772000000000002e-11, 3.6228267942948000e+00, 1.7958145576535001e+00 },
- { 8.5719400000000005e-11, 3.3682834215727002e+00, 5.9736711266729996e+00 },
- { -5.4549199999999999e-11, 1.9473964103154000e+00, 2.2929425718039999e-02 },
- { 3.2610199999999997e-11, 2.4880420823570999e+00, 2.5119610718869999e-02 }
+ { 3.1421724660139999e-04, 2.7964219722923001e+00, -2.3150960980000000e-03 },
+ { 9.0416920794600001e-05, 1.0477061879627001e+00, -5.6920638196000003e-04 },
+ { 1.7569539578000001e-05, 2.4150809680215000e+00, 0.0000000000000000e+00 },
+ { 1.6445232401299999e-05, 3.3368861773902001e+00, -1.2491307196999999e-04 },
+ { 5.5424829091000003e-06, 5.9720202381026999e+00, -3.0561164719999997e-05 },
+ { 3.5856270353000000e-06, 8.4898736841329003e-01, -2.5244521900630000e-02 },
+ { 2.4180760139999998e-06, 5.5603770950923002e+00, 2.9003681445799998e-03 },
+ { -8.6730849300000004e-07, 2.8496686106299002e-01, -1.4500593353199999e-03 },
+ { -3.1762272769999999e-07, 5.3834633036029000e+00, -2.3498632298700001e-02 },
+ { 3.1528166080000000e-07, 4.5569499027478004e+00, 4.3504654303999999e-03 },
+ { 2.3386767260000001e-07, 1.7633292120046999e+00, 1.4501339138600000e-03 },
+ { 1.7545536890000000e-07, 4.8429319984493002e+00, -2.5688816532440002e-02 },
+ { 1.2863195830000000e-07, 5.7543347143870998e+00, -2.5813660979740000e-02 },
+ { 9.6721330399999996e-08, 1.1503592426900000e+00, -2.9001471397800001e-03 },
+ { 6.9230999999999999e-11, 4.0745966852007998e+00, -3.2506757319069997e-02 }
};
static const vsop_term_t jm_Europa_a[] =
@@ -3591,128 +3567,116 @@ static const vsop_term_t jm_Europa_a[] =
static const vsop_term_t jm_Europa_l[] =
{
- { 4.4871037804314002e-03, 0.0000000000000000e+00, 0.0000000000000000e+00 },
- { 4.3243674980000000e-07, 1.8196456062910000e+00, 1.7822295777568000e+00 },
- { 1.6036147499999999e-07, 4.3002726529577000e+00, 2.6733443704265998e+00 },
- { -1.0191467860000000e-07, 5.4589480865441997e+00, 5.3466887181044003e+00 },
- { 9.2473478599999994e-08, 5.6222139048906001e+00, 8.9111478887838003e-01 },
- { -5.2366580000000000e-08, 3.6392846323416999e+00, 3.5644591656241000e+00 },
- { 5.1150900000000000e-08, 2.9783307371014001e+00, 4.4555739317535998e+00 },
- { -3.1190778000000000e-08, 9.9466557754026996e-01, 7.1289183312483004e+00 },
- { -2.7285993800000002e-08, 2.8144480309092001e+00, 8.9111478635072991e+00 },
- { 2.3222582800000002e-08, 6.2608434364366001e+00, 2.7856729211550002e+00 },
- { -1.8131077000000000e-08, 4.3188692380648996e+00, 1.3034138308860001e-02 },
- { 1.7496054400000001e-08, 1.6563941638726001e+00, 6.2378035398421998e+00 },
- { -1.2287407200000000e-08, 4.6421290370832997e+00, 1.0693377254217999e+01 },
- { -9.5367130000000008e-09, 1.4936536615311999e+00, 1.2938928820689999e-02 },
- { -8.4863836000000005e-09, 1.7146854643555001e-01, 1.2475607079684000e+01 },
- { 7.1939342000000003e-09, 4.9376739095661000e+00, 1.3584833017030000e-02 },
- { 6.9122353999999999e-09, 6.2488746138491997e+00, 4.1785094280464001e+00 },
- { 6.1377568000000003e-09, 3.3434976298080998e-01, 8.0200331112799006e+00 },
- { -4.5343054000000000e-09, 1.9892156959655001e+00, 1.4257836656755000e+01 },
- { 4.4574684000000002e-09, 3.4597804303323998e-01, 3.5357692227538999e+00 },
- { 4.2350072000000002e-09, 6.2719655202168996e+00, 1.3928364636651001e+00 },
- { -2.8783772000000001e-09, 3.8108811302609999e+00, 1.6040066232594999e+01 },
- { 2.4354662000000001e-09, 9.9587190880214005e-01, 9.0414989297380000e-01 },
- { 2.2532939999999998e-09, 5.2958965893938998e+00, 9.8022627054664007e+00 },
- { 2.1573570000000000e-09, 6.2379050559630000e+00, 5.5713458670106997e+00 },
- { -1.6530062000000001e-09, 5.6456686036733998e+00, 1.7822294694543000e+01 },
- { 1.6464798000000000e-09, 2.6346435392424001e+00, 1.5571117126760001e-02 },
- { 1.1589838000000000e-09, 3.2732388195744999e+00, 1.7691951440716001e+00 },
- { -1.0251826000000000e-09, 1.9079858535659999e+00, 3.0506497838200001e-03 },
- { -1.0203510000000000e-09, 1.1692020351115999e+00, 1.9604525194171998e+01 },
- { 7.6149819999999995e-10, 1.6862812414995001e+00, 3.5342961443230001e+00 },
- { 7.1044939999999998e-10, 5.9112717191091999e+00, 2.4092214574830999e+00 },
- { -6.9571839999999996e-10, 2.4879412197796000e+00, 2.5119609730670001e-02 },
- { -5.8179140000000005e-10, 1.9872303312323999e-01, 2.4675315511269998e-02 },
- { -3.7921779999999998e-10, 1.5765189821595000e+00, 2.5244441830199998e-02 },
- { 3.3973779999999998e-10, 5.8126953372535004e+00, 2.5973067138759999e-02 },
- { 3.1594919999999998e-10, 2.3545476741300999e+00, 2.6068277099550001e-02 },
- { 2.5381539999999999e-10, 1.9471441186087000e+00, 2.2929424919760001e-02 }
+ { 8.5764331729359998e-04, 4.3188693178264002e+00, 1.3034138308049999e-02 },
+ { 4.5495828750859998e-04, 1.4936531751079001e+00, 1.2938928819619999e-02 },
+ { 3.2489398251739999e-04, 1.8196494533458001e+00, 1.7822295777568000e+00 },
+ { -3.0742500793339998e-04, 4.9377037005910998e+00, 1.3584832867240000e-02 },
+ { 1.9823861447839999e-04, 1.9079869054759999e+00, 3.0510121286900001e-03 },
+ { 1.8340635518040001e-04, 2.1402853388529000e+00, 1.4500978933800000e-03 },
+ { -1.4343831884519999e-04, 5.6222140366630002e+00, 8.9111478887838003e-01 },
+ { -7.7193914094400004e-05, 4.3002724372349999e+00, 2.6733443704265998e+00 },
+ { -6.3228977719599996e-05, 2.6346392822097999e+00, 1.5571117084699999e-02 },
+ { 4.4676647738799999e-05, 5.4589448561143001e+00, 5.3466887181044003e+00 },
+ { 4.3657473140999997e-05, 3.6392908617708999e+00, 3.5644591656241000e+00 },
+ { 3.4917275029599997e-05, 2.8289867162553000e+00, 2.9885749149999999e-05 },
+ { -3.2570909464599999e-05, 5.3721409780230003e+00, 1.2495233774000001e-04 },
+ { 2.0582647385999999e-05, 1.5258464215508001e+00, 2.9001315522200000e-03 },
+ { -1.9270608755599999e-05, 2.9783311531879000e+00, 4.4555739317535998e+00 },
+ { 1.6802831625400000e-05, 2.4879414119402998e+00, 2.5119609725649999e-02 },
+ { -1.4162873360600000e-05, 2.9183576504412998e+00, 6.4930403718000003e-04 },
+ { 1.4071315560000000e-05, 1.9872319369353000e-01, 2.4675315510309999e-02 },
+ { 1.3194691576000000e-05, 9.9584744364934996e-01, 7.1289183312483004e+00 },
+ { 1.0659861762000000e-05, 5.3356907396678004e+00, 3.0233219231900000e-03 },
+ { -1.0401172773800000e-05, 6.2608296198866000e+00, 2.7856729211550002e+00 },
+ { 1.0074608023400000e-05, 4.4288900030073002e+00, 5.5297871930999999e-04 },
+ { 9.7414019416000006e-06, 2.7312462188295998e+00, 8.9111510230745008e+00 },
+ { -9.4651366640000002e-06, 2.5010358163865001e+00, 9.3478322470000005e-05 },
+ { 9.1108073323999994e-06, 1.5765182522628001e+00, 2.5244441682119999e-02 },
+ { -8.7720567667999992e-06, 1.5376962386885999e+00, 1.5676393315070002e-02 },
+ { -7.8429703339999994e-06, 5.8128473756772001e+00, 2.5973069246350001e-02 },
+ { -7.5566039418000002e-06, 3.0586251688920001e+00, 4.3252872558999998e-04 },
+ { -6.6580990751999997e-06, 1.9591270593390000e+00, 2.2928567412490001e-02 },
+ { -6.5854142774000000e-06, 1.8617673337639999e+00, 2.6093058384670000e-02 },
+ { -5.8131135230000003e-06, 1.6563893807978001e+00, 6.2378035398421998e+00 },
+ { 5.5720865276000004e-06, 3.9565695752204002e+00, 2.5481216339899998e-03 },
+ { -4.8198508905999998e-06, 6.2720230965345003e+00, 1.3928364605775001e+00 },
+ { 4.2728431266000000e-06, 4.6220912946918000e+00, 1.0693377982182000e+01 },
+ { 4.2175545304000004e-06, 1.3509343368358999e+00, 3.0164435787799998e-03 },
+ { 3.7707624520000001e-06, 5.1034507119889003e+00, 2.5219658202250000e-02 }
};
static const vsop_term_t jm_Europa_z[] =
{
- { 4.4871037804314002e-03, 0.0000000000000000e+00, 0.0000000000000000e+00 },
- { 4.3243674980000000e-07, 1.8196456062910000e+00, 1.7822295777568000e+00 },
- { 1.6036147499999999e-07, 4.3002726529577000e+00, 2.6733443704265998e+00 },
- { -1.0191467860000000e-07, 5.4589480865441997e+00, 5.3466887181044003e+00 },
- { 9.2473478599999994e-08, 5.6222139048906001e+00, 8.9111478887838003e-01 },
- { -5.2366580000000000e-08, 3.6392846323416999e+00, 3.5644591656241000e+00 },
- { 5.1150900000000000e-08, 2.9783307371014001e+00, 4.4555739317535998e+00 },
- { -3.1190778000000000e-08, 9.9466557754026996e-01, 7.1289183312483004e+00 },
- { -2.7285993800000002e-08, 2.8144480309092001e+00, 8.9111478635072991e+00 },
- { 2.3222582800000002e-08, 6.2608434364366001e+00, 2.7856729211550002e+00 },
- { -1.8131077000000000e-08, 4.3188692380648996e+00, 1.3034138308860001e-02 },
- { 1.7496054400000001e-08, 1.6563941638726001e+00, 6.2378035398421998e+00 },
- { -1.2287407200000000e-08, 4.6421290370832997e+00, 1.0693377254217999e+01 },
- { -9.5367130000000008e-09, 1.4936536615311999e+00, 1.2938928820689999e-02 },
- { -8.4863836000000005e-09, 1.7146854643555001e-01, 1.2475607079684000e+01 },
- { 7.1939342000000003e-09, 4.9376739095661000e+00, 1.3584833017030000e-02 },
- { 6.9122353999999999e-09, 6.2488746138491997e+00, 4.1785094280464001e+00 },
- { 6.1377568000000003e-09, 3.3434976298080998e-01, 8.0200331112799006e+00 },
- { -4.5343054000000000e-09, 1.9892156959655001e+00, 1.4257836656755000e+01 },
- { 4.4574684000000002e-09, 3.4597804303323998e-01, 3.5357692227538999e+00 },
- { 4.2350072000000002e-09, 6.2719655202168996e+00, 1.3928364636651001e+00 },
- { -2.8783772000000001e-09, 3.8108811302609999e+00, 1.6040066232594999e+01 },
- { 2.4354662000000001e-09, 9.9587190880214005e-01, 9.0414989297380000e-01 },
- { 2.2532939999999998e-09, 5.2958965893938998e+00, 9.8022627054664007e+00 },
- { 2.1573570000000000e-09, 6.2379050559630000e+00, 5.5713458670106997e+00 },
- { -1.6530062000000001e-09, 5.6456686036733998e+00, 1.7822294694543000e+01 },
- { 1.6464798000000000e-09, 2.6346435392424001e+00, 1.5571117126760001e-02 },
- { 1.1589838000000000e-09, 3.2732388195744999e+00, 1.7691951440716001e+00 },
- { -1.0251826000000000e-09, 1.9079858535659999e+00, 3.0506497838200001e-03 },
- { -1.0203510000000000e-09, 1.1692020351115999e+00, 1.9604525194171998e+01 },
- { 7.6149819999999995e-10, 1.6862812414995001e+00, 3.5342961443230001e+00 },
- { 7.1044939999999998e-10, 5.9112717191091999e+00, 2.4092214574830999e+00 },
- { -6.9571839999999996e-10, 2.4879412197796000e+00, 2.5119609730670001e-02 },
- { -5.8179140000000005e-10, 1.9872303312323999e-01, 2.4675315511269998e-02 },
- { -3.7921779999999998e-10, 1.5765189821595000e+00, 2.5244441830199998e-02 },
- { 3.3973779999999998e-10, 5.8126953372535004e+00, 2.5973067138759999e-02 },
- { 3.1594919999999998e-10, 2.3545476741300999e+00, 2.6068277099550001e-02 },
- { 2.5381539999999999e-10, 1.9471441186087000e+00, 2.2929424919760001e-02 }
+ { -9.3589104136341007e-03, 4.0899396509038999e+00, -1.2906864146660001e-02 },
+ { 2.9889945455550000e-04, 5.9097265185595003e+00, 1.7693227079461999e+00 },
+ { 2.1390363903500001e-04, 2.1256289300016000e+00, 1.2727418406999999e-04 },
+ { 1.9809635647810000e-04, 2.7435168292649998e+00, 6.7797343008999997e-04 },
+ { 1.2103881589649999e-04, 5.5839943711203004e+00, 3.2056614899999997e-05 },
+ { 8.3704204839300006e-05, 1.6094538368039000e+00, -9.0402165808846002e-01 },
+ { 8.2352516636899996e-05, 1.4461887708689001e+00, 3.5515522949801999e+00 },
+ { -3.1590653282000003e-05, 2.8751224400810999e-01, 8.7820791951527000e-01 },
+ { -2.9450368131399998e-05, 4.5078002968967001e-01, -3.5773660260022000e+00 },
+ { -2.7894669853600001e-05, 2.2704374310903002e+00, -1.7951364497113000e+00 },
+ { 1.4495868862100000e-05, 2.9313956641718999e+00, -2.6862512422389999e+00 },
+ { 1.3905232167900000e-05, 6.0542576187622004e+00, -2.5941002404500001e-02 },
+ { 1.0837443134999999e-05, 5.9320761116862997e+00, -1.0163502160128000e+00 },
+ { -8.2175838585000006e-06, 4.9144730088837996e+00, -5.3595956184346996e+00 },
+ { 7.3925894084000002e-06, 2.5962855881214999e+00, -2.5845792927869999e-02 },
+ { 6.2618381565999999e-06, 6.2252936384007000e+00, -7.1418248393794004e+00 },
+ { -5.1968296511999998e-06, 5.4353355159239003e+00, -2.6491696725039999e-02 },
+ { -4.3507065742999996e-06, 5.1150292346241999e+00, 3.7654221060603998e-01 },
+ { 4.2081682285000003e-06, 3.1202613836360999e+00, 4.4427230757157998e+00 },
+ { 4.1298266969999996e-06, 4.2533371370635997e+00, -4.4684808200577999e+00 },
+ { -3.6991221929999998e-06, 5.2487564172390000e+00, 2.6604375002056999e+00 },
+ { -2.7357551002999999e-06, 1.2734806685602000e+00, -8.9240546532296996e+00 },
+ { -2.6854901206000001e-06, 7.5596663258784003e-01, 1.5806953180460000e-02 },
+ { 2.3074479952999999e-06, 1.9438998534712000e+00, 7.1160114825227003e+00 },
+ { 2.0163445050000001e-06, 5.8484195254467002e+00, -2.4091843401454001e+00 },
+ { -1.8506530067000000e-06, 2.6838225102581998e+00, 6.8236609074999997e-04 },
+ { 1.8159137521999999e-06, 2.6048690461733002e+00, 6.2248966818787999e+00 },
+ { -1.7894118824000000e-06, 5.7385537790776997e+00, -1.0706284328883999e+01 },
+ { 1.6518864520000000e-06, 3.2658492478887999e+00, 5.3337818460633004e+00 },
+ { -1.5660692561000001e-06, 6.1789350505155998e+00, -1.1453588847960000e-02 },
+ { 1.4426949422000000e-06, 6.0014075911382996e+00, -1.7664769149810999e+00 },
+ { 1.3196935928000001e-06, 5.5753025652973998e+00, -6.2507103665413002e+00 },
+ { -1.1726743714000000e-06, 5.0242932747650002e+00, -1.4351210704139999e-02 },
+ { -9.5502853379999998e-07, 2.8409403047363000e+00, 1.4257595044900001e-03 },
+ { -7.5698577460000000e-07, 3.8098760906143001e+00, -2.7271627793800002e-03 },
+ { -7.4956627480000000e-07, 2.9896372346394000e+00, 2.0097553243899999e-03 },
+ { 7.0911491330000002e-07, 2.7139331814919001e+00, -1.9924932783299998e-03 },
+ { 5.6466703119999995e-07, 2.1683602575236001e+00, -1.2871803232940000e-02 },
+ { -2.0044555239999999e-07, 1.2893849410519000e+00, -3.2724923477799998e-03 },
+ { -1.6234893630000001e-07, 2.4189454629613000e-01, 4.4609337678800003e-03 },
+ { 1.0588625620000000e-07, 4.5356953407129001e+00, 3.9269908172100002e-03 }
};
static const vsop_term_t jm_Europa_zeta[] =
{
- { 4.4871037804314002e-03, 0.0000000000000000e+00, 0.0000000000000000e+00 },
- { 4.3243674980000000e-07, 1.8196456062910000e+00, 1.7822295777568000e+00 },
- { 1.6036147499999999e-07, 4.3002726529577000e+00, 2.6733443704265998e+00 },
- { -1.0191467860000000e-07, 5.4589480865441997e+00, 5.3466887181044003e+00 },
- { 9.2473478599999994e-08, 5.6222139048906001e+00, 8.9111478887838003e-01 },
- { -5.2366580000000000e-08, 3.6392846323416999e+00, 3.5644591656241000e+00 },
- { 5.1150900000000000e-08, 2.9783307371014001e+00, 4.4555739317535998e+00 },
- { -3.1190778000000000e-08, 9.9466557754026996e-01, 7.1289183312483004e+00 },
- { -2.7285993800000002e-08, 2.8144480309092001e+00, 8.9111478635072991e+00 },
- { 2.3222582800000002e-08, 6.2608434364366001e+00, 2.7856729211550002e+00 },
- { -1.8131077000000000e-08, 4.3188692380648996e+00, 1.3034138308860001e-02 },
- { 1.7496054400000001e-08, 1.6563941638726001e+00, 6.2378035398421998e+00 },
- { -1.2287407200000000e-08, 4.6421290370832997e+00, 1.0693377254217999e+01 },
- { -9.5367130000000008e-09, 1.4936536615311999e+00, 1.2938928820689999e-02 },
- { -8.4863836000000005e-09, 1.7146854643555001e-01, 1.2475607079684000e+01 },
- { 7.1939342000000003e-09, 4.9376739095661000e+00, 1.3584833017030000e-02 },
- { 6.9122353999999999e-09, 6.2488746138491997e+00, 4.1785094280464001e+00 },
- { 6.1377568000000003e-09, 3.3434976298080998e-01, 8.0200331112799006e+00 },
- { -4.5343054000000000e-09, 1.9892156959655001e+00, 1.4257836656755000e+01 },
- { 4.4574684000000002e-09, 3.4597804303323998e-01, 3.5357692227538999e+00 },
- { 4.2350072000000002e-09, 6.2719655202168996e+00, 1.3928364636651001e+00 },
- { -2.8783772000000001e-09, 3.8108811302609999e+00, 1.6040066232594999e+01 },
- { 2.4354662000000001e-09, 9.9587190880214005e-01, 9.0414989297380000e-01 },
- { 2.2532939999999998e-09, 5.2958965893938998e+00, 9.8022627054664007e+00 },
- { 2.1573570000000000e-09, 6.2379050559630000e+00, 5.5713458670106997e+00 },
- { -1.6530062000000001e-09, 5.6456686036733998e+00, 1.7822294694543000e+01 },
- { 1.6464798000000000e-09, 2.6346435392424001e+00, 1.5571117126760001e-02 },
- { 1.1589838000000000e-09, 3.2732388195744999e+00, 1.7691951440716001e+00 },
- { -1.0251826000000000e-09, 1.9079858535659999e+00, 3.0506497838200001e-03 },
- { -1.0203510000000000e-09, 1.1692020351115999e+00, 1.9604525194171998e+01 },
- { 7.6149819999999995e-10, 1.6862812414995001e+00, 3.5342961443230001e+00 },
- { 7.1044939999999998e-10, 5.9112717191091999e+00, 2.4092214574830999e+00 },
- { -6.9571839999999996e-10, 2.4879412197796000e+00, 2.5119609730670001e-02 },
- { -5.8179140000000005e-10, 1.9872303312323999e-01, 2.4675315511269998e-02 },
- { -3.7921779999999998e-10, 1.5765189821595000e+00, 2.5244441830199998e-02 },
- { 3.3973779999999998e-10, 5.8126953372535004e+00, 2.5973067138759999e-02 },
- { 3.1594919999999998e-10, 2.3545476741300999e+00, 2.6068277099550001e-02 },
- { 2.5381539999999999e-10, 1.9471441186087000e+00, 2.2929424919760001e-02 }
+ { 4.0404917832303003e-03, 1.0477063169425000e+00, -5.6920640539999997e-04 },
+ { 2.2004210345639999e-04, 3.3368857864364001e+00, -1.2491307306999999e-04 },
+ { 1.6625447447190001e-04, 2.4134862374710999e+00, 0.0000000000000000e+00 },
+ { 5.9028247098299997e-05, 5.9719930968366004e+00, -3.0561602250000000e-05 },
+ { -1.0503033140000000e-05, 2.7964978379151999e+00, -2.3150966123800000e-03 },
+ { -1.0294324825000000e-05, 8.4898796322150005e-01, -2.5244521901650000e-02 },
+ { 7.2600013019999998e-06, 5.5603730312676003e+00, 2.9003676713099998e-03 },
+ { 1.8391258758000000e-06, 2.8480515491153002e-01, -1.4500579196900000e-03 },
+ { 1.4880605762999999e-06, 4.8429974929766004e+00, -2.5688815138709999e-02 },
+ { -8.8281962739999996e-07, 6.5011185407634997e-01, 3.4696170683099999e-03 },
+ { 8.7140427680000005e-07, 1.7639430319108000e+00, 1.4501352157599999e-03 },
+ { 8.5361880439999997e-07, 4.5568506666427000e+00, 4.3504641410099998e-03 },
+ { 6.8462143309999998e-07, 5.7542117253981004e+00, -2.5813768702630000e-02 },
+ { 4.4718263480000000e-07, 5.3834694321520002e+00, -2.3498632366369999e-02 },
+ { 3.0343921680000000e-07, 2.2078201315179999e+00, -2.5783170906020000e-02 },
+ { 1.7990837350000000e-07, 3.1858868501530999e+00, 8.8086056517000001e-04 },
+ { -1.7920486450000001e-07, 5.1949494917342003e+00, -2.0193236931900001e-03 },
+ { -1.0985466260000000e-07, 5.9286821904995000e+00, 4.9197316579699998e-03 },
+ { -1.0831287320000000e-07, 4.5808061408793996e+00, -5.9959459406000004e-04 },
+ { 1.0621535309999999e-07, 3.8387102863271001e+00, -5.3795085846999999e-04 },
+ { 7.6849674899999994e-08, 3.5553768729769999e+00, 5.8005587812700000e-03 },
+ { -6.9227384100000000e-08, 4.6440611341931000e+00, 3.0253219029200001e-03 },
+ { 6.7696922400000002e-08, 1.3621319661455999e-01, -4.4430413602000003e-04 },
+ { -6.2155995200000003e-08, 3.0093497179950002e+00, -1.3603287200690000e-02 },
+ { 6.0829799999999999e-11, 4.0529569532599998e+00, -3.2510869900940001e-02 }
};
static const vsop_term_t jm_Ganymede_a[] =
@@ -3759,128 +3723,113 @@ static const vsop_term_t jm_Ganymede_a[] =
static const vsop_term_t jm_Ganymede_l[] =
{
- { 7.1566594572575002e-03, 0.0000000000000000e+00, 0.0000000000000000e+00 },
- { 1.3930299110000000e-06, 1.1586745884981000e+00, 2.6733443704265998e+00 },
- { 6.4498293460000002e-07, 5.6222145702102004e+00, 8.9111478887838003e-01 },
- { 2.2980595200000000e-07, 1.2995924044108000e+00, 1.0034433456728999e+00 },
- { -1.2214343700000001e-07, 4.9612436330514997e+00, 1.7822295777568000e+00 },
- { 1.0957981760000000e-07, 1.9486708778349999e+00, 1.5051650461529000e+00 },
- { 7.0143561600000002e-08, 6.4978508114195999e-01, 5.0172166963137999e-01 },
- { 5.4786856599999997e-08, 2.5992050672074001e+00, 2.0068866945508002e+00 },
- { -3.9463585799999999e-08, 2.3173535605651998e+00, 5.3466887181044003e+00 },
- { -3.6322142799999998e-08, 3.6393008632055999e+00, 3.5644591656241000e+00 },
- { 2.9094936400000000e-08, 2.0123392230605002e+00, 1.7535157350384001e+00 },
- { 2.8124496800000000e-08, 3.2490010762048001e+00, 2.5086083721948000e+00 },
- { -2.0792469799999999e-08, 2.9783308899923000e+00, 4.4555739317535998e+00 },
- { 1.4689677399999999e-08, 3.8988244013503999e+00, 3.0103300418262000e+00 },
- { -1.1993004200000000e-08, 1.6563968316083000e+00, 6.2378035398421998e+00 },
- { 1.1206746000000001e-08, 4.3188665692818997e+00, 1.3034138285340001e-02 },
- { -1.0953513200000000e-08, 4.9372826282154003e+00, 1.3584834937940000e-02 },
- { 9.9867772000000005e-09, 9.6700720263957995e-01, 6.2699633776977004e-01 },
- { 7.7668260000000001e-09, 4.5486373016444004e+00, 3.5120517182683000e+00 },
- { 7.4143972000000003e-09, 1.6140449852661001e-01, 1.2531361661566001e-01 },
- { 6.6346637999999999e-09, 3.3441073536010002e-01, 8.0200331112799006e+00 },
- { 5.7842684000000002e-09, 1.4936630646671001e+00, 1.2938928799370000e-02 },
- { -5.5768351999999997e-09, 4.4651777597612998e+00, 1.1287386144710001e+00 },
- { -4.9395106000000002e-09, 6.1563894598809004e+00, 1.7520662093793000e+00 },
- { 4.1439704000000002e-09, 5.1984558307997997e+00, 4.0137734147420998e+00 },
- { -4.0765630000000004e-09, 9.9543742426921999e-01, 7.1289183312483004e+00 },
- { -3.6862061999999999e-09, 4.6386836178625996e+00, 1.0693377254217999e+01 },
- { 3.3617537999999999e-09, 3.7493658441447999e+00, 8.7808669180167997e-01 },
- { 3.3348284000000001e-09, 2.2668196818989998e+00, 1.6304394485672999e+00 },
- { -2.5754697999999999e-09, 3.3293196902303002e-01, 1.7952648120307000e+00 },
- { 2.4363084000000001e-09, 1.9604838407748999e+00, 1.1232854513197001e-01 },
- { 2.2265431999999998e-09, 5.8482745704418004e+00, 4.5154950951905004e+00 },
- { 2.0032675999999999e-09, 2.9166648062068998e+00, 2.1321610765333001e+00 },
- { -1.8115706000000000e-09, 9.9782757414001000e-01, 9.0414978368384002e-01 },
- { 1.4535006000000000e-09, 1.8748212041600001e+00, 8.9112137093505996e+00 },
- { -6.8192600000000001e-10, 1.9871670124324001e-01, 2.4675315493830001e-02 },
- { 4.4337759999999998e-10, 2.4880003003965001e+00, 2.5119610196649999e-02 },
- { -2.8366580000000002e-10, 5.8126277034760996e+00, 2.5973068607520002e-02 }
+ { 2.3107978862260000e-04, 2.1402987195941998e+00, 1.4500978438400001e-03 },
+ { -1.8286359641180001e-04, 4.3188672736968003e+00, 1.3034138282630000e-02 },
+ { 1.5123787782040000e-04, 4.9373102372298003e+00, 1.3584834812520000e-02 },
+ { -1.1637209697779999e-04, 4.3002659861490002e+00, 2.6733443704265998e+00 },
+ { -9.5547806984600005e-05, 1.4936612842567001e+00, 1.2938928798570001e-02 },
+ { 8.1524685446399998e-05, 5.6222137132535002e+00, 8.9111478887838003e-01 },
+ { -8.0121967960200004e-05, 1.2995922951532000e+00, 1.0034433456728999e+00 },
+ { -6.0701726018200000e-05, 6.4978769669238001e-01, 5.0172167043264004e-01 },
+ { 5.4392247300200002e-05, 2.7927547440638998e+00, 2.9880873700000001e-05 },
+ { -4.8925364647400000e-05, 5.3711728089803001e+00, 1.2495278292000000e-04 },
+ { -4.2757498153599999e-05, 1.8196513407448001e+00, 1.7822295777568000e+00 },
+ { -3.0736041782600002e-05, 1.9498372703786000e+00, 1.5051650064902999e+00 },
+ { -1.6976734645799999e-05, 1.9078637281659001e+00, 3.0507678226700001e-03 },
+ { 1.5472589050800000e-05, 5.6912713028984001e+00, 6.5164073556000005e-04 },
+ { -1.4526886364800000e-05, 1.8863875475387001e-01, 1.2530827181195001e-01 },
+ { -1.3565445873800000e-05, 2.7930238268852001e+00, 5.5663681407000000e-04 },
+ { -1.3464862190399999e-05, 2.5991972928128000e+00, 2.0068866945508002e+00 },
+ { 9.5524017319999993e-06, 2.3173520454448999e+00, 5.3466887181044003e+00 },
+ { 8.7955125170000003e-06, 3.6393024031096002e+00, 3.5644591656241000e+00 },
+ { 7.5462003629999996e-06, 5.3560617584395001e+00, 9.2426977490000007e-05 },
+ { -7.1146195958000002e-06, 2.0120561622462998e+00, 1.7535157644007999e+00 },
+ { 6.4153141217999998e-06, 1.5526366820734001e+00, 2.9001309732400002e-03 },
+ { -6.3221625942000004e-06, 3.2490122452649000e+00, 2.5086083721948000e+00 },
+ { -5.6564973024000000e-06, 2.4862139082596002e+00, 4.4834622386000000e-04 },
+ { 5.2570245719999996e-06, 1.9871532348033000e-01, 2.4675315501580000e-02 },
+ { 4.7020767993999999e-06, 2.9783317790630002e+00, 4.4555739317535998e+00 },
+ { -4.7004229470000003e-06, 9.6617050453707998e-01, 6.2699712737504998e-01 },
+ { -4.6565198820000001e-06, 3.6125113449716002e+00, 4.3633231340000001e-04 },
+ { -4.2349322008000004e-06, 1.9604744669606000e+00, 1.1232854282257000e-01 },
+ { -3.8755741917999996e-06, 2.2619624763182999e+00, 2.5146663939729998e-02 },
+ { -3.2577733688000001e-06, 5.6861827246039001e+00, 1.7074576501600000e-03 }
};
static const vsop_term_t jm_Ganymede_z[] =
{
- { 7.1566594572575002e-03, 0.0000000000000000e+00, 0.0000000000000000e+00 },
- { 1.3930299110000000e-06, 1.1586745884981000e+00, 2.6733443704265998e+00 },
- { 6.4498293460000002e-07, 5.6222145702102004e+00, 8.9111478887838003e-01 },
- { 2.2980595200000000e-07, 1.2995924044108000e+00, 1.0034433456728999e+00 },
- { -1.2214343700000001e-07, 4.9612436330514997e+00, 1.7822295777568000e+00 },
- { 1.0957981760000000e-07, 1.9486708778349999e+00, 1.5051650461529000e+00 },
- { 7.0143561600000002e-08, 6.4978508114195999e-01, 5.0172166963137999e-01 },
- { 5.4786856599999997e-08, 2.5992050672074001e+00, 2.0068866945508002e+00 },
- { -3.9463585799999999e-08, 2.3173535605651998e+00, 5.3466887181044003e+00 },
- { -3.6322142799999998e-08, 3.6393008632055999e+00, 3.5644591656241000e+00 },
- { 2.9094936400000000e-08, 2.0123392230605002e+00, 1.7535157350384001e+00 },
- { 2.8124496800000000e-08, 3.2490010762048001e+00, 2.5086083721948000e+00 },
- { -2.0792469799999999e-08, 2.9783308899923000e+00, 4.4555739317535998e+00 },
- { 1.4689677399999999e-08, 3.8988244013503999e+00, 3.0103300418262000e+00 },
- { -1.1993004200000000e-08, 1.6563968316083000e+00, 6.2378035398421998e+00 },
- { 1.1206746000000001e-08, 4.3188665692818997e+00, 1.3034138285340001e-02 },
- { -1.0953513200000000e-08, 4.9372826282154003e+00, 1.3584834937940000e-02 },
- { 9.9867772000000005e-09, 9.6700720263957995e-01, 6.2699633776977004e-01 },
- { 7.7668260000000001e-09, 4.5486373016444004e+00, 3.5120517182683000e+00 },
- { 7.4143972000000003e-09, 1.6140449852661001e-01, 1.2531361661566001e-01 },
- { 6.6346637999999999e-09, 3.3441073536010002e-01, 8.0200331112799006e+00 },
- { 5.7842684000000002e-09, 1.4936630646671001e+00, 1.2938928799370000e-02 },
- { -5.5768351999999997e-09, 4.4651777597612998e+00, 1.1287386144710001e+00 },
- { -4.9395106000000002e-09, 6.1563894598809004e+00, 1.7520662093793000e+00 },
- { 4.1439704000000002e-09, 5.1984558307997997e+00, 4.0137734147420998e+00 },
- { -4.0765630000000004e-09, 9.9543742426921999e-01, 7.1289183312483004e+00 },
- { -3.6862061999999999e-09, 4.6386836178625996e+00, 1.0693377254217999e+01 },
- { 3.3617537999999999e-09, 3.7493658441447999e+00, 8.7808669180167997e-01 },
- { 3.3348284000000001e-09, 2.2668196818989998e+00, 1.6304394485672999e+00 },
- { -2.5754697999999999e-09, 3.3293196902303002e-01, 1.7952648120307000e+00 },
- { 2.4363084000000001e-09, 1.9604838407748999e+00, 1.1232854513197001e-01 },
- { 2.2265431999999998e-09, 5.8482745704418004e+00, 4.5154950951905004e+00 },
- { 2.0032675999999999e-09, 2.9166648062068998e+00, 2.1321610765333001e+00 },
- { -1.8115706000000000e-09, 9.9782757414001000e-01, 9.0414978368384002e-01 },
- { 1.4535006000000000e-09, 1.8748212041600001e+00, 8.9112137093505996e+00 },
- { -6.8192600000000001e-10, 1.9871670124324001e-01, 2.4675315493830001e-02 },
- { 4.4337759999999998e-10, 2.4880003003965001e+00, 2.5119610196649999e-02 },
- { -2.8366580000000002e-10, 5.8126277034760996e+00, 2.5973068607520002e-02 }
+ { 1.4289811307319001e-03, 2.1256295942738999e+00, 1.2727413029000001e-04 },
+ { 7.7109312267600004e-04, 5.5836330003496002e+00, 3.2064341100000001e-05 },
+ { 5.9259117807659997e-04, 4.0899396636447998e+00, -1.2906864146660001e-02 },
+ { 2.0455974961460001e-04, 5.2713683670371996e+00, -1.2523544076106000e-01 },
+ { 1.7851186482579999e-04, 2.8743156721063001e-01, 8.7820792442520001e-01 },
+ { 1.1319997848930000e-04, 1.4462127277818000e+00, 3.5515522949801999e+00 },
+ { -6.5877816920999996e-05, 2.2702423990985001e+00, -1.7951364394536999e+00 },
+ { 4.9705888832799997e-05, 5.9096792204858000e+00, 1.7693227129285001e+00 },
+ { -3.1638492697800003e-05, 1.6093054939403999e+00, -9.0402165028423997e-01 },
+ { 2.8780123732700002e-05, 4.6217321268756999e+00, -6.2695712341840004e-01 },
+ { -1.8174431789599998e-05, 5.9210641379359998e+00, 3.7648623991673003e-01 },
+ { 1.0555817516100000e-05, 3.9720191398745999e+00, -1.1286788041058000e+00 },
+ { -7.0808673395999996e-06, 6.0542548894164003e+00, -2.5941002415210000e-02 },
+ { -7.0804404019999998e-06, 2.7978433776854001e+00, 6.7774258702999997e-04 },
+ { -6.1046181888000000e-06, 1.4151685760988000e+00, -8.7530769416913001e-01 },
+ { -5.7610853129000003e-06, 4.2530537622646003e+00, -4.4684807882788000e+00 },
+ { -5.7310334963999997e-06, 2.9311803223071999e+00, -2.6862512192699000e+00 },
+ { 4.8299146941000001e-06, 2.7138294508149001e+00, 2.7731329671900002e-03 },
+ { 4.6610005483000002e-06, 3.3222980229554002e+00, -1.6304004832039001e+00 },
+ { -3.8142769361000001e-06, 2.5962943627642998e+00, -2.5845792955510000e-02 },
+ { 3.4982417329999999e-06, 1.5866568011216999e+00, 1.8816512920593000e+00 },
+ { -3.0091617314999999e-06, 3.5921173988567001e+00, -3.5773660056343002e+00 },
+ { -2.4732926446000001e-06, 5.3461730094807001e+00, 2.5122576835110999e-01 },
+ { 2.4416432533000002e-06, 4.7049477027963000e+00, -2.5049613834711998e-01 },
+ { 2.4171568015000000e-06, 3.4508032389166998e+00, 0.0000000000000000e+00 },
+ { 2.3143850534999999e-06, 5.5385759257808003e+00, 2.8683339028800002e-03 },
+ { 2.2651772374000001e-06, 5.5608006706191997e+00, 1.4501892967800000e-03 },
+ { 2.2247695560000000e-06, 2.6725424635341000e+00, -2.1321221654765998e+00 },
+ { 2.0947921968999999e-06, 2.2350374116257998e+00, 2.3833730192672999e+00 },
+ { -1.4042712722000000e-06, 9.3718044411525003e-01, 1.3799296041822000e+00 },
+ { 1.1932531874000001e-06, 2.8861941414418002e+00, 2.8850946416201002e+00 },
+ { -1.1180389240000001e-06, 4.9139919849718003e+00, -5.3595955727169997e+00 },
+ { 1.1076384510000000e-06, 2.0227538540344998e+00, -2.6338438454332000e+00 },
+ { -1.0371714944000000e-06, 4.0722739402947999e-01, -8.7385759089273995e-01 },
+ { -8.9931285010000001e-07, 3.0942691883530000e+00, -7.1418251640915997e+00 },
+ { 7.2683814200000005e-07, 5.4334774230432998e+00, -2.6491687896550001e-02 },
+ { -7.1780496650000000e-07, 5.2487423493616001e+00, 2.6604375002056999e+00 },
+ { 6.9084123190000001e-07, 4.0596134184175003e+00, -7.5221793556996996e-01 },
+ { -6.7841515699999996e-07, 3.8846818226669000e+00, 4.2496535534400004e-03 },
+ { 6.7723149200000005e-07, 2.3013479896872999e+00, 2.6317235358158002e+00 },
+ { 6.6598200279999996e-07, 3.5359530295549999e+00, 3.3868163258510000e+00 },
+ { -6.3396652490000003e-07, 3.9268665697902998e+00, 4.4426670658559004e+00 },
+ { -6.2863076009999996e-07, 1.9440608894161999e+00, 7.1160114019304004e+00 },
+ { -6.1287051129999997e-07, 2.5027415074657999e+00, 6.2249001971556002e+00 },
+ { 5.6608073960000000e-07, 1.3729316457251000e+00, -3.1355655165873002e+00 },
+ { -5.2065514129999997e-07, 5.5749300982468997e+00, -6.2507103665413002e+00 },
+ { -4.7184814180000003e-07, 4.5366605084874001e+00, 1.6786677353000000e-04 },
+ { -4.5839704219999998e-07, 1.9351070248496001e+00, -9.8151695574500000e+00 },
+ { -4.5778541729999998e-07, 6.2350780976533997e+00, 1.7563373058434000e+00 },
+ { 3.4660296600000001e-07, 7.5412427489766998e-01, 1.5807097495700001e-02 }
};
static const vsop_term_t jm_Ganymede_zeta[] =
{
- { 7.1566594572575002e-03, 0.0000000000000000e+00, 0.0000000000000000e+00 },
- { 1.3930299110000000e-06, 1.1586745884981000e+00, 2.6733443704265998e+00 },
- { 6.4498293460000002e-07, 5.6222145702102004e+00, 8.9111478887838003e-01 },
- { 2.2980595200000000e-07, 1.2995924044108000e+00, 1.0034433456728999e+00 },
- { -1.2214343700000001e-07, 4.9612436330514997e+00, 1.7822295777568000e+00 },
- { 1.0957981760000000e-07, 1.9486708778349999e+00, 1.5051650461529000e+00 },
- { 7.0143561600000002e-08, 6.4978508114195999e-01, 5.0172166963137999e-01 },
- { 5.4786856599999997e-08, 2.5992050672074001e+00, 2.0068866945508002e+00 },
- { -3.9463585799999999e-08, 2.3173535605651998e+00, 5.3466887181044003e+00 },
- { -3.6322142799999998e-08, 3.6393008632055999e+00, 3.5644591656241000e+00 },
- { 2.9094936400000000e-08, 2.0123392230605002e+00, 1.7535157350384001e+00 },
- { 2.8124496800000000e-08, 3.2490010762048001e+00, 2.5086083721948000e+00 },
- { -2.0792469799999999e-08, 2.9783308899923000e+00, 4.4555739317535998e+00 },
- { 1.4689677399999999e-08, 3.8988244013503999e+00, 3.0103300418262000e+00 },
- { -1.1993004200000000e-08, 1.6563968316083000e+00, 6.2378035398421998e+00 },
- { 1.1206746000000001e-08, 4.3188665692818997e+00, 1.3034138285340001e-02 },
- { -1.0953513200000000e-08, 4.9372826282154003e+00, 1.3584834937940000e-02 },
- { 9.9867772000000005e-09, 9.6700720263957995e-01, 6.2699633776977004e-01 },
- { 7.7668260000000001e-09, 4.5486373016444004e+00, 3.5120517182683000e+00 },
- { 7.4143972000000003e-09, 1.6140449852661001e-01, 1.2531361661566001e-01 },
- { 6.6346637999999999e-09, 3.3441073536010002e-01, 8.0200331112799006e+00 },
- { 5.7842684000000002e-09, 1.4936630646671001e+00, 1.2938928799370000e-02 },
- { -5.5768351999999997e-09, 4.4651777597612998e+00, 1.1287386144710001e+00 },
- { -4.9395106000000002e-09, 6.1563894598809004e+00, 1.7520662093793000e+00 },
- { 4.1439704000000002e-09, 5.1984558307997997e+00, 4.0137734147420998e+00 },
- { -4.0765630000000004e-09, 9.9543742426921999e-01, 7.1289183312483004e+00 },
- { -3.6862061999999999e-09, 4.6386836178625996e+00, 1.0693377254217999e+01 },
- { 3.3617537999999999e-09, 3.7493658441447999e+00, 8.7808669180167997e-01 },
- { 3.3348284000000001e-09, 2.2668196818989998e+00, 1.6304394485672999e+00 },
- { -2.5754697999999999e-09, 3.3293196902303002e-01, 1.7952648120307000e+00 },
- { 2.4363084000000001e-09, 1.9604838407748999e+00, 1.1232854513197001e-01 },
- { 2.2265431999999998e-09, 5.8482745704418004e+00, 4.5154950951905004e+00 },
- { 2.0032675999999999e-09, 2.9166648062068998e+00, 2.1321610765333001e+00 },
- { -1.8115706000000000e-09, 9.9782757414001000e-01, 9.0414978368384002e-01 },
- { 1.4535006000000000e-09, 1.8748212041600001e+00, 8.9112137093505996e+00 },
- { -6.8192600000000001e-10, 1.9871670124324001e-01, 2.4675315493830001e-02 },
- { 4.4337759999999998e-10, 2.4880003003965001e+00, 2.5119610196649999e-02 },
- { -2.8366580000000002e-10, 5.8126277034760996e+00, 2.5973068607520002e-02 }
+ { 1.5932721570848000e-03, 3.3368862796665000e+00, -1.2491307058000000e-04 },
+ { 8.5330931289049998e-04, 2.4133881688166001e+00, 0.0000000000000000e+00 },
+ { 3.5133479110369999e-04, 5.9720789850126996e+00, -3.0561017709999999e-05 },
+ { -1.4419292554829999e-04, 1.0477061764435001e+00, -5.6920632124000004e-04 },
+ { 1.5730352775000001e-05, 5.5604041197703999e+00, 2.9003665011199998e-03 },
+ { 2.5161319881000002e-06, 2.8477653709685002e-01, -1.4500554486800001e-03 },
+ { 2.0438305183000002e-06, 1.7652628559998000e+00, 1.4501383926500001e-03 },
+ { 1.7939612783999999e-06, 4.5568977341582997e+00, 4.3504621590400002e-03 },
+ { 1.3614276894999999e-06, 8.4898872627944999e-01, -2.5244521900630000e-02 },
+ { -8.9961090169999997e-07, 4.6441156003339996e+00, 3.0253214588300001e-03 },
+ { -8.7020784300000002e-07, 2.7972000093550999e+00, -2.3150965645099999e-03 },
+ { -4.3711440640000000e-07, 4.8429530385678996e+00, -2.5688816011499999e-02 },
+ { -2.1742593739999999e-07, 5.7543785603741000e+00, -2.5813642993310001e-02 },
+ { -1.9263978690000001e-07, 2.0118539705648000e+00, 2.9330596864500002e-03 },
+ { 1.5892796560000001e-07, 3.5554727018503001e+00, 5.8005577768399999e-03 },
+ { -1.4322287529999999e-07, 1.1966574544002000e+00, -1.5750124983800000e-03 },
+ { -9.2621340799999995e-08, 2.2052538606468999e+00, -2.5782797426020000e-02 },
+ { 1.0690200000000000e-11, 4.5764213311755002e+00, -3.2611614716799998e-02 }
};
static const vsop_term_t jm_Callisto_a[] =
@@ -3911,97 +3860,231 @@ static const vsop_term_t jm_Callisto_a[] =
static const vsop_term_t jm_Callisto_l[] =
{
- { 1.2587970171531401e-02, 0.0000000000000000e+00, 0.0000000000000000e+00 },
- { 3.5952049470000002e-06, 6.4965776007116005e-01, 5.0172168165034003e-01 },
- { 2.7580210651999999e-06, 1.8084235781510001e+00, 3.1750660413359002e+00 },
- { 1.2874896172000000e-06, 6.2718908285025003e+00, 1.3928364698403000e+00 },
- { -4.1737291059999998e-07, 1.2990650292663000e+00, 1.0034433697108001e+00 },
- { 2.7907577180000001e-07, 7.1428870045576998e-01, 7.5007225869130001e-01 },
- { -1.9982522579999999e-07, 1.9489881012004000e+00, 1.5051650461529000e+00 },
- { -1.0011498380000000e-07, 2.5987168731338000e+00, 2.0068867266014001e+00 },
- { -5.1396709200000000e-08, 3.2484798706247000e+00, 2.5086084022422002e+00 },
- { -4.7568799200000003e-08, 4.8635521917695996e+00, 7.4862216593606001e-01 },
- { 3.4824224000000000e-08, 1.5082713497295000e-01, 3.7645917070524998e-01 },
- { 2.8384063000000001e-08, 5.1672973364888000e+00, 1.2530678073049001e-01 },
- { -2.6323463799999999e-08, 3.3499822210494998e+00, 3.0103491232578001e+00 },
- { 2.3910634600000001e-08, 4.3573519442736002e+00, 6.2698238798737005e-01 },
- { 2.1997742200000000e-08, 1.5075404808879000e+00, 2.7986109086768001e+00 },
- { -1.7114447800000001e-08, 6.2607361864776996e+00, 2.7856729335053001e+00 },
- { -1.4195683400000000e-08, 4.5481077718909999e+00, 3.5120517575302999e+00 },
- { -1.2000363000000000e-08, 1.8583887479126999e+00, 1.1287042579152000e+00 },
- { 1.0841890400000000e-08, 5.4873138800427004e+00, 6.7395238593127003e+00 },
- { 1.0821825400000000e-08, 5.9772630516668999e+00, 1.0163811590412000e+00 },
- { 2.4776419999999997e-10, 5.6894071957878003e+00, 6.5165021654000005e-04 },
- { -1.8745760000000000e-10, 2.8598333265121001e+00, 5.5639542661000004e-04 }
+ { 5.5860401238239999e-04, 2.1404207189814999e+00, 1.4500979323100001e-03 },
+ { -3.8058138681759999e-04, 2.7358844897852999e+00, 2.9729650620000000e-05 },
+ { 2.2051528632620001e-04, 6.4979652596399995e-01, 5.0172167243580001e-01 },
+ { 1.8778951511580000e-04, 1.8084787604004999e+00, 3.1750660413359002e+00 },
+ { 7.6691697524199995e-05, 6.2720114319754998e+00, 1.3928364636651001e+00 },
+ { 7.4705685510599996e-05, 1.2995916202344000e+00, 1.0034433456728999e+00 },
+ { -3.8832329736600000e-05, 7.1289234751879005e-01, 7.5007236972327995e-01 },
+ { 3.3503648431399999e-05, 5.3712641184981003e+00, 1.2494011725000000e-04 },
+ { 2.9303267793800000e-05, 1.9493939340593001e+00, 1.5051650209131000e+00 },
+ { 1.8594093547200001e-05, 1.4630998372377000e+00, 2.9001339405200000e-03 },
+ { -1.7043802288599998e-05, 5.6893382353856001e+00, 6.5165044780999995e-04 },
+ { 1.5139383311400001e-05, 2.8749516044613999e+00, 5.5646069066999997e-04 },
+ { -1.4882563725599999e-05, 3.3321074618840001e+00, 1.2530790075011000e-01 },
+ { 1.2992789668199999e-05, 2.5991973549464999e+00, 2.0068866945508002e+00 },
+ { -1.1611739877200000e-05, 5.6192268627131003e+00, 9.3166256720000003e-05 },
+ { 6.6211702893999998e-06, 4.8564958193205996e+00, 7.4862286166569003e-01 },
+ { 6.5387442486000002e-06, 3.5580120361823999e+00, 1.6550513741900000e-03 },
+ { 6.1580798140000002e-06, 3.2490037889701000e+00, 2.5086083721948000e+00 },
+ { 4.6797140778000002e-06, 9.6612169919707003e-01, 6.2699716616711998e-01 }
};
static const vsop_term_t jm_Callisto_z[] =
{
- { 1.2587970171531401e-02, 0.0000000000000000e+00, 0.0000000000000000e+00 },
- { 3.5952049470000002e-06, 6.4965776007116005e-01, 5.0172168165034003e-01 },
- { 2.7580210651999999e-06, 1.8084235781510001e+00, 3.1750660413359002e+00 },
- { 1.2874896172000000e-06, 6.2718908285025003e+00, 1.3928364698403000e+00 },
- { -4.1737291059999998e-07, 1.2990650292663000e+00, 1.0034433697108001e+00 },
- { 2.7907577180000001e-07, 7.1428870045576998e-01, 7.5007225869130001e-01 },
- { -1.9982522579999999e-07, 1.9489881012004000e+00, 1.5051650461529000e+00 },
- { -1.0011498380000000e-07, 2.5987168731338000e+00, 2.0068867266014001e+00 },
- { -5.1396709200000000e-08, 3.2484798706247000e+00, 2.5086084022422002e+00 },
- { -4.7568799200000003e-08, 4.8635521917695996e+00, 7.4862216593606001e-01 },
- { 3.4824224000000000e-08, 1.5082713497295000e-01, 3.7645917070524998e-01 },
- { 2.8384063000000001e-08, 5.1672973364888000e+00, 1.2530678073049001e-01 },
- { -2.6323463799999999e-08, 3.3499822210494998e+00, 3.0103491232578001e+00 },
- { 2.3910634600000001e-08, 4.3573519442736002e+00, 6.2698238798737005e-01 },
- { 2.1997742200000000e-08, 1.5075404808879000e+00, 2.7986109086768001e+00 },
- { -1.7114447800000001e-08, 6.2607361864776996e+00, 2.7856729335053001e+00 },
- { -1.4195683400000000e-08, 4.5481077718909999e+00, 3.5120517575302999e+00 },
- { -1.2000363000000000e-08, 1.8583887479126999e+00, 1.1287042579152000e+00 },
- { 1.0841890400000000e-08, 5.4873138800427004e+00, 6.7395238593127003e+00 },
- { 1.0821825400000000e-08, 5.9772630516668999e+00, 1.0163811590412000e+00 },
- { 2.4776419999999997e-10, 5.6894071957878003e+00, 6.5165021654000005e-04 },
- { -1.8745760000000000e-10, 2.8598333265121001e+00, 5.5639542661000004e-04 }
+ { 7.3755808467977002e-03, 5.5836071576083999e+00, 3.2065099140000001e-05 },
+ { 2.0659241699420001e-04, 5.9209831565786004e+00, 3.7648624194703001e-01 },
+ { 1.5898697640210000e-04, 2.8744006242622999e-01, 8.7820792442520001e-01 },
+ { -1.5611316053480001e-04, 2.1257397865089001e+00, 1.2727441285000001e-04 },
+ { 1.4860433809710000e-04, 1.4462134301023000e+00, 3.5515522949801999e+00 },
+ { 6.3507310873099995e-05, 5.9096803285953996e+00, 1.7693227129285001e+00 },
+ { 5.9935169852500000e-05, 4.1125517584797997e+00, -2.7985797954588998e+00 },
+ { 5.4066084273100000e-05, 5.5390350845569003e+00, 2.8683408228299999e-03 },
+ { -4.8959690086600002e-05, 4.6218149483337996e+00, -6.2695712529518999e-01 },
+ { 3.3368228352799997e-05, 5.2066975238879998e+00, -3.7358601734496999e-01 },
+ { 2.9583242727899999e-05, 5.9322697896515999e+00, -1.0163502275209000e+00 },
+ { 2.9232546133700001e-05, 5.2707623402008004e+00, -1.2523542448602001e-01 },
+ { 1.9758836944099999e-05, 3.3317768022759000e+00, 0.0000000000000000e+00 },
+ { -1.8355102974600001e-05, 3.9720443249757000e+00, -1.1286788041058000e+00 },
+ { 9.0411191759000008e-06, 5.5606719963947002e+00, 1.4501837490799999e-03 },
+ { -8.1987970451999992e-06, 3.3223313720086001e+00, -1.6304004832039001e+00 },
+ { -6.0406575086999999e-06, 1.3970265485561999e+00, 4.3191832032300004e-03 },
+ { 5.6895636122000000e-06, 4.1990956668120001e+00, -3.7213592656720001e-01 },
+ { -4.0434854858999997e-06, 4.7008406172133999e+00, -2.5049602889287997e-01 },
+ { -3.9403527376000004e-06, 2.6725832255243001e+00, -2.1321221654765998e+00 },
+ { 3.6901291978000001e-06, 3.5207772267753001e-01, 1.1265585018524999e+00 },
+ { -2.8551622595999998e-06, 5.5601265129356001e+00, -3.1584886140000002e-05 },
+ { -2.6588026505000001e-06, 2.5969882784477000e-01, 1.4182025553300000e-03 },
+ { -1.9711212462999999e-06, 2.0228019680495999e+00, -2.6338438454332000e+00 },
+ { 1.9322089805999999e-06, 5.1418595457408003e+00, 2.5123117908846998e-01 },
+ { -1.8673159813000000e-06, 9.3674892088246997e-01, 1.3799296163046999e+00 },
+ { 1.6838424078000000e-06, 6.0796033426941003e+00, 7.5294520843775004e-01 },
+ { -1.6695689644000000e-06, 1.5867810488422001e+00, 1.8816512864243000e+00 },
+ { 1.6317841395000001e-06, 4.5789534393208999e+00, 1.4822429153000000e-03 },
+ { -1.6159095086999999e-06, 3.0157253757329000e-01, -1.4180284447900000e-03 },
+ { -1.4034621874000000e-06, 5.9433512039442000e+00, -2.4091866865037002e+00 },
+ { -1.2029942283000000e-06, 2.7137754880270002e+00, 2.7731373092900000e-03 },
+ { -1.1758260607000000e-06, 4.0581098970285003e+00, -7.5221789504525005e-01 },
+ { -1.0798624964000000e-06, 2.2364861319451999e+00, 2.3833729650228999e+00 },
+ { -1.0108880552000000e-06, 1.3729872033949000e+00, -3.1355655165873002e+00 },
+ { -8.8766818069999996e-07, 5.0534107615010004e+00, -5.0169281575682001e-01 },
+ { 8.8693821170000004e-07, 5.0147420853991003e+00, 6.8353864231000003e-04 },
+ { -8.1946990110000000e-07, 6.2190878357566000e+00, -3.7503615934218998e-01 },
+ { 7.0937821579999996e-07, 4.4118312641559001e+00, -2.4221246131671998e+00 },
+ { 6.7287370589999999e-07, 3.1910016062920001e+00, -3.7068584881726002e-01 },
+ { 6.2973459819999996e-07, 1.3595719733984000e+00, 1.1251084135564000e+00 },
+ { 6.1288997570000004e-07, 5.1402161299289997e+00, 7.1160095483086998e+00 },
+ { -5.5809870489999999e-07, 3.4117733109009998e+00, -1.2539396666771001e+00 },
+ { 5.3213180020000005e-07, 3.5377046967957000e+00, 5.7685340271300001e-03 },
+ { -4.7390866609999999e-07, 2.1645217929478000e+00, 5.8845474482000003e-04 },
+ { 4.5189286579999998e-07, 4.4963664372726999e+00, 2.9023325111200001e-03 }
};
static const vsop_term_t jm_Callisto_zeta[] =
{
- { 1.2587970171531401e-02, 0.0000000000000000e+00, 0.0000000000000000e+00 },
- { 3.5952049470000002e-06, 6.4965776007116005e-01, 5.0172168165034003e-01 },
- { 2.7580210651999999e-06, 1.8084235781510001e+00, 3.1750660413359002e+00 },
- { 1.2874896172000000e-06, 6.2718908285025003e+00, 1.3928364698403000e+00 },
- { -4.1737291059999998e-07, 1.2990650292663000e+00, 1.0034433697108001e+00 },
- { 2.7907577180000001e-07, 7.1428870045576998e-01, 7.5007225869130001e-01 },
- { -1.9982522579999999e-07, 1.9489881012004000e+00, 1.5051650461529000e+00 },
- { -1.0011498380000000e-07, 2.5987168731338000e+00, 2.0068867266014001e+00 },
- { -5.1396709200000000e-08, 3.2484798706247000e+00, 2.5086084022422002e+00 },
- { -4.7568799200000003e-08, 4.8635521917695996e+00, 7.4862216593606001e-01 },
- { 3.4824224000000000e-08, 1.5082713497295000e-01, 3.7645917070524998e-01 },
- { 2.8384063000000001e-08, 5.1672973364888000e+00, 1.2530678073049001e-01 },
- { -2.6323463799999999e-08, 3.3499822210494998e+00, 3.0103491232578001e+00 },
- { 2.3910634600000001e-08, 4.3573519442736002e+00, 6.2698238798737005e-01 },
- { 2.1997742200000000e-08, 1.5075404808879000e+00, 2.7986109086768001e+00 },
- { -1.7114447800000001e-08, 6.2607361864776996e+00, 2.7856729335053001e+00 },
- { -1.4195683400000000e-08, 4.5481077718909999e+00, 3.5120517575302999e+00 },
- { -1.2000363000000000e-08, 1.8583887479126999e+00, 1.1287042579152000e+00 },
- { 1.0841890400000000e-08, 5.4873138800427004e+00, 6.7395238593127003e+00 },
- { 1.0821825400000000e-08, 5.9772630516668999e+00, 1.0163811590412000e+00 },
- { 2.4776419999999997e-10, 5.6894071957878003e+00, 6.5165021654000005e-04 },
- { -1.8745760000000000e-10, 2.8598333265121001e+00, 5.5639542661000004e-04 }
+ { 3.8422977898495002e-03, 2.4133922085556998e+00, 0.0000000000000000e+00 },
+ { 2.2453891791893998e-03, 5.9721736773277003e+00, -3.0561255249999997e-05 },
+ { -2.6044794505589999e-04, 3.3368746306408998e+00, -1.2491309972000001e-04 },
+ { 3.3211214322999998e-05, 5.5604137742336999e+00, 2.9003768850700000e-03 },
+ { 4.9727136260999998e-06, 2.8488229706820001e-01, -1.4500571761899999e-03 },
+ { -4.9416729113999996e-06, 1.0476908456459000e+00, -5.6920298857000005e-04 },
+ { 4.3945193427999998e-06, 1.7684273746003001e+00, 1.4501344524699999e-03 },
+ { 3.7630501588999999e-06, 4.5567680530533003e+00, 4.3504645406999996e-03 },
+ { -3.0823418750000001e-06, 2.0094360655956001e+00, 2.9313051376699999e-03 },
+ { 4.7197907110000001e-07, 1.8055417618741001e+00, 1.4195445432000000e-03 },
+ { -4.6371778649999999e-07, 3.8277528822157998e+00, -1.4808731001600000e-03 },
+ { 3.4972241750000002e-07, 4.6444360330108001e+00, 3.0253130162299999e-03 },
+ { -3.4671326260000001e-07, 1.0120757927163000e+00, 4.3816126822899997e-03 },
+ { 3.3244125699999998e-07, 3.5549391686605998e+00, 5.8005379032100004e-03 },
+ { 1.9453743510000000e-07, 6.1251687150859997e+00, 2.8808264872800002e-03 },
+ { 1.7277433290000000e-07, 1.1900773236610001e+00, -2.9001068524699999e-03 },
+ { -1.4851765850000001e-07, 6.2335834706368001e+00, 1.4807679092700000e-03 },
+ { 6.6692199999999995e-11, 4.0616225761770997e+00, -3.2724923474889998e-02 }
};
static jupiter_moon_t JupiterMoonModel[4] =
{
{ 2.8248942843381399e-07, {1.4462132960212239e+00, 3.5515522861824000e+00}, {38, jm_Io_a}, {32, jm_Io_l}, {23, jm_Io_z}, {15, jm_Io_zeta} },
- { 2.8248327439289299e-07, {3.7352634374713622e-01, 1.7693227111234699e+00}, {38, jm_Europa_a}, {36, jm_Europa_l}, {41, jm_Europa_z}, {25, jm_Europa_zeta} },
+ { 2.8248327439289299e-07, {-3.7352634374713622e-01, 1.7693227111234699e+00}, {38, jm_Europa_a}, {36, jm_Europa_l}, {41, jm_Europa_z}, {25, jm_Europa_zeta} },
{ 2.8249818418472298e-07, {2.8740893911433479e-01, 8.7820792358932798e-01}, {38, jm_Ganymede_a}, {31, jm_Ganymede_l}, {50, jm_Ganymede_z}, {18, jm_Ganymede_zeta} },
- { 2.8249214488990899e-07, {3.6203412913757038e-01, 3.7648623343382798e-01}, {22, jm_Callisto_a}, {19, jm_Callisto_l}, {46, jm_Callisto_z}, {18, jm_Callisto_zeta} }
+ { 2.8249214488990899e-07, {-3.6203412913757038e-01, 3.7648623343382798e-01}, {22, jm_Callisto_a}, {19, jm_Callisto_l}, {46, jm_Callisto_z}, {18, jm_Callisto_zeta} }
};
+static astro_state_vector_t JupiterMoon_elem2pv(astro_time_t time, double mu, double elem[6])
+{
+ /* Translation of FORTRAN subroutine ELEM2PV from: */
+ /* https://ftp.imcce.fr/pub/ephem/satel/galilean/L1/L1.2/ */
+ astro_state_vector_t state;
+ double EE, DE, CE, SE, DLE, RSAM1, ASR, PHI, PSI, X1, Y1, VX1, VY1, F2, P2, Q2, PQ;
+
+ const double A = elem[0];
+ const double AL = elem[1];
+ const double K = elem[2];
+ const double H = elem[3];
+ const double Q = elem[4];
+ const double P = elem[5];
+
+ const double AN = sqrt(mu / (A*A*A));
+
+ EE = AL + K*sin(AL) - H*cos(AL);
+ do
+ {
+ CE = cos(EE);
+ SE = sin(EE);
+ DE = (AL - EE + K*SE - H*CE) / (1.0 - K*CE - H*SE);
+ EE += DE;
+ }
+ while (fabs(DE) >= 1.0e-12);
+
+ CE = cos(EE);
+ SE = sin(EE);
+ DLE = H*CE - K*SE;
+ RSAM1 = -K*CE - H*SE;
+ ASR = 1.0/(1.0 + RSAM1);
+ PHI = sqrt(1.0 - K*K - H*H);
+ PSI = 1.0/(1.0 + PHI);
+ X1 = A*(CE - K - PSI*H*DLE);
+ Y1 = A*(SE - H + PSI*K*DLE);
+ VX1 = AN*ASR*A*(-SE - PSI*H*RSAM1);
+ VY1 = AN*ASR*A*(+CE + PSI*K*RSAM1);
+ F2 = 2.0*sqrt(1.0 - Q*Q - P*P);
+ P2 = 1.0 - 2.0*P*P;
+ Q2 = 1.0 - 2.0*Q*Q;
+ PQ = 2.0*P*Q;
+
+ state.x = X1*P2 + Y1*PQ;
+ state.y = X1*PQ + Y1*Q2;
+ state.z = (Q*Y1 - X1*P)*F2;
+
+ state.vx = VX1*P2 + VY1*PQ;
+ state.vy = VX1*PQ + VY1*Q2;
+ state.vz = (Q*VY1 - VX1*P)*F2;
+
+ state.t = time;
+ state.status = ASTRO_SUCCESS;
+ return state;
+}
+
+static astro_state_vector_t CalcJupiterMoon(astro_time_t time, int mindex)
+{
+ /* This is a translation of FORTRAN code by Duriez, Lainey, and Vienne: */
+ /* https://ftp.imcce.fr/pub/ephem/satel/galilean/L1/L1.2/ */
+
+ astro_state_vector_t state;
+ int k;
+ double arg;
+ double elem[6];
+ const jupiter_moon_t *m = &JupiterMoonModel[mindex];
+ const double t = time.tt + 18262.5; /* t = time since 1950-01-01T00:00:00Z */
+
+ /* Calculate 6 orbital elements at the given time t. */
+
+ elem[0] = 0.0;
+ for (k = 0; k < m->a.nterms; ++k)
+ {
+ arg = m->a.term[k].phase + (t * m->a.term[k].frequency);
+ elem[0] += m->a.term[k].amplitude * cos(arg);
+ }
+
+ elem[1] = m->al[0] + (t * m->al[1]);
+ for (k = 0; k < m->l.nterms; ++k)
+ {
+ arg = m->l.term[k].phase + (t * m->l.term[k].frequency);
+ elem[1] += m->l.term[k].amplitude * sin(arg);
+ }
+ elem[1] = fmod(elem[1], PI2);
+ if (elem[1] < 0.0)
+ elem[1] += PI2;
+
+ elem[2] = elem[3] = 0.0;
+ for (k = 0; k < m->z.nterms; ++k)
+ {
+ arg = m->z.term[k].phase + (t * m->z.term[k].frequency);
+ elem[2] += m->z.term[k].amplitude * cos(arg);
+ elem[3] += m->z.term[k].amplitude * sin(arg);
+ }
+
+ elem[4] = elem[5] = 0.0;
+ for (k = 0; k < m->zeta.nterms; ++k)
+ {
+ arg = m->zeta.term[k].phase + (t * m->zeta.term[k].frequency);
+ elem[4] += m->zeta.term[k].amplitude * cos(arg);
+ elem[5] += m->zeta.term[k].amplitude * sin(arg);
+ }
+
+ /* Convert the oribital elements into position vectors in the Jupiter equatorial system (JUP). */
+ state = JupiterMoon_elem2pv(time, m->mu, elem);
+
+ /* Re-orient position and velocity vectors from Jupiter-equatorial (JUP) to Earth-equatorial in J2000 (EQJ). */
+ return Astronomy_RotateState(Rotation_JUP_EQJ, state);
+}
+
+
/**
- * @brief Calculates positions of Jupiter's largest 4 moons.
+ * @brief Calculates jovicentric positions of Jupiter's largest 4 moons.
*
- * Calculates jovicentric position vectors for Jupiter's
- * moons Io, Europa, Ganymede, and Callisto, at the given date and time.
- * See #astro_jupiter_moons_t for more information about the representation
- * of the position vectors.
+ * Calculates position vectors for Jupiter's moons
+ * Io, Europa, Ganymede, and Callisto, at the given date and time.
+ * The position vectors are jovicentric, meaning their coordinate origin
+ * is the center of Jupiter. Their orientation is the Earth's equatorial
+ * system at the J2000 epoch, called `EQJ`. The vector components
+ * are expressed in astronomical units (AU).
+ *
+ * To convert to heliocentric vectors, call #Astronomy_HelioVector
+ * with `BODY_JUPITER` to get Jupiter's heliocentric position, then
+ * add the jovicentric vectors. Likewise, you can call #Astronomy_GeoVector
+ * with `BODY_JUPITER` to convert to geocentric vectors.
*
* @param time The date and time for which to calculate the position vectors.
* @return Position vectors of Jupiter's largest 4 moons, as described above.
@@ -4009,13 +4092,10 @@ static jupiter_moon_t JupiterMoonModel[4] =
astro_jupiter_moons_t Astronomy_JupiterMoons(astro_time_t time)
{
astro_jupiter_moons_t jm;
+ int mindex;
- (void)JupiterMoonModel;
-
- jm.moon[0] = VecError(ASTRO_NOT_INITIALIZED, time);
- jm.moon[1] = VecError(ASTRO_NOT_INITIALIZED, time);
- jm.moon[2] = VecError(ASTRO_NOT_INITIALIZED, time);
- jm.moon[3] = VecError(ASTRO_NOT_INITIALIZED, time);
+ for (mindex = 0; mindex < NUM_JUPITER_MOONS; ++mindex)
+ jm.moon[mindex] = CalcJupiterMoon(time, mindex);
return jm;
}
@@ -7555,6 +7635,45 @@ astro_vector_t Astronomy_RotateVector(astro_rotation_t rotation, astro_vector_t
}
+/**
+ * @brief
+ * Applies a rotation to a state vector, yielding a rotated vector.
+ *
+ * This function transforms a state vector in one orientation to a vector
+ * in another orientation.
+ *
+ * @param rotation
+ * A rotation matrix that specifies how the orientation of the vector is to be changed.
+ *
+ * @param state
+ * The state vector whose orientation is to be changed.
+ * Both the position and velocity components are transformed.
+ *
+ * @return
+ * A state vector in the orientation specified by `rotation`.
+ */
+astro_state_vector_t Astronomy_RotateState(astro_rotation_t rotation, astro_state_vector_t state)
+{
+ astro_state_vector_t target;
+
+ if (rotation.status != ASTRO_SUCCESS || state.status != ASTRO_SUCCESS)
+ return StateVecError(ASTRO_INVALID_PARAMETER, state.t);
+
+ target.status = ASTRO_SUCCESS;
+ target.t = state.t;
+
+ target.x = rotation.rot[0][0]*state.x + rotation.rot[1][0]*state.y + rotation.rot[2][0]*state.z;
+ target.y = rotation.rot[0][1]*state.x + rotation.rot[1][1]*state.y + rotation.rot[2][1]*state.z;
+ target.z = rotation.rot[0][2]*state.x + rotation.rot[1][2]*state.y + rotation.rot[2][2]*state.z;
+
+ target.vx = rotation.rot[0][0]*state.vx + rotation.rot[1][0]*state.vy + rotation.rot[2][0]*state.vz;
+ target.vy = rotation.rot[0][1]*state.vx + rotation.rot[1][1]*state.vy + rotation.rot[2][1]*state.vz;
+ target.vz = rotation.rot[0][2]*state.vx + rotation.rot[1][2]*state.vy + rotation.rot[2][2]*state.vz;
+
+ return target;
+}
+
+
/**
* @brief
* Calculates a rotation matrix from equatorial J2000 (EQJ) to ecliptic J2000 (ECL).
diff --git a/source/c/astronomy.h b/source/c/astronomy.h
index 3acfd1d8..fc9ec45c 100644
--- a/source/c/astronomy.h
+++ b/source/c/astronomy.h
@@ -217,6 +217,22 @@ typedef struct
}
astro_vector_t;
+/**
+ * @brief A state vector that contains a position (AU) and velocity (AU/day).
+ */
+typedef struct
+{
+ astro_status_t status; /**< `ASTRO_SUCCESS` if this struct is valid; otherwise an error code. */
+ double x; /**< The Cartesian position x-coordinate of the vector in AU. */
+ double y; /**< The Cartesian position y-coordinate of the vector in AU. */
+ double z; /**< The Cartesian position z-coordinate of the vector in AU. */
+ double vx; /**< The Cartesian velocity x-coordinate of the vector in AU/day. */
+ double vy; /**< The Cartesian velocity y-coordinate of the vector in AU/day. */
+ double vz; /**< The Cartesian velocity z-coordinate of the vector in AU/day. */
+ astro_time_t t; /**< The date and time at which this state vector is valid. */
+}
+astro_state_vector_t;
+
/**
* @brief Spherical coordinates: latitude, longitude, distance.
*/
@@ -865,18 +881,19 @@ astro_time_format_t;
* @brief Holds the positions of Jupiter's major 4 moons.
*
* The #Astronomy_JupiterMoons function returns this struct
- * to report position vectors for Jupiter's largest 4 moons
+ * to report position and velocity vectors for Jupiter's largest 4 moons
* Io, Europa, Ganymede, and Callisto. Each vector is relative
* to the center of Jupiter and is oriented in the EQJ system
* (that is, using Earth's equator at the J2000 epoch.)
- * The vector components are expressed in astronomical units (AU).
+ * The positions are expressed in astronomical units (AU),
+ * and the velocities in AU/day.
*
* The following integer constants may be useful for indexing
* into the `moon` array: #JM_IO, #JM_EUROPA, #JM_GANYMEDE, #JM_CALLISTO.
*/
typedef struct
{
- astro_vector_t moon[NUM_JUPITER_MOONS]; /**< Jovicentric coordinates of each moon, as described above. */
+ astro_state_vector_t moon[NUM_JUPITER_MOONS]; /**< Jovicentric position and velocity of each moon, as described above. */
}
astro_jupiter_moons_t;
@@ -987,6 +1004,7 @@ astro_equatorial_t Astronomy_EquatorFromVector(astro_vector_t vector);
astro_vector_t Astronomy_VectorFromHorizon(astro_spherical_t sphere, astro_time_t time, astro_refraction_t refraction);
astro_spherical_t Astronomy_HorizonFromVector(astro_vector_t vector, astro_refraction_t refraction);
astro_vector_t Astronomy_RotateVector(astro_rotation_t rotation, astro_vector_t vector);
+astro_state_vector_t Astronomy_RotateState(astro_rotation_t rotation, astro_state_vector_t state);
astro_rotation_t Astronomy_Rotation_EQD_EQJ(astro_time_t time);
astro_rotation_t Astronomy_Rotation_EQD_ECL(astro_time_t time);