Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public, | parameter | :: | KERNEL_BOX | = | 0 | |
integer, | public, | parameter | :: | KERNEL_COSINE | = | 3 | |
integer, | public, | parameter | :: | KERNEL_COSINE2 | = | 6 | |
integer, | public, | parameter | :: | KERNEL_PARABOLIC | = | 2 | |
integer, | public, | parameter | :: | KERNEL_ROMA | = | 5 | |
integer, | public, | parameter | :: | KERNEL_TRIANGLE | = | 1 | |
integer, | public, | parameter | :: | KERNEL_TRIWEIGHT | = | 4 | |
real(kind=WP), | private, | parameter | :: | RESIZE_INCREMENT | = | 0.3_WP |
Increment for resizing lagrangian arrays: 30% up or 30% smaller |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Distance from center |
Kernel value
Set up parameters used to create the MPI derived type
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_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 |
Set the type of the polymorphic sample
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
Deferred assignemnt ofan extended type value
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_obj), | intent(inout) | :: | this |
A Lagrangian object |
||
class(lagrangian_obj), | intent(in) | :: | val |
Value to be assigned |
Read lagrangian objects from file in parallel
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
||
integer, | intent(out) | :: | iter |
Iteration at write |
||
real(kind=wp), | intent(out) | :: | time |
Time at write |
Write lagrangian objects to file in parallel
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
||
integer, | intent(in) | :: | iter |
Iteration at write |
||
real(kind=wp), | intent(in) | :: | time |
Time at write |
Returns the MPI rank that owns the lagrangian object
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
||
class(lagrangian_obj), | intent(in) | :: | lagobj |
Lagrangian obj to locate |
rank that should own lagobj
Base lagrangian object
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | c(3) |
nearest cell |
|||
integer(kind=leapI8), | public | :: | id |
Identifying number (inactive if <0) |
|||
real(kind=WP), | public | :: | p(3) |
position |
procedure, public :: Extrapolate => lagrangian_obj_Extrapolate | |
procedure, public :: Interpolate => lagrangian_obj_Interpolate | |
procedure, public :: Locate => lagrangian_obj_Locate | |
procedure(lagrangian_obj_assign), public, deferred :: assign | |
generic, public :: assignment(=) => assign |
Base structure for a collection of Lagrangian objects
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(:) |
|
||
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 | :: | l_filter |
Half filter width |
|||
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 |
||
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 |
character(len=str64), | public | :: | read_file |
file to read |
|||
class(lagrangian_obj), | public, | allocatable | :: | sample |
Sample used in allocation of polymorphic data |
||
integer, | public | :: | stib | = | 3 |
Stencil size for filtering |
|
character(len=str64), | public | :: | write_file |
file to write |
Filtering kernel with support from -1.0 to 1.0 Box filter (step function)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Filtering kernel with support from -1.0 to 1.0 Parabolic filter
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Filtering kernel with support from -1.0 to 1.0 Parabolic filter
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Filtering kernel with support from -1.0 to 1.0 Parabolic filter
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Filtering kernel with support from -1 to 1 Roma and Peskin's filter
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Filtering kernel with support from -1.0 to 1.0 Triangular filter (linear interpolation)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Filtering kernel with support from -1.0 to 1.0 Triweight filter
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Integral of filtering kernel from 0 to r Box filter (step function) Here : r=x/l_f (non-dimensional position)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Integral of filtering kernel from 0 to r Cosine filter Here : r=x/l_f (non-dimensional position)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Integral of filtering kernel from 0 to r Cosine filter Here : r=x/l_f (non-dimensional position)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Integral of filtering kernel from 0 to r Parabolic filter Here : r=x/l_f (non-dimensional position)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Integral of filtering kernel from 0 to r Roma and Peskin filter Here : r=x/l_f (non-dimensional position)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Integral of filtering kernel from 0 to r Triangular filter (linear interpolation) Here : r=x/l_f (non-dimensional position)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Integral of filtering kernel from 0 to r Triweight filter Here : r=x/l_f (non-dimensional position)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | r |
Routine to interpolate a field f defined on an Eulerian stencil to the location of a lagrangian object
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_obj), | intent(in) | :: | this |
A Lagrangian object |
||
real(kind=wp), | intent(in) | :: | l_filter |
Filter size |
||
integer, | intent(in) | :: | slo(3) |
Stencil lower bound |
||
integer, | intent(in) | :: | shi(3) |
Stencil higher bound |
||
type(block_obj), | intent(in), | pointer | :: | block |
A block object |
|
procedure(kernel_1D), | intent(in), | pointer | :: | g1in |
Filter kernel |
|
real(kind=WP), | intent(in) | :: | f(slo(1):shi(1),slo(2):shi(2),slo(3):shi(3)) |
Quantity to interpolate |
Locate a Lagrangian object on an external grid. Returns the location of the cell containing the object.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_obj), | intent(inout) | :: | this |
A Lagrangian object |
||
class(block_obj), | intent(in) | :: | block |
External block |
Returns the MPI rank that should own this lagrangian object based on which block it belongs to
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
||
class(lagrangian_obj), | intent(in) | :: | lagobj |
Lagrangian obj to locate |
rank that should own lagobj
Return the base name of file to write
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A collection of Eulerian objects |
Name of file
Return the base name of file to write
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A collection of Eulerian objects |
Name of file
Get a bump function centered on the lagrangian object
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_obj), | intent(in) | :: | this |
A Lagrangian object |
||
real(kind=wp), | intent(in) | :: | l_filter |
Filter size |
||
integer, | intent(in) | :: | slo(3) |
Stencil lower bound |
||
integer, | intent(in) | :: | shi(3) |
Stencil higher bound |
||
type(block_obj), | intent(in), | pointer | :: | block |
A block object |
|
procedure(kernel_1D), | intent(in), | pointer | :: | int_g1ex |
Integrated filter kernel |
|
real(kind=wp), | allocatable | :: | bump(:,:,:) |
The bump function |
Apply periodic boundary conditions
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
Set of Lagrangian objects |
Communicate lagrangian objects across MPI_rank
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
Set of Lagrangian objects |
||
procedure(locator), | optional | :: | GetOwnerRankOpt |
MPI Rank locator for communications |
Determines the size of the MPI derived type
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
Finalize the structure
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
Prints diagnostics information about the derived type
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
Lagrangian array to dump |
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 |
Name of variable |
||
type(block_obj), | intent(in), | target | :: | block |
A block object |
|
type(parallel_obj), | intent(in), | target | :: | parallel |
parallel structure from main program |
Localize a Lagrangian object on the grid Returns the location of the closest collocated cell (staggering=0
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
Lagrangian array to dump |
Sorting routine: stacks active lagrangian objects at the beginning of the array then resizes
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
Lagrangian array to dump |
Changes the size of an array of Lagrangian objects
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
Lagrangian array to dump |
||
integer, | intent(in) | :: | n |
New size |
Reset the filter kerrnel Default is Triangle for interpolation and extrapolation
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
Set of Lagrangian objects |
||
integer, | intent(in) | :: | kernel_interp |
Filter kernel for interpolations |
||
integer, | intent(in) | :: | kernel_extrap |
Filter kernel for extrapolations |
Adjust the size of the filter
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
Set of Lagrangian objects |
||
real(kind=wp), | intent(in) | :: | l_filter |
Filter size |
Set file overwritting
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A collection of Eulerian objects |
||
logical, | intent(in) | :: | overwrite |
Name of file |
Set the base name of file to read
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A collection of Eulerian objects |
||
character(len=*), | intent(in) | :: | name |
Name of file |
Set the base name of file to write
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A collection of Eulerian objects |
||
character(len=*), | intent(in) | :: | name |
Name of file |
Initializes cblock to handle collisions. This is extra block is expected to be coarser than the simulation block. It is used for cheap neighbor searches.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |
||
real(kind=wp), | intent(in) | :: | ds |
Target grid spacing |
||
integer, | intent(in) | :: | ngc |
Number of ghost cells for collision block |
Updates the total count of Lagrangian objects
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
Lagrangian array to dump |
Updates ghost objects Copies objects that lie near or cross the block's boundaries
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
Set of Lagrangian objects |
||
class(block_obj), | intent(in), | optional | :: | block |
Optional alternative block |
Update ghost objects in the idir direction NOTE: Ghost objects must have negative IDs
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
Set of Lagrangian objects |
||
class(block_obj), | intent(in) | :: | block |
Block object |
||
integer, | intent(in) | :: | idir |
Direction of communication |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(lagrangian_set), | intent(inout) | :: | this |
A set of Lagrangian objects |