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