bc_set Derived Type

type, public :: bc_set

Collection of regions


Inherits

type~~bc_set~~InheritsGraph type~bc_set bc_set type~block_obj block_obj type~bc_set->type~block_obj block type~hashtbl_obj hashtbl_obj type~bc_set->type~hashtbl_obj tbl type~parallel_obj parallel_obj type~bc_set->type~parallel_obj parallel type~region_obj region_obj type~bc_set->type~region_obj region type~block_obj->type~parallel_obj parallel MPI_Datatype MPI_Datatype type~block_obj->MPI_Datatype gc_slab_r, gc_slab_i type~axis_obj axis_obj type~block_obj->type~axis_obj axis, axis_partition type~sllist_obj sllist_obj type~hashtbl_obj->type~sllist_obj vec type~parallel_obj->MPI_Datatype REAL_SP, REAL_DP, REAL_WP, COMPLEX_SP, COMPLEX_DP, COMPLEX_WP, INTEGER, INT8, LOGICAL MPI_Info MPI_Info type~parallel_obj->MPI_Info mpi_info type~communicators communicators type~parallel_obj->type~communicators comm type~patch patch type~parallel_obj->type~patch rank type~region_obj->type~block_obj region type~region_obj->type~hashtbl_obj tbl type~bc_obj bc_obj type~region_obj->type~bc_obj BC MPI_Comm MPI_Comm type~communicators->MPI_Comm w, g type~sllist_obj->type~sllist_obj child

Inherited by

type~~bc_set~~InheritedByGraph type~bc_set bc_set type~cdifs_obj cdifs_obj type~cdifs_obj->type~bc_set bcs

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(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

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

    Add a new region to bc_set

    Arguments

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

    Boundary conditions

    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

procedure, public :: BuildMask => bc_set_BuildMask

  • private impure subroutine bc_set_BuildMask(this, name, mask)

    Build 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

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

    Name of the variable

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

    Mask for this variable

procedure, public :: CheckBCExists => bc_set_CheckBCExists

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

    Check 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

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

    Region name

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

    Variable name

    Return Value logical

procedure, public, nopass :: CheckBounds => bc_set_CheckBounds

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

    Make 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

procedure, public :: Expand => bc_set_Expand

  • private pure subroutine bc_set_Expand(this)

    Resize array to accomodate a new element

    Arguments

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

    Boundary conditions

procedure, public :: Finalize => bc_set_Final

  • private pure subroutine bc_set_Final(this)

    Finalizes bc_set

    Arguments

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

    Boundary conditions

procedure, public :: GetBCPointer => bc_set_GetBCPointer

  • 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

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

    Region name

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

    Variable name

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

    Pointer

procedure, public :: GetBCType => bc_set_GetBCType

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

    Arguments

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

    Boundary conditions

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

    Region name

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

    Variable name

    Return Value integer

procedure, public :: GetExtents => bc_set_GetExtents

  • 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

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

    Region name

    Return Value type(extent_obj)

procedure, public :: GetRegionIndex => bc_set_GetRegionIndex

  • 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

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

    Region name

    Return Value integer

procedure, public :: GetSideDirByNormal => bc_set_GetSideDirByNormal

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

    Arguments

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

    Boundary conditions

    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,)

procedure, public :: GetSideDirByRegion => bc_set_GetSideDirByRegion

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

    Arguments

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

    Boundary conditions

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

    Region name

    integer, intent(out) :: side

    Side (=BC_LEFT,BC_RIGHT)

    integer, intent(out) :: dir

    Direction (=1,2,3,)

procedure, public :: Info => bc_set_Info

  • private impure subroutine bc_set_Info(this)

    Print to stdout information on bc_set, for debugging

    Arguments

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

    Boundary conditions

procedure, public :: Initialize => bc_set_Init

  • 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

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

    A block object

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

    parallel structure from main program

procedure, public :: Read => bc_set_Read

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

    Read boundary conditions from file

    Arguments

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

    Boundary conditions

    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 read

procedure, public :: SetBC => bc_set_SetBC

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

    Set 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

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

    Region name

    integer, intent(in) :: type

    BC type

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

    Variable name

procedure, public :: UpdateBoundary => bc_set_UpdateBoundary

  • private impure subroutine bc_set_UpdateBoundary(this, var)

    Imposes boundary conditions for a given variable.

    Arguments

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

    Boundary conditions

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

    Eulerian variable

procedure, public :: UpdateBoundaryDirichlet => bc_set_UpdateBoundaryDirichlet

  • private impure subroutine bc_set_UpdateBoundaryDirichlet(this, region, var)

    Update ghostboundaries to enforce Dirichlet BC

    Arguments

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

    Boundary conditions

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

    Region name

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

    Eulerian variable

procedure, public :: UpdateBoundaryNeumann => bc_set_UpdateBoundaryNeumann

  • private impure subroutine bc_set_UpdateBoundaryNeumann(this, region, var)

    Update ghostboundaries to enforce Neumann BC

    Arguments

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

    Boundary conditions

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

    Region name

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

    Eulerian variable

procedure, public :: UpdateExtents => bc_set_UpdateExtents

  • 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

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

    Region name

procedure, public :: Write => bc_set_Write

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

    Write bc_set to disk using HDF5. The file structure follows this convention: / (root) !-- Time !-- Iter !-- Region 1 !-- xlo !-- xhi !-- dir !-- side |-- Var 1 |-- Type |-- Values(:,:,:) !-- Var 2 . . !-- Region 2 . .

    Arguments

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

    Boundary conditions

    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