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 iso_fortran_env iso_fortran_env module~leapblock->iso_fortran_env module~leapio_hdf5 leapIO_hdf5 module~leapblock->module~leapio_hdf5 mpi_f08 mpi_f08 module~leapblock->mpi_f08 module~leapkinds->iso_fortran_env module~leapmonitor->module~leapkinds module~leapmonitor->module~leapparallel module~leapmonitor->module~leaputils module~leapmonitor->iso_fortran_env module~leapparallel->module~leapkinds module~leapparallel->iso_fortran_env module~leapparallel->mpi_f08 module~leapparser->module~leapkinds module~leapparser->iso_fortran_env 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~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~leapbc leapBC module~particles_resolved->module~leapbc 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->iso_fortran_env module~immersed_boundaries_markers->module~leapbc 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~leapbc->module~leapblock module~leapbc->module~leapkinds module~leapbc->module~leapparallel module~leapbc->module~leaputils module~leapbc->iso_fortran_env module~leapbc->module~leapeulerian module~leapbc->module~leapio module~leapbc->mpi_f08 module~leapcli->module~leapkinds module~leapdiffop->module~leapblock module~leapdiffop->module~leapkinds module~leapdiffop->module~leapparallel module~leapdiffop->module~leapbc module~leapdiffop->module~leapeulerian module~leapeulerian->module~leapblock module~leapeulerian->module~leapkinds module~leapeulerian->module~leapparallel module~leapeulerian->module~leaputils module~leapeulerian->iso_fortran_env module~leapeulerian->module~leapio module~leapeulerian->mpi_f08 module~leapio->module~leapio_hdf5 module~leapio_h5hut leapIO_h5hut module~leapio->module~leapio_h5hut module~leapio_silo leapIO_silo module~leapio->module~leapio_silo module~leapio_xdmf leapIO_xdmf module~leapio->module~leapio_xdmf module~leapio_hdf5->module~leapkinds module~leapio_hdf5->module~leapparallel module~leapio_hdf5->module~leaputils hdf5 hdf5 module~leapio_hdf5->hdf5 module~leaplagrangian->module~leapblock module~leaplagrangian->module~leapkinds module~leaplagrangian->module~leapparallel module~leaplagrangian->module~leaputils module~leaplagrangian->module~leapio module~leaplagrangian->mpi_f08 module~leapfilters leapfilters module~leaplagrangian->module~leapfilters module~leapfilters->module~leapkinds 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 module~leapio_h5hut->module~leapio_hdf5 module~leapio_silo->module~leapkinds module~leapio_silo->module~leapparallel module~leapio_silo->module~leaputils module~leapio_silo->mpi_f08 module~leapio_xdmf->module~leapkinds module~leapio_xdmf->module~leaputils

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

Collision block

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

Wall position at the high bound

integer, public :: wall_dir

Wall normal direction (0=no walls, 1=x1, 2=x2, or 3=x3).

real(kind=wp), public :: wall_top

Wall position at the low bound

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)

Computes collisions with a Linearized Spring Dashpot model.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r1(3)

Position

real(kind=wp), intent(in) :: r2(3)

Position

real(kind=wp), intent(in) :: d1

Diameter

real(kind=wp), intent(in) :: d2

Diameter

real(kind=wp), intent(in) :: m1

Masses of each particle

real(kind=wp), intent(in) :: m2

Masses of each particle

real(kind=wp), intent(in) :: v1(3)

Velocities

real(kind=wp), intent(in) :: v2(3)

Velocities

real(kind=wp), intent(in) :: w1(3)

Rotation rates

real(kind=wp), intent(in) :: w2(3)

Rotation rates

real(kind=wp), intent(in) :: tcol

Collision time

real(kind=wp), intent(in) :: edry

Dry restitution coefficent

real(kind=wp), intent(in) :: muc

Coulomb friction factor

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

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

Returns the cross product of two vectors.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: x(3)

Input vector

real(kind=wp), intent(in) :: y(3)

Input vector

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

Result


Subroutines

private impure subroutine collision_obj_AddImmersedBoundaries(this, IB)

Adds an Immersed Boundary to list of collisional objects.

Arguments

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

Collision utility

type(marker_set), intent(in), target :: IB

Immersed Boundaries

private impure subroutine collision_obj_AddPointParticles(this, PP)

Adds Point Particles to list of collisional objects.

Arguments

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

Collision utility

type(particle_set), intent(in), target :: PP

Point particles

private impure subroutine collision_obj_AddResolvedParticles(this, RP)

Adds Resolved Particles to list of collisional objects.

Arguments

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

Collision utility

type(ResPart_set), intent(in), target :: RP

Resolved Particles

private pure subroutine collision_obj_ComputeCollisions(this)

Computes collisions between all added objects.

Arguments

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

Collision utility

private pure subroutine collision_obj_ComputeCollisionsPPvIB(this)

Computes collisions between Point Particles and Immersed Boundaries.

Arguments

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

Collision utility

private pure subroutine collision_obj_ComputeCollisionsPPvPP(this)

Computes collisions between pairs of Point Particles.

Arguments

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

Collision utility

private pure subroutine collision_obj_ComputeCollisionsPPvWALL(this)

Computes collisions between Point Particles and Walls.

Arguments

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

Collision utility

private pure subroutine collision_obj_ComputeCollisionsRPvIB(this)

Computes collisions between Resolved Particles and Immersed Boundaries.

Arguments

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

Collision utility

private pure subroutine collision_obj_ComputeCollisionsRPvPP(this)

Computes collisions between Point and Resolved Particles.

Arguments

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

Collision utility

private pure subroutine collision_obj_ComputeCollisionsRPvRP(this)

Computes collisions between pairs of Resolved Particles.

Arguments

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

Collision utility

private pure subroutine collision_obj_ComputeCollisionsRPvWALL(this)

Computes collisions between Resolved Particles and Walls.

Arguments

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

Collision utility

private impure subroutine collision_obj_Final(this)

Finalizes object and frees memory.

Arguments

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

private impure subroutine collision_obj_Init(this, parallel)

Initializes object.

Arguments

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

Collision utility

type(parallel_obj), intent(in), target :: parallel

Parallel structure to link with

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

Prepares object for use in solvers.

Arguments

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

Collision utility

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 impure subroutine collision_obj_Sanitize(this)

Frees data: removes ghost objects and frees neighbor lists.

Arguments

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

Collision utility

private impure 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

Collision utility

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

Collision utility

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 impure subroutine collision_obj_UpdateGhostObjects(this)

Updates ghost objects in preparation for collisions.

Arguments

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

Collision utility

private impure subroutine collision_obj_UpdateNeighborList(this)

Updates neighbor lists in preparation for collisions.

Arguments

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

Collision utility