dallaston2015_seasonal_boundary Derived Type

type, public, extends(plume_boundary) :: dallaston2015_seasonal_boundary

A type with procedures for getting the boundary conditions of the plume model. It represents the case where subglacial discharge is varying in time, altering the boundary conditions for velocity and salinity using scalings similar to those in Dallaston et al. (2015). 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~~dallaston2015_seasonal_boundary~~InheritsGraph type~dallaston2015_seasonal_boundary dallaston2015_seasonal_boundary type~plume_boundary plume_boundary type~dallaston2015_seasonal_boundary->type~plume_boundary

Contents


Components

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

The thickness of the plume at the inflowing boundary

real(kind=r8), private :: frequency =1.0_r8

The angular frequency of the oscillations in discharge

real(kind=r8), private :: amplitude =1.0_r8

The amplitude of the oscillations in discharge

real(kind=r8), private :: mean =1.0_r8

The time-average of the discharge, about which it oscillates

real(kind=r8), private :: discharge =1.0_r8

The current discharge value

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

The tempreature of the plume at the inflowing boundary


Constructor

  • private pure function constructor(thickness, frequency, amplitude, mean, temperature) 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), but with seasonal variations in subglacial discharge.

    Arguments

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

    The plume thickness at the inflowing plume boundary, defaults to 0.1

    real(kind=r8), intent(in), optional :: frequency

    The angular frequency of the oscillations in discharge, defaults to 1.0

    real(kind=r8), intent(in), optional :: amplitude

    The amplitude of the oscillations in discharge, defaults to 1.0

    real(kind=r8), intent(in), optional :: mean

    The time-average of the discharge, about which it oscillates, defaulting to 1.0

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

    The water temperature at the inflowing plume boundary, defaults to 0.0

    Return Value type(dallaston2015_seasonal_boundary)


Type-Bound Procedures

procedure, public :: thickness_bound_info => seasonal_thickness_info

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

  • private subroutine seasonal_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(dallaston2015_seasonal_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 => seasonal_info

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

  • private subroutine seasonal_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(dallaston2015_seasonal_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 => seasonal_info

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

  • private subroutine seasonal_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(dallaston2015_seasonal_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 => seasonal_info

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

  • private subroutine seasonal_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(dallaston2015_seasonal_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 => seasonal_thickness_bound

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

  • private function seasonal_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(dallaston2015_seasonal_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 => seasonal_velocity_bound

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

  • private function seasonal_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(dallaston2015_seasonal_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 => seasonal_temperature_bound

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

  • private function seasonal_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(dallaston2015_seasonal_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 => seasonal_salinity_bound

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

  • private function seasonal_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(dallaston2015_seasonal_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 :: set_time => seasonal_set_time

Specifies the time at which to calculate the boundary conditions.

  • private subroutine seasonal_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(dallaston2015_seasonal_boundary), intent(inout) :: this
    real(kind=r8), intent(in) :: time

Source Code

  type, extends(plume_boundary), public :: dallaston2015_seasonal_boundary
    !* Author: Chris MacMackin
    !  Date: May 2017
    !
    ! A type with procedures for getting the boundary conditions of
    ! the plume model. It represents the case where subglacial
    ! discharge is varying in time, altering the boundary conditions
    ! for velocity and salinity using scalings similar to those in
    ! Dallaston et al. (2015). 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.1_r8
      !! The thickness of the plume at the inflowing boundary
    real(r8) :: frequency = 1.0_r8
      !! The angular frequency of the oscillations in discharge
    real(r8) :: amplitude = 1.0_r8
      !! The amplitude of the oscillations in discharge
    real(r8) :: mean = 1.0_r8
      !! The time-average of the discharge, about which it oscillates
    real(r8) :: discharge = 1.0_r8
      !! The current discharge value
    real(r8) :: temperature = 0.0_r8
      !! The tempreature of the plume at the inflowing boundary
  contains
    procedure :: thickness_bound_info => seasonal_thickness_info
      !! Indicates the type and depth of the thickness boundary at
      !! different locations.
    procedure :: velocity_bound_info => seasonal_info
      !! Indicates the type and depth of the thickness boundary at
      !! different locations.
    procedure :: temperature_bound_info => seasonal_info
      !! Indicates the type and depth of the thickness boundary at
      !! different locations.
    procedure :: salinity_bound_info => seasonal_info
      !! Indicates the type and depth of the thickness boundary at
      !! different locations.
    procedure :: thickness_bound => seasonal_thickness_bound
      !! Produces a field containing the boundary conditions for plume
      !! thickness at the specified location.
    procedure :: velocity_bound => seasonal_velocity_bound
      !! Produces a field containing the boundary conditions for plume
      !! velocity at the specified location.
    procedure :: temperature_bound => seasonal_temperature_bound
      !! Produces a field containing the boundary conditions for plume
      !! temperature at the specified location.
    procedure :: salinity_bound => seasonal_salinity_bound
      !! Produces a field containing the boundary conditions for plume
      !! salinity at the specified location.
    procedure :: set_time => seasonal_set_time
      !! Specifies the time at which to calculate the boundary
      !! conditions.
  end type dallaston2015_seasonal_boundary