ringmoons Module

Definition of classes and methods specific to the Ringmoons integrator


Uses

  • module~~ringmoons~~UsesGraph module~ringmoons ringmoons module~swiftest swiftest module~ringmoons->module~swiftest module~symba symba module~ringmoons->module~symba module~base base module~swiftest->module~base module~collision collision module~swiftest->module~collision module~encounter encounter module~swiftest->module~encounter module~globals globals module~swiftest->module~globals module~io_progress_bar io_progress_bar module~swiftest->module~io_progress_bar module~lambda_function lambda_function module~swiftest->module~lambda_function module~laplace_coefficients laplace_coefficients module~swiftest->module~laplace_coefficients module~netcdf_io netcdf_io module~swiftest->module~netcdf_io module~operators operators module~swiftest->module~operators module~solver solver module~swiftest->module~solver module~walltime walltime module~swiftest->module~walltime module~symba->module~swiftest module~helio helio module~symba->module~helio module~base->module~globals module~coarray coarray module~base->module~coarray module~collision->module~base module~collision->module~encounter module~collision->module~globals module~encounter->module~base module~encounter->module~globals module~encounter->module~netcdf_io iso_c_binding iso_c_binding module~globals->iso_c_binding iso_fortran_env iso_fortran_env module~globals->iso_fortran_env module~helio->module~swiftest module~whm whm module~helio->module~whm module~io_progress_bar->module~base module~io_progress_bar->module~globals module~lambda_function->module~globals module~laplace_coefficients->module~globals ieee_exceptions ieee_exceptions module~laplace_coefficients->ieee_exceptions module~netcdf_io->module~base module~netcdf_io->module~globals module~operators->module~globals module~solver->module~base module~solver->module~globals module~solver->module~lambda_function module~solver->ieee_exceptions module~walltime->module~base module~walltime->module~globals module~coarray->module~globals module~whm->module~swiftest

Used by

  • module~~ringmoons~~UsedByGraph module~ringmoons ringmoons module~s_ringmoons_io s_ringmoons_io module~s_ringmoons_io->module~ringmoons module~s_ringmoons_step s_ringmoons_step module~s_ringmoons_step->module~ringmoons module~s_ringmoons_torque s_ringmoons_torque module~s_ringmoons_torque->module~ringmoons module~s_ringmoons_util s_ringmoons_util module~s_ringmoons_util->module~ringmoons module~s_swiftest_io s_swiftest_io module~s_swiftest_io->module~ringmoons module~s_swiftest_util s_swiftest_util module~s_swiftest_util->module~ringmoons

Variables

Type Visibility Attributes Name Initial
integer(kind=I4B), public, parameter :: LOOPMAX = 2147483646
integer(kind=I4B), public, parameter :: N_DISK_FACTOR = 10000

Interfaces

interface

  • public module subroutine ringmoons_io_netcdf_flush(self, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_netcdf_parameters), intent(inout) :: self

    Parameters used to identify a particular NetCDF dataset

    class(swiftest_parameters), intent(inout) :: param

    Current run configuration parameters

interface

  • public module subroutine ringmoons_io_netcdf_open(self, param, readonly)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_netcdf_parameters), intent(inout) :: self

    Parameters used to identify a particular NetCDF dataset

    class(swiftest_parameters), intent(in) :: param

    Current run configuration parameters

    logical, intent(in), optional :: readonly

    Logical flag indicating that this should be open read only

interface

  • public module subroutine ringmoons_io_read_frame_ring(self, t, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_ring), intent(inout) :: self
    real(kind=DP), intent(in) :: t
    class(swiftest_parameters), intent(in) :: param

interface

  • public module subroutine ringmoons_io_read_frame_seed(self, t, nc, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_seed), intent(inout) :: self
    real(kind=DP), intent(in) :: t
    class(swiftest_netcdf_parameters), intent(inout) :: nc
    class(swiftest_parameters), intent(inout) :: param

interface

  • public module subroutine ringmoons_io_write_frame_ring(self, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_ring), intent(inout) :: self
    class(swiftest_parameters), intent(in) :: param

interface

interface

  • public module subroutine ringmoons_step_restructure_seed(self, cb, ring, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_seed), intent(inout) :: self
    class(ringmoons_cb), intent(inout) :: cb
    class(ringmoons_ring), intent(inout) :: ring
    class(swiftest_parameters), intent(in) :: param

interface

  • public module subroutine ringmoons_step_ring(self, cb, dt, param, stepfail)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_ring), intent(inout) :: self
    class(ringmoons_cb), intent(in) :: cb
    real(kind=DP), intent(in) :: dt
    class(swiftest_parameters), intent(in) :: param
    logical, intent(out) :: stepfail

interface

  • public module subroutine ringmoons_step_seed(self, cb, ring, dt, param, stepfail)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_seed), intent(inout) :: self
    class(ringmoons_cb), intent(inout) :: cb
    class(ringmoons_ring), intent(inout) :: ring
    real(kind=DP), intent(in) :: dt
    class(swiftest_parameters), intent(in) :: param
    logical, intent(out) :: stepfail

interface

  • public module subroutine ringmoons_step_system(self, param, t, dt)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_nbody_system), intent(inout) :: self

    Ringmoons nbody system object

    class(swiftest_parameters), intent(inout) :: param

    Current run configuration parameters

    real(kind=DP), intent(in) :: t

    Simulation time

    real(kind=DP), intent(in) :: dt

interface

  • public module function ringmoons_torque_lindblad_ring(self, cb, seed, param) result(Torque)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_ring), intent(inout) :: self
    class(swiftest_cb), intent(in) :: cb
    class(ringmoons_seed), intent(inout) :: seed
    class(swiftest_parameters), intent(in) :: param

    Return Value real(kind=DP), dimension(0:self%nbins+1)

interface

  • public module subroutine ringmoons_torque_tidal_seed(self, cb, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_seed), intent(inout) :: self
    class(swiftest_cb), intent(in) :: cb
    class(swiftest_parameters), intent(in) :: param

interface

  • public module subroutine ringmoons_torque_yarkovsky_schach_ring(self, cb, param, Torque)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_ring), intent(inout) :: self
    class(swiftest_cb), intent(in) :: cb
    class(swiftest_parameters), intent(in) :: param
    real(kind=DP), intent(out), dimension(0:self%nbins+1) :: Torque

interface

  • public pure elemental module function ringmoons_transition_function(yin) result(kappa)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=DP), intent(in) :: yin

    Return Value real(kind=DP)

interface

  • public module subroutine ringmoons_util_accrete_cb(self, ring, seed, param, dt)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_cb), intent(inout) :: self

    Ringmoons central body object

    class(ringmoons_ring), intent(inout) :: ring

    Ringmoons ring object

    class(ringmoons_seed), intent(inout) :: seed

    Ringmoons seed obje3ct

    class(swiftest_parameters), intent(in) :: param

    Current run configuration parameters

    real(kind=DP), intent(in) :: dt

    Current time step size

interface

  • public module subroutine ringmoons_util_dealloc_ring(self)

    Deallocates all allocatabale arrays

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_ring), intent(inout) :: self

    Ringmoons ring object

interface

  • public module subroutine ringmoons_util_dealloc_seed(self)

    Deallocates all allocatabale arrays

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_seed), intent(inout) :: self

    Ringmoons seed object

interface

  • public module subroutine ringmoons_util_dealloc_system(self)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_nbody_system), intent(inout) :: self

    Ringmoons nbody system object to deallocate

interface

  • public pure elemental module function ringmoons_util_find_bin(self, r) result(bin)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_ring), intent(in) :: self

    Ringmoons ring object

    real(kind=DP), intent(in) :: r

    Radial distance at which to search for the bin

    Return Value integer(kind=I4B)

    The bin containing radial distance r

interface

  • public module function ringmoons_util_get_dt_ring(self, dtin) result(dtout)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_ring), intent(in) :: self

    Ringmoons ring object

    real(kind=DP), intent(in) :: dtin

    Input time step size, which serves as a maximum for dtout

    Return Value real(kind=DP)

    Output time step size, where dtout <= dtin

interface

  • public module subroutine ringmoons_util_reset_ring(self, seed, cb, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_ring), intent(inout) :: self
    class(ringmoons_seed), intent(inout) :: seed
    class(ringmoons_cb), intent(in) :: cb
    class(swiftest_parameters), intent(in) :: param

interface

  • public module subroutine ringmoons_util_setup_initialize_system(self, system_history, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_nbody_system), intent(inout) :: self

    SyMBA nbody_system object

    class(swiftest_storage), intent(inout), allocatable :: system_history

    Stores the system history between output dumps

    class(swiftest_parameters), intent(inout) :: param

    Current run configuration parameters

interface

  • public module subroutine ringmoons_util_setup_pl(self, n, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_pl), intent(inout) :: self

    Ringmoons massive body object

    integer(kind=I4B), intent(in) :: n

    Number of bins to allocate space for

    class(swiftest_parameters), intent(in) :: param

    Current run configuration parameters

interface

  • public module subroutine ringmoons_util_setup_ring(self, n, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_ring), intent(inout) :: self

    Ringmoons ring object

    integer(kind=I4B), intent(in) :: n

    Number of bins to allocate space for

    class(swiftest_parameters), intent(in) :: param

    Current run configuration parameters

interface

  • public module subroutine ringmoons_util_setup_seed(self, n, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_seed), intent(inout) :: self

    Ringmoons seed object

    integer(kind=I4B), intent(in) :: n

    Number of bins to allocate space for

    class(swiftest_parameters), intent(in) :: param

    Current run configuration parameters

interface

  • public module subroutine ringmoons_util_spawn_seed(self, cb, ring, ring_bin, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_seed), intent(inout) :: self
    class(ringmoons_cb), intent(in) :: cb
    class(ringmoons_ring), intent(inout) :: ring
    integer(kind=I4B), intent(in) :: ring_bin
    class(swiftest_parameters), intent(in) :: param

interface

  • public module subroutine ringmoons_util_update_ring(self, cb, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_ring), intent(inout) :: self
    class(ringmoons_cb), intent(in) :: cb
    class(swiftest_parameters), intent(in) :: param

interface

  • public module subroutine ringmoons_util_velocity_dispersion_ring(self, cb, param)

    Arguments

    Type IntentOptional Attributes Name
    class(ringmoons_ring), intent(inout) :: self
    class(ringmoons_cb), intent(in) :: cb
    class(swiftest_parameters), intent(in) :: param

Derived Types

type, public, extends(symba_cb) ::  ringmoons_cb

Ringmoons central body particle class

Components

Type Visibility Attributes Name Initial
real(kind=DP), public :: GM0 = 0.0_DP

Initial G*mass of the central body

real(kind=DP), public :: Gmass = 0.0_DP

Central mass gravitational term G * mass (units GU * MU)

real(kind=DP), public, dimension(NDIM) :: Ip = 0.0_DP

Unitless principal moments of inertia (I1, I2, I3) / (MR**2). Principal axis rotation assumed.

real(kind=DP), public, dimension(NDIM) :: L0 = 0.0_DP

Initial angular momentum of the central body

real(kind=DP), public :: Q = 0.0_DP

Tidal quality factor

real(kind=DP), public :: R0 = 0.0_DP

Initial radius of the central body

real(kind=DP), public, dimension(NDIM) :: agr = 0.0_DP

Acceleration due to post-Newtonian correction

real(kind=DP), public, dimension(NDIM) :: aobl = 0.0_DP

Barycentric acceleration due to central body oblatenes

real(kind=DP), public, dimension(NDIM) :: aoblbeg = 0.0_DP

Barycentric acceleration due to central body oblatenes at beginning of step

real(kind=DP), public, dimension(NDIM) :: aoblend = 0.0_DP

Barycentric acceleration due to central body oblatenes at end of step

real(kind=DP), public, dimension(NDIM) :: atide = 0.0_DP

Barycentric acceleration due to central body oblatenes

real(kind=DP), public, dimension(NDIM) :: atidebeg = 0.0_DP

Barycentric acceleration due to central body oblatenes at beginning of step

real(kind=DP), public, dimension(NDIM) :: atideend = 0.0_DP

Barycentric acceleration due to central body oblatenes at end of step

real(kind=DP), public, dimension(:,:,:), allocatable :: c_lm

Spherical Harmonics coefficients for the central body

real(kind=DP), public :: dGM = 0.0_DP

Change in G*mass of the central body

real(kind=DP), public, dimension(NDIM) :: dL = 0.0_DP

Change in angular momentum of the central body

real(kind=DP), public :: dR = 0.0_DP

Change in the radius of the central body

real(kind=DP), public :: density = 1.0_DP

Central body mass density - calculated internally (units MU / DU**3)

integer(kind=I4B), public :: id = 0

External identifier (unique)

class(swiftest_particle_info), public, allocatable :: info

An abstract class for a generic central body in a Swiftest simulation Particle metadata information

real(kind=DP), public :: j2rp2 = 0.0_DP

J2*R^2 term for central body

real(kind=DP), public :: j4rp4 = 0.0_DP

J4*R^4 term for central body

real(kind=DP), public :: k2 = 0.0_DP

Tidal Love number

real(kind=DP), public :: mass = 0.0_DP

Central body mass (units MU)

real(kind=DP), public, dimension(NDIM) :: ptbeg

negative barycentric velocity of the central body at the beginning of time step

real(kind=DP), public, dimension(NDIM) :: ptend

negative barycentric velocity of the central body at the end of time step

real(kind=DP), public :: radius = 0.0_DP

Central body radius (units DU)

real(kind=DP), public, dimension(NDIM) :: rb = 0.0_DP

Barycentric position (units DU)

real(kind=DP), public, dimension(NDIM) :: rot = 0.0_DP

Body rotation vector in inertial coordinate frame (units rad / TU)

real(kind=DP), public :: rotphase = 0.0_DP

Body rotation phase about the rotation pole (0 to 1)

real(kind=DP), public :: tlag = 0.0_DP

Tidal phase lag angle

real(kind=DP), public, dimension(NDIM) :: vb = 0.0_DP

Barycentric velocity (units DU / TU)

Type-Bound Procedures

procedure, public :: accrete => ringmoons_util_accrete_cb
procedure, public :: dealloc => swiftest_util_dealloc_cb

Deallocates all allocatables and resets all values to defaults

procedure, public :: read_in => swiftest_io_read_in_cb

Read in central body initial conditions from an ASCII file

procedure, public :: rotphase_update => swiftest_drift_cb_rotphase_update

updates the central body rotation phase

procedure, public :: write_frame => swiftest_io_netcdf_write_frame_cb

I/O routine for writing out a single frame of time-series data for all bodies in the system in NetCDF format

procedure, public :: write_info => swiftest_io_netcdf_write_info_cb

Dump contents of particle information metadata to file

type, public, extends(symba_nbody_system) ::  ringmoons_nbody_system

Components

Type Visibility Attributes Name Initial
real(kind=DP), public :: E_collisions = 0.0_DP

Energy lost from nbody_system due to collisions

real(kind=DP), public :: E_orbit_error = 0.0_DP
real(kind=DP), public :: E_orbit_orig = 0.0_DP

Initial orbital energy

real(kind=DP), public :: E_untracked = 0.0_DP

Energy gained from nbody_system due to escaped bodies

real(kind=DP), public :: E_untracked_error = 0.0_DP
real(kind=DP), public :: Ecoll_error = 0.0_DP
real(kind=DP), public :: GMescape = 0.0_DP

Mass of bodies that escaped the nbody_system (used for bookeeping)

real(kind=DP), public :: GMtot = 0.0_DP

Total nbody_system mass - used for barycentric coordinate conversion

real(kind=DP), public :: GMtot_orig = 0.0_DP

Initial nbody_system mass

real(kind=DP), public, dimension(NDIM) :: L_escape = 0.0_DP

Angular momentum of bodies that escaped the nbody_system (used for bookeeping)

real(kind=DP), public :: L_escape_error = 0.0_DP
real(kind=DP), public, dimension(NDIM) :: L_orbit = 0.0_DP

nbody_system orbital angular momentum vector

real(kind=DP), public :: L_orbit_error = 0.0_DP
real(kind=DP), public, dimension(NDIM) :: L_orbit_orig = 0.0_DP

Initial orbital angular momentum

real(kind=DP), public, dimension(NDIM) :: L_rot = 0.0_DP

nbody_system rotational angular momentum vector

real(kind=DP), public :: L_rot_error = 0.0_DP
real(kind=DP), public, dimension(NDIM) :: L_rot_orig = 0.0_DP

Initial rotational angular momentum vector

real(kind=DP), public, dimension(NDIM) :: L_total = 0.0_DP

nbody_system angular momentum vector

real(kind=DP), public :: L_total_error = 0.0_DP
real(kind=DP), public, dimension(NDIM) :: L_total_orig = 0.0_DP

Initial total angular momentum vector

real(kind=DP), public :: Mescape_error = 0.0_DP
real(kind=DP), public :: Mtot_error = 0.0_DP
real(kind=DP), public :: be = 0.0_DP

nbody_system binding energy of all bodies

real(kind=DP), public :: be_cb = 0.0_DP

Binding energy of central body (usually orders of magnitude larger than the rest of the system, and therefore tracked seperately)

real(kind=DP), public :: be_error = 0.0_DP
real(kind=DP), public :: be_orig = 0.0_DP

Initial gravitational binding energy

class(swiftest_cb), public, allocatable :: cb

Central body data structure

class(collision_basic), public, allocatable :: collider

Collision system object

class(collision_storage), public, allocatable :: collision_history

Stores encounter history for later retrieval and saving to file

class(encounter_storage), public, allocatable :: encounter_history

Stores encounter history for later retrieval and saving to file

integer(kind=I4B), public :: irec = -1

nbody_system recursion level

real(kind=DP), public :: ke_orbit = 0.0_DP

nbody_system orbital kinetic energy

real(kind=DP), public :: ke_orbit_error = 0.0_DP
real(kind=DP), public :: ke_orbit_orig = 0.0_DP

Initial orbital kinetic energy

real(kind=DP), public :: ke_rot = 0.0_DP

nbody_system rotational kinetic energy

real(kind=DP), public :: ke_rot_error = 0.0_DP
real(kind=DP), public :: ke_rot_orig = 0.0_DP

Initial rotational kinetic energy

logical, public :: lbeg

True if this is the beginning of a step. This is used so that test particle steps can be calculated separately from massive bodies. Massive body variables are saved at half steps, and passed to the test particles

logical, public :: lfirst_io = .true.

Flag to indicate that this is the first time to write to a file

logical, public :: lfirst_peri = .true.

Flag to indicate that this is the first pericenter passage

integer(kind=I4B), public :: maxid = 0

The current maximum particle id number

real(kind=DP), public :: oblpot = 0.0_DP

nbody_system potential energy due to oblateness of the central body

real(kind=DP), public :: pe = 0.0_DP

nbody_system potential energy

real(kind=DP), public :: pe_error = 0.0_DP
real(kind=DP), public :: pe_orig = 0.0_DP

Initial potential energy

class(swiftest_pl), public, allocatable :: pl

Massive body data structure

class(swiftest_pl), public, allocatable :: pl_adds

List of added bodies in mergers or collisions

class(swiftest_pl), public, allocatable :: pl_discards

Discarded massive body particle data structure

class(collision_list_plpl), public, allocatable :: plpl_collision

List of massive body-massive body collisions in a single step

class(encounter_list), public, allocatable :: plpl_encounter

List of massive body-massive body encounters in a single step

class(collision_list_pltp), public, allocatable :: pltp_collision

List of massive body-test particle collisions in a single step

class(encounter_list), public, allocatable :: pltp_encounter

List of massive body-test particle encounters in a single step

class(ringmoons_ring), public, allocatable :: ring

Ringmoons ring object

class(ringmoons_seed), public, allocatable :: seed

Ringmoons seed object

real(kind=DP), public :: t = -1.0_DP

Integration current time

real(kind=DP), public :: te = 0.0_DP

nbody_system total energy

real(kind=DP), public :: te_error = 0.0_DP
real(kind=DP), public :: te_orig = 0.0_DP

Initial total energy (sum of all sources of energy tracked)

class(swiftest_tp), public, allocatable :: tp

Test particle data structure

class(swiftest_tp), public, allocatable :: tp_adds

List of added bodies in mergers or collisions

class(swiftest_tp), public, allocatable :: tp_discards

Discarded test particle data structure

Type-Bound Procedures

procedure, public :: coarray_balance => swiftest_coarray_balance_system

Checks whether or not the test particle coarrays need to be rebalanced.

procedure, public :: coarray_collect => swiftest_coarray_collect_system

Collects all the test particles from other images into the image #1 test particle system

procedure, public :: coarray_distribute => swiftest_coarray_distribute_system

Distributes test particles from image #1 out to all images.

procedure, public :: compact_output => swiftest_io_compact_output

Prints out out terminal output when display_style is set to COMPACT

procedure, public :: conservation_report => swiftest_io_conservation_report

Compute energy and momentum and print out the change with time

procedure, public :: dealloc => ringmoons_util_dealloc_system

Deallocates all allocatables

procedure, public :: discard => swiftest_discard_system

Perform a discard step on the nbody_system

procedure, public :: display_run_information => swiftest_io_display_run_information

Displays helpful information about the run

procedure, public :: dump => swiftest_io_dump_system

Dump the state of the nbody_system to a file

procedure, public :: get_energy_and_momentum => swiftest_util_get_energy_and_momentum_system

Calculates the total nbody_system energy and momentum

procedure, public :: get_idvals => swiftest_util_get_idvalues_system

Returns an array of all id values in use in the nbody_system

procedure, public :: get_t0_values => swiftest_io_netcdf_get_t0_values_system

Validates the dump file to check whether the dump file initial conditions duplicate the last frame of the netcdf output.

procedure, public :: init_particle_info => swiftest_util_setup_initialize_particle_info_system

Initialize the nbody_system from input files

Read more…
procedure, public :: initialize => ringmoons_util_setup_initialize_system

Performs ringmoons-specific initilization steps

procedure, public :: initialize_output_file => swiftest_io_initialize_output_file_system

Write a frame of input data from file

procedure, public :: interp => symba_step_interp_system

Perform an interpolation step on the SymBA nbody system

procedure, public :: obl_pot => swiftest_obl_pot_system

Compute the contribution to the total gravitational potential due solely to the oblateness of the central body

procedure, public :: read_frame => swiftest_io_netcdf_read_frame_system

Read in a frame of input data from file

procedure, public :: read_hdr => swiftest_io_netcdf_read_hdr_system

Read a header for an output frame in NetCDF format

procedure, public :: read_in => swiftest_io_read_in_system

Reads the initial conditions for an nbody system

procedure, public :: read_particle_info => swiftest_io_netcdf_read_particle_info_system

Read in particle metadata from file

procedure, public :: recursive_step => symba_step_recur_system

Step interacting planets and active test particles ahead in democratic heliocentric coordinates at the current recursion level, if applicable, and descend to the next deeper level if necessary

procedure, public :: rescale => swiftest_util_rescale_system

Rescales the nbody_system into a new set of units

procedure, public :: reset => symba_step_reset_system

Resets pl, tp,and encounter structures at the start of a new step

procedure, public :: set_msys => swiftest_util_set_msys

Sets the value of msys from the masses of nbody_system bodies.

procedure, public :: set_recur_levels => symba_step_set_recur_levels_system

Sets recursion levels of bodies and encounter lists to the current nbody_system level

procedure, public :: step => ringmoons_step_system

Advance the ringmoons nbody system forward in time by one step

procedure, public :: validate_ids => swiftest_util_valid_id_system

Validate the numerical ids passed to the nbody_system and save the maximum value

procedure, public :: write_frame => swiftest_io_netcdf_write_frame_system

Write a frame of input data from file

procedure, public :: write_hdr => swiftest_io_netcdf_write_hdr_system

Write a header for an output frame in NetCDF format

type, public, extends(netcdf_parameters) ::  ringmoons_netcdf_parameters

NetCDF dimension and variable names for the ringmoons objects

Components

Type Visibility Attributes Name Initial
integer(kind=I4B), public :: BE_varid

ID for the system binding energy variable

integer(kind=I4B), public :: E_collisions_varid

ID for the energy lost in collisions variable

character(len=NAMELEN), public :: E_collisions_varname = "E_collisions"

name of the escaped angular momentum y variable

integer(kind=I4B), public :: E_untracked_varid

ID for the energy that is untracked due to loss (due to mergers and body energy for escaped bodies)

character(len=NAMELEN), public :: E_untracked_varname = "E_untracked"

name of the energy that is untracked due to loss (due to mergers and body energy for escaped bodies)

integer(kind=I4B), public :: GMescape_varid

ID for the G*Mass of bodies that escape the system

character(len=NAMELEN), public :: GMescape_varname = "GMescape"

name of the G*Mass of bodies that escape the system

integer(kind=I4B), public :: Gmass_varid

ID for the G*mass variable

character(len=NAMELEN), public :: Gmass_varname = "Gmass"

name of the G*mass variable

integer(kind=I4B), public :: Ip_varid

ID for the axis principal moment of inertia variable

character(len=NAMELEN), public :: Ip_varname = "Ip"

name of the principal moment of inertial variable

integer(kind=I4B), public :: KE_orb_varid

ID for the system orbital kinetic energy variable

integer(kind=I4B), public :: KE_rot_varid

ID for the system rotational kinetic energy variable

integer(kind=I4B), public :: L_escape_varid

ID for the escaped angular momentum vector variable

character(len=NAMELEN), public :: L_escape_varname = "L_escape"

name of the escaped angular momentum vector variable

integer(kind=I4B), public :: L_orbit_varid

ID for the system orbital angular momentum vector variable

character(len=NAMELEN), public :: L_orbit_varname = "L_orbit"

name of the orbital angular momentum vector variable

integer(kind=I4B), public :: L_rot_varid

ID for the system rotational angular momentum vector variable

character(len=NAMELEN), public :: L_rot_varname = "L_rot"

name of the rotational angular momentum vector variable

integer(kind=I4B), public :: PE_varid

ID for the system potential energy variable

integer(kind=I4B), public :: Q_varid

ID for the energy dissipation variable

integer(kind=I4B), public :: TE_varid

ID for the system binding energy variable

integer(kind=I4B), public :: Y_21_varid

ID for the Y_21 yarkovsky directional variable

character(len=NAMELEN), public :: Y_21_varname = "Y_21"

name of the Y_21 yarkovsky directional variable

integer(kind=I4B), public :: a_pl_varid

ID for the planet’s semi-major axis from the sun variable

character(len=NAMELEN), public :: a_pl_varname = "a_pl"

name of the planet’s semi-major axis from the sun variable

integer(kind=I4B), public :: a_varid

ID for the semimajor axis variable

character(len=NAMELEN), public :: a_varname = "a"

name of the semimajor axis variable

integer(kind=I4B), public :: albedo_varid

ID for the albedo variable

character(len=NAMELEN), public :: albedo_varname = "albedo"

name of the albedo variable

character(len=NAMELEN), public :: be_varname = "BE"

name of the system binding energy variable

integer(kind=I4B), public :: c_lm_varid

ID for the c_lm aqrray

character(len=NAMELEN), public :: c_lm_varname = "c_lm"

name for the c_lm array

integer(kind=I4B), public :: cape_varid

ID for the eccentric/hyperbolic anomaly variable

character(len=NAMELEN), public :: cape_varname = "cape"

name of the eccentric/hyperbolic anomaly variable

integer(kind=I4B), public :: capm_varid

ID for the mean anomaly variable

character(len=NAMELEN), public :: capm_varname = "capm"

name of the mean anomaly variable

integer(kind=I4B), public :: capom_varid

ID for the long. asc. node variable

character(len=NAMELEN), public :: capom_varname = "capom"

name of the long. asc. node variable

character(len=NAMELEN), public :: collision_id_dimname = "collision_id"

name of the collision id variable

integer(kind=I4B), public :: collision_id_varid

Netcdf ID for the origin collision ID

integer(kind=I4B), public :: delta_varid

ID for the planetary shadow width variable

character(len=NAMELEN), public :: delta_varname = "delta"

name of the planetary shadow with variable

integer(kind=I4B), public :: discard_body_id_varid

ID for the id of the other body involved in the discard

character(len=NAMELEN), public :: discard_body_id_varname = "discard_body_id"

name of the id of the other body involved in the discard

integer(kind=I4B), public :: discard_rh_varid

ID for the heliocentric position vector of the body at the time of discard variable

character(len=NAMELEN), public :: discard_rh_varname = "discard_rh"

name of the heliocentric position vector of the body at the time of discard variable

integer(kind=I4B), public :: discard_time_varid

ID for the time of discard variable

character(len=NAMELEN), public :: discard_time_varname = "discard_time"

name of the time of discard variable

integer(kind=I4B), public :: discard_vh_varid

ID for the heliocentric velocity vector of the body at the time of discard variable

character(len=NAMELEN), public :: discard_vh_varname = "discard_vh"

name of the heliocentric velocity vector of the body at the time of discard variable

integer(kind=I4B), public :: e_varid

ID for the eccentricity variable

character(len=NAMELEN), public :: e_varname = "e"

name of the eccentricity variable

integer(kind=I4B), public :: emissivity_varid

ID for the emissivity variable

character(len=NAMELEN), public :: emissivity_varname = "emissivity"

name of the emissivity variable

integer(kind=I4B), public :: f_varid

ID for the true anomaly variable

character(len=NAMELEN), public :: f_varname = "f"

name of the true anomaly variable

character(len=STRMAX), public :: file_name

Name of the output file

integer(kind=I4B), public :: gamma_varid

ID for the thermal inertia parameter for yarkovsky effects

character(len=NAMELEN), public :: gamma_varname = "gamma"

name of the thermal inertia parameter for yarkovsky effects

integer(kind=I4B), public :: gr_pseudo_vh_varid

ID for the heliocentric pseudovelocity vector variable (used in GR)

character(len=NAMELEN), public :: gr_pseudo_vh_varname = "gr_pseudo_vh"

name of the heliocentric pseudovelocity vector variable (GR)

integer(kind=I4B), public :: id

ID for the output file

integer(kind=I4B), public :: id_varid

ID for the id variable

character(len=NAMELEN), public :: id_varname = "id"

name of the particle id variable

integer(kind=I4B), public :: idslot = 1

The current id slot that gets passed to the NetCDF reader/writer

integer(kind=I4B), public, dimension(:), allocatable :: idvals

Array of id values in this NetCDF file

integer(kind=I4B), public :: inc_varid

ID for the inclination variable

character(len=NAMELEN), public :: inc_varname = "inc"

name of the inclination variable

integer(kind=I4B), public :: j2rp2_varid

ID for the j2 variable

character(len=NAMELEN), public :: j2rp2_varname = "j2rp2"

name of the j2rp2 variable

integer(kind=I4B), public :: j4rp4_varid

ID for the j4 variable

character(len=NAMELEN), public :: j4rp4_varname = "j4rp4"

name of the j4pr4 variable

integer(kind=I4B), public :: k2_varid

ID for the Love number variable

character(len=NAMELEN), public :: k2_varname = "k2"

name of the Love number variable

character(len=NAMELEN), public :: ke_orbit_varname = "KE_orbit"

name of the system orbital kinetic energy variable

character(len=NAMELEN), public :: ke_rot_varname = "KE_rot"

name of the system rotational kinetic energy variable

integer(kind=I4B), public :: l_dim_max = 6

Maximum value of the l dimension

integer(kind=I4B), public :: l_dimid

ID for the l dimension for c_lm

character(len=NAMELEN), public :: l_dimname = "l"

name of l dimension for c_lm

integer(kind=I4B), public :: l_varid

ID for the l variable

integer(kind=I4B), public :: lam_varid

ID for the mean longitude variable

character(len=NAMELEN), public :: lam_varname = "lam"

name of the mean longitude variable

logical, public :: lc_lm_exists = .false.

Logical flag to indicate whether or not the c_lm array was present in an old file.

logical, public :: lfile_is_open = .false.

Flag indicating that the linked file is currently open

logical, public :: lpseudo_vel_exists = .false.

Logical flag to indicate whether or not the pseudovelocity vectors were present in an old file.

integer(kind=I4B), public :: m_dim_max = 6

Maximum value of the m dimension

integer(kind=I4B), public :: m_dimid

ID for the m dimension for c_lm

character(len=NAMELEN), public :: m_dimname = "m"

name of m dimension for c_lm

integer(kind=I4B), public :: m_p_varid

ID for the ring particle mass per bin variable

character(len=NAMELEN), public :: m_p_varname = "m_p"

name of the ring particle mass per bin variable

integer(kind=I4B), public :: m_varid

ID for the m variable

integer(kind=I4B), public :: mass_varid

ID for the mass variable

character(len=NAMELEN), public :: mass_varname = "mass"

name of the mass variable

integer(kind=I4B), public :: max_idslot = 0

Records the last index value of id in the NetCDF file

integer(kind=I4B), public :: max_tslot = 0

Records the last index value of time in the NetCDF file

integer(kind=I4B), public :: name_dimid

ID for the particle name dimension

character(len=NAMELEN), public :: name_dimname = "name"

name of the particle name dimension

integer(kind=I4B), public :: name_varid

ID for the particle name variable

integer(kind=I4B), public :: nbins

Number of elements in the ring bins

integer(kind=I4B), public :: npl_varid

ID for the number of active massive bodies variable

character(len=NAMELEN), public :: npl_varname = "npl"

name of the number of active massive bodies variable

integer(kind=I4B), public :: nplm_varid

ID for the number of active fully interacting massive bodies variable (SyMBA)

character(len=NAMELEN), public :: nplm_varname = "nplm"

name of the number of active fully interacting massive bodies variable (SyMBA)

integer(kind=I4B), public :: nseed_varid

ID for the number of active seeds (Ringmoons)

character(len=NAMELEN), public :: nseed_varname = "nseed"

name of the number of active seeds (Ringmoons)

integer(kind=I4B), public :: ntp_varid

ID for the number of active test particles variable

character(len=NAMELEN), public :: ntp_varname = "ntp"

name of the number of active test particles variable

integer(kind=I4B), public :: nu_varid

ID for the viscosity of the ring bin variable

character(len=NAMELEN), public :: nu_varname = "nu"

name of the viscosity of the ring bin variable

integer(kind=I4B), public :: obliquity_varid

ID for the obliquity variable

character(len=NAMELEN), public :: obliquity_varname = "obliquity"

name of the obliquity variable

integer(kind=I4B), public :: omega_varid

ID for the arg. of periapsis variable

character(len=NAMELEN), public :: omega_varname = "omega"

name of the arg. of periapsis variable

integer(kind=I4B), public :: origin_rh_varid

ID for the origin position vector variable

character(len=NAMELEN), public :: origin_rh_varname = "origin_rh"

name of the heliocentric position vector of the body at the time of origin variable

integer(kind=I4B), public :: origin_time_varid

ID for the origin time

character(len=NAMELEN), public :: origin_time_varname = "origin_time"

name of the time of origin variable

integer(kind=I4B), public :: origin_type_varid

ID for the origin type

character(len=NAMELEN), public :: origin_type_varname = "origin_type"

name of the origin type variable

integer(kind=I4B), public :: origin_vh_varid

ID for the origin velocity vector component

character(len=NAMELEN), public :: origin_vh_varname = "origin_vh"

name of the heliocentric velocity vector of the body at the time of origin variable

integer(kind=I4B), public :: out_type

output type (will be assigned either NF90_DOUBLE or NF90_FLOAT, depending on the user parameter)

character(len=NAMELEN), public :: pe_varname = "PE"

name of the system potential energy variable

integer(kind=I4B), public :: ptype_varid

ID for the particle type variable

character(len=NAMELEN), public :: ptype_varname = "particle_type"

name of the particle type variable

character(len=NAMELEN), public :: q_varname = "Q"

name of the energy dissipation variable

integer(kind=I4B), public :: r_inner_varid

ID for the inside radius of ring variable

character(len=NAMELEN), public :: r_inner_varname = "r_inner"

name of the inside radius of ring variable

integer(kind=I4B), public :: r_outer_varid

ID for the outside radius of ring variable

character(len=NAMELEN), public :: r_outer_varname = "r_outer"

name of the outside radius of ring variable

integer(kind=I4B), public :: r_p_varid

ID for the ring particle radius per bin variable

character(len=NAMELEN), public :: r_p_varname = "r_p"

name of the ring particle radius per bin variable

integer(kind=I4B), public :: r_varid

ID for the radial distance of bin center variable

character(len=NAMELEN), public :: r_varname = "r"

name of the radial distance of bin center variable

integer(kind=I4B), public :: radius_varid

ID for the radius variable

character(len=NAMELEN), public :: radius_varname = "radius"

name of the radius variable

integer(kind=I4B), public :: rh_varid

ID for the heliocentric position vector variable

character(len=NAMELEN), public :: rh_varname = "rh"

name of the heliocentric position vector variable

integer(kind=I4B), public :: rhill_varid

ID for the hill radius variable

character(len=NAMELEN), public :: rhill_varname = "rhill"

name of the hill radius variable

integer(kind=I4B), public :: ringbin_dimid

ID for the ring bin dimension

character(len=NAMELEN), public :: ringbin_dimname = "ringbin"

name of the ring bin dimension

integer(kind=I4B), public :: ringbin_varid

ID for the ring bin variable

integer(kind=I4B), public :: rot_k_varid

ID for the rotational constant k for yarkovsky effects

character(len=NAMELEN), public :: rot_k_varname = "rot_k"

name of the rotational constant k for yarkovsky effects

integer(kind=I4B), public :: rot_varid

ID for the rotation vector variable

character(len=NAMELEN), public :: rot_varname = "rot"

name of the rotation vector variable

integer(kind=I4B), public :: rotphase_varid

ID for the rotation phase variable

character(len=NAMELEN), public :: rotphase_varname = "rotphase"

name of the rotation phase variable

integer(kind=I4B), public :: sigma_varid

ID for the surface mass density of ring bin variable

character(len=NAMELEN), public :: sigma_varname = "sigma"

name of the surface mass density of ring bin variable

integer(kind=I4B), public, dimension(2) :: sign_coords = [-1, 1]

The sign dimension coordinate labels

integer(kind=I4B), public :: sign_dimid

ID for sign dimension

character(len=NAMELEN), public :: sign_dimname = "sign"

name of the sign dimension for c_lm

integer(kind=I4B), public :: sign_varid

ID for sign variable

character(len=1), public, dimension(3) :: space_coords = ["x", "y", "z"]

The space dimension coordinate labels

integer(kind=I4B), public :: space_dimid

ID for the space dimension

character(len=NAMELEN), public :: space_dimname = "space"

name of the space dimension

integer(kind=I4B), public :: space_varid

ID for the space variable

integer(kind=I4B), public :: status_varid

ID for the status variable

character(len=NAMELEN), public :: status_varname = "status"

name of the particle status variable

integer(kind=I4B), public :: str_dimid

ID for the character string dimension

character(len=NAMELEN), public :: str_dimname = "string32"

name of the character string dimension

integer(kind=I4B), public :: tau_varid

ID for the ring optical depth variable

character(len=NAMELEN), public :: tau_varname = "tau"

name of the ring optical depth variable

character(len=NAMELEN), public :: te_varname = "TE"

name of the system binding energy variable

integer(kind=I4B), public :: time_dimid

ID for the time dimension

character(len=NAMELEN), public :: time_dimname = "time"

name of the time dimension

integer(kind=I4B), public :: time_varid

ID for the time variable

integer(kind=I4B), public :: toomre_varid

ID for the Toomre parameter of the ring bin variable

character(len=NAMELEN), public :: toomre_varname = "Q_toomre"

name of the Toomre parameter of the ring bin variable

integer(kind=I4B), public :: tslot = 1

The current time slot that gets passed to the NetCDF reader/writer

integer(kind=I4B), public :: varpi_varid

ID for the long. of periapsis variable

character(len=NAMELEN), public :: varpi_varname = "varpi"

name of the long. of periapsis variable

integer(kind=I4B), public :: vh_varid

ID for the heliocentric velocity vector variable

character(len=NAMELEN), public :: vh_varname = "vh"

name of the heliocentric velocity vector variable

integer(kind=I4B), public :: vrel_p_varid

ID for the ring particle relative velocity per bin variable already defined in netcdf_io_module

character(len=NAMELEN), public :: vrel_p_varname = "vrel_p"

name of the ring particle relative velocity per bin variable

Finalizations Procedures

final :: ringmoons_final_netcdf_parameters

Finalizer will close the NetCDF file

Type-Bound Procedures

procedure, public :: add_new_var => netcdf_io_add_new_var

Adds a new variable to an existing open dataset by combining inq_varid, redef, def_var, and def_var_fill commands in one

procedure, public :: close => netcdf_io_close

Closes an open NetCDF file

procedure, public :: find_idslot => netcdf_io_find_idslot

Finds the id dimension index for a given value of id

procedure, public :: find_tslot => netcdf_io_find_tslot

Finds the time dimension index for a given value of t

procedure, public :: flush => ringmoons_io_netcdf_flush

Flushes a NetCDF file by closing it then opening it again

procedure, public :: get_idvals => netcdf_io_get_idvals

Gets the valid id numbers currently stored in this dataset

procedure, public :: open => ringmoons_io_netcdf_open

Open a Ringmoons NetCDF file

procedure, public :: sync => netcdf_io_sync

Syncrhonize the disk and memory buffer of the NetCDF file (e.g. commit the frame files stored in memory to disk)

type, public, extends(symba_pl) ::  ringmoons_pl

Ringmoons massive body class

Components

Type Visibility Attributes Name Initial
real(kind=DP), public, dimension(:), allocatable :: Gmass

Mass gravitational term G * mass (units GU * MU)

real(kind=DP), public, dimension(:,:), allocatable :: Ip

Unitless principal moments of inertia (I1, I2, I3) / (MR**2). Principal axis rotation assumed.

real(kind=DP), public, dimension(:), allocatable :: Q

Tidal quality factor

real(kind=DP), public, dimension(:), allocatable :: a

Semimajor axis (pericentric distance for a parabolic orbit)

real(kind=DP), public, dimension(:,:), allocatable :: agr

Acceleration due to post-Newtonian correction

real(kind=DP), public, dimension(:,:), allocatable :: ah

Total heliocentric acceleration

real(kind=DP), public, dimension(:), allocatable :: albedo

Bond albedo for radiation acceleration calculations

real(kind=DP), public, dimension(:,:), allocatable :: aobl

Barycentric accelerations of bodies due to central body oblatenes

real(kind=DP), public, dimension(:,:), allocatable :: atide

Tanngential component of acceleration of bodies due to tides

real(kind=DP), public, dimension(:), allocatable :: atp

semimajor axis following perihelion passage

real(kind=DP), public, dimension(:), allocatable :: capm

Mean anomaly

real(kind=DP), public, dimension(:), allocatable :: capom

Longitude of ascending node

real(kind=DP), public, dimension(:), allocatable :: density

Body mass density - calculated internally (units MU / DU**3)

real(kind=DP), public, dimension(:), allocatable :: e

Eccentricity

real(kind=DP), public, dimension(:), allocatable :: emissivity

Emissivity for Yarkovsky acceleration calculations

real(kind=DP), public, dimension(:), allocatable :: gamma

Thermal inertia for Yarkovsky calculations

integer(kind=I4B), public, dimension(:), allocatable :: id

Identifier

real(kind=DP), public, dimension(:), allocatable :: inc

Inclination

type(swiftest_particle_info), public, dimension(:), allocatable :: info

Particle metadata information

real(kind=DP), public, dimension(:), allocatable :: ir3h

Inverse heliocentric radius term (1/rh**3)

integer(kind=I4B), public, dimension(:), allocatable :: isperi

perihelion passage flag

real(kind=DP), public, dimension(:), allocatable :: k2

Tidal Love number

integer(kind=I4B), public, dimension(:,:), allocatable :: k_plpl

Index array used to convert flattened the body-body comparison upper triangular matrix

type(swiftest_kinship), public, dimension(:), allocatable :: kin

Array of merger relationship structures that can account for multiple pairwise mergers in a single step

logical, public, dimension(:), allocatable :: lcollision

flag indicating whether body has merged with another this time step

logical, public, dimension(:), allocatable :: ldiscard

Body should be discarded

logical, public, dimension(:), allocatable :: lencounter

flag indicating whether body is part of an encounter this time step

integer(kind=I4B), public, dimension(:), allocatable :: levelg

level at which this body should be moved

integer(kind=I4B), public, dimension(:), allocatable :: levelm

deepest encounter level achieved this time step

logical, public :: lfirst = .true.

Run the current step as a first

logical, public, dimension(:), allocatable :: lmask

Logical mask used to select a subset of bodies when performing certain operations (drift, kick, accel, etc.)

logical, public, dimension(:), allocatable :: lmtiny

flag indicating whether this body is below the GMTINY cutoff value

real(kind=DP), public, dimension(:), allocatable :: mass

Body mass (units MU)

real(kind=DP), public, dimension(:), allocatable :: mu

G * (Mcb + [m])

integer(kind=I4B), public :: nbody = 0

Number of bodies

integer(kind=I4B), public, dimension(:), allocatable :: nplenc

number of encounters with other planets this time step

integer(kind=I4B), public :: nplm = 0

number of bodies above the GMTINY limit

integer(kind=I8B), public :: nplpl

Number of body-body comparisons in the flattened upper triangular matrix

integer(kind=I8B), public :: nplplm

Number of body (all massive)-body (only those above GMTINY) comparisons in the flattened upper triangular matrix

integer(kind=I4B), public, dimension(:), allocatable :: ntpenc

number of encounters with test particles this time step

real(kind=DP), public, dimension(:), allocatable :: omega

Argument of pericenter

real(kind=DP), public, dimension(:), allocatable :: peri

perihelion distance

real(kind=DP), public, dimension(:), allocatable :: radius

Body radius (units DU)

real(kind=DP), public, dimension(:,:), allocatable :: rb

Barycentric position

real(kind=DP), public, dimension(:,:), allocatable :: rbeg

Position at beginning of step

real(kind=DP), public, dimension(:), allocatable :: renc

Critical radius for close encounters

real(kind=DP), public, dimension(:,:), allocatable :: rend

Position at end of step

real(kind=DP), public, dimension(:,:), allocatable :: rh

Heliocentric position

real(kind=DP), public, dimension(:), allocatable :: rhill

Hill’s radius (units DU)

real(kind=DP), public, dimension(:,:), allocatable :: rot

Body rotation vector in inertial coordinate frame (units deg / TU)

real(kind=DP), public, dimension(:), allocatable :: rot_k

Constant based on rotation rate for yarkovsky calculations

integer(kind=I4B), public, dimension(:), allocatable :: status

An integrator-specific status indicator

real(kind=DP), public, dimension(:), allocatable :: tlag

Tidal phase lag

real(kind=DP), public, dimension(:,:), allocatable :: vb

Barycentric velocity

real(kind=DP), public, dimension(:,:), allocatable :: vbeg

Velocity at beginning of step

real(kind=DP), public, dimension(:,:), allocatable :: vh

Heliocentric velocity

Type-Bound Procedures

procedure, public :: accel => symba_kick_getacch_pl

Compute heliocentric accelerations of massive bodies

procedure, public :: accel_gr => helio_gr_kick_getacch_pl

Acceleration term arising from the post-Newtonian correction

procedure, public :: accel_int => symba_kick_getacch_int_pl

Compute direct cross (third) term heliocentric accelerations of massive bodiess, with no mutual interactions between bodies below GMTINY

procedure, public :: accel_non_spherical_cb => swiftest_non_spherical_cb_acc_pl

Compute the barycentric accelerations of bodies due to the oblateness of the central body

procedure, public :: accel_radiation => swiftest_radiation_getacch_pl
procedure, public :: accel_user => swiftest_user_kick_getacch_body

Add user-supplied heliocentric accelerations to planets

procedure, public :: accel_yarkovsky => helio_kick_yarkovsky_getacch_pl

Compute the heliocentric accelerations of bodies due to the Yarkovsky effect

procedure, public :: append => symba_util_append_pl

Appends elements from one structure to another

procedure, public :: b2h => swiftest_util_coord_b2h_pl

Convert massive bodies from barycentric to heliocentric coordinates (position and velocity)

procedure, public :: dealloc => symba_util_dealloc_pl

Deallocates all allocatable arrays

procedure, public :: discard => symba_discard_pl

Process massive body discards

procedure, public :: drift => symba_drift_pl

Method for Danby drift in Democratic Heliocentric coordinates. Sets the mask to the current recursion level

procedure, public :: el2xv => swiftest_orbel_el2xv_vec

Convert orbital elements to position and velocity vectors

procedure, public :: encounter_check => symba_encounter_check_pl

Checks if massive bodies are going through close encounters with each other

procedure, public :: fill => symba_util_fill_pl

“Fills” bodies from one object into another depending on the results of a mask (uses the UNPACK intrinsic)

procedure, public :: flatten => symba_util_flatten_eucl_plpl

Sets up the (i, j) -> k indexing used for the single-loop blocking Euclidean distance matrix

procedure, public :: get_peri => swiftest_util_peri_body

Determine nbody_system pericenter passages for test particles

procedure, public :: gr_pos_kick => symba_gr_p4_pl

Position kick due to p**4 term in the post-Newtonian correction

procedure, public :: h2b => swiftest_util_coord_h2b_pl

Convert massive bodies from heliocentric to barycentric coordinates (position and velocity)

procedure, public :: kick => helio_kick_vb_pl

Kicks the barycentric velocities

procedure, public :: lindrift => helio_drift_linear_pl

Method for linear drift of massive bodies due to barycentric momentum of Sun

procedure, public :: make_impactors => swiftest_util_make_impactors_pl

Make impactors out of the current kinship relationships

procedure, public :: pv2v => swiftest_gr_pv2vh_body

Converts from psudeovelocity to velocity for GR calculations using symplectic integrators

generic, public :: read_frame => read_frame_bin

Add the generic read frame for Fortran binary files

procedure, public :: read_frame_bin => swiftest_io_read_frame_body

I/O routine for writing out a single frame of time-series data for the central body

procedure, public :: read_in => swiftest_io_read_in_body

Read in body initial conditions from an ascii file

procedure, public :: rearrange => symba_util_sort_rearrange_pl

Rearranges the order of array elements of body based on an input index array. Used in sorting methods

procedure, public :: rearray => swiftest_util_rearray_pl

Clean up the massive body structures to remove discarded bodies and add new bodies

procedure, public :: reset_kinship => swiftest_util_reset_kinship_pl

Resets the kinship status of bodies

procedure, public :: resize => symba_util_resize_pl

Checks the current size of a SyMBA massive body against the requested size and resizes it if it is too small.

procedure, public :: rh2rb => swiftest_util_coord_rh2rb_pl

Convert massive bodies from heliocentric to barycentric coordinates (position only)

procedure, public :: save_discard => swiftest_util_save_discard_body

Saves a snapshot of the this body to the collision storage object

procedure, public :: set_beg_end => swiftest_util_set_beg_end_pl

Sets the beginning and ending positions and velocities of planets.

procedure, public :: set_ir3 => swiftest_util_set_ir3h

Sets the inverse heliocentric radius term (1/rh**3)

procedure, public :: set_mu => swiftest_util_set_mu_pl

Method used to construct the vectorized form of the central body mass

generic, public :: set_renc => set_renc_I4B, set_renc_DP
procedure, public :: set_renc_DP => swiftest_util_set_renc_DP

Sets the critical radius for encounter given an input real scale factor

procedure, public :: set_renc_I4B => symba_util_set_renc

Sets the critical radius for encounter given an input recursion depth

procedure, public :: set_rhill => swiftest_util_set_rhill

Calculates the Hill’s radii for each body

procedure, public :: setup => symba_util_setup_pl

Constructor method - Allocates space for the input number of bodies

procedure, public :: sort => symba_util_sort_pl

Sorts body arrays by a sortable componen

procedure, public :: spill => symba_util_spill_pl

“Spills” bodies from one object to another depending on the results of a mask (uses the PACK intrinsic)

procedure, public :: step => helio_step_pl

Steps the body forward one stepsize

procedure, public :: v2pv => swiftest_gr_vh2pv_body

Converts from velocity to psudeovelocity for GR calculations using symplectic integrators

procedure, public :: vb2vh => swiftest_util_coord_vb2vh_pl

Convert massive bodies from barycentric to heliocentric coordinates (velocity only)

procedure, public :: vh2vb => swiftest_util_coord_vh2vb_pl

Convert massive bodies from heliocentric to barycentric coordinates (velocity only)

procedure, public :: write_frame => swiftest_io_netcdf_write_frame_body

I/O routine for writing out a single frame of time-series data for all bodies in the nbody_system in NetCDF format

procedure, public :: write_info => swiftest_io_netcdf_write_info_body

Dump contents of particle information metadata to file

procedure, public :: xv2el => swiftest_orbel_xv2el_vec

Convert position and velocity vectors to orbital elements

type, public, extends(base_object) ::  ringmoons_ring

Components

Type Visibility Attributes Name Initial
real(kind=DP), public :: FRL

Rigid and fluid Roche limits

real(kind=DP), public, dimension(:), allocatable :: Gsigma

G*surface mass density of ring bin

real(kind=DP), public, dimension(:), allocatable :: Iz

polar moment of inertia of ring bin

real(kind=DP), public, dimension(:), allocatable :: Q

Toomre parameter of the ring bin

real(kind=DP), public :: RRL

Rigid and fluid Roche limits

real(kind=DP), public, dimension(:), allocatable :: Torque

total satellite torque density acting on the ring bin

real(kind=DP), public, dimension(:), allocatable :: X

distance variable X bin center used for viscosity calculations

real(kind=DP), public, dimension(:), allocatable :: X2

distance variable X**2 bin center used for viscosity calculations

real(kind=DP), public :: X_inner

inside radius of ring in X units (see Bath & Pringle 1981)

real(kind=DP), public :: X_outer

outside radius of ring in X units (see Bath & Pringle 1981)

real(kind=DP), public, dimension(:), allocatable :: Y_21

2nd row-1st column term of the Yarkovsky directional matrix (Ferich, et al, 2022; Veras, et al, 2015)

real(kind=DP), public, allocatable :: a_pl

semi-major axis of the planet from the Sun

real(kind=DP), public, allocatable :: albedo

Bond albedo of ring particles for Yarkovsky acceleration calculations

real(kind=DP), public, dimension(:), allocatable :: delta

planetary shadow width

real(kind=DP), public, dimension(:), allocatable :: deltaA

differential surface area of ring

real(kind=DP), public :: deltaX

variable changed bin width used for viscosity calculations in X units

real(kind=DP), public, allocatable :: emissivity

Emissivity for Yarkovsky acceleration calculations

real(kind=DP), public, allocatable :: gamma

Thermal inertia for Yarkovsky-Schach calculations

integer(kind=I4B), public :: iFRL

Indexes of Roche limit bins

integer(kind=I4B), public :: iRRL

Indexes of Roche limit bins

integer(kind=I4B), public :: inside = 1

bin id of innermost ring bin (can increase if primary accretes a lot mass through updates)

real(kind=DP), public, dimension(:), allocatable :: m_p

ring particle mass per bin

real(kind=DP), public, dimension(:), allocatable :: mass

mass of ring particles in bin

integer(kind=I4B), public :: nbins

number of bins in ring

type(ringmoons_netcdf_parameters), public :: nc

NetCDF file object associated with this ring stucture

real(kind=DP), public, dimension(:), allocatable :: nkep

Keplerian angular velocity of ring bin

real(kind=DP), public, dimension(:), allocatable :: nu

viscocity of the ring bin

real(kind=DP), public, allocatable :: obliquity

obliquity of the planet from the Sun

real(kind=DP), public, dimension(:), allocatable :: r

radial distance of center of bin in simulation length units

real(kind=DP), public, dimension(:), allocatable :: r_hstar

normalized ring Hill’s radius in simulation length units

real(kind=DP), public :: r_inner

inside radius of ring in simulation length units

real(kind=DP), public :: r_outer

outside radius of ring in simulation length units

real(kind=DP), public, dimension(:), allocatable :: r_p

ring particle radius per bin

real(kind=DP), public, dimension(:), allocatable :: rho_p

ring particle mass density per bin

real(kind=DP), public, allocatable :: rot_k

Constant based on rotation rate for Yarkovsky calculations

real(kind=DP), public, dimension(:), allocatable :: sigma

surface mass density of ring bin

real(kind=DP), public :: t = -1.0_DP

Integration current time (set internally from the nbody_system)

real(kind=DP), public, dimension(:), allocatable :: tau

ring optical depth

real(kind=DP), public, dimension(:), allocatable :: vrel_p

ring particle relative velocity per bin

Finalizations Procedures

final :: ringmoons_final_ring

Finalizes the ringmoons ring object - deallocates all allocatables

Type-Bound Procedures

procedure, public :: dealloc => ringmoons_util_dealloc_ring

Deallocates allocatable arrays

procedure, public :: find_bin => ringmoons_util_find_bin

Returns the bin containing radius r from the input ring.

procedure, public :: get_dt => ringmoons_util_get_dt_ring

Calculates the maximum stable timestep for the surface mass density evolution that is not larger than dtin.

procedure, public :: get_lindblad_torque => ringmoons_torque_lindblad_ring

Calculates the lindblad torques between each ring element and an input body.

procedure, public :: read_frame => ringmoons_io_read_frame_ring

Read in ring data from file

procedure, public :: reset => ringmoons_util_reset_ring

Resets ring torques and recomputes all dimensional quantities, such as ring extent and limits based on the current surface mass density and central body properties.

procedure, public :: set_velocity_dispersion => ringmoons_util_velocity_dispersion_ring

Calculates the velocity

procedure, public :: setup => ringmoons_util_setup_ring

Sets up a new ring system from an input file

procedure, public :: step => ringmoons_step_ring

Adnances the evolution of the ring by one time step.

procedure, public :: update => ringmoons_util_update_ring

Updates the ring velocity dispersion, Toomre parameter, and viscosity values

procedure, public :: write_frame => ringmoons_io_write_frame_ring

Writes ring data to file

procedure, public :: yark_schach_torque => ringmoons_torque_yarkovsky_schach_ring

Calculates the torque from the Yarkovsky-Schach effect on the ring

type, public, extends(base_object) ::  ringmoons_seed

Components

Type Visibility Attributes Name Initial
real(kind=DP), public, dimension(:), allocatable :: Gmass

Mass gravitational term G * mass (units GU * MU)

real(kind=DP), public, dimension(:), allocatable :: Torque

Total torque acting on the seed

real(kind=DP), public, dimension(:), allocatable :: Ttide

Tidal torque acting on the seed

real(kind=DP), public, dimension(:), allocatable :: a

Semimajor axis

real(kind=DP), public, dimension(:), allocatable :: density

Body mass density - calculated internally (units MU / DU**3)

real(kind=DP), public :: feeding_zone_factor = 10._DP

Width of feeding zone for seed mergers in units of mutual Hill’s sphere

integer(kind=I4B), public, dimension(:), allocatable :: id

Identifier

type(swiftest_particle_info), public, dimension(:), allocatable :: info

Particle metadata information

real(kind=DP), public, dimension(:), allocatable :: mass

Body mass (units MU)

real(kind=DP), public :: mass_init

initial mass of seeds

integer(kind=I4B), public :: maxid

Current maximum id of the system, set automatically from the nbody_system object

real(kind=DP), public, dimension(:), allocatable :: mu

Gravitational cononstant

integer(kind=I4B), public :: nbody = 0

Number of seed bodies

real(kind=DP), public, dimension(:), allocatable :: radius

Body radius (units DU)

real(kind=DP), public, dimension(:), allocatable :: rhill

Hill’s radius (units DU)

integer(kind=I4B), public, dimension(:), allocatable :: ringbin

Ring bin location of seed

real(kind=DP), public :: rkf_tol = 1.0e-6_DP

Error tolerance for Runge-Kutta-Fehlberg integrator for seed evolution

integer(kind=I4B), public, dimension(:), allocatable :: status

Active or inactive status indicator

Finalizations Procedures

final :: ringmoons_final_seed

Type-Bound Procedures

procedure, public :: dealloc => ringmoons_util_dealloc_seed

Deallocates all allocatable arrays

procedure, public :: get_tidal_torque => ringmoons_torque_tidal_seed

Calculates the tidal torque on the seed from the central body

procedure, public :: read_frame => ringmoons_io_read_frame_seed

Read seed data from file

procedure, public :: restructure => ringmoons_step_restructure_seed

Restructures the seed system by merging seeds that are within each other’s feeding zones and reassigning ring bins based on current semimajor axes

procedure, public :: setup => ringmoons_util_setup_seed

Sets up a new seed system from an input file

procedure, public :: spawn => ringmoons_util_spawn_seed

Spawn new seeds from the ring at the FRL

procedure, public :: step => ringmoons_step_seed

Advances the evolution of the seeds by one time step, including accretion and spawning events

procedure, public :: write_frame => ringmoons_io_write_frame_seed

Writes seed data to file

type, public, extends(symba_tp) ::  ringmoons_tp

Ringmoons test particle class

Components

Type Visibility Attributes Name Initial
real(kind=DP), public, dimension(:), allocatable :: a

Semimajor axis (pericentric distance for a parabolic orbit)

real(kind=DP), public, dimension(:,:), allocatable :: agr

Acceleration due to post-Newtonian correction

real(kind=DP), public, dimension(:,:), allocatable :: ah

Total heliocentric acceleration

real(kind=DP), public, dimension(:,:), allocatable :: aobl

Barycentric accelerations of bodies due to central body oblatenes

real(kind=DP), public, dimension(:,:), allocatable :: atide

Tanngential component of acceleration of bodies due to tides

real(kind=DP), public, dimension(:), allocatable :: atp

semimajor axis following perihelion passage

real(kind=DP), public, dimension(:), allocatable :: capm

Mean anomaly

real(kind=DP), public, dimension(:), allocatable :: capom

Longitude of ascending node

real(kind=DP), public, dimension(:), allocatable :: e

Eccentricity

integer(kind=I4B), public, dimension(:), allocatable :: id

Identifier

real(kind=DP), public, dimension(:), allocatable :: inc

Inclination

type(swiftest_particle_info), public, dimension(:), allocatable :: info

Particle metadata information

real(kind=DP), public, dimension(:), allocatable :: ir3h

Inverse heliocentric radius term (1/rh**3)

integer(kind=I4B), public, dimension(:), allocatable :: isperi

perihelion passage flag

integer(kind=I4B), public, dimension(:,:), allocatable :: k_pltp

Index array used to convert flattened the body-body comparison upper triangular matrix

logical, public, dimension(:), allocatable :: lcollision

flag indicating whether body has merged with another this time step

logical, public, dimension(:), allocatable :: ldiscard

Body should be discarded

logical, public, dimension(:), allocatable :: lencounter

flag indicating whether body is part of an encounter this time step

integer(kind=I4B), public, dimension(:), allocatable :: levelg

level at which this particle should be moved

integer(kind=I4B), public, dimension(:), allocatable :: levelm

deepest encounter level achieved this time step

logical, public :: lfirst = .true.

Run the current step as a first

logical, public, dimension(:), allocatable :: lmask

Logical mask used to select a subset of bodies when performing certain operations (drift, kick, accel, etc.)

real(kind=DP), public, dimension(:), allocatable :: mu

G * (Mcb + [m])

integer(kind=I4B), public :: nbody = 0

Number of bodies

integer(kind=I4B), public, dimension(:), allocatable :: nplenc

number of encounters with planets this time step

integer(kind=I8B), public :: npltp

Number of pl-tp comparisons in the flattened upper triangular matrix

real(kind=DP), public, dimension(:), allocatable :: omega

Argument of pericenter

real(kind=DP), public, dimension(:), allocatable :: peri

perihelion distance

real(kind=DP), public, dimension(:,:), allocatable :: rb

Barycentric position

real(kind=DP), public, dimension(:,:), allocatable :: rh

Heliocentric position

integer(kind=I4B), public, dimension(:), allocatable :: status

An integrator-specific status indicator

real(kind=DP), public, dimension(:,:), allocatable :: vb

Barycentric velocity

real(kind=DP), public, dimension(:,:), allocatable :: vh

Heliocentric velocity

Type-Bound Procedures

procedure, public :: accel => symba_kick_getacch_tp

Compute heliocentric accelerations of test particles

procedure, public :: accel_gr => helio_gr_kick_getacch_tp

Acceleration term arising from the post-Newtonian correction

procedure, public :: accel_int => swiftest_kick_getacch_int_tp

Compute direct cross (third) term heliocentric accelerations of test particles by massive bodies

procedure, public :: accel_non_spherical_cb => swiftest_non_spherical_cb_acc_tp

Compute the barycentric accelerations of bodies due to the oblateness of the central body

procedure, public :: accel_user => swiftest_user_kick_getacch_body

Add user-supplied heliocentric accelerations to planets

procedure, public :: append => symba_util_append_tp

Appends elements from one structure to another

procedure, public :: b2h => swiftest_util_coord_b2h_tp

Convert test particles from barycentric to heliocentric coordinates (position and velocity)

procedure, public :: dealloc => symba_util_dealloc_tp

Deallocates all allocatable arrays

procedure, public :: discard => swiftest_discard_tp

Check to see if test particles should be discarded based on their positions relative to the massive bodies

procedure, public :: drift => symba_drift_tp

Method for Danby drift in Democratic Heliocentric coordinates. Sets the mask to the current recursion level

procedure, public :: el2xv => swiftest_orbel_el2xv_vec

Convert orbital elements to position and velocity vectors

procedure, public :: encounter_check => symba_encounter_check_tp

Checks if any test particles are undergoing a close encounter with a massive body

procedure, public :: fill => symba_util_fill_tp

“Fills” bodies from one object into another depending on the results of a mask (uses the UNPACK intrinsic)

procedure, public :: get_peri => swiftest_util_peri_body

Determine nbody_system pericenter passages for test particles

procedure, public :: gr_pos_kick => symba_gr_p4_tp

Position kick due to p**4 term in the post-Newtonian correction

procedure, public :: h2b => swiftest_util_coord_h2b_tp

Convert test particles from heliocentric to barycentric coordinates (position and velocity)

procedure, public :: kick => helio_kick_vb_tp

Kicks the barycentric velocities

procedure, public :: lindrift => helio_drift_linear_tp

Method for linear drift of massive bodies due to barycentric momentum of Sun

procedure, public :: pv2v => swiftest_gr_pv2vh_body

Converts from psudeovelocity to velocity for GR calculations using symplectic integrators

generic, public :: read_frame => read_frame_bin

Add the generic read frame for Fortran binary files

procedure, public :: read_frame_bin => swiftest_io_read_frame_body

I/O routine for writing out a single frame of time-series data for the central body

procedure, public :: read_in => swiftest_io_read_in_body

Read in body initial conditions from an ascii file

procedure, public :: rearrange => symba_util_sort_rearrange_tp

Rearranges the order of array elements of body based on an input index array. Used in sorting methods

procedure, public :: rearray => swiftest_util_rearray_tp

Clean up the test particle structures to remove discarded bodies

procedure, public :: resize => symba_util_resize_tp

Checks the current size of a Swiftest body against the requested size and resizes it if it is too small.

procedure, public :: rh2rb => swiftest_util_coord_rh2rb_tp

Convert test particles from heliocentric to barycentric coordinates (position only)

procedure, public :: save_discard => swiftest_util_save_discard_body

Saves a snapshot of the this body to the collision storage object

procedure, public :: set_ir3 => swiftest_util_set_ir3h

Sets the inverse heliocentric radius term (1/rh**3)

procedure, public :: set_mu => swiftest_util_set_mu_tp

Method used to construct the vectorized form of the central body mass

procedure, public :: setup => symba_util_setup_tp

Constructor method - Allocates space for the input number of bodies

procedure, public :: sort => symba_util_sort_tp

Sorts body arrays by a sortable componen

procedure, public :: spill => symba_util_spill_tp

“Spills” bodies from one object to another depending on the results of a mask (uses the PACK intrinsic)

procedure, public :: step => helio_step_tp

Steps the body forward one stepsize

procedure, public :: v2pv => swiftest_gr_vh2pv_body

Converts from velocity to psudeovelocity for GR calculations using symplectic integrators

procedure, public :: vb2vh => swiftest_util_coord_vb2vh_tp

Convert test particles from barycentric to heliocentric coordinates (velocity only)

procedure, public :: vh2vb => swiftest_util_coord_vh2vb_tp

Convert test particles from heliocentric to barycentric coordinates (velocity only)

procedure, public :: write_frame => swiftest_io_netcdf_write_frame_body

I/O routine for writing out a single frame of time-series data for all bodies in the nbody_system in NetCDF format

procedure, public :: write_info => swiftest_io_netcdf_write_info_body

Dump contents of particle information metadata to file

procedure, public :: xv2el => swiftest_orbel_xv2el_vec

Convert position and velocity vectors to orbital elements


Subroutines

public subroutine ringmoons_final_netcdf_parameters(self)

Author
David A. Minton

Finalize the NetCDF by closing the file

Arguments

Type IntentOptional Attributes Name
type(ringmoons_netcdf_parameters), intent(inout) :: self

public subroutine ringmoons_final_ring(self)

Author
David A. Minton

Finalize the ringmoons ring object - deallocates all allocatables

Arguments

Type IntentOptional Attributes Name
type(ringmoons_ring), intent(inout) :: self

Ringmoons ring object

public subroutine ringmoons_final_seed(self)

Author
David A. Minton

Finalize the ringmoons seed object - deallocates all allocatables

Arguments

Type IntentOptional Attributes Name
type(ringmoons_seed), intent(inout) :: self

Ringmoons seed object