mus_particle_type_module Module

mus_particle_type_module contains the main particle data types for LBM-DEM simulations of solid particles in the flow



Abstract Interfaces

abstract interface

abstract interface

abstract interface

  • public subroutine wallForceFunc(this, BCinteraction, scheme, stencil, geometry, params, rmflag)

    Arguments

    Type IntentOptional Attributes Name
    class(mus_particle_MEM_type), intent(inout) :: this
    integer, intent(in) :: BCinteraction(:)
    type(mus_scheme_type), intent(inout) :: scheme
    type(tem_stencilHeader_type), intent(in) :: stencil
    type(mus_geom_type), intent(in) :: geometry
    type(mus_param_type), intent(in) :: params
    logical, intent(out) :: rmflag

abstract interface

abstract interface

abstract interface

abstract interface

  • public subroutine updateVelocityFunc(this, dt)

    Arguments

    Type IntentOptional Attributes Name
    class(mus_particle_MEM_type), intent(inout) :: this
    real(kind=rk), intent(in) :: dt

abstract interface

  • public subroutine updatePositionFunc(this, geometry, dt)

    Arguments

    Type IntentOptional Attributes Name
    class(mus_particle_MEM_type), intent(inout) :: this
    type(mus_geom_type), intent(in) :: geometry
    real(kind=rk), intent(in) :: dt

abstract interface

  • public subroutine exclusionListFunc(this, scheme, geometry, myRank, procs, nProcs, dx, rmflag)

    Arguments

    Type IntentOptional Attributes Name
    class(mus_particle_MEM_type), intent(inout) :: this
    type(mus_scheme_type), intent(inout) :: scheme
    type(mus_geom_type), intent(in) :: geometry
    integer, intent(in) :: myRank
    integer, intent(in) :: procs(:)
    integer, intent(in) :: nProcs
    real(kind=rk), intent(in) :: dx
    logical, intent(out) :: rmflag

abstract interface

  • public subroutine swapForceBufferFunc(this)

    Arguments

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

abstract interface

  • public subroutine pg_applyHydroForceFunc(particleGroup, scheme, geometry, params)

    Arguments

    Type IntentOptional Attributes Name
    class(mus_particle_group_type), intent(inout) :: particleGroup
    type(mus_scheme_type), intent(inout) :: scheme
    type(mus_geom_type), intent(in) :: geometry
    type(mus_param_type), intent(in) :: params

abstract interface

abstract interface

abstract interface

  • public subroutine pg_momentumTransferFunc(particleGroup, scheme, geometry, params)

    Arguments

    Type IntentOptional Attributes Name
    class(mus_particle_group_type), intent(inout) :: particleGroup
    type(mus_scheme_type), intent(inout) :: scheme
    type(mus_geom_type), intent(in) :: geometry
    type(mus_param_type), intent(in) :: params

abstract interface

  • public subroutine pg_modifyAuxFieldFunc(particleGroup, scheme, geometry, params)

    Arguments

    Type IntentOptional Attributes Name
    class(mus_particle_group_type), intent(inout) :: particleGroup
    type(mus_scheme_type), intent(inout) :: scheme
    type(mus_geom_type), intent(in) :: geometry
    type(mus_param_type), intent(in) :: params

abstract interface

abstract interface

abstract interface

  • public subroutine interpolateFluidPropFunc(xp, coord_xp, scheme, geom_origin, dx, interpolator, vel_xp, rho_xp, eps_f_xp, posOfCoord)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=rk), intent(in) :: xp(3)
    integer, intent(in) :: coord_xp(4)
    type(mus_scheme_type), intent(in) :: scheme
    real(kind=rk), intent(in) :: geom_origin(3)
    real(kind=rk), intent(in) :: dx
    type(mus_particle_interpolator_type), intent(in) :: interpolator
    real(kind=rk), intent(out) :: vel_xp(3)
    real(kind=rk), intent(out) :: rho_xp
    real(kind=rk), intent(out) :: eps_f_xp
    integer, intent(in), optional :: posOfCoord

abstract interface

  • public subroutine calcVelAndPGradFunc(coord, scheme, grad_p, curl_u, err, posOfCoord)

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: coord(4)
    type(mus_scheme_type), intent(in) :: scheme
    real(kind=rk), intent(out) :: grad_p(3)
    real(kind=rk), intent(out) :: curl_u(3)
    logical, intent(out) :: err
    integer, intent(in), optional :: posOfCoord

abstract interface

abstract interface

  • public subroutine pg_dragForceFunc(particle, eps_p, nu, Fd)

    Arguments

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

    Particle to apply force to

    real(kind=rk), intent(in) :: eps_p

    Solid volume fraction interpolated to location of the particle

    real(kind=rk), intent(in) :: nu

    Fluid kinematic viscosity (phy)

    real(kind=rk), intent(out) :: Fd(3)

    Output: drag force on particle

abstract interface

  • public subroutine pg_liftForceFunc(particle, nu, Flift)

    Arguments

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

    Particle to apply force to

    real(kind=rk), intent(in) :: nu

    Fluid kinematic viscosity (phy)

    real(kind=rk), intent(out) :: Flift(3)

    Output: drag force on particle

abstract interface

  • public subroutine pg_pressureForceFunc(particle, Fp)

    Arguments

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

    Particle to apply force to

    real(kind=rk), intent(out) :: Fp(3)

    Fluid kinematic viscosity (phy)


Derived Types

type, public ::  mus_particle_group_type

Data type representing a collection of particles, typically all

Components

Type Visibility Attributes Name Initial
type(dyn_particle_mem_array_type), public :: particles_MEM
type(dyn_particle_dps_array_type), public :: particles_DPS
type(mus_particle_interpolator_type), public :: interpolator

Object containing information on interpolation boundaries and weight functions to interpolate and distribute fluid properties from lattice to particle and vice-versa.

integer, public :: nParticles
logical, public :: enableCollisions = .FALSE.

Logical set to TRUE if particle collision are enabled, false otherwise

real(kind=rk), public :: collision_time

Collision time

real(kind=rk), public :: collision_tol

Threshold gap at which to consider two particles colliding

real(kind=rk), public :: rho0_lat

Density to use for hydrodynamic force computation when local density is not available This is in lattice units!

integer, public :: Nsubcycles

Number of DEM subcycles to execute per LBM time step

integer, public, allocatable :: BC_interaction(:)
integer, public :: particleLogInterval

Log particle data every this many time steps, i.e. for particleLogInterval = 1 the particle data is logged every time step.

integer, public :: particleBufferSize

Buffer size for the force, velocity and other particle data buffers. Should be set in musubi.lua particles table.

real(kind=rk), public :: halo_distance

Particles are communicated to processes once they come within halo_distance of the boundary between two processes. For MEM (fully resolved) particles we usually choose this to be one particle diameter. For DPS (unresolved) particles we choose halo_distance = the mesh size.

type(mus_particles_communication_type), public :: send
type(mus_particles_communication_type), public :: recv
procedure(pg_applyHydroForceFunc), public, pointer :: applyHydrodynamicForces => null()
procedure(pg_moveFunc), public, pointer :: moveParticles => null()
procedure(pg_mapFunc), public, pointer :: mapParticles => null()
procedure(pg_momentumTransferFunc), public, pointer :: transferMomentumToFluid => null()
procedure(pg_modifyAuxFieldFunc), public, pointer :: addParticleSourcesToAuxField => null()
procedure(momTransFunc), public, pointer, nopass :: transfer_momentum => null()
procedure(modAuxFieldFunc), public, pointer, nopass :: modify_auxfield => null()
procedure(interpolateFluidPropFunc), public, pointer, nopass :: intp => null()
procedure(calcVelAndPGradFunc), public, pointer, nopass :: calc_vel_and_p_grad => null()
procedure(pg_dragForceFunc), public, pointer, nopass :: calcDragForce => null()
procedure(pg_liftForceFunc), public, pointer, nopass :: calcLiftForce => null()
procedure(pg_pressureForceFunc), public, pointer, nopass :: calcPressureForce => null()
procedure(exchangepIDvectorFunc), public, pointer :: exchangeForces => null()
procedure(exchangepIDvectorFunc), public, pointer :: exchangeParticleStates => null()
procedure(exchangepIDvectorFunc), public, pointer :: exchangeNewParticles => null()

Subroutines

public subroutine printParticleGroup(particleGroup, logUnit)

Arguments

Type IntentOptional Attributes Name
type(mus_particle_group_type), intent(in) :: particleGroup
integer, intent(in) :: logUnit

public subroutine printParticleGroup2_MEM(particleGroup, logUnit, myRank, iter)

Arguments

Type IntentOptional Attributes Name
type(mus_particle_group_type), intent(in) :: particleGroup
integer, intent(in) :: logUnit
integer, intent(in) :: myRank
integer, intent(in) :: iter

public subroutine printParticleGroupData(particleGroup, particle_kind, logUnit)

Arguments

Type IntentOptional Attributes Name
type(mus_particle_group_type), intent(in) :: particleGroup

Particle group to print

character(len=*), intent(in) :: particle_kind
integer, intent(in) :: logUnit

Unit to write output to

public subroutine printParticleGroup2_DPS(particleGroup, logUnit, myRank, iter)

Arguments

Type IntentOptional Attributes Name
type(mus_particle_group_type), intent(in) :: particleGroup
integer, intent(in) :: logUnit
integer, intent(in) :: myRank
integer, intent(in) :: iter

public subroutine printpIDlist(particleGroup)

Arguments

Type IntentOptional Attributes Name
type(mus_particle_group_type), intent(in) :: particleGroup

public subroutine test_append_da_particle(particleGroup)

Arguments

Type IntentOptional Attributes Name
type(mus_particle_group_type), intent(inout) :: particleGroup