A collection of point particles.
| 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 |
Advances centers to next timestep.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(particle_set), | intent(inout) | :: | this |
Collection of Point Particles |
||
| real(kind=wp), | intent(in) | :: | dt |
Timestep |
Applies periodic boundary conditions.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
Changes Particle Type. This deletes all existing particle data and redeclares the associated MPI type.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(particle_set), | intent(inout) | :: | this |
Set of particles |
||
| character(len=*), | intent(in) | :: | type |
particle type |
Communicates lagrangian objects across MPI_rank. This subroutine relies on a rank locator procedure (GetOwnerRankOpt) to determine the rank that should own each Lagrangian object. The default rank locator is the one provided by the block object associated with this Lagrangian_set. From there, each rank will send objects that they no longer own and receive objects from other ranks that belongs to it. Note that this subroutine allocates an array (buf_send) of size (MAX NUMBER of OBJECTS to SEND) x (NUMBER OF MPI RANKS) For massively parallel simulations, this may cause out of memory issues. In those cases, care must be exercised to reduce the number of objects to be sent at any given time (e.g.: by doing communications in small batches).
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
||
| procedure(locator), | optional | :: | GetOwnerRankOpt |
MPI Rank locator for communications |
Creates an MPI data type for parallel communication of the Lagrangian objects.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
Creates monitor file for Point Particles.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(particle_set), | intent(inout) | :: | this |
Collection of Point Particles |
Filters a quantity to the Eulerian grid.
| Type | Intent | Optional | 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 |
Finalizes the ResPart_set type. This subourtine replaces the inheritted lagrangian_final.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(ResPart_set), | intent(inout) | :: | this |
Set of resolved partilces |
Frees the MPI data type.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
Returns whether overwriting is true or false.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(in) | :: | this |
A set of Lagrangian objects |
Overwrite value
Returns the base name of file to read.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(in) | :: | this |
A set of Lagrangian objects |
Name of file
Returns the base name of file to write.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(in) | :: | this |
A set of Lagrangian objects |
Name of file
Prints diagnostics information about the derived type to the standard output.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
Initializes the ResPart_set type. This subourtine replaces the inheritted lagrangian_init.
| Type | Intent | Optional | 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 to link with |
Localizes all Lagrangian object on the grid. For each Lagrangian object in the set, this subroutine finds the cell (staggering=0) where this object is located and updates its cell indices.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
Prepares for use with solvers.
| Type | Intent | Optional | 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 |
Reads particle data from file in parallel using H5HUT.
| Type | Intent | Optional | 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 |
Reads particle data from file in parallel using H5HUT.
| Type | Intent | Optional | 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 |
Reads particle data from file in parallel using HDF5.
| Type | Intent | Optional | 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 |
Sorting routine: stacks active lagrangian objects (i.e., who's id is >=1) at the beginning of the array then resizes. Objects with id <= 0 (such as ghost objects) are removed by this subroutine.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
Changes the size of an array of Lagrangian objects. To avoid excessive reallocating, the object array will be reallocated only if the new size is (1+RESIZE_INCREMENT) larger or (1-RESIZE_INCREMENT) smaller than previous size. When the size change does not justify reallocating, the excess objects at the end tail of the object array will be marked as inactive with a large negative ID.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
||
| integer, | intent(in) | :: | n |
New target size |
Sets the interpolation and extrapolation filter kernels. Default is the Triangle kernel.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
||
| integer, | intent(in) | :: | kernel_interp |
Filter kernel for interpolations |
||
| integer, | intent(in) | :: | kernel_extrap |
Filter kernel for extrapolations |
Adjusts the filter half size. Note that the block needs to contain enough ghost cells to be able to represent a filter kernel centered on the edge of the domain. Otherwise, an error will be returnned. The larger the filter size, the more ghost cells are required.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
Set of Lagrangian objects |
||
| real(kind=wp), | intent(in) | :: | l_filter |
Filter size |
Sets up parameters used when creating the MPI derived type.
| Type | Intent | Optional | 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 |
Sets the sample type used in allocation of polymorphic variables.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(particle_set), | intent(inout) | :: | this |
Lagrangian array to dump |
Sets file overwritting.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
||
| logical, | intent(in) | :: | overwrite |
Overwrite value |
Sets the base name of file to read.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
||
| character(len=*), | intent(in) | :: | name |
Name of file |
Sets the base name of file to write.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
||
| character(len=*), | intent(in) | :: | name |
Name of file |
Stores values from previous timestep.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(particle_set), | intent(inout) | :: | this |
Lagrangian array to dump |
Updates the total count of Lagrangian objects.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
Updates ghost objects. Copies objects that lie "dist"-away from the block's boundaries to neighboring MPI-ranks and designate copies as Ghost Objects (id<0). This subroutine will also update the local count (i.e., this%count_) to (NBR of ACTIVE OBJECTS) + (NBR of GHOST OBJECTS). However, the global count (this%count) will remain unchanged (i.e., equal to the total count of active ojbects only)0
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
||
| real(kind=wp), | intent(in) | :: | dist |
Distance from boundaries |
Updates monitoring data.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(particle_set), | intent(inout) | :: | this |
Collection of Point Particles |
Writes particle data to file in parallel using H5HUT.
| Type | Intent | Optional | 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 |
Writes particle data to file in parallel using H5HUT.
| Type | Intent | Optional | 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 |
Writes particle data to file in parallel using HDF5.
| Type | Intent | Optional | 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 |
Writes particle data to file in parallel using SILO.
| Type | Intent | Optional | 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 |
Finalizes the structure and frees memory.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
Initialize lagrangian objects related IO.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
||
| character(len=*), | intent(in) | :: | name |
Variable name |
||
| type(block_obj), | intent(in), | target | :: | block |
A block object |
|
| type(parallel_obj), | intent(in), | target | :: | parallel |
Parallel structure to link with |
type,extends(lagrangian_set) :: particle_set !> A collection of point particles. integer :: part_type = PP_TYPE_DEFAULT !! Particle type to use 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(op_obj), pointer :: op => null() !! operators object real(wp) :: gravity(3) = 0.0_wp !! Gravity real(wp) :: CPG(3) = 0.0_wp !! Constant Pressure Gradient forcing real(wp) :: rhof = 1.0_wp !! Fluid density contains ! Solver subroutines procedure :: Prepare => particle_set_Prepare procedure :: AdvanceCenters => particle_set_AdvanceCenters procedure :: StoreOld => particle_set_StoreOld procedure :: Filter => particle_set_Filter procedure :: CreateMonitor => particle_set_CreateMonitor procedure :: UpdateMonitor => particle_set_UpdateMonitor procedure :: ChangePartType => particle_set_ChangePartType ! I/O subroutines procedure :: Read => particle_set_ReadH5HUT procedure :: ReadH5HUT => particle_set_ReadH5HUT procedure :: ReadHDF5 => particle_set_ReadHDF5 procedure :: Write => particle_set_WriteH5HUT procedure :: WriteH5HUT => particle_set_WriteH5HUT procedure :: WriteHDF5 => particle_set_WriteHDF5 procedure :: WriteSilo => particle_set_WriteSilo ! MPI subroutines procedure :: SetObjectType => particle_set_SetObjectType procedure :: SetMPIDataTypeParams => particle_set_SetMPIDataTypeParams end type particle_set