a ballistic segment in the mission
t0, tf', andx0_rotating`.xf, xf_rotating| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| character(len=:), | public, | allocatable | :: | name |
the segment name |
||
| type(segment_data), | public | :: | data | ||||
| type(segment_data), | public | :: | cached_data |
used when computing gradients |
|||
| type(geopotential_model_pines), | public, | pointer | :: | grav | => | null() |
central body geopotential model |
| class(jpl_ephemeris), | public, | pointer | :: | eph | => | null() |
the ephemeris |
| type(moon_frame_interpolater), | public, | pointer | :: | moon_pa | => | null() |
the moon_pa frame interpolater |
| logical, | public | :: | pointmass_central_body | = | .false. | ||
| logical, | public | :: | include_pointmass_earth | = | .true. |
if true, earth is included as a pointmass in the force model |
|
| logical, | public | :: | include_pointmass_sun | = | .true. |
if true, sun is included as a pointmass in the force model |
|
| logical, | public | :: | include_pointmass_jupiter | = | .false. |
if true, jupiter is included as a pointmass in the force model |
|
| procedure(third_body_grav_f), | public, | pointer, nopass | :: | third_body_gravity | => | null() |
procedure used to compute 3rd body gravity |
| type(trajectory), | public | :: | traj_inertial |
in the inertial frame (j2000-moon) |
|||
| type(trajectory), | public | :: | traj_rotating |
in the rotating frame (moon-earth, moon-centered) |
|||
| type(trajectory), | public | :: | traj_se_rotating |
in the rotating frame (sun-earth, earth-centered) |
Sets all the info in a segment for it to be propagated.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(segment), | intent(inout) | :: | me | |||
| real(kind=wp), | intent(in) | :: | t0 |
[days] |
||
| real(kind=wp), | intent(in) | :: | tf |
[days] |
||
| real(kind=wp), | intent(in), | dimension(6) | :: | x0_rotating |
state in rotating frame |
Gets the initial states of a segment
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(segment), | intent(in) | :: | me | |||
| real(kind=wp), | intent(out), | optional | :: | t0 | ||
| real(kind=wp), | intent(out), | optional, | dimension(6) | :: | x0_rotating |
rotating frame |
After propagating a segment, this gets the outputs.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(segment), | intent(in) | :: | me | |||
| real(kind=wp), | intent(out), | optional, | dimension(6) | :: | xf |
inertial frame |
| real(kind=wp), | intent(out), | optional, | dimension(6) | :: | xf_rotating |
rotating frame |
| real(kind=wp), | intent(out), | optional, | dimension(6) | :: | x0_rotating |
Set the outputs of a segment, assuming it has been propagated elsewhere
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(segment), | intent(inout) | :: | me | |||
| real(kind=wp), | intent(in), | dimension(6) | :: | xf |
inertial frame |
|
| real(kind=wp), | intent(in), | dimension(6) | :: | xf_rotating |
inertial frame |
Propagate a segment (assumes the inputs have already been populated)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(segment), | intent(inout) | :: | me | |||
| integer, | intent(in), | optional | :: | mode |
1 - don't report steps, 2 - report steps (for plotting) |
|
| real(kind=wp), | intent(in), | optional | :: | tstep |
fixed time step for mode=2 |
Set all the data in a segment.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(segment), | intent(inout) | :: | me | |||
| type(segment_data), | intent(in) | :: | d |
type,extends(ddeabm_class) :: segment !! a ballistic segment in the mission !! !! * central body is the Moon (8x8 gravity), !! with Earth and Sun as third-bodies. !! * Inputs are: `t0`, `tf', and `x0_rotating`. !! * Output are: `xf`, `xf_rotating` character(len=:),allocatable :: name !! the segment name type(segment_data) :: data type(segment_data) :: cached_data !! used when computing gradients ! These can be pointers that are pointing to the global ones in the mission, ! Or, when using OpenMP, they are allocated in each segment. type(geopotential_model_pines),pointer :: grav => null() !! central body geopotential model class(jpl_ephemeris),pointer :: eph => null() !! the ephemeris type(moon_frame_interpolater),pointer :: moon_pa => null() !! the moon_pa frame interpolater logical :: pointmass_central_body = .false. logical :: include_pointmass_earth = .true. !! if true, earth is included as a pointmass in the force model logical :: include_pointmass_sun = .true. !! if true, sun is included as a pointmass in the force model logical :: include_pointmass_jupiter = .false. !! if true, jupiter is included as a pointmass in the force model procedure(third_body_grav_f),pointer,nopass :: third_body_gravity => null() !! procedure used to compute 3rd body gravity ! for saving the trajectory for plotting: type(trajectory) :: traj_inertial !! in the inertial frame (j2000-moon) type(trajectory) :: traj_rotating !! in the rotating frame (moon-earth, moon-centered) type(trajectory) :: traj_se_rotating !! in the rotating frame (sun-earth, earth-centered) contains procedure,public :: set_input => set_segment_inputs procedure,public :: get_inputs => get_segment_inputs procedure,public :: get_outputs => get_segment_outputs procedure,public :: set_outputs => set_segment_outputs procedure,public :: propagate => propagate_segment procedure :: cache procedure :: uncache procedure :: put_data_in_segment end type segment