leapLagrangian Module

Module of abstract objets defining Lagrangian data structure


Uses

  • module~~leaplagrangian~~UsesGraph module~leaplagrangian leapLagrangian module~leapblock leapBlock module~leaplagrangian->module~leapblock module~leapio leapIO module~leaplagrangian->module~leapio module~leapkinds leapKinds module~leaplagrangian->module~leapkinds module~leapparallel leapParallel module~leaplagrangian->module~leapparallel module~leapparser leapParser module~leaplagrangian->module~leapparser module~leaputils leapUtils module~leaplagrangian->module~leaputils mpi_f08 mpi_f08 module~leaplagrangian->mpi_f08 module~leapblock->module~leapkinds module~leapblock->module~leapparallel module~leapblock->mpi_f08 module~leapio_h5hut leapIO_h5hut module~leapio->module~leapio_h5hut module~leapio_hdf5 leapIO_hdf5 module~leapio->module~leapio_hdf5 module~leapio_mpi leapIO_mpi 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~leapparallel->module~leapkinds module~leapparallel->module~leapparser module~leapparallel->mpi_f08 module~leapparser->module~leapkinds module~leapcli leapCli module~leapparser->module~leapcli module~leaputils->module~leapkinds module~leaputils->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

Used by

  • module~~leaplagrangian~~UsedByGraph module~leaplagrangian leapLagrangian module~immersed_boundaries_markers immersed_boundaries_markers module~immersed_boundaries_markers->module~leaplagrangian module~immersed_boundaries_solids immersed_boundaries_solids module~immersed_boundaries_solids->module~leaplagrangian module~immersed_boundaries_solids->module~immersed_boundaries_markers module~particles_point particles_point module~particles_point->module~leaplagrangian module~immersed_boundaries immersed_boundaries module~particles_point->module~immersed_boundaries module~particles_resolved particles_resolved module~particles_resolved->module~leaplagrangian module~particles_resolved->module~immersed_boundaries module~cdifs cdifs module~cdifs->module~particles_resolved module~collisions collisions module~cdifs->module~collisions module~cdifs->module~immersed_boundaries module~collisions->module~particles_point module~collisions->module~particles_resolved module~collisions->module~immersed_boundaries module~grans grans module~grans->module~particles_point module~grans->module~particles_resolved module~grans->module~collisions module~grans->module~immersed_boundaries module~immersed_boundaries->module~immersed_boundaries_markers module~immersed_boundaries->module~immersed_boundaries_solids module~nga_smod nga_smod module~nga_smod->module~particles_point 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 program~main main program~main->module~cdifs program~main->module~grans

Variables

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


Abstract Interfaces

abstract interface

  • public function kernel_1D(r) result(val)

    Arguments

    Type IntentOptional Attributes Name
    real(kind=wp), intent(in) :: r

    Distance from center

    Return Value real(kind=wp)

    Kernel value

abstract interface

  • private subroutine lagrangian_SetMPIDataTypeParams(this, types, lengths, displacement)

    Set up parameters used to create the MPI derived type

    Arguments

    Type IntentOptional 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

abstract interface

  • private subroutine lagrangian_SetObjectType(this)

    Set the type of the polymorphic sample

    Arguments

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

    A set of Lagrangian objects

abstract interface

  • private subroutine lagrangian_obj_assign(this, val)

    Deferred assignemnt ofan extended type value

    Arguments

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

    A Lagrangian object

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

    Value to be assigned

abstract interface

  • private subroutine lagrangian_read(this, iter, time, step)

    Read lagrangian objects from file in parallel

    Arguments

    Type IntentOptional 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

    integer, intent(in), optional :: step

    Optional step

abstract interface

  • private subroutine lagrangian_write(this, iter, time)

    Write lagrangian objects to file in parallel

    Arguments

    Type IntentOptional 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

abstract interface

  • private function locator(this, lagobj) result(rank)

    Returns the MPI rank that owns the lagrangian object

    Arguments

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

    A set of Lagrangian objects

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

    Lagrangian obj to locate

    Return Value integer

    rank that should own lagobj


Derived Types

type, public, abstract ::  lagrangian_obj

Base lagrangian object

Components

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

Type-Bound Procedures

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

type, public, abstract ::  lagrangian_set

Base structure for a collection of Lagrangian objects

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

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

logical, public :: is_initialized = .false.

Flag to determine whether this has been initialized

real(kind=wp), public :: l_filter

Half filter width

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

Name of the Lagrangian set

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

Type-Bound Procedures

procedure, public :: ApplyPeriodicity => lagrangian_set_ApplyPeriodicity
procedure, public :: Communicate => lagrangian_set_Communicate
procedure, public :: CreateMPIType => lagrangian_set_CreateMPIType
generic, public :: Finalize => lagrangian_set_Final
procedure, public :: FreeMPIType => lagrangian_set_FreeMPIType
procedure, public :: GetOwnerRankByBlock => lagrangian_set_GetOwnerRankByBlock
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(lagrangian_read), public, deferred :: Read
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(lagrangian_SetMPIDataTypeParams), public, deferred :: SetMPIDataTypeParams
procedure(lagrangian_SetObjectType), public, deferred :: SetObjectType
procedure, public :: SetOverwrite => lagrangian_set_SetOverwrite
procedure, public :: SetReadFileName => lagrangian_set_SetReadFileName
procedure, public :: SetWriteFileName => lagrangian_set_SetWriteFileName
procedure, public :: UpdateCount => lagrangian_set_UpdateCount
procedure, public :: UpdateGhostObjects => lagrangian_set_UpdateGhostObjects
procedure(lagrangian_write), public, deferred :: Write
procedure, public :: lagrangian_set_Final
procedure, public :: lagrangian_set_Init

Functions

public pure function g1_box(r) result(val)

Filtering kernel with support from -1.0 to 1.0 Box filter (step function)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

public pure function g1_cosine(r) result(val)

Filtering kernel with support from -1.0 to 1.0 Parabolic filter

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

public pure function g1_cosine2(r) result(val)

Filtering kernel with support from -1.0 to 1.0 Parabolic filter

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

public pure function g1_parabolic(r) result(val)

Filtering kernel with support from -1.0 to 1.0 Parabolic filter

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

public pure function g1_roma(r) result(val)

Filtering kernel with support from -1 to 1 Roma and Peskin's filter

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

public pure function g1_triangle(r) result(val)

Filtering kernel with support from -1.0 to 1.0 Triangular filter (linear interpolation)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

public pure function g1_triweight(r) result(val)

Filtering kernel with support from -1.0 to 1.0 Triweight filter

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

private pure function int_g1_box(r) result(val)

Integral of filtering kernel from 0 to r Box filter (step function) Here : r=x/l_f (non-dimensional position)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

private pure function int_g1_cosine(r) result(val)

Integral of filtering kernel from 0 to r Cosine filter Here : r=x/l_f (non-dimensional position)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

private pure function int_g1_cosine2(r) result(val)

Integral of filtering kernel from 0 to r Cosine filter Here : r=x/l_f (non-dimensional position)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

private pure function int_g1_parabolic(r) result(val)

Integral of filtering kernel from 0 to r Parabolic filter Here : r=x/l_f (non-dimensional position)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

private pure function int_g1_roma(r) result(val)

Integral of filtering kernel from 0 to r Roma and Peskin filter Here : r=x/l_f (non-dimensional position)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

private pure function int_g1_triangle(r) result(val)

Integral of filtering kernel from 0 to r Triangular filter (linear interpolation) Here : r=x/l_f (non-dimensional position)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

private pure function int_g1_triweight(r) result(val)

Integral of filtering kernel from 0 to r Triweight filter Here : r=x/l_f (non-dimensional position)

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: r

Return Value real(kind=wp)

private function lagrangian_obj_Interpolate(this, l_filter, slo, shi, block, g1in, f) result(inter)

Routine to interpolate a field f defined on an Eulerian stencil to the location of a lagrangian object

Arguments

Type IntentOptional 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

Return Value real(kind=WP)

private function lagrangian_obj_Locate(this, block) result(cell)

Locate a Lagrangian object on an external grid. Returns the location of the cell containing the object.

Arguments

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

A Lagrangian object

class(block_obj), intent(in) :: block

External block

Return Value integer, (3)

private function lagrangian_set_GetOwnerRankByBlock(this, lagobj) result(rank)

Returns the MPI rank that should own this lagrangian object based on which block it belongs to

Arguments

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

A set of Lagrangian objects

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

Lagrangian obj to locate

Return Value integer

rank that should own lagobj

private function lagrangian_set_GetReadFileName(this) result(name)

Return the base name of file to write

Arguments

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

A collection of Eulerian objects

Return Value character(len=str64)

Name of file

private function lagrangian_set_GetWriteFileName(this) result(name)

Return the base name of file to write

Arguments

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

A collection of Eulerian objects

Return Value character(len=str64)

Name of file


Subroutines

private subroutine lagrangian_obj_Extrapolate(this, l_filter, slo, shi, block, int_g1ex, bump)

Get a bump function centered on the lagrangian object

Arguments

Type IntentOptional 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

private subroutine lagrangian_set_ApplyPeriodicity(this)

Apply periodic boundary conditions

Arguments

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

Set of Lagrangian objects

private subroutine lagrangian_set_Communicate(this, GetOwnerRankOpt)

Communicate lagrangian objects across MPI_rank

Arguments

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

Set of Lagrangian objects

procedure(locator), optional :: GetOwnerRankOpt

MPI Rank locator for communications

private subroutine lagrangian_set_CreateMPIType(this)

Determines the size of the MPI derived type

Arguments

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

private subroutine lagrangian_set_Final(this)

Finalize the structure

Arguments

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

A set of Lagrangian objects

private subroutine lagrangian_set_FreeMPIType(this)

Frees the MPI derived type

Arguments

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

private subroutine lagrangian_set_Info(this)

Prints diagnostics information about the derived type

Arguments

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

Lagrangian array to dump

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

Initialize lagrangian objects related IO

Arguments

Type IntentOptional 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

private subroutine lagrangian_set_Localize(this)

Localize a Lagrangian object on the grid Returns the location of the closest collocated cell (staggering=0

Arguments

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

Lagrangian array to dump

private subroutine lagrangian_set_Recycle(this)

Sorting routine: stacks active lagrangian objects at the beginning of the array then resizes

Arguments

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

Lagrangian array to dump

private subroutine lagrangian_set_Resize(this, n)

Changes the size of an array of Lagrangian objects

Arguments

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

Lagrangian array to dump

integer, intent(in) :: n

New size

private subroutine lagrangian_set_SetFilterKernel(this, kernel_interp, kernel_extrap)

Reset the filter kerrnel Default is Triangle for interpolation and extrapolation

Arguments

Type IntentOptional 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

private subroutine lagrangian_set_SetFilterSize(this, l_filter)

Adjust the size of the filter

Arguments

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

Set of Lagrangian objects

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

Filter size

private subroutine lagrangian_set_SetOverwrite(this, overwrite)

Set file overwritting

Arguments

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

A collection of Eulerian objects

logical, intent(in) :: overwrite

Name of file

private subroutine lagrangian_set_SetReadFileName(this, name)

Set the base name of file to read

Arguments

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

A collection of Eulerian objects

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

Name of file

private subroutine lagrangian_set_SetWriteFileName(this, name)

Set the base name of file to write

Arguments

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

A collection of Eulerian objects

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

Name of file

private subroutine lagrangian_set_UpdateCount(this)

Updates the total count of Lagrangian objects

Arguments

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

Lagrangian array to dump

private subroutine lagrangian_set_UpdateGhostObjects(this, dist)

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)

Arguments

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

Set of Lagrangian objects

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

Distance from boundaries

private subroutine lagrangian_set_UpdateGhostObjectsDir(this, dist, idir)

Update ghost objects in the idir direction Copies objects that lie "dist"-away from the block's boundaries in idir-direction to neighboring MPI-ranks. Copied-objects get a negative ID to designate them as ghost objects

Arguments

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

Set of Lagrangian objects

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

Distance from boundaries

integer, intent(in) :: idir

Direction of communication