collision Module

  • The Purdue Swiftest Team - David A. Minton, Carlisle A. Wishard, Jennifer L.L. Pouplin, and Jacob R. Elliott
  • 480 statements
  • Source File

Definition of classes and methods used to determine close encounters NetCDF dimension and variable names for the enounter save object


Uses

  • module~~collision~~UsesGraph module~collision collision globals globals module~collision->globals module~base base module~collision->module~base module~encounter encounter module~collision->module~encounter module~base->globals module~coarray coarray module~base->module~coarray module~encounter->globals module~encounter->module~base module~netcdf_io netcdf_io module~encounter->module~netcdf_io module~coarray->globals module~netcdf_io->globals module~netcdf_io->module~base

Used by

  • module~~collision~~UsedByGraph module~collision collision module~s_collision_check s_collision_check module~s_collision_check->module~collision module~swiftest swiftest module~s_collision_check->module~swiftest module~symba symba module~s_collision_check->module~symba module~s_collision_generate s_collision_generate module~s_collision_generate->module~collision module~s_collision_generate->module~swiftest module~s_collision_io s_collision_io module~s_collision_io->module~collision module~s_collision_io->module~swiftest module~s_collision_regime s_collision_regime module~s_collision_regime->module~collision module~s_collision_regime->module~swiftest module~s_collision_resolve s_collision_resolve module~s_collision_resolve->module~collision module~s_collision_resolve->module~swiftest module~s_collision_util s_collision_util module~s_collision_util->module~collision module~s_collision_util->module~swiftest module~swiftest->module~collision module~bindings_module bindings_module module~bindings_module->module~swiftest module~fraggle fraggle module~fraggle->module~swiftest module~helio helio module~helio->module~swiftest module~whm whm module~helio->module~whm module~rmvs rmvs module~rmvs->module~swiftest module~rmvs->module~whm module~s_coarray_clone s_coarray_clone module~s_coarray_clone->module~swiftest module~s_coarray_collect s_coarray_collect module~s_coarray_collect->module~swiftest module~s_encounter_check s_encounter_check module~s_encounter_check->module~swiftest module~s_encounter_io s_encounter_io module~s_encounter_io->module~swiftest module~s_encounter_util s_encounter_util module~s_encounter_util->module~swiftest module~s_fraggle_generate s_fraggle_generate module~s_fraggle_generate->module~swiftest module~s_fraggle_generate->module~fraggle module~s_fraggle_generate->module~symba module~s_fraggle_util s_fraggle_util module~s_fraggle_util->module~swiftest module~s_fraggle_util->module~fraggle module~s_helio_drift s_helio_drift module~s_helio_drift->module~swiftest module~s_helio_drift->module~helio module~s_helio_gr s_helio_gr module~s_helio_gr->module~swiftest module~s_helio_gr->module~helio module~s_helio_kick s_helio_kick module~s_helio_kick->module~swiftest module~s_helio_kick->module~helio module~s_helio_step s_helio_step module~s_helio_step->module~swiftest module~s_helio_step->module~helio module~s_helio_util s_helio_util module~s_helio_util->module~swiftest module~s_helio_util->module~helio module~s_operator_cross s_operator_cross module~s_operator_cross->module~swiftest module~s_rmvs_discard s_rmvs_discard module~s_rmvs_discard->module~swiftest module~s_rmvs_discard->module~rmvs module~s_rmvs_encounter_check s_rmvs_encounter_check module~s_rmvs_encounter_check->module~swiftest module~s_rmvs_encounter_check->module~rmvs module~s_rmvs_kick s_rmvs_kick module~s_rmvs_kick->module~swiftest module~s_rmvs_kick->module~rmvs module~s_rmvs_step s_rmvs_step module~s_rmvs_step->module~swiftest module~s_rmvs_step->module~rmvs module~s_rmvs_util s_rmvs_util module~s_rmvs_util->module~swiftest module~s_rmvs_util->module~rmvs module~s_shgrav_accel s_shgrav_accel module~s_shgrav_accel->module~swiftest module~shgrav shgrav module~s_shgrav_accel->module~shgrav module~s_shgrav_pot s_shgrav_pot module~s_shgrav_pot->module~swiftest module~s_shgrav_pot->module~shgrav module~s_swiftest_coarray s_swiftest_coarray module~s_swiftest_coarray->module~swiftest module~s_swiftest_discard s_swiftest_discard module~s_swiftest_discard->module~swiftest module~s_swiftest_drift s_swiftest_drift module~s_swiftest_drift->module~swiftest module~s_swiftest_driver s_swiftest_driver module~s_swiftest_driver->module~swiftest module~s_swiftest_gr s_swiftest_gr module~s_swiftest_gr->module~swiftest module~s_swiftest_io s_swiftest_io module~s_swiftest_io->module~swiftest module~s_swiftest_io->module~symba module~s_swiftest_kick s_swiftest_kick module~s_swiftest_kick->module~swiftest module~s_swiftest_obl s_swiftest_obl module~s_swiftest_obl->module~swiftest module~s_swiftest_obl->module~shgrav module~s_swiftest_orbel s_swiftest_orbel module~s_swiftest_orbel->module~swiftest module~s_swiftest_user s_swiftest_user module~s_swiftest_user->module~swiftest module~s_swiftest_util s_swiftest_util module~s_swiftest_util->module~swiftest module~s_swiftest_util->module~fraggle module~s_swiftest_util->module~helio module~s_swiftest_util->module~rmvs module~s_swiftest_util->module~symba module~s_swiftest_util->module~whm module~s_symba_discard s_symba_discard module~s_symba_discard->module~swiftest module~s_symba_discard->module~symba module~s_symba_drift s_symba_drift module~s_symba_drift->module~swiftest module~s_symba_drift->module~symba module~s_symba_encounter_check s_symba_encounter_check module~s_symba_encounter_check->module~swiftest module~s_symba_encounter_check->module~symba module~s_symba_gr s_symba_gr module~s_symba_gr->module~swiftest module~s_symba_gr->module~symba module~s_symba_kick s_symba_kick module~s_symba_kick->module~swiftest module~s_symba_kick->module~symba module~s_symba_step s_symba_step module~s_symba_step->module~swiftest module~s_symba_step->module~symba module~s_symba_util s_symba_util module~s_symba_util->module~swiftest module~s_symba_util->module~fraggle module~s_symba_util->module~symba module~s_tides_kick_getacch s_tides_kick_getacch module~s_tides_kick_getacch->module~swiftest module~s_tides_step_rot s_tides_step_rot module~s_tides_step_rot->module~swiftest module~s_walltime s_walltime module~s_walltime->module~swiftest module~s_whm_coord s_whm_coord module~s_whm_coord->module~swiftest module~s_whm_coord->module~whm module~s_whm_gr s_whm_gr module~s_whm_gr->module~swiftest module~s_whm_gr->module~whm module~s_whm_kick s_whm_kick module~s_whm_kick->module~swiftest module~s_whm_kick->module~whm module~s_whm_step s_whm_step module~s_whm_step->module~swiftest module~s_whm_step->module~whm module~s_whm_util s_whm_util module~s_whm_util->module~swiftest module~s_whm_util->module~whm module~shgrav->module~swiftest module~symba->module~swiftest module~symba->module~helio module~whm->module~swiftest module~whm_drift whm_drift module~whm_drift->module~swiftest module~whm_drift->module~whm program~main main program~main->module~swiftest

Variables

Type Visibility Attributes Name Initial
character(len=STRMAX), public :: COLLISION_LOG_OUT

Name of log file for collision diagnostic information (each co-image gets its own)

character(len=*), public, parameter :: COLLISION_LOG_OUT = "collisions.log"

Name of log file for collision diagnostic information

character(len=*), public, parameter :: COLLISION_OUTFILE = 'collisions.nc'

Name of NetCDF output file for collision information

integer(kind=I4B), public, parameter :: COLLRESOLVE_REGIME_DISRUPTION = 2
integer(kind=I4B), public, parameter :: COLLRESOLVE_REGIME_GRAZE_AND_MERGE = 4
integer(kind=I4B), public, parameter :: COLLRESOLVE_REGIME_HIT_AND_RUN = 5
integer(kind=I4B), public, parameter :: COLLRESOLVE_REGIME_MERGE = 1

Symbolic names for collisional outcomes

integer(kind=I4B), public, parameter :: COLLRESOLVE_REGIME_SUPERCATASTROPHIC = 3
real(kind=DP), public, parameter :: MAX_ROT_SI = 7.108e-4*RAD2DEG

Rotational limit in deg/s of cohesionless body from Holsapple (2007)

integer(kind=I4B), public, parameter :: REGIME_CB_IMPACT = 6
integer(kind=I4B), public, parameter :: REGIME_EJECTED = 7
character(len=NAMELEN), public, parameter, dimension(7) :: REGIME_NAMES = [REGIME_NAME_MERGE, REGIME_NAME_DISRUPTION, REGIME_NAME_SUPERCATASTROPHIC, REGIME_NAME_GRAZE_AND_MERGE, REGIME_NAME_HIT_AND_RUN, REGIME_NAME_CB_IMPACT, REGIME_NAME_EJECTED]
character(len=NAMELEN), public, parameter :: REGIME_NAME_CB_IMPACT = "Central Body Impact"
character(len=NAMELEN), public, parameter :: REGIME_NAME_DISRUPTION = "Disruption"
character(len=NAMELEN), public, parameter :: REGIME_NAME_EJECTED = "Ejected"
character(len=NAMELEN), public, parameter :: REGIME_NAME_GRAZE_AND_MERGE = "Graze and Merge"
character(len=NAMELEN), public, parameter :: REGIME_NAME_HIT_AND_RUN = "Hit and Run"
character(len=NAMELEN), public, parameter :: REGIME_NAME_MERGE = "Merge"
character(len=NAMELEN), public, parameter :: REGIME_NAME_SUPERCATASTROPHIC = "Supercatastrophic"

Interfaces

interface

  • public module subroutine collision_check_plpl(self, nbody_system, param, t, dt, irec, lany_collision)

    Arguments

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

    encounter list object

    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object

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

    Current run configuration parameters

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

    current time

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

    step size

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

    Current recursion level

    logical, intent(out) :: lany_collision

    Returns true if any pair of encounters resulted in a collision

interface

  • public module subroutine collision_check_pltp(self, nbody_system, param, t, dt, irec, lany_collision)

    Arguments

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

    encounter list object

    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object

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

    Current run configuration parameters

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

    current time

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

    step size

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

    Current recursion level

    logical, intent(out) :: lany_collision

    Returns true if any pair of encounters resulted in a collision

interface

  • public module subroutine collision_generate_basic(self, nbody_system, param, t)

    Arguments

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

    Merge fragment nbody_system object

    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object

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

    Current run configuration parameters

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

    The time of the collision

interface

  • public module subroutine collision_generate_bounce(self, nbody_system, param, t)

    Arguments

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

    Bounce fragment nbody_system object

    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object

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

    Current run configuration parameters

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

    The time of the collision

interface

  • public module subroutine collision_generate_hitandrun(self, nbody_system, param, t)

    Arguments

    Type IntentOptional Attributes Name
    class(collision_basic), intent(inout) :: self
    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object

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

    Current run configuration parameters with SyMBA additions

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

    Time of collision

interface

  • public module subroutine collision_generate_merge(self, nbody_system, param, t)

    Arguments

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

    Merge fragment nbody_system object

    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object

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

    Current run configuration parameters

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

    The time of the collision

interface

  • public module subroutine collision_io_collider_message(pl, collidx, collider_message)

    Arguments

    Type IntentOptional Attributes Name
    class(base_object), intent(in) :: pl

    Swiftest massive body object

    integer(kind=I4B), intent(in), dimension(:) :: collidx

    Index of collisional colliders%idx members

    character(len=*), intent(inout) :: collider_message

    The message to print to the screen.

interface

  • public module subroutine collision_io_log_regime(impactors)

    Arguments

    Type IntentOptional Attributes Name
    class(collision_impactors), intent(inout) :: impactors

    Collision system object

interface

  • public module subroutine collision_io_netcdf_dump(self, param)

    Arguments

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

    Collision storage object

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

    Current run configuration parameters

interface

  • public module subroutine collision_io_netcdf_initialize_output(self, param)

    Arguments

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

    Parameters used to identify a particular NetCDF dataset

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

    Current run configuration parameters

interface

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

    Arguments

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

    Parameters used to identify a particular NetCDF dataset

    class(base_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 collision_io_netcdf_write_frame_snapshot(self, history, param)

    Arguments

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

    Swiftest encounter structure

    class(encounter_storage), intent(inout) :: history

    Collision history object

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

    Current run configuration parameters

interface

  • public module subroutine collision_regime_collider(self, nbody_system, param)

    Arguments

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

    Collision system object

    class(base_nbody_system), intent(in) :: nbody_system

    Swiftest nbody system object

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

    Current Swiftest run configuration parameters

interface

  • public module subroutine collision_resolve_consolidate_impactors(self, nbody_system, param, idx_parent, lflag)

    Arguments

    Type IntentOptional Attributes Name
    class(collision_impactors), intent(out) :: self

    Collision impactors object

    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object

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

    Current run configuration parameters with Swiftest additions

    integer(kind=I4B), intent(inout), dimension(:) :: idx_parent

    Index of the two bodies considered the “parents” of the collision

    logical, intent(out) :: lflag

    Logical flag indicating whether a impactors%id was successfully created or not

interface

  • public module subroutine collision_resolve_extract_plpl(self, nbody_system, param)

    Arguments

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

    pl-pl encounter list

    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object

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

    Current run configuration parameters

interface

  • public module subroutine collision_resolve_extract_pltp(self, nbody_system, param)

    Arguments

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

    pl-tp encounter list

    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object

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

    Current run configuration parameters

interface

  • public module subroutine collision_resolve_make_impactors_pl(pl, idx)

    Arguments

    Type IntentOptional Attributes Name
    class(base_object), intent(inout) :: pl

    Massive body object

    integer(kind=I4B), intent(in), dimension(:) :: idx

    Array holding the indices of the two bodies involved in the collision

interface

  • public module subroutine collision_resolve_mergeaddsub(nbody_system, param, t, status)

    Arguments

    Type IntentOptional Attributes Name
    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object

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

    Current run configuration parameters with Swiftest additions

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

    Time of collision

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

    Status flag to assign to adds

interface

  • public module subroutine collision_resolve_plpl(self, nbody_system, param, t, dt, irec)

    Arguments

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

    pl-pl encounter list

    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object

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

    Current run configuration parameters with Swiftest additions

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

    Current simulation time

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

    Current simulation step size

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

    Current recursion level

interface

  • public module subroutine collision_resolve_pltp(self, nbody_system, param, t, dt, irec)

    pl-tp encounter list

    Arguments

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

    Swiftest nbody system object

    class(base_nbody_system), intent(inout) :: nbody_system

    Current run configuration parameters with Swiftest additions

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

    Current simulation time

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

    Current simulation step size

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

    Current recursion level

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

interface

  • public module subroutine collision_util_add_fragments_to_collider(self, nbody_system, param)

    Arguments

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

    Collision system object

    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object

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

    Current Swiftest run configuration parameters

interface

  • public module subroutine collision_util_bounce_one(r, v, rcom, vcom, radius)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=DP), intent(inout), dimension(:) :: r
    real(kind=DP), intent(inout), dimension(:) :: v
    real(kind=DP), intent(in), dimension(:) :: rcom
    real(kind=DP), intent(in), dimension(:) :: vcom
    real(kind=DP), intent(in) :: radius

interface

  • public module subroutine collision_util_dealloc_basic(self)

    Arguments

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

    Collision system object

interface

  • public module subroutine collision_util_dealloc_fragments(self)

    Arguments

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

interface

  • public module subroutine collision_util_dealloc_impactors(self)

    Arguments

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

    Collision system object

interface

  • public module subroutine collision_util_dealloc_snapshot(self)

    Arguments

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

    Collsion snapshot object

interface

  • public module subroutine collision_util_get_energy_and_momentum(self, nbody_system, param, phase)

    Arguments

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

    Encounter collision system object

    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object

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

    Current Swiftest run configuration parameters

    character(len=*), intent(in) :: phase

    One of “before” or “after”, indicating which phase of the calculation this needs to be done

interface

  • public module subroutine collision_util_get_idvalues_snapshot(self, idvals)

    Arguments

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

    Collision snapshot object

    integer(kind=I4B), intent(out), dimension(:), allocatable :: idvals

    Array of all id values saved in this snapshot

interface

  • public module subroutine collision_util_index_map(self)

    Arguments

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

    Collision storage object

interface

  • public module subroutine collision_util_reset_fragments(self)

    Arguments

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

interface

  • public module subroutine collision_util_save_energy_snapshot(self, stage, nbody_system, iframe_start, iframe_end)

    Arguments

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

    Collision storage object with snapshots

    character(len=*), intent(in) :: stage

    Phase of the collision, either ‘before’ or ‘after’

    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object with energy information stored in it

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

    Starting frame index to save the snapshot

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

    Ending frame index to save the snapshot

interface

  • public module subroutine collision_util_set_coordinate_collider(self)

    Arguments

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

    collisional system

interface

  • public module subroutine collision_util_set_coordinate_fragments(self)

    Arguments

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

    Collisional nbody_system

interface

  • public module subroutine collision_util_set_coordinate_impactors(self)

    Arguments

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

    collisional system

interface

  • public module subroutine collision_util_set_natural_scale_factors(self)

    Arguments

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

    collision system object

interface

  • public module subroutine collision_util_set_original_scale_factors(self)

    Arguments

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

    collision system object

interface

  • public module subroutine collision_util_setup_collider(self, nbody_system, param)

    Arguments

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

    Encounter collision system object

    class(base_nbody_system), intent(in) :: nbody_system

    Current nbody system. Used as a mold for the before/after snapshots

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

    Current Swiftest run configuration parameters

interface

  • public module subroutine collision_util_setup_fragments(self, n)

    Arguments

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

    Swiftest generic body object

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

    Number of particles to allocate space for

interface

  • public module subroutine collision_util_setup_fragments_collider(self, nfrag)

    Arguments

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

    Encounter collision system object

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

    Number of fragments to create

interface

  • public module subroutine collision_util_setup_impactors_collider(self)

    Arguments

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

    Encounter collision system object

interface

  • public module subroutine collision_util_shift_vector_to_origin(m_frag, vec_frag)

    Arguments

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

    Fragment masses

    real(kind=DP), intent(inout), dimension(:,:) :: vec_frag

    Fragment positions or velocities in the center of mass frame

interface

  • public module subroutine collision_util_take_snapshot(self, param, nbody_system, t, arg)

    Arguments

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

    Swiftest storage object

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

    Current run configuration parameters

    class(base_nbody_system), intent(inout) :: nbody_system

    Swiftest nbody system object to store

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

    Time of snapshot if different from nbody_system time

    character(len=*), intent(in), optional :: arg

    “before”: takes a snapshot just before the collision. “after” takes the snapshot just after the collision.

interface

  • public module subroutine collision_util_velocity_torque(dL, mass, r, v)

    Arguments

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

    Change in angular momentum to apply

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

    Mass of body

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

    Position of body wrt system center of mass

    real(kind=DP), intent(inout), dimension(:) :: v

    Velocity of body wrt system center of mass


Derived Types

type, public ::  collision_basic

This class defines a collisional system that stores impactors and fragments. This is written so that various collision models (i.e. Fraggle) could potentially be used to resolve collision by defining extended types of encounters_impactors and/or encounetr_fragments

Read more…

Components

Type Visibility Attributes Name Initial
real(kind=DP), public :: Escale = 1.0_DP

Angular momentum scale factor (a convenience unit that is derived from dscale, tscale, and mscale)

real(kind=DP), public, dimension(NDIM,2) :: L_orbit

Before/after rotational angular momentum

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

Before/after total nbody_system angular momentum

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

Before/after orbital kinetic energy

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

Before/after orbital angular momentum fers to the entire n-body system in its pre-collisional state and index 2 refers to the system in its post-collisional state

class(base_nbody_system), public, allocatable :: after

Status flag to pass to the collision list once the collision has been resolved

real(kind=DP), public, dimension(2) :: be

Before/after total system energy

class(base_nbody_system), public, allocatable :: before

A snapshot of the subset of the nbody_system containing products of the collision

integer(kind=I4B), public :: collision_id

The current maximum collision id number

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

Mass scale factor

class(collision_fragments), public, allocatable :: fragments

Object containing information on the post-collision system

class(collision_impactors), public, allocatable :: impactors

A snapshot of the subset of the nbody_system involved in the collision

real(kind=DP), public, dimension(2) :: ke_orbit

Before/after rotational kinetic energy

real(kind=DP), public, dimension(2) :: ke_rot

Before/after potential energy

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

Distance dimension scale factor

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

Minimum fragment mass

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

Maximum rotation rate (in system or natural units, depending on )

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

Time scale factor

real(kind=DP), public, dimension(2) :: pe

Before/after binding energy

integer(kind=I4B), public :: status

ID number of this collision event

real(kind=DP), public, dimension(2) :: te
real(kind=DP), public :: tscale = 1.0_DP

Velocity scale factor (a convenience unit that is derived from dscale and tscale)

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

Energy scale factor (a convenience unit that is derived from dscale, tscale, and mscale)

Finalizations Procedures

final :: collision_final_basic

Type-Bound Procedures

procedure, public :: add_fragments => collision_util_add_fragments_to_collider ../../../../

Add fragments to nbody_system

procedure, public :: dealloc => collision_util_dealloc_basic ../../../../

Deallocates all allocatables

procedure, public :: generate => collision_generate_basic ../../../../

Merges the impactors to make a single final body

procedure, public :: get_energy_and_momentum => collision_util_get_energy_and_momentum ../../../../

Calculates total nbody_system energy in either the pre-collision outcome state (lbefore = .true.) or the post-collision outcome state (lbefore = .false.)

procedure, public :: get_regime => collision_regime_collider ../../../../

Determine which fragmentation regime the set of impactors will be

procedure, public :: hitandrun => collision_generate_hitandrun ../../../../

Merges the impactors to make a single final body

procedure, public :: merge => collision_generate_merge ../../../../

Merges the impactors to make a single final body

procedure, public :: set_coordinate_system => collision_util_set_coordinate_collider ../../../../

Sets the coordinate system of the collisional system

procedure, public :: set_natural_scale => collision_util_set_natural_scale_factors ../../../../

Scales dimenional quantities to ~O(1) with respect to the collisional system.

procedure, public :: set_original_scale => collision_util_set_original_scale_factors ../../../../

Restores dimenional quantities back to the original system units

procedure, public :: setup => collision_util_setup_collider ../../../../

Initializer for the encounter collision system and the before/after snapshots

procedure, public :: setup_fragments => collision_util_setup_fragments_collider ../../../../

Initializer for the fragments of the collision system.

procedure, public :: setup_impactors => collision_util_setup_impactors_collider ../../../../

Initializer for the impactors for the encounter collision system. Deallocates old impactors before creating new ones

type, public, extends(collision_basic) ::  collision_bounce

If a collision would result in a disruption, “bounce” the bodies instead.

Components

Type Visibility Attributes Name Initial
real(kind=DP), public :: Escale = 1.0_DP

Angular momentum scale factor (a convenience unit that is derived from dscale, tscale, and mscale)

real(kind=DP), public, dimension(NDIM,2) :: L_orbit

Before/after rotational angular momentum

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

Before/after total nbody_system angular momentum

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

Before/after orbital kinetic energy

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

Before/after orbital angular momentum fers to the entire n-body system in its pre-collisional state and index 2 refers to the system in its post-collisional state

class(base_nbody_system), public, allocatable :: after

Status flag to pass to the collision list once the collision has been resolved

real(kind=DP), public, dimension(2) :: be

Before/after total system energy

class(base_nbody_system), public, allocatable :: before

A snapshot of the subset of the nbody_system containing products of the collision

integer(kind=I4B), public :: collision_id

The current maximum collision id number

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

Mass scale factor

class(collision_fragments), public, allocatable :: fragments

Object containing information on the post-collision system

class(collision_impactors), public, allocatable :: impactors

A snapshot of the subset of the nbody_system involved in the collision

real(kind=DP), public, dimension(2) :: ke_orbit

Before/after rotational kinetic energy

real(kind=DP), public, dimension(2) :: ke_rot

Before/after potential energy

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

Distance dimension scale factor

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

Minimum fragment mass

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

Maximum rotation rate (in system or natural units, depending on )

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

Time scale factor

real(kind=DP), public, dimension(2) :: pe

Before/after binding energy

integer(kind=I4B), public :: status

ID number of this collision event

real(kind=DP), public, dimension(2) :: te
real(kind=DP), public :: tscale = 1.0_DP

Velocity scale factor (a convenience unit that is derived from dscale and tscale)

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

Energy scale factor (a convenience unit that is derived from dscale, tscale, and mscale)

Type-Bound Procedures

procedure, public :: add_fragments => collision_util_add_fragments_to_collider ../../../../

Add fragments to nbody_system

procedure, public :: dealloc => collision_util_dealloc_basic ../../../../

Deallocates all allocatables

procedure, public :: generate => collision_generate_bounce
procedure, public :: get_energy_and_momentum => collision_util_get_energy_and_momentum ../../../../

Calculates total nbody_system energy in either the pre-collision outcome state (lbefore = .true.) or the post-collision outcome state (lbefore = .false.)

procedure, public :: get_regime => collision_regime_collider ../../../../

Determine which fragmentation regime the set of impactors will be

procedure, public :: hitandrun => collision_generate_hitandrun ../../../../

Merges the impactors to make a single final body

procedure, public :: merge => collision_generate_merge ../../../../

Merges the impactors to make a single final body

procedure, public :: set_coordinate_system => collision_util_set_coordinate_collider ../../../../

Sets the coordinate system of the collisional system

procedure, public :: set_natural_scale => collision_util_set_natural_scale_factors ../../../../

Scales dimenional quantities to ~O(1) with respect to the collisional system.

procedure, public :: set_original_scale => collision_util_set_original_scale_factors ../../../../

Restores dimenional quantities back to the original system units

procedure, public :: setup => collision_util_setup_collider ../../../../

Initializer for the encounter collision system and the before/after snapshots

procedure, public :: setup_fragments => collision_util_setup_fragments_collider ../../../../

Initializer for the fragments of the collision system.

procedure, public :: setup_impactors => collision_util_setup_impactors_collider ../../../../

Initializer for the impactors for the encounter collision system. Deallocates old impactors before creating new ones

type, public, extends(base_object) ::  collision_fragments

Class definition for the variables that describe a collection of fragments in barycentric coordinates

Components

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

G*mass of fragments

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

Principal axes moment of inertia for fragments

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

Orbital angular momentum vector of each individual fragment

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

Orbital angular momentum vector of all fragments

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

Rotational angular momentum vector of each individual fragment

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

Rotational angular momentum vector of all fragments

real(kind=DP), public :: be

Binding energy of all fragments

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

Radii of fragments

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

Identifier

class(base_particle_info), public, dimension(:), allocatable :: info

Particle metadata information

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

Orbital kinetic energy of each individual fragment

real(kind=DP), public :: ke_orbit_tot

Orbital kinetic energy of all fragments

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

Rotational kinetic energy of each individual fragment

real(kind=DP), public :: ke_rot_tot

Rotational kinetic energy of all fragments

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

masses of fragments

real(kind=DP), public :: mtot

Total mass of fragments

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

Array of normal direction unit vectors of individual fragments in the collisional coordinate frame

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

Number of bodies

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

Array of indices indicating which impactor body (1 or 2) the fragment originates from

real(kind=DP), public :: pe

Potential energy of all fragments

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

Array of radial direction unit vectors of individual fragments in the collisional coordinate frame

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

Radii of fragments

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

Barycentric position

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

Position vectors in the collision coordinate frame

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

Heliocentric position

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

Array of radial distance magnitudes of individual fragments in the collisional coordinate frame

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

rotation vectors of fragments

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

Array of rotation magnitudes of individual fragments

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

An integrator-specific status indicator

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

Array of tangential direction unit vectors of individual fragments in the collisional coordinate frame

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

Array of velocity direction unit vectors of individual fragments in the collisional coordinate frame

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

Barycentric velocity

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

Velocity vectors in the collision coordinate frame

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

Heliocentric velocity

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

Array of radial distance magnitudes of individual fragments in the collisional coordinate frame

Finalizations Procedures

final :: collision_final_fragments

Finalizer deallocates all allocatables

Type-Bound Procedures

procedure, public :: dealloc => collision_util_dealloc_fragments ../../../../

Deallocates all allocatable arrays and sets everything else to 0

procedure, public :: reset => collision_util_reset_fragments
procedure, public :: set_coordinate_system => collision_util_set_coordinate_fragments ../../../../

Sets the coordinate system of the fragments

procedure, public :: setup => collision_util_setup_fragments ../../../../

Allocates all allocatables radius, or other values that get set prior to the call to fraggle_generate) Resets all position and velocity-dependent fragment quantities in order to do a fresh calculation (does not reset mass,

type, public, extends(base_object) ::  collision_impactors

Class definition for the variables that describe the bodies involved in the collision

Components

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

Two-body equivalent G*mass of the collider bodies prior to the collision

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

Two-body equivalent principal axes moments of inertia the collider bodies prior to collision

real(kind=DP), public, dimension(NDIM,2) :: L_orbit

Two-body equivalent orbital angular momentum vectors of the collider bodies prior to collision

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

Two-body equivalent rotational angular momentum vectors of the collider bodies prior to collision

real(kind=DP), public :: Mcb

Mass of central body (used to compute potential energy in regime determination)

real(kind=DP), public :: Qloss

Energy lost during the collision

real(kind=DP), public, dimension(2) :: be

Binding energy of each individual impactor

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

The impact point velocity vector is the component of the velocity in the distance vector direction

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

Index of bodies involved in the collision

real(kind=DP), public, dimension(2) :: ke_orbit

Orbital kinetic energy of each individual impactor

real(kind=DP), public, dimension(2) :: ke_rot

Rotational kinetic energy of each individual impactor

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

Two-body equivalent mass of the collider bodies prior to the collision

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

Distribution of fragment mass determined by the regime calculation (largest fragment, second largest, and remainder)

integer(kind=I4B), public :: ncoll

Number of bodies involved in the collision

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

Two-body equivalent radii of the collider bodies prior to the collision

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

Two-body equivalent position vectors of the collider bodies prior to collision in system barycentric coordinates

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

Center of mass position vector of the collider nbody_system in nbody_system barycentric coordinates

real(kind=DP), public, dimension(NDIM,2) :: rc

Two-body equivalent position vectors of the collider bodies prior to collision in collision center of mass coordinates

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

Impact point position vector of the collider nbody_system in nbody_system barycentric coordinates

integer(kind=I4B), public :: regime

Collresolve regime code for this collision

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

Two-body equivalent principal axes moments of inertia the collider bodies prior to collision

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

velocity direction unit vector of collisional system

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

Two-body equivalent velocity vectors of the collider bodies prior to collision in system barycentric coordinate

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

Velocity vector of the center of mass of the collider nbody_system in nbody_system barycentric coordinates

real(kind=DP), public, dimension(NDIM,2) :: vc

Two-body equivalent velocity vectors of the collider bodies prior to collision in collision center of mass coordinates

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

x-direction unit vector of collisional system ed on the collider barycenter and collisional system unit vectors

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

y-direction unit vector of collisional system

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

z-direction unit vector of collisional system

Finalizations Procedures

final :: collision_final_impactors

Finalizer will deallocate all allocatables

Type-Bound Procedures

procedure, public :: consolidate => collision_resolve_consolidate_impactors ../../../../

Consolidates a multi-body collision into an equivalent 2-body collision

procedure, public :: dealloc => collision_util_dealloc_impactors ../../../../

Resets the collider object variables to 0 and deallocates the index and mass distributions

procedure, public :: set_coordinate_system => collision_util_set_coordinate_impactors ../../../../

Sets the coordinate system of the impactors

type, public, extends(encounter_list) ::  collision_list_plpl

Swiftest class for tracking pl-pl close encounters in a step when collisions are possible

Components

Type Visibility Attributes Name Initial
integer(kind=I4B), public, dimension(:), allocatable :: id1

id of the first body in the encounter

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

id of the second body in the encounter

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

position of the first body in the encounter

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

position of the second body in the encounter

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

indicates that thie pair of bodies is in currently at its closest approach point

logical, public :: lcollision

Indicates if the encounter resulted in at least one collision

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

Recursion level (used in SyMBA)

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

relative vdotr flag

integer(kind=I8B), public :: nenc = 0

Total number of encounters

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

the position of body 1 in the encounter

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

the position of body 2 in the encounter

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

status of the interaction

real(kind=DP), public :: t

Time of encounter

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

Time of collision

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

the velocity of body 1 in the encounter

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

the velocity of body 2 in the encounter

Finalizations Procedures

final :: collision_final_plpl

Type-Bound Procedures

procedure, public :: append => encounter_util_append_list ../../../../

Appends elements from one structure to another

procedure, public :: collision_check => collision_check_plpl ../../../../

Checks if a test particle is going to collide with a massive body

procedure, public :: copy => encounter_util_copy_list ../../../../

Copies elements from the source encounter list into self.

procedure, public :: dealloc => encounter_util_dealloc_list ../../../../

Deallocates all allocatables

procedure, public :: extract_collisions => collision_resolve_extract_plpl ../../../../

Processes the pl-pl encounter list remove only those encounters that led to a collision

procedure, public :: resize => encounter_util_resize_list ../../../../

Checks the current size of the encounter list against the required size and extends it by a factor of 2 more than requested if it is too small.

procedure, public :: resolve_collision => collision_resolve_plpl ../../../../

Process the pl-pl collision list, then modifiy the massive bodies based on the outcome of the collision

procedure, public :: setup => encounter_util_setup_list ../../../../

A constructor that sets the number of encounters and allocates and initializes all arrays

procedure, public :: spill => encounter_util_spill_list ../../../../

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

type, public, extends(encounter_list) ::  collision_list_pltp

Class for tracking pl-tp close encounters in a step when collisions are possible

Components

Type Visibility Attributes Name Initial
integer(kind=I4B), public, dimension(:), allocatable :: id1

id of the first body in the encounter

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

id of the second body in the encounter

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

position of the first body in the encounter

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

position of the second body in the encounter

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

indicates that thie pair of bodies is in currently at its closest approach point

logical, public :: lcollision

Indicates if the encounter resulted in at least one collision

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

Recursion level (used in SyMBA)

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

relative vdotr flag

integer(kind=I8B), public :: nenc = 0

Total number of encounters

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

the position of body 1 in the encounter

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

the position of body 2 in the encounter

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

status of the interaction

real(kind=DP), public :: t

Time of encounter

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

Time of collision

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

the velocity of body 1 in the encounter

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

the velocity of body 2 in the encounter

Finalizations Procedures

final :: collision_final_pltp

Type-Bound Procedures

procedure, public :: append => encounter_util_append_list ../../../../

Appends elements from one structure to another

procedure, public :: collision_check => collision_check_pltp ../../../../

Checks if a test particle is going to collide with a massive body

procedure, public :: copy => encounter_util_copy_list ../../../../

Copies elements from the source encounter list into self.

procedure, public :: dealloc => encounter_util_dealloc_list ../../../../

Deallocates all allocatables

procedure, public :: extract_collisions => collision_resolve_extract_pltp ../../../../

Processes the pl-tp encounter list remove only those encounters that led to a collision

procedure, public :: resize => encounter_util_resize_list ../../../../

Checks the current size of the encounter list against the required size and extends it by a factor of 2 more than requested if it is too small.

procedure, public :: resolve_collision => collision_resolve_pltp ../../../../

Process the pl-tp collision list

procedure, public :: setup => encounter_util_setup_list ../../../../

A constructor that sets the number of encounters and allocates and initializes all arrays

procedure, public :: spill => encounter_util_spill_list ../../../../

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

Initialize a set of parameters used to identify a NetCDF output object

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 :: Qloss_varid

ID for the energy loss variable

character(len=NAMELEN), public :: Qloss_varname = "Qloss"

name of the energy loss variable

integer(kind=I4B), public :: TE_varid

ID for the system binding energy 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

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

integer(kind=I4B), public :: collision_body_dimid

Netcdf ID for the collision body dimension

character(len=NAMELEN), public :: collision_body_dimname = "collision_body"

name of the collision body dimension

integer(kind=I4B), public :: collision_body_varid

Netcdf ID for the collision body variable

integer(kind=I4B), public :: collision_id_dimid

ID for the collision event dimension

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 :: 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 :: 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 :: 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_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 :: 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 :: 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 :: 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 :: radius_varid

ID for the radius variable

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

name of the radius variable

integer(kind=I4B), public :: regime_varid

ID for the collision regime variable

character(len=NAMELEN), public :: regime_varname = "regime"

name of the collision regime 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 :: 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, 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

character(len=6), public, dimension(2) :: stage_coords = ["before", "after "]

The stage coordinate labels

integer(kind=I4B), public :: stage_dimid

ID for the stage dimension

character(len=NAMELEN), public :: stage_dimname = "stage"

name of the stage dimension (before/after)

integer(kind=I4B), public :: stage_varid

ID for the stage 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

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 :: 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

Type-Bound Procedures

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 :: get_idvals => netcdf_io_get_idvals ../../../../

Gets the valid id numbers currently stored in this dataset

procedure, public :: initialize => collision_io_netcdf_initialize_output ../../../../

Opens an old file

procedure, public :: open => collision_io_netcdf_open
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(encounter_snapshot) ::  collision_snapshot

Indicates that this snapshot contains at least one collision

Components

Type Visibility Attributes Name Initial
class(collision_basic), public, allocatable :: collider

Collider object at this snapshot

integer(kind=I8B), public :: iloop

Loop number at time of snapshot

logical, public :: lcollision
class(base_object), public, allocatable :: pl

Massive body data structure

real(kind=DP), public :: t

Simulation time when snapshot was taken

class(base_object), public, allocatable :: tp

Test particle data structure

Type-Bound Procedures

procedure, public :: dealloc => collision_util_dealloc_snapshot ../../../../

Deallocates all allocatables

procedure, public :: get_idvals => collision_util_get_idvalues_snapshot ../../../../

Gets an array of all id values saved in this snapshot

procedure, public :: write_frame => collision_io_netcdf_write_frame_snapshot ../../../../

Writes a frame of encounter data to file

type, public, extends(encounter_storage) ::  collision_storage

A class that that is used to store simulation history data between file output Dumps contents of encounter history to file

Components

Type Visibility Attributes Name Initial
type(base_storage_frame), public, dimension(:), allocatable :: frame

Array of stored frames

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

The id value -> index map

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

The set of unique id values contained in the snapshots

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

Index of the last frame stored in the system

class(encounter_netcdf_parameters), public, allocatable :: nc

NetCDF object attached to this storage object

integer(kind=I4B), public :: nframes

Total number of frames that can be stored An class that establishes the pattern for various storage objects

integer(kind=I4B), public :: nid

Number of unique id values in all saved snapshots

integer(kind=I4B), public :: nt

Number of unique time values in all saved snapshots

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

The t value -> index map

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

The set of unique time values contained in the snapshots

Type-Bound Procedures

procedure, public :: dealloc => encounter_util_dealloc_storage ../../../../

Deallocates all allocatables

procedure, public :: dump => collision_io_netcdf_dump ../../../../

Take a minimal snapshot of the nbody_system through an encounter

procedure, public :: get_index_values => encounter_util_get_vals_storage ../../../../

Gets the unique values of the indices of a storage object (i.e. body id or time value)

procedure, public :: make_index_map => collision_util_index_map
procedure, public :: reset => base_util_reset_storage ../../../../

Resets the storage object back to its original state by removing all of the saved items from the storage frames

procedure, public :: resize => base_util_resize_storage ../../../../

Resizes storage if it is too small

procedure, public :: save => base_util_snapshot_save ../../../../

Takes a snapshot of the current system

procedure, public :: save_energy_snapshot => collision_util_save_energy_snapshot ../../../../

Maps body id values to storage index values so we don’t have to use unlimited dimensions for id

procedure, public :: setup => base_util_setup_storage ../../../../

Sets up a storage system with a set number of frames

procedure, public :: take_snapshot => collision_util_take_snapshot ../../../../

Maps body id values to storage index values so we don’t have to use unlimited dimensions for id


Subroutines

public subroutine collision_final_basic(self)

Author
David A. Minton

Finalizer will deallocate all allocatables

Arguments

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

Collision system object

public subroutine collision_final_fragments(self)

Author
David A. Minton

Finalizer will deallocate all allocatables

Arguments

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

Collision impactors storage object

public subroutine collision_final_impactors(self)

Author
David A. Minton

Finalizer will deallocate all allocatables

Arguments

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

Collision impactors storage object

public subroutine collision_final_plpl(self)

Author
David A. Minton

Finalizer will deallocate all allocatables

Arguments

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

PL-PL collision list object

public subroutine collision_final_pltp(self)

Author
David A. Minton

Finalizer will deallocate all allocatables

Arguments

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

PL-TP collision list object