mus_particle_MEM_type_module Module

Provides the data type for the moment exchange particles



Interfaces

public interface allocateProcessMasks

  • private subroutine allocateProcessMasks_MEM(particle, nProcs)

    Routine for allocating the existsOnProc, addToProc and removeFromProc masks used to determine when particles should be sent over to new processes or which processes need to receive position, velocity updates etc.

    Arguments

    Type IntentOptional Attributes Name
    type(mus_particle_MEM_type), intent(inout) :: particle

    Particle to initialize

    integer :: nProcs

    Number of processes to communicate particle data with


Derived Types

type, public ::  mus_particle_MEM_type

Components

Type Visibility Attributes Name Initial
integer, public :: particleID
integer, public :: owner
integer, public :: previousOwner = -1

Process who was owner in last time step. We need this for the averaging of forces over two time steps

logical, public, allocatable :: existsOnProc(:)
logical, public, allocatable :: addToProc(:)
logical, public, allocatable :: removeFromProc(:)
logical, public :: newForMe = .FALSE.

Logical which tells us whether to initialize this particle or not is set to true only immediately after receiving this particle from a neighboring process

logical, public :: hasCollided = .FALSE.

hasCollided tells us whether particle has just had its velocity modified in a collision and that this information needs to be sent to other processes

logical, public :: removeParticle_global = .FALSE.

removeParticle indicates that this particle needs to be removed after e.g. hitting an open boundary. This information is first sent to all other procs that know about this particle, then the particle is actually removed from the particleGroup.

real(kind=rk), public :: radius
real(kind=rk), public :: mass
real(kind=rk), public :: rotInertia
integer, public :: Rn
real(kind=rk), public :: vel(6)
real(kind=rk), public :: pos(6)
real(kind=rk), public :: oldPos(6)
integer, public :: coordOfOrigin(4)
integer, public :: oldCoordOfOrigin(4)
real(kind=rk), public :: F(6) = 0.0_rk
real(kind=rk), public :: Fbuff(2,6) = 0.0_rk
real(kind=rk), public :: Fext(6) = 0.0_rk
integer, public :: Fnow = 1
integer, public :: Flast = 2
real(kind=rk), public :: F_DEM(2,6) = 0.0_rk
integer, public :: F_DEM_now = 1
integer, public :: F_DEM_next = 2
integer, public :: nWallPos = 0
real(kind=rk), public :: avgWallPos(3) = 0.0_rk
real(kind=rk), public :: rwall(3) = 0.0_rk
logical, public :: interactWithWall = .FALSE.
type(dyn_intarray_type), public :: exclusionList
type(dyn_intarray_type), public :: exclusionListBuffer

Buffer for exclusion list used in moveParticle routine

integer, public :: NfluidNeighbors

Number of fluid neighbors for this particle

type(grw_intarray_type), public :: makeFluidList

Indices in levelDesc total list of elements that

type, public ::  dyn_particle_mem_array_type

dynamic array (da) type for mus_particle_mem_type

Components

Type Visibility Attributes Name Initial
integer, public :: nvals = 0
integer, public :: containersize = 0
type(mus_particle_MEM_type), public, allocatable :: val(:)
integer, public, allocatable :: pidlist(:)
integer, public, allocatable :: pidsort(:)

Functions

public function sortposofval_particle_mem(me, pid, nextifnotfound, lower, upper) result(pos)

return the sorted position of a value in the given dynamic array

Read more…

Arguments

Type IntentOptional Attributes Name
type(dyn_particle_mem_array_type), intent(in) :: me
integer, intent(in) :: pid
logical, intent(in), optional :: nextifnotfound

flag to indicate, if the next entry in the list should be returned, if the searched one is not found.

integer, intent(in), optional :: lower
integer, intent(in), optional :: upper

Return Value integer


Subroutines

public subroutine init_da_particle_mem(me, length)

Arguments

Type IntentOptional Attributes Name
type(dyn_particle_mem_array_type), intent(inout) :: me
integer, intent(in), optional :: length

public subroutine destroy_da_particle_mem(me)

Arguments

Type IntentOptional Attributes Name
type(dyn_particle_mem_array_type), intent(inout) :: me

public subroutine append_da_particle_mem(me, particle, length, wasadded)

Arguments

Type IntentOptional Attributes Name
type(dyn_particle_mem_array_type), intent(inout) :: me
type(mus_particle_MEM_type), intent(inout) :: particle
integer, intent(in), optional :: length
logical :: wasadded

public subroutine expand_da_particle_mem(me, length)

Arguments

Type IntentOptional Attributes Name
type(dyn_particle_mem_array_type), intent(inout) :: me
integer, intent(in), optional :: length

optional length to expand the array with

public subroutine swap_da_particle_mem(me, ielem1, ielem2)

swaps the position of two particles in particle dynamic array new position of ielem1 = old position of ielem2 and vice-versa also updates the pidlist and pidsort arrays

Arguments

Type IntentOptional Attributes Name
type(dyn_particle_mem_array_type), intent(inout) :: me

particle array to operate on

integer, intent(in) :: ielem1

current index of one element

integer, intent(in) :: ielem2

current index of other element

public subroutine remove_particle_from_da_particle_mem(particles, ielem)

Arguments

Type IntentOptional Attributes Name
type(dyn_particle_mem_array_type), intent(inout) :: particles

particle group to operate on

integer, intent(in) :: ielem

current index of element to remove

public subroutine truncate_da_particle_mem(me)

truncate the dynamic particle array to only fit the actual entries

Arguments

Type IntentOptional Attributes Name
type(dyn_particle_mem_array_type), intent(inout) :: me

particle array to operate on

private subroutine allocateProcessMasks_MEM(particle, nProcs)

Routine for allocating the existsOnProc, addToProc and removeFromProc masks used to determine when particles should be sent over to new processes or which processes need to receive position, velocity updates etc.

Arguments

Type IntentOptional Attributes Name
type(mus_particle_MEM_type), intent(inout) :: particle

Particle to initialize

integer :: nProcs

Number of processes to communicate particle data with