a reference frame defines an orientation at
a specified frame center at a specified epoch.
Usually, the center is the primary_body
of the
frame, but can be otherwise for a
two_body_rotating_frame.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(celestial_body), | private | :: | primary_body | = | body_earth |
the primary body of the frame |
|
real(kind=wp), | private | :: | et | = | zero |
epoch at which the frame is defined [sec] |
coordinate transformation routine
Transform a Cartesian state from one reference frame to another at
a specified epoch. The from
and to
reference_frames may each
be defined at a different epoch. The et
ephemeris time is the time
the transformation is to be done, and accounts for the motion of the two
frame centers from from%et
and to%et
to et
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(reference_frame), | intent(inout) | :: | from | |||
real(kind=wp), | intent(in), | dimension(6) | :: | rv | ||
class(reference_frame), | intent(inout) | :: | to | |||
real(kind=wp), | intent(in) | :: | et |
the time of the transformation [sec] |
||
class(ephemeris_class), | intent(inout) | :: | eph |
for ephemeris computations (assumed to have already been initialized) |
||
real(kind=wp), | intent(out), | dimension(6) | :: | rv_out | ||
logical, | intent(out) | :: | status_ok |
to get the rotating matrix for the frame orientation
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(reference_frame), | intent(inout) | :: | me | |||
class(ephemeris_class), | intent(inout) | :: | eph |
for ephemeris computations (assumed to have already been initialized) |
||
logical, | intent(in) | :: | to_icrf | |||
real(kind=wp), | intent(out), | dimension(3,3) | :: | c | ||
real(kind=wp), | intent(out), | optional, | dimension(3,3) | :: | cdot | |
logical, | intent(out) | :: | status_ok |
type,abstract,public :: reference_frame !! a reference frame defines an orientation at !! a specified frame center at a specified epoch. !! Usually, the center is the `primary_body` of the !! frame, but can be otherwise for a !! [[two_body_rotating_frame]]. private type(celestial_body) :: primary_body = body_earth !! the primary body of the frame real(wp) :: et = zero !! epoch at which the frame is defined [sec] contains private procedure,pass(from),public :: transform !! coordinate transformation routine procedure(c_cdot_func),deferred :: get_c_cdot !! to get the rotating matrix for the frame orientation end type reference_frame