collisions Module

Toolkit that handles collisions between resolved particles, point particles, immersed boundaries, and walls.



Uses

  • module~~collisions~~UsesGraph module~collisions collisions module~immersed_boundaries immersed_boundaries module~collisions->module~immersed_boundaries module~leapblock leapBlock module~collisions->module~leapblock module~leapkinds leapKinds module~collisions->module~leapkinds module~leapmonitor leapMonitor module~collisions->module~leapmonitor module~leapparallel leapParallel module~collisions->module~leapparallel module~leapparser leapParser module~collisions->module~leapparser module~leaptimer leapTimer module~collisions->module~leaptimer module~leaputils leapUtils module~collisions->module~leaputils module~particles_point particles_point module~collisions->module~particles_point module~particles_resolved particles_resolved module~collisions->module~particles_resolved module~immersed_boundaries_markers immersed_boundaries_markers module~immersed_boundaries->module~immersed_boundaries_markers module~immersed_boundaries_solids immersed_boundaries_solids module~immersed_boundaries->module~immersed_boundaries_solids module~leapblock->module~leapkinds module~leapblock->module~leapparallel mpi_f08 mpi_f08 module~leapblock->mpi_f08 iso_fortran_env iso_fortran_env module~leapkinds->iso_fortran_env module~leapmonitor->module~leapkinds module~leapmonitor->module~leapparallel module~leapmonitor->module~leaputils module~leapparallel->module~leapkinds module~leapparallel->module~leapparser module~leapparallel->mpi_f08 module~leapparser->module~leapkinds module~leapcli leapCli module~leapparser->module~leapcli module~leaptimer->module~leapkinds module~leaptimer->module~leapparallel module~leaptimer->module~leapparser module~leaptimer->module~leaputils module~leaputils->module~leapkinds module~leaputils->mpi_f08 module~particles_point->module~immersed_boundaries module~particles_point->module~leapblock module~particles_point->module~leapkinds module~particles_point->module~leapmonitor module~particles_point->module~leapparallel module~particles_point->module~leapparser module~particles_point->module~leaptimer module~leapdiffop leapDiffOp module~particles_point->module~leapdiffop module~leapeulerian leapEulerian module~particles_point->module~leapeulerian module~leapio leapIO module~particles_point->module~leapio module~leaplagrangian leapLagrangian module~particles_point->module~leaplagrangian module~particles_resolved->module~immersed_boundaries module~particles_resolved->module~leapblock module~particles_resolved->module~leapkinds module~particles_resolved->module~leapmonitor module~particles_resolved->module~leapparallel module~particles_resolved->module~leapparser module~particles_resolved->module~leaptimer module~particles_resolved->module~leapdiffop module~particles_resolved->module~leapeulerian module~particles_resolved->module~leapio module~particles_resolved->module~leaplagrangian module~immersed_boundaries_markers->module~leapblock module~immersed_boundaries_markers->module~leapkinds module~immersed_boundaries_markers->module~leapmonitor module~immersed_boundaries_markers->module~leapparallel module~immersed_boundaries_markers->module~leapparser module~immersed_boundaries_markers->module~leaptimer module~immersed_boundaries_markers->module~leapdiffop module~immersed_boundaries_markers->module~leapeulerian module~immersed_boundaries_markers->module~leapio module~immersed_boundaries_markers->module~leaplagrangian module~leaphypre leapHypre module~immersed_boundaries_markers->module~leaphypre module~immersed_boundaries_solids->module~leapblock module~immersed_boundaries_solids->module~leapkinds module~immersed_boundaries_solids->module~leapparallel module~immersed_boundaries_solids->module~immersed_boundaries_markers module~immersed_boundaries_solids->module~leapeulerian module~immersed_boundaries_solids->module~leapio module~immersed_boundaries_solids->module~leaplagrangian module~leapcli->module~leapkinds module~leapdiffop->module~leapblock module~leapdiffop->module~leapkinds module~leapdiffop->module~leapparallel module~leapdiffop->module~leapeulerian module~leapbc leapBC module~leapdiffop->module~leapbc module~leapeulerian->module~leapblock module~leapeulerian->module~leapkinds module~leapeulerian->module~leapparallel module~leapeulerian->module~leapparser module~leapeulerian->module~leaputils module~leapeulerian->module~leapio module~leapeulerian->mpi_f08 module~leapio_mpi leapIO_mpi module~leapeulerian->module~leapio_mpi module~leapio_h5hut leapIO_h5hut module~leapio->module~leapio_h5hut module~leapio_hdf5 leapIO_hdf5 module~leapio->module~leapio_hdf5 module~leapio->module~leapio_mpi module~leapio_silo leapIO_silo module~leapio->module~leapio_silo module~leaplagrangian->module~leapblock module~leaplagrangian->module~leapkinds module~leaplagrangian->module~leapparallel module~leaplagrangian->module~leapparser module~leaplagrangian->module~leaputils module~leaplagrangian->module~leapio module~leaplagrangian->mpi_f08 module~leapbc->module~leapblock module~leapbc->module~leapkinds module~leapbc->module~leapparallel module~leapbc->module~leaputils module~leapbc->module~leapeulerian module~leapbc->mpi_f08 module~leaphypre->module~leapblock module~leaphypre->module~leapkinds module~leaphypre->module~leapparallel module~leaphypre->module~leapeulerian module~leaphypre->mpi_f08 iso_c_binding iso_c_binding module~leaphypre->iso_c_binding module~leapio_h5hut->module~leapkinds module~leapio_h5hut->module~leapparallel h5hut h5hut module~leapio_h5hut->h5hut module~leapio_hdf5->module~leapkinds module~leapio_hdf5->module~leapparallel module~leapio_hdf5->module~leaputils hdf5 hdf5 module~leapio_hdf5->hdf5 module~leapio_mpi->module~leapblock module~leapio_mpi->module~leapkinds module~leapio_mpi->module~leapparallel module~leapio_mpi->mpi_f08 module~leapio_silo->module~leapblock module~leapio_silo->module~leapkinds module~leapio_silo->module~leapparallel module~leapio_silo->module~leaputils module~leapio_silo->mpi_f08

Used by

  • module~~collisions~~UsedByGraph module~collisions collisions module~cdifs cdifs module~cdifs->module~collisions module~grans grans module~grans->module~collisions module~cdifs_advancesolution_smod cdifs_AdvanceSolution_smod module~cdifs_advancesolution_smod->module~cdifs module~cdifs_monitor_smod cdifs_Monitor_smod module~cdifs_monitor_smod->module~cdifs module~cdifs_preparesolver_smod cdifs_PrepareSolver_smod module~cdifs_preparesolver_smod->module~cdifs module~cdifs_writeoutputdata_smod cdifs_WriteOutputData_smod module~cdifs_writeoutputdata_smod->module~cdifs module~cdifs_writerestartdata_smod cdifs_WriteRestartData_smod module~cdifs_writerestartdata_smod->module~cdifs module~grans_advancesolution_smod grans_AdvanceSolution_smod module~grans_advancesolution_smod->module~grans module~grans_module_smod grans_module_smod module~grans_module_smod->module~grans module~grans_preparesolver_smod grans_PrepareSolver_smod module~grans_preparesolver_smod->module~grans module~grans_writeoutputdata_smod grans_WriteOutputData_smod module~grans_writeoutputdata_smod->module~grans module~grans_writerestartdata_smod grans_WriteRestartData_smod module~grans_writerestartdata_smod->module~grans program~main main program~main->module~cdifs program~main->module~grans

Derived Types

type, public ::  collision_obj

A utility that handles collisions

Components

Type Visibility Attributes Name Initial
type(marker_set), public, pointer :: IB => null()

Immersed solids (walls)

type(sllist_obj), public, allocatable :: IBneighbors(:,:,:)

Singly linked list of neighbors

integer, public, allocatable :: IBobjincell(:,:,:)

Number of objects in this list

type(particle_set), public, pointer :: PP => null()

Point particles

type(sllist_obj), public, allocatable :: PPneighbors(:,:,:)

Singly linked list of neighbors

integer, public, allocatable :: PPobjincell(:,:,:)

Number of objects in this list

type(ResPart_set), public, pointer :: RP => null()

Resolved particles

type(sllist_obj), public, allocatable :: RPneighbors(:,:,:)

Singly linked list of neighbors

integer, public, allocatable :: RPobjincell(:,:,:)

Number of objects in this list

type(block_obj), public :: cblock
real(kind=wp), public :: edry

Dry restitution coefficient

type(monitor_set), public, pointer :: monitors => null()

Monitors to print to stdout and files

real(kind=wp), public :: muc

Coulomb friction factor

type(parallel_obj), public, pointer :: parallel => null()

Parallel/MPI utility

type(parser_obj), public, pointer :: parser => null()

Parser for input file

real(kind=wp), public :: tcol

Collision time

type(timer_obj), public, pointer :: timer => null()

Timer utility

logical, public :: use_wall = .false.

Walls for collisions

real(kind=wp), public :: wall_bottom
integer, public :: wall_dir
real(kind=wp), public :: wall_top

Type-Bound Procedures

generic, public :: Add => collision_obj_AddImmersedBoundaries, collision_obj_AddResolvedParticles, collision_obj_AddPointParticles
procedure, public :: ComputeCollisions => collision_obj_ComputeCollisions
procedure, public :: Finalize => collision_obj_Final
procedure, public :: Initialize => collision_obj_Init
procedure, public :: Prepare => collision_obj_Prepare
procedure, public :: Sanitize => collision_obj_Sanitize
procedure, public :: SetupCollisionBlock => collision_obj_SetupCollisionBlock
procedure, public :: SetupCollisionBlock2 => collision_obj_SetupCollisionBlock2
procedure, public :: UpdateGhostObjects => collision_obj_UpdateGhostObjects
procedure, public :: UpdateNeighborList => collision_obj_UpdateNeighborList
procedure, private :: collision_obj_AddImmersedBoundaries
procedure, private :: collision_obj_AddPointParticles
procedure, private :: collision_obj_AddResolvedParticles
procedure, private :: collision_obj_ComputeCollisionsPPvIB
procedure, private :: collision_obj_ComputeCollisionsPPvPP
procedure, private :: collision_obj_ComputeCollisionsPPvWALL
procedure, private :: collision_obj_ComputeCollisionsRPvIB
procedure, private :: collision_obj_ComputeCollisionsRPvPP
procedure, private :: collision_obj_ComputeCollisionsRPvRP
procedure, private :: collision_obj_ComputeCollisionsRPvWALL

Functions

private pure function DEM_col(r1, r2, d1, d2, m1, m2, v1, v2, w1, w2, tcol, edry, muc) result(val)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r1(3)
real(kind=wp), intent(in) :: r2(3)
real(kind=wp), intent(in) :: d1
real(kind=wp), intent(in) :: d2
real(kind=wp), intent(in) :: m1
real(kind=wp), intent(in) :: m2
real(kind=wp), intent(in) :: v1(3)
real(kind=wp), intent(in) :: v2(3)
real(kind=wp), intent(in) :: w1(3)
real(kind=wp), intent(in) :: w2(3)
real(kind=wp), intent(in) :: tcol
real(kind=wp), intent(in) :: edry
real(kind=wp), intent(in) :: muc

Return Value real(kind=wp), (3)

private pure function cross_product(x, y) result(z)

Arguments

Type IntentOptional Attributes Name
real(kind=WP), intent(in), dimension(3) :: x
real(kind=WP), intent(in), dimension(3) :: y

Return Value real(kind=WP), dimension(3)


Subroutines

private subroutine collision_obj_AddImmersedBoundaries(this, IB)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this
type(marker_set), intent(in), target :: IB

Immersed Boundaries

private subroutine collision_obj_AddPointParticles(this, PP)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this
type(particle_set), intent(in), target :: PP

Resolved Particles

private subroutine collision_obj_AddResolvedParticles(this, RP)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this
type(ResPart_set), intent(in), target :: RP

Resolved Particles

private subroutine collision_obj_ComputeCollisions(this)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this

private subroutine collision_obj_ComputeCollisionsPPvIB(this)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this

private subroutine collision_obj_ComputeCollisionsPPvPP(this)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this

private subroutine collision_obj_ComputeCollisionsPPvWALL(this)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this

private subroutine collision_obj_ComputeCollisionsRPvIB(this)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this

private subroutine collision_obj_ComputeCollisionsRPvPP(this)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this

private subroutine collision_obj_ComputeCollisionsRPvRP(this)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this

private subroutine collision_obj_ComputeCollisionsRPvWALL(this)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this

private subroutine collision_obj_Final(this)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this

private subroutine collision_obj_Init(this, parallel)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this
type(parallel_obj), intent(in), target :: parallel

parallel structure from main program

private subroutine collision_obj_Prepare(this, timer, parser, monitors)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this
type(timer_obj), intent(in), target :: timer

Timer utility

type(parser_obj), intent(in), target :: parser

Parser for input file

type(monitor_set), intent(in), target :: monitors

Monitors to print to stdout and files

private subroutine collision_obj_Sanitize(this)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this

private subroutine collision_obj_SetupCollisionBlock(this, ds, ngc, block)

Initializes cblock to handle collisions. This extra block is expected to be coarser than the simulation block, but larger than the maximum object size. It is used to expedite neighbor searches.

Read more…

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this
real(kind=wp), intent(in) :: ds

Target grid spacing

integer, intent(in) :: ngc

Number of ghost cells for collision block

type(block_obj), intent(in), optional :: block

Optional block to conform to

private subroutine collision_obj_SetupCollisionBlock2(this, ds, ngc, block)

Initializes cblock to handle collisions. This extra block is expected to be coarser than the simulation block, but larger than the maximum object size. It is used to expedite neighbor searches.

Read more…

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this
real(kind=wp), intent(in) :: ds

Target grid spacing

integer, intent(in) :: ngc

Number of ghost cells for collision block

type(block_obj), intent(in), optional :: block

Optional block to conform to

private subroutine collision_obj_UpdateGhostObjects(this)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this

private subroutine collision_obj_UpdateNeighborList(this)

Arguments

Type IntentOptional Attributes Name
class(collision_obj), intent(inout) :: this