A utility that handles collisions
| 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 |
Adds an Immersed Boundary to list of collisional objects.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
||
| type(marker_set), | intent(in), | target | :: | IB |
Immersed Boundaries |
Adds Resolved Particles to list of collisional objects.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
||
| type(ResPart_set), | intent(in), | target | :: | RP |
Resolved Particles |
Adds Point Particles to list of collisional objects.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
||
| type(particle_set), | intent(in), | target | :: | PP |
Point particles |
Computes collisions between all added objects.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
Finalizes object and frees memory.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Initializes object.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
||
| type(parallel_obj), | intent(in), | target | :: | parallel |
Parallel structure to link with |
Prepares object for use in solvers.
| Type | Intent | Optional | 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 |
Frees data: removes ghost objects and frees neighbor lists.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
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.
| Type | Intent | Optional | 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 |
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.
| Type | Intent | Optional | 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 |
Updates ghost objects in preparation for collisions.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
Updates neighbor lists in preparation for collisions.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
Adds an Immersed Boundary to list of collisional objects.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
||
| type(marker_set), | intent(in), | target | :: | IB |
Immersed Boundaries |
Adds Point Particles to list of collisional objects.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
||
| type(particle_set), | intent(in), | target | :: | PP |
Point particles |
Adds Resolved Particles to list of collisional objects.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
||
| type(ResPart_set), | intent(in), | target | :: | RP |
Resolved Particles |
Computes collisions between Point Particles and Immersed Boundaries.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
Computes collisions between pairs of Point Particles.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
Computes collisions between Point Particles and Walls.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
Computes collisions between Resolved Particles and Immersed Boundaries.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
Computes collisions between Point and Resolved Particles.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
Computes collisions between pairs of Resolved Particles.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
Computes collisions between Resolved Particles and Walls.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(collision_obj), | intent(inout) | :: | this |
Collision utility |
type :: collision_obj !> A utility that handles collisions type(parallel_obj), pointer :: parallel => null() !! Parallel/MPI utility type(timer_obj), pointer :: timer => null() !! Timer utility type(parser_obj), pointer :: parser => null() !! Parser for input file type(monitor_set), pointer :: monitors => null() !! Monitors to print to stdout and files type(particle_set), pointer :: PP => null() !! Point particles type(ResPart_set), pointer :: RP => null() !! Resolved particles type(marker_set), pointer :: IB => null() !! Immersed solids (walls) type(block_obj) :: cblock !! Collision block real(wp) :: tcol !! Collision time real(wp) :: edry !! Dry restitution coefficient real(wp) :: muc !! Coulomb friction factor logical :: use_wall = .false. !! Walls for collisions integer :: wall_dir !! Wall normal direction (0=no walls, 1=x1, 2=x2, or 3=x3). real(wp) :: wall_top !! Wall position at the low bound real(wp) :: wall_bottom !! Wall position at the high bound integer, allocatable :: RPobjincell(:,:,:) !! Number of objects in this list type(sllist_obj),allocatable :: RPneighbors(:,:,:) !! Singly linked list of neighbors integer, allocatable :: PPobjincell(:,:,:) !! Number of objects in this list type(sllist_obj),allocatable :: PPneighbors(:,:,:) !! Singly linked list of neighbors integer, allocatable :: IBobjincell(:,:,:) !! Number of objects in this list type(sllist_obj),allocatable :: IBneighbors(:,:,:) !! Singly linked list of neighbors contains procedure :: Initialize => collision_obj_Init procedure :: Finalize => collision_obj_Final procedure :: Prepare => collision_obj_Prepare generic :: Add => collision_obj_AddImmersedBoundaries, & collision_obj_AddResolvedParticles, & collision_obj_AddPointParticles procedure :: SetupCollisionBlock => collision_obj_SetupCollisionBlock procedure :: SetupCollisionBlock2=> collision_obj_SetupCollisionBlock2 procedure :: UpdateGhostObjects => collision_obj_UpdateGhostObjects procedure :: UpdateNeighborList => collision_obj_UpdateNeighborList procedure :: ComputeCollisions => collision_obj_ComputeCollisions procedure :: Sanitize => collision_obj_Sanitize ! Internal/private procedures procedure, private :: collision_obj_AddImmersedBoundaries procedure, private :: collision_obj_AddResolvedParticles procedure, private :: collision_obj_AddPointParticles procedure, private :: collision_obj_ComputeCollisionsRPvRP procedure, private :: collision_obj_ComputeCollisionsRPvIB procedure, private :: collision_obj_ComputeCollisionsRPvWALL procedure, private :: collision_obj_ComputeCollisionsPPvPP procedure, private :: collision_obj_ComputeCollisionsPPvIB procedure, private :: collision_obj_ComputeCollisionsPPvWALL procedure, private :: collision_obj_ComputeCollisionsRPvPP end type collision_obj