particles_resolved Module

Methods to treat the particle phase as immersed boundaries in particle-resolved direct numerical simulations (PR-DNS)



Uses

  • module~~particles_resolved~~UsesGraph module~particles_resolved particles_resolved module~immersed_boundaries immersed_boundaries module~particles_resolved->module~immersed_boundaries module~leapblock leapBlock module~particles_resolved->module~leapblock module~leapdiffop leapDiffOp module~particles_resolved->module~leapdiffop module~leapeulerian leapEulerian module~particles_resolved->module~leapeulerian module~leapio leapIO module~particles_resolved->module~leapio module~leapkinds leapKinds module~particles_resolved->module~leapkinds module~leaplagrangian leapLagrangian module~particles_resolved->module~leaplagrangian module~leapmonitor leapMonitor module~particles_resolved->module~leapmonitor module~leapparallel leapParallel module~particles_resolved->module~leapparallel module~leapparser leapParser module~particles_resolved->module~leapparser module~leaptimer leapTimer module~particles_resolved->module~leaptimer 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 module~leapdiffop->module~leapblock module~leapdiffop->module~leapeulerian module~leapdiffop->module~leapkinds module~leapdiffop->module~leapparallel module~leapbc leapBC module~leapdiffop->module~leapbc module~leapeulerian->module~leapblock module~leapeulerian->module~leapio module~leapeulerian->module~leapkinds module~leapeulerian->module~leapparallel module~leapeulerian->module~leapparser module~leapio_mpi leapIO_mpi module~leapeulerian->module~leapio_mpi module~leaputils leapUtils module~leapeulerian->module~leaputils module~leapeulerian->mpi_f08 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 iso_fortran_env iso_fortran_env module~leapkinds->iso_fortran_env module~leaplagrangian->module~leapblock module~leaplagrangian->module~leapio module~leaplagrangian->module~leapkinds module~leaplagrangian->module~leapparallel module~leaplagrangian->module~leapparser module~leaplagrangian->module~leaputils module~leaplagrangian->mpi_f08 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~leapparser module~immersed_boundaries_markers->module~leapblock module~immersed_boundaries_markers->module~leapdiffop module~immersed_boundaries_markers->module~leapeulerian module~immersed_boundaries_markers->module~leapio module~immersed_boundaries_markers->module~leapkinds module~immersed_boundaries_markers->module~leaplagrangian 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~leaphypre leapHypre module~immersed_boundaries_markers->module~leaphypre module~immersed_boundaries_solids->module~leapblock module~immersed_boundaries_solids->module~leapeulerian module~immersed_boundaries_solids->module~leapio module~immersed_boundaries_solids->module~leapkinds module~immersed_boundaries_solids->module~leaplagrangian module~immersed_boundaries_solids->module~leapparallel module~immersed_boundaries_solids->module~immersed_boundaries_markers module~leapbc->module~leapblock module~leapbc->module~leapeulerian module~leapbc->module~leapkinds module~leapbc->module~leapparallel module~leapbc->module~leaputils module~leapbc->mpi_f08 module~leapcli->module~leapkinds 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 module~leaputils->module~leapkinds module~leaputils->mpi_f08 module~leaphypre->module~leapblock module~leaphypre->module~leapeulerian module~leaphypre->module~leapkinds module~leaphypre->module~leapparallel module~leaphypre->mpi_f08 iso_c_binding iso_c_binding module~leaphypre->iso_c_binding

Used by

  • module~~particles_resolved~~UsedByGraph module~particles_resolved particles_resolved module~cdifs cdifs module~cdifs->module~particles_resolved module~grans grans module~grans->module~particles_resolved module~grans_cases grans_cases module~grans->module~grans_cases module~grans_cases->module~particles_resolved proc~add_markers add_markers proc~add_markers->module~particles_resolved proc~add_markers~2 add_markers proc~add_markers~2->module~particles_resolved proc~cdifs_rebound_respart cdifs_rebound_ResPart proc~cdifs_rebound_respart->module~particles_resolved proc~cdifs_settling_sphere_respart cdifs_settling_sphere_ResPart proc~cdifs_settling_sphere_respart->module~particles_resolved 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 module~headon_collision_smod headon_collision_smod module~headon_collision_smod->module~grans_cases module~homogeneous_cooling_smod homogeneous_cooling_smod module~homogeneous_cooling_smod->module~grans_cases module~rotating_drum_smod rotating_drum_smod module~rotating_drum_smod->module~grans_cases program~main main program~main->module~cdifs program~main->module~grans

Derived Types

type, public, extends(lagrangian_obj) ::  ResPart_obj

An extended Lagrangian object that represents particle represented as an Immersed Boundary

Components

Type Visibility Attributes Name Initial
real(kind=wp), public :: Fc(3)

Collision force applied on particle

real(kind=wp), public :: Fcold(3)

Old collision force

real(kind=wp), public :: Fh(3)

Hydrodynamic force applied on particle

real(kind=wp), public :: Fhold(3)

Old hydrodynamic force

real(kind=wp), public :: Tc(3)

Collision torque applied on particle

real(kind=wp), public :: Tcold(3)

Old collision torque

real(kind=wp), public :: Th(3)

Hydrodynamic torque applied on particle

real(kind=wp), public :: Thold(3)

Old hydrodynamic torque

integer, public :: c(3)

nearest cell

real(kind=wp), public :: d

Diameter of the particle

integer(kind=leapI8), public :: id

Identifying number (inactive if <0)

real(kind=WP), public :: p(3)

position

real(kind=wp), public :: pold(3)

Old particle position

real(kind=wp), public :: rho

Particle density

integer, public :: s

A tag

real(kind=wp), public :: v(3)

Particle velocity

real(kind=wp), public :: vold(3)

Old particle velocity

real(kind=wp), public :: w(3)

Particle angular velocity

real(kind=wp), public :: wold(3)

Old particle angular velocity

Type-Bound Procedures

procedure, public :: Extrapolate => lagrangian_obj_Extrapolate
procedure, public :: Interpolate => lagrangian_obj_Interpolate
procedure, public :: Locate => lagrangian_obj_Locate
procedure, public :: assign => ResPart_obj_assign
generic, public :: assignment(=) => assign

type, public, extends(lagrangian_set) ::  ResPart_set

An extended Lagrgian set representing resolved particles

Components

Type Visibility Attributes Name Initial
integer, public :: MPI_SIZE = 44

MPI size

type(MPI_Datatype), public :: MPI_TYPE

MPI variable type

type(block_obj), public, pointer :: block => null()

Associated block structure

type(block_obj), public :: cblock

Collision block

integer, public :: count = 0

Total count across all MPI ranks

integer, public :: count_ = 0

Local count for this rank

integer, public, allocatable :: count_proc(:) Read more…
procedure(kernel_1D), public, nopass, pointer :: g1ex => int_g1_triangle

1D kernel used in extrapolations

procedure(kernel_1D), public, nopass, pointer :: g1in => g1_triangle

1D kernel used in interpolations

real(kind=wp), public :: gravity(3) = 0.0_wp

Gravity

type(marker_set), public :: ib

Surface markers

real(kind=wp), public :: l_filter

Half filter width

integer, public, allocatable :: lookup(:)

Lookup array

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

Monitors to print to stdout and files

character(len=:), public, allocatable :: name

Name of the Lagrangian set

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

Singly linked list of neighbors

integer, public, allocatable :: objincell(:,:,:)

Number of objects in this list

type(op_obj), public, pointer :: op => null()

operators object

logical, public :: overwrite = .true.

Switch to overwrite IO files

class(lagrangian_obj), public, allocatable :: p(:)

Array of Lagrangian_obj or any extended type

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

Associated parallel structure

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

Parser for input file

integer, public, allocatable :: ranks(:)

MPI ranks of the lagrangian objects

character(len=str64), public :: read_file

file to read

real(kind=wp), public :: rhof = 1.0_wp

Fluid density

class(lagrangian_obj), public, allocatable :: sample

Sample used in allocation of polymorphic data

integer, public :: stib = 3

Stencil size for filtering

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

Timer utility

character(len=str64), public :: write_file

file to write

Type-Bound Procedures

procedure, public :: AdvanceCenters => ResPart_set_AdvanceCenters
procedure, public :: AdvanceMarkers => ResPart_set_AdvanceMarkers
procedure, public :: ApplyPeriodicity => lagrangian_set_ApplyPeriodicity
procedure, public :: Communicate => lagrangian_set_Communicate
procedure, public :: CreateMPIType => lagrangian_set_CreateMPIType
procedure, public :: CreateMonitor => ResPart_set_CreateMonitor
procedure, public :: Filter => ResPart_set_Filter
generic, public :: Finalize => lagrangian_set_Final
procedure, public :: FreeNeighborList => lagrangian_set_FreeNeighborList
procedure, public :: GetHydroForces => ResPart_set_GetHydroForces
procedure, public :: GetIBForcing => ResPart_set_GetIBForcing
procedure, public :: GetOwnerRankByBlock => lagrangian_set_GetOwnerRankByBlock
procedure, public :: GetReadFileName => lagrangian_set_GetReadFileName
procedure, public :: GetSurfaceStresses => ResPart_set_GetSurfaceStresses
procedure, public :: GetWriteFileName => lagrangian_set_GetWriteFileName
procedure, public :: Info => lagrangian_set_Info
generic, public :: Initialize => lagrangian_set_Init
procedure, public :: Localize => lagrangian_set_Localize
procedure, public :: Prepare => ResPart_set_Prepare
procedure, public :: Read => ResPart_set_Read
procedure, public :: Recycle => lagrangian_set_Recycle
procedure, public :: Regroup => ResPart_set_Regroup
procedure, public :: Resize => lagrangian_set_Resize
procedure, public :: SetFilterKernel => lagrangian_set_SetFilterKernel
procedure, public :: SetFilterSize => ResPart_set_SetFilterSize
procedure, public :: SetMPIDataTypeParams => ResPart_set_SetMPIDataTypeParams
procedure, public :: SetObjectType => ResPart_set_SetObjectType
procedure, public :: SetOverwrite => lagrangian_set_SetOverwrite
procedure, public :: SetReadFileName => ResPart_set_SetReadFileName
procedure, public :: SetWriteFileName => ResPart_set_SetWriteFileName
procedure, public :: SetupCollisionBlock => lagrangian_set_SetupCollisionBlock
procedure, public :: StoreOld => ResPart_set_StoreOld
procedure, public :: UpdateCount => lagrangian_set_UpdateCount
procedure, public :: UpdateGhostObjects => lagrangian_set_UpdateGhostObjects
procedure, public :: UpdateLookup => ResPart_set_UpdateLookup
procedure, public :: UpdateMonitor => ResPart_set_UpdateMonitor
procedure, public :: UpdateNeighborList => lagrangian_set_UpdateNeighborList
procedure, public :: UpdateNormals => ResPart_set_UpdateNormals
procedure, public :: UpdateSDF => ResPart_set_UpdateSDF
procedure, public :: Write => ResPart_set_Write
procedure, public :: lagrangian_set_Final => ResPart_set_Final
procedure, public :: lagrangian_set_Init => ResPart_set_Init

Functions

private function ResPart_set_GetOwnerRankByRP(this, marker) result(rank)

Return MPI rank of the lagrangian centroid owning this marker.

Arguments

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

Set of resolved particles

class(lagrangian_obj), intent(in) :: marker

A surface marker

Return Value integer

private pure function cross_product(u, v) result(val)

Arguments

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

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


Subroutines

private subroutine ResPart_obj_assign(this, val)

Assignment

Arguments

Type IntentOptional Attributes Name
class(ResPart_obj), intent(inout) :: this
class(lagrangian_obj), intent(in) :: val

private subroutine ResPart_set_AdvanceCenters(this, dt)

Advance centers to next timestep

Arguments

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

Collection of Resolved Particles

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

Timestep

private subroutine ResPart_set_AdvanceMarkers(this, dt)

Advance markers to next timestep

Arguments

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

Collection of Resolved Particles

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

Timestep

private subroutine ResPart_set_CreateMonitor(this)

Create monitor file for Resolved Particles

Arguments

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

Collection of Resolved Particles

private subroutine ResPart_set_Filter(this, var, field)

Filter a quantity to the Eulerian grid

Arguments

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

Set of resolved particles

character(len=*), intent(in) :: var

Variable to compute

type(eulerian_obj_r), intent(inout) :: field

Filtered quantity

private subroutine ResPart_set_Final(this)

Finalize the ResPart_set type. This subourtine replaces the inheritted lagrangian_final.

Arguments

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

Set of resolved partilces

private subroutine ResPart_set_GetHydroForces(this, P, U, V, W, ibVF, visc)

Compute hydrodynamic force on particle

Arguments

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

Collection of Resolved Particles

type(eulerian_obj_r), intent(in) :: P

Fluid pressure field

type(eulerian_obj_r), intent(in) :: U

Fluid velocity field in 1-dir

type(eulerian_obj_r), intent(in) :: V

Fluid velocity field in 2-dir

type(eulerian_obj_r), intent(in) :: W

Fluid velocity field in 3-dir

type(eulerian_obj_r), intent(in) :: ibVF

Solid volume fraction

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

Fluid viscosity

private subroutine ResPart_set_GetIBForcing(this, Um, Vm, Wm, rhof, SA, ibF, dt)

Compute the IB forcing

Arguments

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

Collection of Resolved Particles

type(eulerian_obj_r), intent(in) :: Um

Velocity in 1-dir

type(eulerian_obj_r), intent(in) :: Vm

Velocity in 2-dir

type(eulerian_obj_r), intent(in) :: Wm

Velocity in 3-dir

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

Fluid density

type(eulerian_obj_r), intent(in) :: SA

Surface area

type(eulerian_obj_r), intent(inout) :: ibF(3)

IB forcing

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

Timestep

private subroutine ResPart_set_GetSurfaceStresses(this, P, U, V, W, ibVF, visc)

Compute hydrodynamic stresses on markers

Arguments

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

Collection of Resolved Particles

type(eulerian_obj_r), intent(in) :: P

Fluid pressure field

type(eulerian_obj_r), intent(in) :: U

Fluid velocity field in 1-dir

type(eulerian_obj_r), intent(in) :: V

Fluid velocity field in 2-dir

type(eulerian_obj_r), intent(in) :: W

Fluid velocity field in 3-dir

type(eulerian_obj_r), intent(in) :: ibVF

Solid volume fraction

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

Fluid viscosity

private subroutine ResPart_set_Init(this, name, block, parallel)

Initialize the ResPart_set type. This subourtine replaces the inheritted lagrangian_init.

Arguments

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

Set of resolved partilces

character(len=*), intent(in) :: name

Name of instance

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

A block object

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

parallel structure from main program

private subroutine ResPart_set_Prepare(this, timer, parser, operators, monitors)

Prepare ResPart_set for use with solvers

Arguments

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

Collection of Resolved Particles

type(timer_obj), intent(in), target :: timer

Timer utility

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

Parser for input file

type(op_obj), intent(in), target :: operators

Operators object

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

Monitors to print to stdout and files

private subroutine ResPart_set_Read(this, iter, time)

Read ResPart data from file

Arguments

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

Set of resolved particles

integer, intent(out) :: iter

Iteration at write

real(kind=wp), intent(out) :: time

Time at write

private subroutine ResPart_set_Regroup(this)

Regroup markers with their respective centroids on the same MPI block

Arguments

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

Set of resolved particles

private subroutine ResPart_set_SetFilterSize(this, l_filter)

Filter a quantity to the Eulerian grid

Arguments

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

Set of resolved particles

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

Filter size

private subroutine ResPart_set_SetMPIDataTypeParams(this, types, lengths, displacement)

Set up parameters used when creating the MPI derived type

Arguments

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

Set of resolved particles

type(MPI_Datatype), intent(out), allocatable :: types(:)

Array of types

integer, intent(out), allocatable :: lengths(:)

Array of lengths

integer(kind=MPI_ADDRESS_KIND), intent(out), allocatable :: displacement(:)

Array of displacements

private subroutine ResPart_set_SetObjectType(this)

description

Arguments

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

Set of resolved particles

private subroutine ResPart_set_SetReadFileName(this, name)

Set the base name of file to write

Arguments

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

Set of resolved particles

character(len=*), intent(in) :: name

Name of file

private subroutine ResPart_set_SetWriteFileName(this, name)

Set the base name of file to write

Arguments

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

Set of resolved particles

character(len=*), intent(in) :: name

Name of file

private subroutine ResPart_set_StoreOld(this)

Store values from previous timestep

Arguments

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

Collection of Resolved Particles

private subroutine ResPart_set_UpdateLookup(this)

Update lookup array -- The lookup array returns the local (MPI rank) index of a centroid when given the global ID of that centroid

Arguments

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

Set of resolved particles

private subroutine ResPart_set_UpdateMonitor(this)

Arguments

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

Collection of Resolved Particles

private subroutine ResPart_set_UpdateNormals(this, ibN)

Updates the Normals field

Arguments

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

Collection of Resolved Particles

type(eulerian_obj_r), intent(inout) :: ibN(3)

private subroutine ResPart_set_UpdateSDF(this, SA)

Updates the Surface Density Function

Arguments

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

Collection of Resolved Particles

type(eulerian_obj_r), intent(inout) :: SA

private subroutine ResPart_set_Write(this, iter, time)

description

Arguments

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

Set of resolved particles

integer, intent(in) :: iter

Iteration at write

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

Time at write