leapBC Module

Module that defines objects and methods to manage boundary conditions.

To setup boundary conditions in LEAP, users should define regions first, then specify the type of boundary condition to apply for each variable that admits a boundary condition on this region.


Uses

  • module~~leapbc~~UsesGraph module~leapbc leapBC iso_fortran_env iso_fortran_env module~leapbc->iso_fortran_env module~leapblock leapBlock module~leapbc->module~leapblock module~leapeulerian leapEulerian module~leapbc->module~leapeulerian module~leapio leapIO module~leapbc->module~leapio module~leapkinds leapKinds module~leapbc->module~leapkinds module~leapparallel leapParallel module~leapbc->module~leapparallel module~leaputils leapUtils module~leapbc->module~leaputils mpi_f08 mpi_f08 module~leapbc->mpi_f08 module~leapblock->iso_fortran_env module~leapblock->module~leapkinds module~leapblock->module~leapparallel module~leapblock->mpi_f08 module~leapio_hdf5 leapIO_hdf5 module~leapblock->module~leapio_hdf5 module~leapeulerian->iso_fortran_env module~leapeulerian->module~leapblock module~leapeulerian->module~leapio module~leapeulerian->module~leapkinds module~leapeulerian->module~leapparallel 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~leapparallel->iso_fortran_env module~leapparallel->module~leapkinds module~leapparallel->mpi_f08 module~leaputils->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

Used by

  • module~~leapbc~~UsedByGraph module~leapbc leapBC module~cdifs cdifs module~cdifs->module~leapbc module~leapdiffop leapDiffOp module~cdifs->module~leapdiffop module~particles_resolved particles_resolved module~cdifs->module~particles_resolved module~collisions collisions module~cdifs->module~collisions module~immersed_boundaries immersed_boundaries module~cdifs->module~immersed_boundaries module~grans grans module~grans->module~leapbc module~grans->module~leapdiffop module~grans->module~particles_resolved module~grans->module~collisions module~grans->module~immersed_boundaries module~particles_point particles_point module~grans->module~particles_point module~immersed_boundaries_markers immersed_boundaries_markers module~immersed_boundaries_markers->module~leapbc module~immersed_boundaries_markers->module~leapdiffop module~leapdiffop->module~leapbc module~particles_resolved->module~leapbc module~particles_resolved->module~leapdiffop module~particles_resolved->module~immersed_boundaries proc~cdifs_obj_preparesolverbodyforce cdifs_obj_PrepareSolverBodyforce proc~cdifs_obj_preparesolverbodyforce->module~leapbc proc~cdifs_obj_preparesolveroperators cdifs_obj_PrepareSolverOperators proc~cdifs_obj_preparesolveroperators->module~leapbc proc~cdifs_obj_preparesolveroperatorsdiv cdifs_obj_PrepareSolverOperatorsDIV proc~cdifs_obj_preparesolveroperatorsdiv->module~leapbc proc~cdifs_obj_preparesolveroperatorspgrad cdifs_obj_PrepareSolverOperatorsPGRAD proc~cdifs_obj_preparesolveroperatorspgrad->module~leapbc proc~cdifs_obj_preparesolveroperatorsvlap cdifs_obj_PrepareSolverOperatorsVLAP proc~cdifs_obj_preparesolveroperatorsvlap->module~leapbc 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~collisions->module~particles_resolved module~collisions->module~immersed_boundaries module~collisions->module~particles_point 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~immersed_boundaries->module~immersed_boundaries_markers module~immersed_boundaries_solids immersed_boundaries_solids module~immersed_boundaries->module~immersed_boundaries_solids module~immersed_boundaries_solids->module~immersed_boundaries_markers module~particles_point->module~leapdiffop module~particles_point->module~immersed_boundaries proc~grans_obj_preparesolveroperators grans_obj_PrepareSolverOperators proc~grans_obj_preparesolveroperators->module~leapdiffop proc~marker_set_computesolidvolfrac marker_set%marker_set_ComputeSolidVolFrac proc~marker_set_computesolidvolfrac->module~leapdiffop program~main main program~main->module~cdifs program~main->module~grans

Variables

Type Visibility Attributes Name Initial
integer, public, parameter :: BC_DIRICHLET = 4
integer, public, parameter :: BC_INFLOW = 2
integer, public, parameter :: BC_LEFT = 0
integer, public, parameter :: BC_NEUMANN = 5
integer, public, parameter :: BC_OUTFLOW = 3
integer, public, parameter :: BC_RIGHT = 1
integer, public, parameter :: BC_SYMMETRY = 7
integer, public, parameter :: BC_WALL = 1
integer, private, parameter :: BC_SET_HTBL_SIZE = 20
integer, private, parameter :: BC_UNDEFINED = 0

Derived Types

type, public ::  bc_set

Collection of regions

Components

Type Visibility Attributes Name Initial
type(block_obj), public, pointer :: block => null()

Associated block structure

integer, public :: count = 0

Total number of regions across all MPI ranks

type(hdf5_obj), public, pointer :: hdf5 => null()

HDF5 object for IO

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

Associated parallel structure

type(region_obj), public, allocatable :: region(:)

Array of regions

type(hashtbl_obj), private :: tbl

Hash table

Type-Bound Procedures

procedure, public :: Add => bc_set_Add
procedure, public :: BuildMask => bc_set_BuildMask
procedure, public :: CheckBCExists => bc_set_CheckBCExists
procedure, public, nopass :: CheckBounds => bc_set_CheckBounds
procedure, public :: Expand => bc_set_Expand
procedure, public :: Finalize => bc_set_Final
procedure, public :: GetBCPointer => bc_set_GetBCPointer
procedure, public :: GetBCType => bc_set_GetBCType
procedure, public :: GetExtents => bc_set_GetExtents
procedure, public :: GetRegionIndex => bc_set_GetRegionIndex
procedure, public :: GetSideDirByNormal => bc_set_GetSideDirByNormal
procedure, public :: GetSideDirByRegion => bc_set_GetSideDirByRegion
procedure, public :: Info => bc_set_Info
procedure, public :: Initialize => bc_set_Init
procedure, public :: Read => bc_set_Read
procedure, public :: SetBC => bc_set_SetBC
generic, public :: UpdateBoundary => bc_set_UpdateBoundaryScalar, bc_set_UpdateBoundaryVector
procedure, public :: UpdateBoundaryDirichlet => bc_set_UpdateBoundaryDirichlet
procedure, public :: UpdateBoundaryNeumann => bc_set_UpdateBoundaryNeumann
procedure, public :: UpdateBoundarySymmetryMinus => bc_set_UpdateBoundarySymmetryMinus
procedure, public :: UpdateBoundarySymmetryPlus => bc_set_UpdateBoundarySymmetryPlus
procedure, public :: UpdateExtents => bc_set_UpdateExtents
procedure, public :: Write => bc_set_Write
procedure, private :: bc_set_UpdateBoundaryScalar
procedure, private :: bc_set_UpdateBoundaryVector

type, public ::  extent_obj

Extents of a region

Components

Type Visibility Attributes Name Initial
integer, public :: hi(3) = -1

High bound

integer, public :: lo(3) = -1

Low bound

type, private ::  bc_obj

Specifies boundary conditions for a given variable

Components

Type Visibility Attributes Name Initial
character(len=str8), public :: name

Name of variable

integer, public :: type = BC_UNDEFINED

Type of BC

real(kind=wp), public, pointer :: val(:,:,:) => null()

Values on the parent region

type, private ::  region_obj

Defines regions where boundary conditions are applied.

Components

Type Visibility Attributes Name Initial
type(bc_obj), public, allocatable :: BC(:)

Variables on this region

integer, public :: count = 0

Count of variables defined on this region

integer, public :: dir

Normal direction (=1,2,3)

integer, public :: hi(3) = -100

Grid hi bound

integer, public :: lo(3) = -100

Grid low bound

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

Name of this region

type(block_obj), public :: region

Block/grid for this region

integer, public :: side

Side (BC_LEFT or BC_RIGHT)

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

Position of upper right corner

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

Position of lower left corner

type(hashtbl_obj), private :: tbl

Hash table

Type-Bound Procedures

procedure, public :: Add => region_obj_Add
procedure, public :: Expand => region_obj_Expand
procedure, public :: Finalize => region_obj_Final
procedure, public :: GetBCIndex => region_obj_GetBCIndex
procedure, public :: Initialize => region_obj_Init

Functions

private pure function bc_set_CheckBCExists(this, region, var) result(val)

Checks whether there is BC for a given variable on a given region.

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

Region name

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

Variable name

Return Value logical

Result

private pure function bc_set_CheckBounds(xlo, xhi) result(val)

Makes sure bounds represent a plane.

Arguments

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

Lower left corner

real(kind=wp), intent(in) :: xhi(3)

Upper right corner

Return Value logical

True, if bounds represent a plane

private pure function bc_set_GetBCType(this, region, var) result(val)

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

Region name

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

Variable name

Return Value integer

Result

private pure function bc_set_GetExtents(this, name) result(extents)

Returns the extents (lo and hi bounds) of a region.

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

Region name

Return Value type(extent_obj)

Result

private pure function bc_set_GetRegionIndex(this, name) result(val)

Returns the index of a region, or -1 if not found.

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

Region name

Return Value integer

Result

private pure function region_obj_GetBCIndex(this, name) result(val)

Returns index of a variable in this region, or -1 if not found.

Arguments

Type IntentOptional Attributes Name
class(region_obj), intent(in) :: this

A boundary region object

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

Name of region

Return Value integer

Result


Subroutines

private impure subroutine bc_set_Add(this, name, xlo, xhi, normal)

Adds a new region to bc_set.

Arguments

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

Boundary conditions utility

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

Name of region

real(kind=wp), intent(in) :: xlo(3)

Position of lower left corner

real(kind=wp), intent(in) :: xhi(3)

Position of upper right corner

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

Oriented normal

private impure subroutine bc_set_BuildMask(this, name, mask)

Builds an integer field, where cells=0 denotes interior cells, and cells=1 denotes boundary cells for input variable.

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

Name of the variable

type(eulerian_obj_i), intent(inout) :: mask

Mask for this variable

private pure subroutine bc_set_Expand(this)

Resizes array to accomodate a new element.

Arguments

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

Boundary conditions utility

private pure subroutine bc_set_Final(this)

Finalizes bc_set and frees memory.

Arguments

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

Boundary conditions utility

private impure subroutine bc_set_GetBCPointer(this, region, var, val)

Fetches a pointer to the val array describing the Dirichlet or Neumann BC of a given variable on a given region.

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

Region name

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

Variable name

real(kind=wp), intent(inout), pointer :: val(:,:,:)

Pointer

private impure subroutine bc_set_GetSideDirByNormal(this, normal, side, dir)

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

String denoting the normal direction

integer, intent(out) :: side

Side (=BC_LEFT,BC_RIGHT)

integer, intent(out) :: dir

Direction (=1,2,3,)

private pure subroutine bc_set_GetSideDirByRegion(this, region, side, dir)

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

Region name

integer, intent(out) :: side

Side (=BC_LEFT,BC_RIGHT)

integer, intent(out) :: dir

Direction (=1,2,3,)

private impure subroutine bc_set_Info(this)

Prints to stdout information on bc_set, for debugging.

Arguments

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

Boundary conditions utility

private impure subroutine bc_set_Init(this, block, parallel)

Initializes bc_set.

Arguments

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

Boundary conditions utility

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

A block object

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

Parallel structure to link with

private impure subroutine bc_set_Read(this, iter, time, name)

Reads boundary conditions from file.

Arguments

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

Boundary conditions utility

integer, intent(out) :: iter

Iteration read from file

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

Time read from file

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

Name of file to write

private impure subroutine bc_set_SetBC(this, region, type, var)

Sets boundary condition of a given type, for a given variable on a given region.

Arguments

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

Boundary conditions utility

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

Region name

integer, intent(in) :: type

BC type

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

Variable name

private impure subroutine bc_set_UpdateBoundaryDirichlet(this, region, var)

Updates ghost cells to enforce Dirichlet BC

Read more…

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

Region name

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

Eulerian variable

private impure subroutine bc_set_UpdateBoundaryNeumann(this, region, var)

Updates ghostcells to enforce Neumann BC.

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

Region name

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

Eulerian variable

private impure subroutine bc_set_UpdateBoundaryScalar(this, var)

Imposes boundary conditions for a scalar variable.

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

Eulerian variable

private impure subroutine bc_set_UpdateBoundarySymmetryMinus(this, region, var)

Updates ghostcells to enforce symmetry BC. Minus version.

Read more…

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

Region name

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

Eulerian variable

private impure subroutine bc_set_UpdateBoundarySymmetryPlus(this, region, var)

Updates ghostcells to enforce symmetry BC. Plus version.

Read more…

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

Region name

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

Eulerian variable

private impure subroutine bc_set_UpdateBoundaryVector(this, var)

Imposes boundary conditions for a vector field. For symmetry BC, the sign depends is 'plus' or 'minus' depending on the alignment between the vector component and the symmetry direction.

Arguments

Type IntentOptional Attributes Name
class(bc_set), intent(in) :: this

Boundary conditions utility

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

Eulerian variable

private pure subroutine bc_set_UpdateExtents(this, name)

Finds the intersection between block owned by this MPI rank, and the plane defining the region.

Arguments

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

Boundary conditions utility

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

Region name

private impure subroutine bc_set_Write(this, iter, time, name)

Writes bc_set to disk using HDF5. The file structure follows this convention:

Read more…

Arguments

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

Boundary conditions utility

integer, intent(in) :: iter

Iteration at write

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

Time at write

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

Name of file to write

private pure subroutine region_obj_Add(this, name, type, extents)

Adds a new variable to region.

Arguments

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

A boundary region object

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

Region name

integer, intent(in) :: type

Type of boundary condition

type(extent_obj), intent(in) :: extents

Region extents

private pure subroutine region_obj_Expand(this)

Resizes array to accomodate a new element.

Arguments

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

A boundary region object

private pure subroutine region_obj_Final(this)

Arguments

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

A boundary region object

private pure subroutine region_obj_Init(this, name, xlo, xhi, dir, side)

Initializes a region

Arguments

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

A boundary region object

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

Name of region

real(kind=wp), intent(in) :: xlo(3)

Position of low left corner

real(kind=wp), intent(in) :: xhi(3)

Position of high right corner

integer, intent(in) :: dir

Direction of normal

integer, intent(in) :: side

Side (left or right) of the cell