simple_plume_boundary Derived Type

type, public, extends(plume_boundary) :: simple_plume_boundary

A type with procedures for getting the boundary conditions of the plume model. Dirichlet boundary conditions are used at the grounding line. In order to approximate an outflow condition, the derivatives of velocity, temperature, and salinity are set to 0 at the end of the domain. Plume thickness is left free there, as only a single boundary condition is needed for it.


Inherits

type~~simple_plume_boundary~~InheritsGraph type~simple_plume_boundary simple_plume_boundary type~plume_boundary plume_boundary type~simple_plume_boundary->type~plume_boundary

Contents

Source Code


Components

TypeVisibility AttributesNameInitial
real(kind=r8), private :: thickness =0.0_r8

The thickness of the plume at the inflowing boundary

real(kind=r8), private, dimension(2):: velocity =1.0_r8

The velocity of the plume at the inflowing boundary

real(kind=r8), private :: salinity =0.0_r8

The salinity of the plume at the inflowing boundary

real(kind=r8), private :: temperature =0.0_r8

The tempreature of the plume at the inflowing boundary


Constructor

public interface simple_plume_boundary

  • private pure function constructor(thickness, velocity, temperature, salinity) result(this)

    Author
    Chris MacMackin
    Date
    November 2016

    Constructs a boundary condition object for an ice shelf based on the conditions used in Dallaston et al. (2015).

    Arguments

    Type IntentOptional AttributesName
    real(kind=r8), intent(in) :: thickness

    The water thickness at the inflowing plume boundary

    real(kind=r8), intent(in), dimension(2):: velocity

    The longitudinal water velocity at the inflowing plume boundary

    real(kind=r8), intent(in) :: temperature

    The water temperature at the inflowing plume boundary

    real(kind=r8), intent(in) :: salinity

    The water salinity at the inflowing plume boundary

    Return Value type(simple_plume_boundary)


Type-Bound Procedures

procedure, public :: set_time

Specifies the time at which to calculate the boundary conditions.

  • private subroutine set_time(this, time)

    Author
    Chris MacMackin
    Date
    May 2017

    Sets the time at which boundary conditions are to be calculated.

    Arguments

    Type IntentOptional AttributesName
    class(plume_boundary), intent(inout) :: this
    real(kind=r8), intent(in) :: time

procedure, public :: thickness_bound_info => simple_thickness_info

Indicates the type and depth of the thickness boundary at different locations.

  • private subroutine simple_thickness_info(this, location, bound_type, bound_depth)

    Author
    Chris MacMackin
    Date
    March 2017

    Indicates that the lower boundary is Dirichlet and the upper boundary is free.

    Arguments

    Type IntentOptional AttributesName
    class(simple_plume_boundary), intent(in) :: this
    integer, intent(in) :: location

    Which boundary information is to be provided for. The boundary will be the one normal to dimension of number abs(boundary). If the argument is negative, then the lower boundary is returned. If positive, then the upper boundary is returned.

    integer, intent(out) :: bound_type

    An integer representing what sort of boundary condition is used. The integer value corresponding to each boundary type is specified in the boundary_types_mod.

    integer, intent(out) :: bound_depth

    The number of layers of data-points needed to specify the boundary condition.

procedure, public :: velocity_bound_info => simple_info

Indicates the type and depth of the thickness boundary at different locations.

  • private subroutine simple_info(this, location, bound_type, bound_depth)

    Author
    Chris MacMackin
    Date
    March 2017

    Indicates that the lower boundary is Dirichlet and the upper boundary is Neumann.

    Arguments

    Type IntentOptional AttributesName
    class(simple_plume_boundary), intent(in) :: this
    integer, intent(in) :: location

    Which boundary information is to be provided for. The boundary will be the one normal to dimension of number abs(boundary). If the argument is negative, then the lower boundary is returned. If positive, then the upper boundary is returned.

    integer, intent(out) :: bound_type

    An integer representing what sort of boundary condition is used. The integer value corresponding to each boundary type is specified in the boundary_types_mod.

    integer, intent(out) :: bound_depth

    The number of layers of data-points needed to specify the boundary condition.

procedure, public :: temperature_bound_info => simple_info

Indicates the type and depth of the thickness boundary at different locations.

  • private subroutine simple_info(this, location, bound_type, bound_depth)

    Author
    Chris MacMackin
    Date
    March 2017

    Indicates that the lower boundary is Dirichlet and the upper boundary is Neumann.

    Arguments

    Type IntentOptional AttributesName
    class(simple_plume_boundary), intent(in) :: this
    integer, intent(in) :: location

    Which boundary information is to be provided for. The boundary will be the one normal to dimension of number abs(boundary). If the argument is negative, then the lower boundary is returned. If positive, then the upper boundary is returned.

    integer, intent(out) :: bound_type

    An integer representing what sort of boundary condition is used. The integer value corresponding to each boundary type is specified in the boundary_types_mod.

    integer, intent(out) :: bound_depth

    The number of layers of data-points needed to specify the boundary condition.

procedure, public :: salinity_bound_info => simple_info

Indicates the type and depth of the thickness boundary at different locations.

  • private subroutine simple_info(this, location, bound_type, bound_depth)

    Author
    Chris MacMackin
    Date
    March 2017

    Indicates that the lower boundary is Dirichlet and the upper boundary is Neumann.

    Arguments

    Type IntentOptional AttributesName
    class(simple_plume_boundary), intent(in) :: this
    integer, intent(in) :: location

    Which boundary information is to be provided for. The boundary will be the one normal to dimension of number abs(boundary). If the argument is negative, then the lower boundary is returned. If positive, then the upper boundary is returned.

    integer, intent(out) :: bound_type

    An integer representing what sort of boundary condition is used. The integer value corresponding to each boundary type is specified in the boundary_types_mod.

    integer, intent(out) :: bound_depth

    The number of layers of data-points needed to specify the boundary condition.

procedure, public :: thickness_bound => simple_thickness_bound

Produces a field containing the boundary conditions for plume thickness at the specified location.

  • private function simple_thickness_bound(this, location) result(bound)

    Author
    Chris MacMackin
    Date
    March 2017

    Returns a field containing the thickness boundary values for the specified boundary location.

    Arguments

    Type IntentOptional AttributesName
    class(simple_plume_boundary), intent(in) :: this
    integer, intent(in) :: location

    Which boundary information is to be provided for. The boundary will be the one normal to dimension of number abs(boundary). If the argument is negative, then the lower boundary is returned. If positive, then the upper boundary is returned.

    Return Value class(scalar_field), pointer

procedure, public :: velocity_bound => simple_velocity_bound

Produces a field containing the boundary conditions for plume velocity at the specified location.

  • private function simple_velocity_bound(this, location) result(bound)

    Author
    Chris MacMackin
    Date
    March 2017

    Returns a field containing the velocity boundary values for the specified boundary location.

    Arguments

    Type IntentOptional AttributesName
    class(simple_plume_boundary), intent(in) :: this
    integer, intent(in) :: location

    Which boundary information is to be provided for. The boundary will be the one normal to dimension of number abs(boundary). If the argument is negative, then the lower boundary is returned. If positive, then the upper boundary is returned.

    Return Value class(vector_field), pointer

procedure, public :: temperature_bound => simple_temperature_bound

Produces a field containing the boundary conditions for plume temperature at the specified location.

  • private function simple_temperature_bound(this, location) result(bound)

    Author
    Chris MacMackin
    Date
    March 2017

    Returns a field containing the temperature boundary values for the specified boundary location.

    Arguments

    Type IntentOptional AttributesName
    class(simple_plume_boundary), intent(in) :: this
    integer, intent(in) :: location

    Which boundary information is to be provided for. The boundary will be the one normal to dimension of number abs(boundary). If the argument is negative, then the lower boundary is returned. If positive, then the upper boundary is returned.

    Return Value class(scalar_field), pointer

procedure, public :: salinity_bound => simple_salinity_bound

Produces a field containing the boundary conditions for plume salinity at the specified location.

  • private function simple_salinity_bound(this, location) result(bound)

    Author
    Chris MacMackin
    Date
    March 2017

    Returns a field containing the salinity boundary values for the specified boundary location.

    Arguments

    Type IntentOptional AttributesName
    class(simple_plume_boundary), intent(in) :: this
    integer, intent(in) :: location

    Which boundary information is to be provided for. The boundary will be the one normal to dimension of number abs(boundary). If the argument is negative, then the lower boundary is returned. If positive, then the upper boundary is returned.

    Return Value class(scalar_field), pointer

Source Code

  type, extends(plume_boundary), public :: simple_plume_boundary
    !* Author: Chris MacMackin
    !  Date: March 2017
    !
    ! A type with procedures for getting the boundary conditions of
    ! the plume model. Dirichlet boundary conditions are used at the
    ! grounding line. In order to approximate an outflow condition,
    ! the derivatives of velocity, temperature, and salinity are set
    ! to 0 at the end of the domain. Plume thickness is left free
    ! there, as only a single boundary condition is needed for it.
    !
    private
    real(r8) :: thickness = 0.0_r8
      !! The thickness of the plume at the inflowing boundary
    real(r8), dimension(2) :: velocity = 1.0_r8
      !! The velocity of the plume at the inflowing boundary
    real(r8) :: salinity = 0.0_r8
      !! The salinity of the plume at the inflowing boundary
    real(r8) :: temperature = 0.0_r8
      !! The tempreature of the plume at the inflowing boundary
  contains
    procedure :: thickness_bound_info => simple_thickness_info
      !! Indicates the type and depth of the thickness boundary at
      !! different locations.
    procedure :: velocity_bound_info => simple_info
      !! Indicates the type and depth of the thickness boundary at
      !! different locations.
    procedure :: temperature_bound_info => simple_info
      !! Indicates the type and depth of the thickness boundary at
      !! different locations.
    procedure :: salinity_bound_info => simple_info
      !! Indicates the type and depth of the thickness boundary at
      !! different locations.
    procedure :: thickness_bound => simple_thickness_bound
      !! Produces a field containing the boundary conditions for plume
      !! thickness at the specified location.
    procedure :: velocity_bound => simple_velocity_bound
      !! Produces a field containing the boundary conditions for plume
      !! velocity at the specified location.
    procedure :: temperature_bound => simple_temperature_bound
      !! Produces a field containing the boundary conditions for plume
      !! temperature at the specified location.
    procedure :: salinity_bound => simple_salinity_bound
      !! Produces a field containing the boundary conditions for plume
      !! salinity at the specified location.
  end type simple_plume_boundary