Simple splined ephemeris model for Earth/Sun wrt Moon.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | private, | parameter | :: | kx | = | bspline_order_cubic |
spline interpolation order |
integer, | private, | parameter | :: | iknot | = | 0 |
use default knots |
type(celestial_body), | public, | parameter | :: | body_ssb | = | celestial_body(0, 'SSB', 0.0_wp) |
solar-system barycenter |
type(body_eph), | private, | target | :: | earth_eph | |||
type(body_eph), | private, | target | :: | sun_eph | |||
type(body_eph), | private, | target | :: | ssb_eph |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | id | = | 0 | ||
real(kind=wp), | public, | dimension(:,:), allocatable | :: | f |
function evals. not needed once the spline has been computed |
||
real(kind=wp), | public, | dimension(:,:), allocatable | :: | tx | |||
real(kind=wp), | public, | dimension(:,:), allocatable | :: | bcoef | |||
integer, | public | :: | nx | = | 0 |
procedure, public :: destroy => destroy_body_eph |
the interface to a splined ephemeris for a body
used for calls to db1val
.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | private | :: | inbvx | = | 0 | ||
real(kind=wp), | private, | dimension(:), allocatable | :: | w0 |
work array - dimension(3_ip*kx) |
||
type(body_eph), | private, | pointer | :: | eph | => | null() |
points to the ephemeris |
procedure, public :: get_r | |
procedure, public :: get_rv | |
procedure, public :: destroy => destroy_body_eph_interface |
make this an extension of the jpl_ephemeris,
since it is also needed in tranformations.
also, has the extra feature of a get_r
method,
since we don't need velocity for the gravity calculation.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(body_eph_interface), | public | :: | earth_eph_interface |
splined version of earth ephemeris |
|||
type(body_eph_interface), | public | :: | sun_eph_interface |
splined version of sun ephemeris |
|||
type(body_eph_interface), | public | :: | ssb_eph_interface |
splined version of ssb ephemeris |
procedure, public :: initialize_splinded_ephemeris | |
procedure, public :: initialize_globals | ../../ this is done once to initialize the global ephemeris vars |
procedure, public :: get_r => get_r_splined | |
procedure, public :: get_rv => get_rv_splined |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(body_eph_interface), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in) | :: | et |
ephemeris time (sec) |
position/velocity vector
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(body_eph_interface), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in) | :: | et |
ephemeris time (sec) |
position vector
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(body_eph), | intent(out) | :: | me |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(body_eph_interface), | intent(out) | :: | me |
initialize the earth and sun ephemeris.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(jpl_ephemeris_splined), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in) | :: | et0 |
initial ephemeris time [sec] |
||
real(kind=wp), | intent(in) | :: | dt |
ephemeris time step [sec] |
||
real(kind=wp), | intent(in) | :: | etf |
final ephemeris time [sec] |
the ephemeris must be initialized before this is called
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(jpl_ephemeris_splined), | intent(inout) | :: | me | |||
character(len=*), | intent(in) | :: | filename |
ephemeris file name |
||
integer, | intent(in), | optional | :: | ksize |
corresponding |
|
logical, | intent(in), | optional | :: | km |
defining physical units of the output states.
|
|
logical, | intent(in), | optional | :: | bary |
logical flag defining output center.
only the 9 planets are affected.
|
|
logical, | intent(out) | :: | status_ok |
true if there were no problems. |
||
real(kind=wp), | intent(in) | :: | et0 |
initial ephemeris time [sec] |
||
real(kind=wp), | intent(in) | :: | dt |
ephemeris time step [sec] |
||
real(kind=wp), | intent(in) | :: | etf |
final ephemeris time [sec] |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(jpl_ephemeris_splined), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in) | :: | et |
ephemeris time [sec] |
||
type(celestial_body), | intent(in) | :: | targ |
target body |
||
type(celestial_body), | intent(in) | :: | obs |
observer body |
||
real(kind=wp), | intent(out), | dimension(6) | :: | rv |
state of targ w.r.t. obs [km,km/s] in ICRF frame |
|
logical, | intent(out) | :: | status_ok |
true if there were no problems |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(jpl_ephemeris_splined), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in) | :: | et |
ephemeris time [sec] |
||
type(celestial_body), | intent(in) | :: | targ |
target body |
||
type(celestial_body), | intent(in) | :: | obs |
observer body |
||
real(kind=wp), | intent(out), | dimension(3) | :: | r |
r of targ w.r.t. obs [km] in ICRF frame |
|
logical, | intent(out) | :: | status_ok |
true if there were no problems |