Main module with all the stuff to solve the Halo problem.
main program
data for a segment
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=wp), | public | :: | et_ref | = | zero |
ephemeris time reference epoch (all times relative to this) |
|
real(kind=wp), | public | :: | t0 | = | zero |
initial time [days] |
|
real(kind=wp), | public | :: | t0_scale | = | one |
opt var scale for |
|
real(kind=wp), | public | :: | t0_dpert | = | 1.0e-5_wp |
opt var dpert for |
|
real(kind=wp), | public, | dimension(6) | :: | x0_rotating | = | zero |
initial state [km, km/s], rotating frame |
real(kind=wp), | public, | dimension(6) | :: | x0_rotating_scale | = | one |
opt var scale for |
real(kind=wp), | public, | dimension(6) | :: | x0_rotating_dpert | = | [1.0e-2_wp, 1.0e-2_wp, 1.0e-2_wp, 1.0e-5_wp, 1.0e-5_wp, 1.0e-5_wp] |
opt var dperts for |
real(kind=wp), | public, | dimension(6) | :: | x0 | = | zero |
initial state [km, km/s], inertial frame |
real(kind=wp), | public | :: | tf | = | zero |
final time [days] |
|
real(kind=wp), | public, | dimension(6) | :: | xf | = | zero |
final state [km, km/s], inertial frame |
real(kind=wp), | public, | dimension(6) | :: | xf_rotating | = | zero |
final state [km, km/s], rotating frame |
real(kind=wp), | public, | dimension(6) | :: | xf_rotating_scale | = | one |
func scale for |
a segment trajectory (for plotting or output)
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
real(kind=wp), | public, | dimension(:), allocatable | :: | et | |||
real(kind=wp), | public, | dimension(:), allocatable | :: | x | |||
real(kind=wp), | public, | dimension(:), allocatable | :: | y | |||
real(kind=wp), | public, | dimension(:), allocatable | :: | z | |||
real(kind=wp), | public, | dimension(:), allocatable | :: | vx | |||
real(kind=wp), | public, | dimension(:), allocatable | :: | vy | |||
real(kind=wp), | public, | dimension(:), allocatable | :: | vz |
procedure, public :: destroy => destroy_trajectory | |
procedure, public :: add => add_point_to_trajectory |
a ballistic segment in the mission
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 [global] |
class(jpl_ephemeris), | public, | pointer | :: | eph | => | null() |
the ephemeris [global] |
logical, | public | :: | pointmass_central_body | = | .false. | ||
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) |
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, public :: cache | |
procedure, public :: uncache | |
procedure, public :: put_data_in_segment |
the mission [this is a numdiff_type
for
organizational purposes.... rethink this maybe ...
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
character(len=:), | public, | allocatable | :: | initial_guess_from_file |
to read the initial guess from a JSOn file |
||
logical, | public | :: | use_splined_ephemeris | = | .false. |
if true, the ephemeris is splined |
|
real(kind=wp), | public | :: | dt_spline_sec | = | 3600.0_wp |
time step in seconds for spline step [1 hr] |
|
logical, | public | :: | pointmass_central_body | = | .false. |
if true, the central body is a pointmass (moon).
otherwise, the |
|
type(geopotential_model_pines), | public, | pointer | :: | grav | => | null() |
central body geopotential model [global] |
class(jpl_ephemeris), | public, | pointer | :: | eph | => | null() |
the ephemeris [global] |
type(segment), | public, | dimension(:), allocatable | :: | segs |
the list of segments |
||
real(kind=wp), | public, | dimension(:), allocatable | :: | xscale |
opt var scale factors |
||
real(kind=wp), | public, | dimension(:), allocatable | :: | dpert_ |
opt var dpert factors [rename because already in base class] |
||
real(kind=wp), | public, | dimension(:), allocatable | :: | fscale |
function scale factors |
||
character(len=20), | public, | dimension(:), allocatable | :: | xname |
opt var names |
||
character(len=:), | public, | allocatable | :: | N_or_S |
'N' or 'S' |
||
character(len=:), | public, | allocatable | :: | L1_or_L2 |
'L1' or 'L2' |
||
logical, | public | :: | solve | = | .true. |
run the nle solver to solve the problem |
|
logical, | public | :: | generate_plots | = | .true. |
to generate the python plots |
|
logical, | public | :: | generate_trajectory_files | = | .true. |
to export the txt trajectory files. |
|
logical, | public | :: | generate_json_trajectory_file | = | .false. |
to export the JSON trajectory file for the solution (contains inertial and rotating data). This one is used by the PyVista python script for plotting |
|
logical, | public | :: | generate_guess_and_solution_files | = | .true. |
to export the json guess and solution files. |
|
logical, | public | :: | generate_kernel | = | .false. |
to generate a spice kernel (bsp) of the solution [this requires the external mkspk SPICE tool] |
|
logical, | public | :: | generate_defect_file | = | .false. |
generate the file that shows the pos/vel constraint defects for the solution |
|
logical, | public | :: | generate_eclipse_files | = | .false. |
generate the eclipse data file for the solution |
|
logical, | public | :: | run_pyvista_script | = | .false. |
run the pyvista script to generate the interacdtive 3d plot |
|
real(kind=wp), | public | :: | r_eclipse_bubble | = | 0.0_wp |
radius of the "eclipse bubble" [km] |
|
real(kind=wp), | public | :: | eclipse_dt_step | = | 3600.0_wp |
dense time step output for eclipse calculations in sec [1 hour] |
|
integer, | public | :: | eclipse_filetype | = | 1 |
type of eclipse file: 1=csv or 2=json |
|
integer, | public | :: | epoch_mode | = | 1 |
1 - calendar date was specified, 2 - ephemeris time was specified |
|
integer, | public | :: | year | = | 0 |
epoch of first point (first periapsis crossing) |
|
integer, | public | :: | month | = | 0 |
epoch of first point (first periapsis crossing) |
|
integer, | public | :: | day | = | 0 |
epoch of first point (first periapsis crossing) |
|
integer, | public | :: | hour | = | 0 |
epoch of first point (first periapsis crossing) |
|
integer, | public | :: | minute | = | 0 |
epoch of first point (first periapsis crossing) |
|
real(kind=wp), | public | :: | sec | = | zero |
epoch of first point (first periapsis crossing) |
|
real(kind=wp), | public | :: | et_ref | = | zero |
ephemeris time reference epoch [sec]
(all times relative to this).
this is computed from the year,month,day,hour,minute,sec values
if |
|
integer, | public | :: | n_revs | = | 10 |
Number of revs in the Halo. |
|
real(kind=wp), | public | :: | rtol | = | 1.0e-12_wp |
integrator rtol |
|
real(kind=wp), | public | :: | atol | = | 1.0e-12_wp |
integrator atol |
|
real(kind=wp), | public | :: | nlesolver_tol | = | 1.0e-6_wp |
nlesolver tol |
|
real(kind=wp), | public, | dimension(:), allocatable | :: | initial_r |
if |
||
character(len=:), | public, | allocatable | :: | ephemeris_file |
the JPL ephemeris file to load |
||
character(len=:), | public, | allocatable | :: | gravfile |
spherical harmonic gravity coeff file (Moon) example: 'data/grav/gggrx_0020pm_sha.tab' |
||
character(len=:), | public, | allocatable | :: | patch_point_file |
Halo CR3BP patch point solution file example: 'data/L2_halos.json' |
||
logical, | public | :: | patch_point_file_is_periapsis | = | .false. |
if the state in the patch point file are periapsis states (false means they are apoapsis states. the ones in L2_halos.json are apoapsis states) |
|
type(patch_point), | public | :: | periapsis |
Patchpoint Periapse State |
|||
type(patch_point), | public | :: | quarter |
Patchpoint 1/4 Rev State |
|||
type(patch_point), | public | :: | apoapsis |
Patchpoint 1/2 Rev State |
|||
real(kind=wp), | public | :: | period | = | 0.0_wp |
Halo period [days] |
|
real(kind=wp), | public | :: | period8 | = | 0.0_wp |
1/8 of Halo period [days] |
|
logical, | public | :: | fix_initial_time | = | .false. |
to fix the initial epoch in the mission |
|
logical, | public | :: | fix_initial_r | = | .false. |
fix the initial periapsis position vector (x,y,z) |
|
integer, | public | :: | fix_ry_at_end_of_rev | = | 0 |
fix ry at the end of the specified rev (at periapsis)
not used if |
|
logical, | public | :: | fix_final_ry_and_vx | = | .false. |
fix ry and vx at the end of the last rev (at periapsis) |
|
integer, | public | :: | solver_mode | = | 1 |
use sparse or dense solver: |
procedure, public :: init => initialize_the_mission | |
procedure, public :: plot => plot_trajectory | |
procedure, public :: export_trajectory_json_file | |
procedure, public :: write_optvars_to_file | |
procedure, public :: constraint_violations | |
procedure, public :: print_constraint_defects | |
procedure, public :: generate_eclipse_data | |
procedure, public :: get_problem_arrays | |
procedure, public :: put_x_in_segments | |
procedure, public :: get_x_from_json_file | |
procedure, public :: get_scales_from_segs | |
procedure, public :: segs_to_propagate | |
procedure, public :: get_sparsity_pattern | |
procedure, public :: define_problem_size | |
procedure, public :: get_case_name | |
procedure, public :: generate_patch_points | |
procedure, public :: update_epoch |
the solver class, which contains an instance of the mission
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(mission_type), | public | :: | mission |
the Halo mission |
procedure, public :: init => initialize_the_solver | |
procedure, public :: read_config_file |
Returns a string that can be used for file names, etc. (read the values of the global variables).
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(in) | :: | me |
Main program to solve the Halo targeting problem.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | config_file_name |
the config file to read |
||
logical, | intent(in) | :: | debug |
for debugging prints |
Destroy a trajectory (deallocate the data arrays).
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(trajectory), | intent(inout) | :: | me |
Returns the size variables for the "forward-backward" formulation of the problem.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(in) | :: | me | |||
integer, | intent(out), | optional | :: | n |
number of opt vars for the solver |
|
integer, | intent(out), | optional | :: | m |
number of equality constraints for the solver |
|
integer, | intent(out), | optional | :: | n_segs |
number of segments |
|
integer, | intent(out), | optional | :: | n_nonzero |
number of nonzero elements in the Jacobian |
|
logical, | intent(in), | optional | :: | full_problem |
if true (default) always return the results for the full problem (i.e., without fixing any of the variables) |
Set all the data in a segment.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(segment), | intent(inout) | :: | me | |||
type(segment_data), | intent(in) | :: | d |
Cache all the data in a segment.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(segment), | intent(inout) | :: | me |
Restore all the segment data form the cache.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(segment), | intent(inout) | :: | me |
Initialize the mission.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(my_solver_type), | intent(inout) | :: | me | |||
character(len=*), | intent(in) | :: | config_file_name |
the config file to read |
||
real(kind=wp), | intent(out), | optional, | dimension(:), allocatable | :: | x |
initial guess |
Custom solver that uses QR_MUMPS
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(nlesolver_type), | intent(inout) | :: | me | |||
integer, | intent(in) | :: | n_cols |
|
||
integer, | intent(in) | :: | n_rows |
|
||
integer, | intent(in) | :: | n_nonzero |
number of nonzero elements of A. |
||
integer, | intent(in), | dimension(n_nonzero) | :: | irow |
sparsity pattern (size is |
|
integer, | intent(in), | dimension(n_nonzero) | :: | icol |
sparsity pattern (size is |
|
real(kind=wp), | intent(in), | dimension(n_nonzero) | :: | a |
matrix elements (size is |
|
real(kind=wp), | intent(in), | dimension(n_rows) | :: | b |
right hand side (size is |
|
real(kind=wp), | intent(out), | dimension(n_cols) | :: | x |
solution (size is |
|
integer, | intent(out) | :: | istat |
status code (=0 for success) |
Get the arrays for the problem
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(in) | :: | me | |||
real(kind=wp), | intent(out), | optional, | dimension(:) | :: | x |
opt var vector [scaled] |
real(kind=wp), | intent(out), | optional, | dimension(:) | :: | f |
constraint violations |
Print the r
and v
constraint defect norms for each segment constraint.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(in) | :: | me | |||
character(len=*), | intent(in) | :: | filename |
csv file to write to |
Read the JSON solution file and put the x
vector in the mission.
Can be used to restart a solution from a previous run
(e.g., with different settings, as long as the fundamental problem isn't changed).
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(inout) | :: | me | |||
real(kind=wp), | intent(out), | dimension(:), allocatable | :: | x |
scaled |
Take the x
vector from the solver, and use it to populate all the segments
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in), | dimension(:) | :: | x_scaled |
opt var vector (scaled) |
Returns the sparsity pattern for the "forward-backward" Halo problem.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(inout) | :: | me | |||
integer, | intent(out), | dimension(:), allocatable | :: | irow |
sparsity pattern nonzero elements row indices |
|
integer, | intent(out), | dimension(:), allocatable | :: | icol |
sparsity pattern nonzero elements column indices |
|
integer, | intent(out), | optional, | dimension(:), allocatable | :: | linear_irow |
linear sparsity pattern nonzero elements row indices |
integer, | intent(out), | optional, | dimension(:), allocatable | :: | linear_icol |
linear sparsity pattern nonzero elements column indices |
real(kind=wp), | intent(out), | optional, | dimension(:), allocatable | :: | linear_vals |
linear sparsity values (constant elements of the Jacobian) |
integer, | intent(out), | optional | :: | maxgrp |
DSM sparsity partition |
|
integer, | intent(out), | optional, | dimension(:), allocatable | :: | ngrp |
DSM sparsity partition |
Initialize the mission.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(inout) | :: | me | |||
real(kind=wp), | intent(out), | optional, | dimension(:), allocatable | :: | x |
initial guess |
Populate the xscale
and fscale
problem arrays from the segment data.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(inout) | :: | me |
Equations of motion for a ballistic segment.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ddeabm_class), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in) | :: | t |
time [sec from epoch] |
||
real(kind=wp), | intent(in), | dimension(:) | :: | x |
state [r,v] in inertial frame (moon-centered) |
|
real(kind=wp), | intent(out), | dimension(:) | :: | xdot |
derivative of state () |
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 |
Given the functions to be computed, returns the segments that need to be propagated.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(inout) | :: | me | |||
integer, | intent(in), | optional, | dimension(:) | :: | funcs_to_compute |
the indices of f to compute |
integer, | intent(out), | dimension(:), allocatable | :: | isegs_to_propagate |
segment numbers |
Computes the constraint violation vector for the mission.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in), | dimension(:) | :: | x |
opt var vector for the mission [n] |
|
real(kind=wp), | intent(out), | dimension(:) | :: | f |
constraint violation vector for the mission [m] |
|
integer, | intent(in), | optional, | dimension(:) | :: | funcs_to_compute |
the indices of f to compute |
Compute the solver function (all the constraint violations)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(nlesolver_type), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in), | dimension(:) | :: | x | ||
real(kind=wp), | intent(out), | dimension(:) | :: | f |
Compute the gradient of the solver function (Jacobian matrix). Dense version.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(nlesolver_type), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in), | dimension(:) | :: | x | ||
real(kind=wp), | intent(out), | dimension(:,:) | :: | g |
Compute the gradient of the solver function (Jacobian matrix). Sparse version.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(nlesolver_type), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in), | dimension(:) | :: | x | ||
real(kind=wp), | intent(out), | dimension(:) | :: | g |
Info function for the gradients.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(numdiff_type), | intent(inout) | :: | me | |||
integer, | intent(in), | dimension(:) | :: | column |
the columns being computed. |
|
integer, | intent(in) | :: | i |
perturbing these columns for the |
||
real(kind=wp), | intent(in), | dimension(:) | :: | x |
the nominal variable vector |
Wrapper for the constraint violation function (use by NumDiff)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(numdiff_type), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in), | dimension(:) | :: | x | ||
real(kind=wp), | intent(out), | dimension(:) | :: | f | ||
integer, | intent(in), | dimension(:) | :: | funcs_to_compute |
the function indices to
compute in the full |
export an iteration from the solver
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(nlesolver_type), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in), | dimension(:) | :: | x | ||
real(kind=wp), | intent(in), | dimension(:) | :: | f | ||
integer, | intent(in) | :: | iter |
iteration number |
Plot the trajectory using matplotlib and/or generate a text file (for MKSPK)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(inout) | :: | me | |||
character(len=*), | intent(in) | :: | filename |
plot file name [without extension] |
||
logical, | intent(in), | optional | :: | export_trajectory |
if true, a text trajectory file is also produced (that can be read by MKSPK) [default is False] |
|
logical, | intent(in), | optional | :: | draw_trajectory |
if true [Default], a matplotlib plot is generated |
|
logical, | intent(in), | optional | :: | only_first_rev |
to only do the first rev [Default is False] |
Export the trajectory JSON file.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(inout) | :: | me | |||
character(len=*), | intent(in) | :: | filename |
plot file name [without extension] |
||
logical, | intent(in), | optional | :: | only_first_rev |
to only do the first rev [Default is False] |
Propagate all the segments with a dense time step and export the Eclipsing data w.r.t. Earth. In this file, any point <0 is in eclipse.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(inout) | :: | me | |||
character(len=*), | intent(in) | :: | fileprefix |
file prefix for the csv file (case name will be added) |
||
integer, | intent(in), | optional | :: | filetype |
type of output file: 1=csv [default] or 2=json |
Add a point to a trajectory variable.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(trajectory), | intent(inout) | :: | me |
the trajectory |
||
real(kind=wp), | intent(in) | :: | et | |||
real(kind=wp), | intent(in), | dimension(6) | :: | x |
Export a trajectory point during propagation.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ddeabm_class), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in) | :: | t |
time from integrator (sec from sim epoch) |
||
real(kind=wp), | intent(in), | dimension(:) | :: | x |
state [moon-centered inertial frame] |
Read the epoch info from a config file.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(config_file), | intent(inout) | :: | f | |||
integer, | intent(out) | :: | epoch_mode |
1 : calendar date was specified, 2: ephemeris time was specified |
||
integer, | intent(out) | :: | year |
only output if found (epoch_mode=1) |
||
integer, | intent(out) | :: | month |
only output if found (epoch_mode=1) |
||
integer, | intent(out) | :: | day |
only output if found (epoch_mode=1) |
||
integer, | intent(out) | :: | hour |
only output if found (epoch_mode=1) |
||
integer, | intent(out) | :: | minute |
only output if found (epoch_mode=1) |
||
real(kind=wp), | intent(out) | :: | sec |
only output if found (epoch_mode=1) |
||
real(kind=wp), | intent(out) | :: | et |
the ephemeris time [always output] |
Read the config file that defines the problem to be solved and set all the global variables.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(my_solver_type), | intent(inout) | :: | me | |||
character(len=*), | intent(in) | :: | filename |
the JSON config file to read |
Update the variables for the reference epoch in the mission class. Either computes the et from the calendar state, or vice versa.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(inout) | :: | me |
Generates the patch points (unnormalized, moon-centered) from the CR3BP normalized guess.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(inout) | :: | me | |||
real(kind=wp), | intent(in) | :: | lstar | |||
real(kind=wp), | intent(in) | :: | tstar | |||
real(kind=wp), | intent(in) | :: | period | |||
real(kind=wp), | intent(in) | :: | x0 | |||
real(kind=wp), | intent(in) | :: | z0 | |||
real(kind=wp), | intent(in) | :: | ydot0 | |||
type(patch_point), | intent(out), | dimension(3) | :: | pp |
periapsis, quarter, apoapsis patch points |
Write the current x
variables to a file (compatible with the Copernicus optvar file).
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mission_type), | intent(inout) | :: | me | |||
character(len=*), | intent(in) | :: | filename |
file name [without extension] |
||
real(kind=wp), | intent(in), | dimension(:) | :: | x |
solver opt vars vector |