Skip to content
Snippets Groups Projects
Commit efed6ebf authored by Luis Kornblueh's avatar Luis Kornblueh
Browse files

Added vsop87 for calculating the earth position from julian day.

parent 29e17cf0
No related branches found
No related tags found
No related merge requests found
......@@ -15,6 +15,7 @@ libmtime_la_SOURCES = calendar.c \
timedelta.c \
event_list.c \
event_handling.c \
vsop87.c \
libmtime.f90
if HAVE_RAGEL
......
......@@ -98,7 +98,7 @@ libmtime_la_LIBADD =
am_libmtime_la_OBJECTS = calendar.lo calendar_360day.lo \
calendar_365day.lo calendar_gregorian.lo iso8601.lo date.lo \
datetime.lo julian_day.lo time.lo timedelta.lo event_list.lo \
event_handling.lo libmtime.lo
event_handling.lo vsop87.lo libmtime.lo
libmtime_la_OBJECTS = $(am_libmtime_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
......@@ -343,6 +343,7 @@ libmtime_la_SOURCES = calendar.c \
timedelta.c \
event_list.c \
event_handling.c \
vsop87.c \
libmtime.f90
DISTCLEANFILES = libmtime.$(FC_MODEXT) \
......@@ -446,6 +447,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/julian_day.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timedelta.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vsop87.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
......
#include <math.h>
#define _pi 3.14159265358979323846
#define _dtor _pi/180.0
#define _stor _dtor/3600.0
struct vsop87_terms {
double a;
double b;
double c;
};
static
struct vsop87_terms l1[64] = {
{1.753470456730000e+00, 0.00000000000e+00, 0.000000000000000e+00},
{3.341656456000000e-02, 4.66925680417e+00, 6.283075849991400e+03},
{3.489427500000000e-04, 4.62610241759e+00, 1.256615169998280e+04},
{3.497056000000000e-05, 2.74411800971e+00, 5.753384884896800e+03},
{3.417571000000000e-05, 2.82886579606e+00, 3.523118349000000e+00},
{3.135896000000000e-05, 3.62767041758e+00, 7.771377146812050e+04},
{2.676218000000000e-05, 4.41808351397e+00, 7.860419392439200e+03},
{2.342687000000000e-05, 6.13516237631e+00, 3.930209696219600e+03},
{1.324292000000000e-05, 7.42463563520e-01, 1.150676976979360e+04},
{1.273166000000000e-05, 2.03709655772e+00, 5.296909650946000e+02},
{1.199167000000000e-05, 1.10962944315e+00, 1.577343542447800e+03},
{9.902500000000000e-06, 5.23268129594e+00, 5.884926846583200e+03},
{9.018550000000000e-06, 2.04505443513e+00, 2.629831979980000e+01},
{8.572229999999999e-06, 3.50849156957e+00, 3.981490034082000e+02},
{7.797859999999999e-06, 1.17882652114e+00, 5.223693919802200e+03},
{7.531410000000000e-06, 2.53339053818e+00, 5.507553238667400e+03},
{5.052640000000000e-06, 4.58292563052e+00, 1.884922754997420e+04},
{4.923790000000000e-06, 4.20506639861e+00, 7.755226113240000e+02},
{3.566550000000000e-06, 2.91954116867e+00, 6.731030280000000e-02},
{3.170870000000000e-06, 5.84901952218e+00, 1.179062908865880e+04},
{2.841250000000000e-06, 1.89869034186e+00, 7.962980068163999e+02},
{2.710390000000000e-06, 3.14886076490e-01, 1.097707880469900e+04},
{2.428100000000000e-06, 3.44811409060e-01, 5.486777843175000e+03},
{2.061600000000000e-06, 4.80646606059e+00, 2.544314419883400e+03},
{2.053850000000000e-06, 1.86947813692e+00, 5.573142801433100e+03},
{2.022610000000000e-06, 2.45767795458e+00, 6.069776754553400e+03},
{1.555160000000000e-06, 8.33060738070e-01, 2.132990954380000e+02},
{1.322120000000000e-06, 3.41118275555e+00, 2.942463423291600e+03},
{1.261840000000000e-06, 1.08302630210e+00, 2.077539549240000e+01},
{1.151320000000000e-06, 6.45449116830e-01, 9.803210682000000e-01},
{1.028510000000000e-06, 6.35998467270e-01, 4.694002954707600e+03},
{1.018950000000000e-06, 9.75692218240e-01, 1.572083878487840e+04},
{1.017240000000000e-06, 4.26679821365e+00, 7.113547000800000e+00},
{9.920600000000000e-07, 6.20992940258e+00, 2.146165416475200e+03},
{9.760700000000001e-07, 6.81012722700e-01, 1.554203994342000e+02},
{8.580300000000000e-07, 5.98322631256e+00, 1.610006857376741e+05},
{8.512800000000000e-07, 1.29870743025e+00, 6.275962302990600e+03},
{8.471100000000000e-07, 3.67080093025e+00, 7.143069561812909e+04},
{7.963700000000000e-07, 1.80791330700e+00, 1.726015465469040e+04},
{7.875600000000000e-07, 3.03698313141e+00, 1.203646073488820e+04},
{7.465100000000000e-07, 1.75508916159e+00, 5.088628839766800e+03},
{7.387400000000000e-07, 3.50319443167e+00, 3.154687084895600e+03},
{7.354700000000000e-07, 4.67926565481e+00, 8.018209311238001e+02},
{6.962700000000000e-07, 8.32975969660e-01, 9.437762934887000e+03},
{6.244899999999999e-07, 3.97763880587e+00, 8.827390269874801e+03},
{6.114800000000000e-07, 1.81839811024e+00, 7.084896781115200e+03},
{5.696300000000000e-07, 2.78430398043e+00, 6.286598968340400e+03},
{5.611600000000000e-07, 4.38694880779e+00, 1.414349524243060e+04},
{5.557700000000000e-07, 3.47006009062e+00, 6.279552731642400e+03},
{5.199200000000000e-07, 1.89149458340e-01, 1.213955350910680e+04},
{5.160500000000000e-07, 1.33282746983e+00, 1.748016413067000e+03},
{5.114500000000000e-07, 2.83068645010e-01, 5.856477659115400e+03},
{4.900000000000000e-07, 4.87350650330e-01, 1.194447010224600e+03},
{4.103600000000000e-07, 5.36817351402e+00, 8.429241266466601e+03},
{4.093800000000000e-07, 2.39850881707e+00, 1.965104848109800e+04},
{3.920000000000000e-07, 6.16832995016e+00, 1.044738783960440e+04},
{3.677000000000000e-07, 6.04133859347e+00, 1.021328554621100e+04},
{3.659600000000000e-07, 2.56955238628e+00, 1.059381930189200e+03},
{3.595400000000000e-07, 1.70876111898e+00, 2.352866153771800e+03},
{3.556600000000000e-07, 1.77597314691e+00, 6.812766815086000e+03},
{3.329100000000000e-07, 5.93094994590e-01, 1.778984561978500e+04},
{3.041200000000000e-07, 4.42944641350e-01, 8.399684731811189e+04},
{3.004700000000000e-07, 2.73975123935e+00, 1.349867409658800e+03},
{2.535200000000000e-07, 3.16470953405e+00, 4.690479836358600e+03}
};
static
struct vsop87_terms l2[34] = {
{6.283319667474910e+03, 0.00000000000e+00, 0.000000000000000e+00},
{2.060588630000000e-03, 2.67823455584e+00, 6.283075849991400e+03},
{4.303430000000000e-05, 2.63512650414e+00, 1.256615169998280e+04},
{4.252640000000000e-06, 1.59046980729e+00, 3.523118349000000e+00},
{1.192610000000000e-06, 5.79557487799e+00, 2.629831979980000e+01},
{1.089770000000000e-06, 2.96618001993e+00, 1.577343542447800e+03},
{9.347800000000000e-07, 2.59212835365e+00, 1.884922754997420e+04},
{7.212200000000000e-07, 1.13846158196e+00, 5.296909650946000e+02},
{6.776800000000000e-07, 1.87472304791e+00, 3.981490034082000e+02},
{6.732700000000000e-07, 4.40918235168e+00, 5.507553238667400e+03},
{5.902700000000000e-07, 2.88797038460e+00, 5.223693919802200e+03},
{5.597600000000000e-07, 2.17471680261e+00, 1.554203994342000e+02},
{4.540700000000000e-07, 3.98030798050e-01, 7.962980068163999e+02},
{3.636900000000000e-07, 4.66247398350e-01, 7.755226113240000e+02},
{2.895800000000000e-07, 2.64707383882e+00, 7.113547000800000e+00},
{2.084400000000000e-07, 5.34138275149e+00, 9.803210682000000e-01},
{1.909700000000000e-07, 1.84628332577e+00, 5.486777843175000e+03},
{1.850800000000000e-07, 4.96855124577e+00, 2.132990954380000e+02},
{1.729300000000000e-07, 2.99116864949e+00, 6.275962302990600e+03},
{1.623300000000000e-07, 3.21648304700e-02, 2.544314419883400e+03},
{1.583200000000000e-07, 1.43049285325e+00, 2.146165416475200e+03},
{1.461500000000000e-07, 1.20532366323e+00, 1.097707880469900e+04},
{1.246100000000000e-07, 2.83432285512e+00, 1.748016413067000e+03},
{1.187700000000000e-07, 3.25804815607e+00, 5.088628839766800e+03},
{1.180800000000000e-07, 5.27379790480e+00, 1.194447010224600e+03},
{1.151400000000000e-07, 2.07502418155e+00, 4.694002954707600e+03},
{1.064100000000000e-07, 7.66141992020e-01, 5.535694028424000e+02},
{9.969000000000000e-08, 1.30262991097e+00, 6.286598968340400e+03},
{9.720999999999999e-08, 4.23925472239e+00, 1.349867409658800e+03},
{9.452000000000000e-08, 2.69957062864e+00, 2.427286039740000e+02},
{8.577000000000001e-08, 5.64475868067e+00, 9.517184062506000e+02},
{7.576000000000000e-08, 5.30062664886e+00, 2.352866153771800e+03},
{6.385000000000001e-08, 2.65033984967e+00, 9.437762934887000e+03},
{6.101000000000000e-08, 4.66632584188e+00, 4.690479836358600e+03}
};
static
struct vsop87_terms l3[20] = {
{5.291887000000000e-04, 0.00000000000e+00, 0.000000000000000e+00},
{8.719837000000000e-05, 1.07209665242e+00, 6.283075849991400e+03},
{3.091250000000000e-06, 8.67288188320e-01, 1.256615169998280e+04},
{2.733900000000000e-07, 5.29787169100e-02, 3.523118349000000e+00},
{1.633400000000000e-07, 5.18826691036e+00, 2.629831979980000e+01},
{1.575200000000000e-07, 3.68457889430e+00, 1.554203994342000e+02},
{9.541000000000001e-08, 7.57422976750e-01, 1.884922754997420e+04},
{8.937000000000000e-08, 2.05705419118e+00, 7.771377146812050e+04},
{6.952000000000000e-08, 8.26733054100e-01, 7.755226113240000e+02},
{5.064000000000000e-08, 4.66284525271e+00, 1.577343542447800e+03},
{4.061000000000000e-08, 1.03057162962e+00, 7.113547000800000e+00},
{3.810000000000000e-08, 3.44050803490e+00, 5.573142801433100e+03},
{3.463000000000000e-08, 5.14074632811e+00, 7.962980068163999e+02},
{3.169000000000000e-08, 6.05291851171e+00, 5.507553238667400e+03},
{3.020000000000000e-08, 1.19246506441e+00, 2.427286039740000e+02},
{2.886000000000000e-08, 6.11652627155e+00, 5.296909650946000e+02},
{2.714000000000000e-08, 3.06378810250e-01, 3.981490034082000e+02},
{2.538000000000000e-08, 2.27992810679e+00, 5.535694028424000e+02},
{2.371000000000000e-08, 4.38118838167e+00, 5.223693919802200e+03},
{2.079000000000000e-08, 3.75435330484e+00, 9.803210682000000e-01}
};
static
struct vsop87_terms l4[7] = {
{2.892260000000000e-06, 5.84384198723e+00, 6.283075849991400e+03},
{3.495500000000000e-07, 0.00000000000e+00, 0.000000000000000e+00},
{1.681900000000000e-07, 5.48766912348e+00, 1.256615169998280e+04},
{2.962000000000000e-08, 5.19577265202e+00, 1.554203994342000e+02},
{1.288000000000000e-08, 4.72200252235e+00, 3.523118349000000e+00},
{7.140000000000000e-09, 5.30045809128e+00, 1.884922754997420e+04},
{6.350000000000000e-09, 5.96925937141e+00, 2.427286039740000e+02}
};
static
struct vsop87_terms l5[3] = {
{1.140840000000000e-06, 3.14159265359e+00, 0.000000000000000e+00},
{7.717000000000000e-08, 4.13446589358e+00, 6.283075849991400e+03},
{7.650000000000001e-09, 3.83803776214e+00, 1.256615169998280e+04}
};
static
struct vsop87_terms l6[1] = {
{8.780000000000000e-09, 3.14159265359e+00, 0.000000000000000e+00}
};
static
struct vsop87_terms b1[5] = {
{2.796200000000000e-06, 3.19870156017e+00, 8.433466158130829e+04},
{1.016430000000000e-06, 5.42248619256e+00, 5.507553238667400e+03},
{8.044500000000000e-07, 3.88013204458e+00, 5.223693919802200e+03},
{4.380600000000000e-07, 3.70444689758e+00, 2.352866153771800e+03},
{3.193300000000000e-07, 4.00026369781e+00, 1.577343542447800e+03}
};
static
struct vsop87_terms b2[2] = {
{9.029999999999999e-08, 3.89729061890e+00, 5.507553238667400e+03},
{6.177000000000000e-08, 1.73038850355e+00, 5.223693919802200e+03}
};
static
struct vsop87_terms r1[40] = {
{1.000139887990000e+00, 0.00000000000e+00, 0.000000000000000e+00},
{1.670699626000000e-02, 3.09846350771e+00, 6.283075849991400e+03},
{1.395602300000000e-04, 3.05524609620e+00, 1.256615169998280e+04},
{3.083720000000000e-05, 5.19846674381e+00, 7.771377146812050e+04},
{1.628461000000000e-05, 1.17387749012e+00, 5.753384884896800e+03},
{1.575568000000000e-05, 2.84685245825e+00, 7.860419392439200e+03},
{9.247990000000000e-06, 5.45292234084e+00, 1.150676976979360e+04},
{5.424440000000000e-06, 4.56409149777e+00, 3.930209696219600e+03},
{4.721100000000000e-06, 3.66100022149e+00, 5.884926846583200e+03},
{3.459830000000000e-06, 9.63686176870e-01, 5.507553238667400e+03},
{3.287800000000000e-06, 5.89983646482e+00, 5.223693919802200e+03},
{3.067840000000000e-06, 2.98671395120e-01, 5.573142801433100e+03},
{2.431890000000000e-06, 4.27349536153e+00, 1.179062908865880e+04},
{2.118290000000000e-06, 5.84714540314e+00, 1.577343542447800e+03},
{1.857520000000000e-06, 5.02194447178e+00, 1.097707880469900e+04},
{1.748440000000000e-06, 3.01193636534e+00, 1.884922754997420e+04},
{1.098350000000000e-06, 5.05510636285e+00, 5.486777843175000e+03},
{9.831599999999999e-07, 8.86813112770e-01, 6.069776754553400e+03},
{8.649900000000000e-07, 5.68959778254e+00, 1.572083878487840e+04},
{8.582500000000000e-07, 1.27083733351e+00, 1.610006857376741e+05},
{6.490300000000000e-07, 2.72506137870e-01, 1.726015465469040e+04},
{6.291600000000000e-07, 9.21771088320e-01, 5.296909650946000e+02},
{5.705600000000000e-07, 2.01374292014e+00, 8.399684731811189e+04},
{5.573600000000000e-07, 5.24159798933e+00, 7.143069561812909e+04},
{4.938400000000000e-07, 3.24501240359e+00, 2.544314419883400e+03},
{4.696300000000000e-07, 2.57805070386e+00, 7.755226113240000e+02},
{4.466100000000000e-07, 5.53715807302e+00, 9.437762934887000e+03},
{4.251500000000000e-07, 6.01110242003e+00, 6.275962302990600e+03},
{3.896800000000000e-07, 5.36071738169e+00, 4.694002954707600e+03},
{3.824500000000000e-07, 2.39255343974e+00, 8.827390269874801e+03},
{3.749000000000000e-07, 8.29529223320e-01, 1.965104848109800e+04},
{3.695700000000000e-07, 4.90107591914e+00, 1.213955350910680e+04},
{3.566000000000000e-07, 1.67468058995e+00, 1.203646073488820e+04},
{3.453700000000000e-07, 1.84270693282e+00, 2.942463423291600e+03},
{3.319300000000000e-07, 2.43703000980e-01, 7.084896781115200e+03},
{3.192100000000000e-07, 1.83682297810e-01, 5.088628839766800e+03},
{3.184600000000000e-07, 1.77775642085e+00, 3.981490034082000e+02},
{2.846400000000000e-07, 1.21344868176e+00, 6.286598968340400e+03},
{2.779300000000000e-07, 1.89934330904e+00, 6.279552731642400e+03},
{2.627500000000000e-07, 4.58896850401e+00, 1.044738783960440e+04}
};
static
struct vsop87_terms r2[10] = {
{1.030186080000000e-03, 1.10748969588e+00, 6.283075849991400e+03},
{1.721238000000000e-05, 1.06442301418e+00, 1.256615169998280e+04},
{7.022150000000000e-06, 3.14159265359e+00, 0.000000000000000e+00},
{3.234600000000000e-07, 1.02169059149e+00, 1.884922754997420e+04},
{3.079900000000000e-07, 2.84353804832e+00, 5.507553238667400e+03},
{2.497100000000000e-07, 1.31906709482e+00, 5.223693919802200e+03},
{1.848500000000000e-07, 1.42429748614e+00, 1.577343542447800e+03},
{1.007800000000000e-07, 5.91378194648e+00, 1.097707880469900e+04},
{8.654000000000001e-08, 1.42046854427e+00, 6.275962302990600e+03},
{8.634000000000000e-08, 2.71461506020e-01, 5.486777843175000e+03}
};
static
struct vsop87_terms r3[6] = {
{4.359385000000000e-05, 5.78455133738e+00, 6.283075849991400e+03},
{1.236330000000000e-06, 5.57934722157e+00, 1.256615169998280e+04},
{1.234100000000000e-07, 3.14159265359e+00, 0.000000000000000e+00},
{8.792000000000000e-08, 3.62777733395e+00, 7.771377146812050e+04},
{5.689000000000000e-08, 1.86958905084e+00, 5.573142801433100e+03},
{3.301000000000000e-08, 5.47027913302e+00, 1.884922754997420e+04}
};
static
struct vsop87_terms r4[2] = {
{1.445950000000000e-06, 4.27319435148e+00, 6.283075849991400e+03},
{6.729000000000000e-08, 3.91697608662e+00, 1.256615169998280e+04}
};
static
struct vsop87_terms r5[1] = {
{3.858000000000000e-08, 2.56384387339e+00, 6.283075849991400e+03}
};
static
double sum_vsop87 (double t, struct vsop87_terms *term, int ubound_term, int order)
{
double td10, tn, sum;
int k;
td10 = t*0.1;
sum = 0.0;
if ( ! (order == 1 && td10 == 0.0))
{
tn = pow(td10, (double)(order-1));
}
else
{
tn = 1.0;
}
for (k = 0; k < ubound_term; k++)
{
sum += term[k].a*cos(term[k].b+term[k].c*td10);
}
sum *= tn;
return sum;
}
/**
* @params[in] t number of centuries since j2000
* spherical coordinates, fk5
* @params[out] l longitude [radians]
* @params[out] b latitude [radians]
* @params[out] r radius [au] (au - astronomical units)
*/
void earth_position (double t, double *l, double *b, double *r)
{
double ld;
// calculate l, b, r
*l = 0.0; *b = 0.0; *r = 0.0;
// calculate l
*l += sum_vsop87 (t, l1, 64, 1);
*l += sum_vsop87 (t, l2, 34, 2);
*l += sum_vsop87 (t, l3, 20, 3);
*l += sum_vsop87 (t, l4, 7, 4);
*l += sum_vsop87 (t, l5, 3, 5);
*l += sum_vsop87 (t, l6, 1, 6);
*l = fmod(*l, 2.0*_pi);
// calculate b
*b += sum_vsop87 (t, b1, 5, 1);
*b += sum_vsop87 (t, b2, 2, 2);
// calculate r
*r += sum_vsop87 (t, r1, 40, 1);
*r += sum_vsop87 (t, r2, 10, 2);
*r += sum_vsop87 (t, r3, 6, 3);
*r += sum_vsop87 (t, r4, 2, 4);
*r += sum_vsop87 (t, r5, 1, 5);
// convert from dynamic to fk5 equator & ecliptic (need extra factor 0.1
// for t in the equation for ld compared to Meeus original development).
ld = *l - 0.1*t*(1.397+0.000031*t)*_dtor;
*l += (-0.09033+0.03916*tan(*b)*(cos(ld)+sin(ld)))*_stor;
*b += 0.03916*(cos(ld)-sin(ld))*_stor;
return;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment