BoundedExtDerivation Derived Type

type, public, extends(Derivation) :: BoundedExtDerivation

Calculates extrapolated value of a fluid quantity at a boundary cell edge, optionally applying a lower and/or upper bound to the extrapolated value. Accepts scalar variables for lower/upper bounds. Expects 1-3 variables, The first expected variable name is the interpolated variable. The second is the upper bound if no lower bound variable is expected, otherwise it is the lower bound. The third is the upper bound (if expected). Bounds are all expected to have positive values, and this will be ensured by taking their absolute values. If applied to the left boundary, will apply -abs(lowerBound) as upper bound and -abs(upperBound) as lower bound, i.e. the bounds are reflected around 0.


Components

Type Visibility Attributes Name Initial
logical, public :: userDefined = .false.

True only if user explicitly sets it to true

real(kind=rk), private, allocatable :: fixedLowerBound

Optional fixed lower bound value. Ignored if lower bound var expected.

real(kind=rk), private, allocatable :: fixedUpperBound

Optional fixed upper bound value. Ignored if upper bound var expected.

logical, private :: expectLowerBoundVar

True if lower bound variable is expected

logical, private :: expectUpperBoundVar

True if upper bound variable is expected

class(Extrapolation), public, allocatable :: extrapolationObj

Extrapolation object used to calculate the extrapolated values


Type-Bound Procedures

procedure, public :: isDefined => isDefinedObject

  • interface

    private pure module function isDefinedObject(this) result(defined)

    Getter for userDefined

    Arguments

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

    Return Value logical

procedure, public :: makeDefined => makeDefinedObject

  • interface

    private pure module subroutine makeDefinedObject(this)

    Set userDefined to .true.

    Arguments

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

procedure, public :: makeUndefined => makeUndefinedObject

  • interface

    private pure module subroutine makeUndefinedObject(this)

    Set userDefined to .false.

    Arguments

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

procedure, public :: init => initBExt

  • interface

    private module subroutine initBExt(this, partitionObj, procRank, extrapolationObj, fixedLowerBound, fixedUpperBound, expectLowerBoundVar, expectUpperBoundVar)

    Initialize bounded extrapolation derivation object

    Arguments

    Type IntentOptional Attributes Name
    class(BoundedExtDerivation), intent(inout) :: this
    type(Partition), intent(in) :: partitionObj

    Partition object used to determine local processor grid chunk

    integer(kind=ik), intent(in) :: procRank

    Current processor rank

    class(Extrapolation), intent(in) :: extrapolationObj

    Extrapolation object used to calculate the extrapolated values

    real(kind=rk), intent(in), optional :: fixedLowerBound

    Optional fixed lower bound value

    real(kind=rk), intent(in), optional :: fixedUpperBound

    Optional fixed upper bound value

    logical, intent(in), optional :: expectLowerBoundVar

    True if lower bound variable is expected. Defaults to false.

    logical, intent(in), optional :: expectUpperBoundVar

    True if lower bound variable is expected. Defaults to false.

procedure, public :: calculate => calculateBExt

  • interface

    private module function calculateBExt(this, inputArray, indices) result(output)

    Arguments

    Type IntentOptional Attributes Name
    class(BoundedExtDerivation), intent(inout) :: this
    type(RealArray), intent(in), dimension(:) :: inputArray
    integer(kind=ik), intent(in), dimension(:) :: indices

    Return Value real(kind=rk), allocatable, dimension(:)