particles_point Module

Numerical methods for lagrangian point particles.

A point particle, defined by the particle_obj derived type, is an object that contains information about - the size and material density of the particle - the particle centroid (position, linear, and angular velocity) - the hydrodynamic force and torque applied on the particle (given by a hydrodynamic model) - the collision force and torque applied on the particle (given by a collisin model)

The particle_BH_obj is an extension of particle_obj that adds information about the slip and acceleration histories required to calculate the Basset history force.

The particle_set derived type defines a collection of particle_obj, i.e., a cloud of particles. This derived type offers methods to - manage creation/removal of particles - integrate particle equations of motion - perform I/O.



Uses

  • module~~particles_point~~UsesGraph module~particles_point particles_point module~immersed_boundaries immersed_boundaries module~particles_point->module~immersed_boundaries module~leapblock leapBlock module~particles_point->module~leapblock 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~leapkinds leapKinds module~particles_point->module~leapkinds module~leaplagrangian leapLagrangian module~particles_point->module~leaplagrangian module~leapmonitor leapMonitor module~particles_point->module~leapmonitor module~leapparallel leapParallel module~particles_point->module~leapparallel module~leapparser leapParser module~particles_point->module~leapparser module~leaptimer leapTimer module~particles_point->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 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~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->iso_fortran_env module~leaputils leapUtils module~leapeulerian->module~leaputils module~leapeulerian->mpi_f08 module~leapio_h5hut leapIO_h5hut module~leapio->module~leapio_h5hut module~leapio->module~leapio_hdf5 module~leapio_silo leapIO_silo module~leapio->module~leapio_silo module~leapio_xdmf leapIO_xdmf module~leapio->module~leapio_xdmf module~leapkinds->iso_fortran_env module~leaplagrangian->module~leapblock module~leaplagrangian->module~leapio module~leaplagrangian->module~leapkinds module~leaplagrangian->module~leapparallel module~leapfilters leapfilters module~leaplagrangian->module~leapfilters module~leaplagrangian->module~leaputils module~leaplagrangian->mpi_f08 module~leapmonitor->module~leapkinds module~leapmonitor->module~leapparallel module~leapmonitor->iso_fortran_env module~leapmonitor->module~leaputils 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~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~immersed_boundaries_markers->iso_fortran_env module~immersed_boundaries_markers->module~leapbc 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~leapio module~leapbc->module~leapkinds module~leapbc->module~leapparallel module~leapbc->iso_fortran_env module~leapbc->module~leaputils module~leapbc->mpi_f08 module~leapcli->module~leapkinds module~leapfilters->module~leapkinds module~leapio_h5hut->module~leapkinds module~leapio_h5hut->module~leapparallel module~leapio_h5hut->module~leapio_hdf5 module~leapio_hdf5->module~leapkinds module~leapio_hdf5->module~leapparallel module~leapio_hdf5->module~leaputils hdf5 hdf5 module~leapio_hdf5->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 module~leaputils->module~leapkinds 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_point~~UsedByGraph module~particles_point particles_point module~collisions collisions module~collisions->module~particles_point module~grans grans module~grans->module~particles_point module~grans->module~collisions module~cdifs cdifs module~cdifs->module~collisions 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~grans program~main->module~cdifs 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

Variables

Type Visibility Attributes Name Initial
real(kind=wp), private, parameter :: BH_A(BH_E) = [0.23477481312586_wp, 0.28549576238194_wp, 0.28479416718255_wp, 0.26149775537574_wp, 0.32056200511938_wp, 0.35354490689146_wp, 0.39635904496921_wp, 0.42253908596514_wp, 0.48317384225265_wp, 0.63661146557001_wp]

Non-dimensional weights in BH kernel

integer, private, parameter :: BH_E = 10

Number of exponential functions used to approximate tail of BH kernel

integer, private, parameter :: BH_N = 5

Number of entries to track in time history

real(kind=wp), private, parameter :: BH_T(BH_E) = [0.1_wp, 0.3_wp, 1.0_wp, 3.9_wp, 10.0_wp, 40.0_wp, 190.0_wp, 1000.0_wp, 6500.0_wp, 50000.0_wp]

Non-dimensional time in BH kernel

integer, private, parameter :: PP_TYPE_BASSET = 2

Type used when computing Basset History force

integer, private, parameter :: PP_TYPE_DEFAULT = 1

Default type


Derived Types

type, public, extends(particle_obj) ::  particle_BH_obj

A particle type that supports the computation of Basset History force

Components

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

Basset force

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 :: Fix(BH_E)

Exponential tails of Basset kernel (x-dir)

real(kind=wp), public :: Fiy(BH_E)

Exponential tails of Basset kernel (y-dir)

real(kind=wp), public :: Fiz(BH_E)

Exponential tails of Basset kernel (z-idr)

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

real(kind=wp), public :: gx(BH_N+1)

Time series of slip velocity derivatives (x-dir)

real(kind=wp), public :: gy(BH_N+1)

Time series of slip velocity derivatives (y-dir)

real(kind=wp), public :: gz(BH_N+1)

Time series of slip velocity derivatives (z-idr)

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 :: vs(3)

Slip velocity

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

Particle 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 => particle_BH_obj_assign
generic, public :: assignment(=) => assign

type, public, extends(lagrangian_obj) ::  particle_obj

An extended Lagrangian object that represents a Lagrangian point particle

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 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 => particle_obj_assign
generic, public :: assignment(=) => assign

type, public, extends(lagrangian_set) ::  particle_set

A collection of point particles.

Components

Type Visibility Attributes Name Initial
real(kind=wp), public :: CPG(3) = 0.0_wp

Constant Pressure Gradient forcing

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

Associated block structure

integer, public :: count = 0

Total count across all MPI ranks

integer, public :: count_ = 0

Local count for this rank

integer, public, allocatable :: count_proc(:)

Nbr of lagrangian objects per proc

procedure(kernel_1D), public, pointer, nopass :: g1ex => int_g1_triangle

1D kernel used in extrapolations

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

1D kernel used in interpolations

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

Gravity

logical, public :: is_initialized = .false.

Flag to determine whether this has been initialized

real(kind=wp), public :: l_filter

Half filter width

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(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 :: part_type = PP_TYPE_DEFAULT

Particle type to use

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 => particle_set_AdvanceCenters
procedure, public :: ApplyPeriodicity => lagrangian_set_ApplyPeriodicity
procedure, public :: ChangePartType => particle_set_ChangePartType
procedure, public :: Communicate => lagrangian_set_Communicate
procedure, public :: CreateMPIType => lagrangian_set_CreateMPIType
procedure, public :: CreateMonitor => particle_set_CreateMonitor
procedure, public :: Filter => particle_set_Filter
generic, public :: Finalize => lagrangian_set_Final
procedure, public :: FreeMPIType => lagrangian_set_FreeMPIType
procedure, public :: GetOverwrite => lagrangian_set_GetOverwrite
procedure, public :: GetReadFileName => lagrangian_set_GetReadFileName
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 => particle_set_Prepare
procedure, public :: Read => particle_set_ReadH5HUT
procedure, public :: ReadH5HUT => particle_set_ReadH5HUT
procedure, public :: ReadHDF5 => particle_set_ReadHDF5
procedure, public :: Recycle => lagrangian_set_Recycle
procedure, public :: Resize => lagrangian_set_Resize
procedure, public :: SetFilterKernel => lagrangian_set_SetFilterKernel
procedure, public :: SetFilterSize => lagrangian_set_SetFilterSize
procedure, public :: SetMPIDataTypeParams => particle_set_SetMPIDataTypeParams
procedure, public :: SetObjectType => particle_set_SetObjectType
procedure, public :: SetOverwrite => lagrangian_set_SetOverwrite
procedure, public :: SetReadFileName => lagrangian_set_SetReadFileName
procedure, public :: SetWriteFileName => lagrangian_set_SetWriteFileName
procedure, public :: StoreOld => particle_set_StoreOld
procedure, public :: UpdateCount => lagrangian_set_UpdateCount
procedure, public :: UpdateGhostObjects => lagrangian_set_UpdateGhostObjects
procedure, public :: UpdateMonitor => particle_set_UpdateMonitor
procedure, public :: Write => particle_set_WriteH5HUT
procedure, public :: WriteH5HUT => particle_set_WriteH5HUT
procedure, public :: WriteHDF5 => particle_set_WriteHDF5
procedure, public :: WriteSilo => particle_set_WriteSilo
procedure, public :: lagrangian_set_Final
procedure, public :: lagrangian_set_Init

Subroutines

private pure subroutine particle_BH_obj_assign(this, val)

Assignment

Arguments

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

An particle_obj object

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

An particle_obj object

private pure subroutine particle_obj_assign(this, val)

Assignment

Arguments

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

An particle_obj object

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

An particle_obj object

private pure subroutine particle_set_AdvanceCenters(this, dt)

Advances centers to next timestep.

Arguments

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

Collection of Point Particles

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

Timestep

private impure subroutine particle_set_ChangePartType(this, type)

Changes Particle Type. This deletes all existing particle data and redeclares the associated MPI type.

Arguments

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

Set of particles

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

particle type

private impure subroutine particle_set_CreateMonitor(this)

Creates monitor file for Point Particles.

Arguments

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

Collection of Point Particles

private impure subroutine particle_set_Filter(this, var, field)

Filters a quantity to the Eulerian grid.

Arguments

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

Set of Lagrangian objects

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

Variable to compute

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

Filtered quantity

private impure subroutine particle_set_Prepare(this, timer, parser, operators, monitors, update_time)

Prepares for use with solvers.

Arguments

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

Set of 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

logical, intent(in), optional :: update_time

private impure subroutine particle_set_ReadH5HUT(this, iter, time, step)

Reads particle data from file in parallel using H5HUT.

Arguments

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

Lagrangian array to dump

integer, intent(out) :: iter

Iteration at write

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

Time at write

integer, intent(in), optional :: step

User supplied step to open

private impure subroutine particle_set_ReadHDF5(this, iter, time)

Reads particle data from file in parallel using HDF5.

Arguments

Type IntentOptional Attributes Name
class(particle_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 impure subroutine particle_set_SetMPIDataTypeParams(this, types, lengths, displacement)

Sets up parameters used when creating the MPI derived type.

Arguments

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

Set of Lagrangian objects

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 impure subroutine particle_set_SetMPIDataTypeParams_BH(this, types, lengths, displacement)

Sets up parameters used when creating the MPI derived type of particles with BH type.

Arguments

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

Set of Lagrangian objects

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 impure subroutine particle_set_SetMPIDataTypeParams_default(this, types, lengths, displacement)

Sets up parameters used when creating the MPI derived type of particles with default type.

Arguments

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

Set of Lagrangian objects

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 pure subroutine particle_set_SetObjectType(this)

Sets the sample type used in allocation of polymorphic variables.

Arguments

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

Lagrangian array to dump

private pure subroutine particle_set_StoreOld(this)

Stores values from previous timestep.

Arguments

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

Lagrangian array to dump

private impure subroutine particle_set_UpdateMonitor(this)

Updates monitoring data.

Arguments

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

Collection of Point Particles

private impure subroutine particle_set_WriteH5HUT(this, iter, time)

Writes particle data to file in parallel using H5HUT.

Arguments

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

Lagrangian array to dump

integer, intent(in) :: iter

Iteration at write

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

Time at write

private impure subroutine particle_set_WriteHDF5(this, iter, time)

Writes particle data to file in parallel using HDF5.

Arguments

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

Set of resolved particles

integer, intent(in) :: iter

Iteration at write

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

Time at write

private impure subroutine particle_set_WriteSilo(this, iter, time, list)

Writes particle data to file in parallel using SILO.

Arguments

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

Point particles to write

integer, intent(in) :: iter

Iteration at write

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

Time at write

character(len=str8), intent(in), optional :: list(:)

Names of components to write