glacier_boundary Derived Type

type, public :: glacier_boundary

A type in which procedures for getting the boundary conditions of glaciers are to be specified. The descendent types can contain whatever data is needed to compute the result. It provides the routine boundary_residuals to return an array with the residuals representing deviation from satisfying the conditions. This can then be appended to a glacier's residual array.

When specifying boundary conditions in this way, it becomes necessary not to include the residual of the plume data at some location(s). Typically this would be adjacent to the boundaries being prescribed. In order to accomplish this, routines are provided which return arrays indicating at which boundaries data should be omitted and how much. These should be passed as arguments for the field methods to get and set the field's raw data.

This class effectively provides free boundary conditions. It's type-bound procedures should be overridden to provide case-specific conditions.


Inherited by

type~~glacier_boundary~~InheritedByGraph type~glacier_boundary glacier_boundary type~seasonal_glacier_boundary seasonal_glacier_boundary type~seasonal_glacier_boundary->type~glacier_boundary type~dallaston2015_glacier_boundary dallaston2015_glacier_boundary type~dallaston2015_glacier_boundary->type~glacier_boundary type~ice_shelf ice_shelf type~ice_shelf->type~glacier_boundary boundaries

Contents

Source Code


Type-Bound Procedures

procedure, public :: thickness_lower_bound => bound_array

Returns a 1D array which should be passed as the exclude_lower_bound/provide_lower_bound argument when getting or setting the raw representation of the thickness field.

  • private pure function bound_array(this)

    Author
    Chris MacMackin
    Date
    September 2016

    Default implementation of the method getting lower and upper boundary information, which is then passed to the methods for getting and setting raw representations of fields. It returns a 1D array of length 2, indicating free boundaries (the raw data should represent all cells contained in the field, not excluding any near the boundaries).

    Arguments

    Type IntentOptional AttributesName
    class(glacier_boundary), intent(in) :: this

    Return Value integer, dimension(2)

procedure, public :: thickness_upper_bound => bound_array

Returns a 1D array which should be passed as the exclude_upper_bound/provide_upper_bound argument when getting or setting the raw representation of the thickness field.

  • private pure function bound_array(this)

    Author
    Chris MacMackin
    Date
    September 2016

    Default implementation of the method getting lower and upper boundary information, which is then passed to the methods for getting and setting raw representations of fields. It returns a 1D array of length 2, indicating free boundaries (the raw data should represent all cells contained in the field, not excluding any near the boundaries).

    Arguments

    Type IntentOptional AttributesName
    class(glacier_boundary), intent(in) :: this

    Return Value integer, dimension(2)

procedure, public :: velocity_lower_bound => bound_array

Returns a 1D array which should be passed as the exclude_lower_bound/provide_lower_bound argument when getting or setting the raw representation of the velocity field.

  • private pure function bound_array(this)

    Author
    Chris MacMackin
    Date
    September 2016

    Default implementation of the method getting lower and upper boundary information, which is then passed to the methods for getting and setting raw representations of fields. It returns a 1D array of length 2, indicating free boundaries (the raw data should represent all cells contained in the field, not excluding any near the boundaries).

    Arguments

    Type IntentOptional AttributesName
    class(glacier_boundary), intent(in) :: this

    Return Value integer, dimension(2)

procedure, public :: velocity_upper_bound => bound_array

Returns a 1D array which should be passed as the exclude_upper_bound/provide_upper_bound argument when getting or setting the raw representation of the velocity field.

  • private pure function bound_array(this)

    Author
    Chris MacMackin
    Date
    September 2016

    Default implementation of the method getting lower and upper boundary information, which is then passed to the methods for getting and setting raw representations of fields. It returns a 1D array of length 2, indicating free boundaries (the raw data should represent all cells contained in the field, not excluding any near the boundaries).

    Arguments

    Type IntentOptional AttributesName
    class(glacier_boundary), intent(in) :: this

    Return Value integer, dimension(2)

procedure, public :: thickness_lower_type => bound_type

Returns an array indicating what type of boundary conditions apply for thickness at the lower boundary of each dimension. The types are specified using the parameters in [boundary_types_mod].

  • private pure function bound_type(this)

    Author
    Chris MacMackin
    Date
    January 2017

    Default implementation of the methods getting the boundary types for a glacier. It returns an array which indicates free boundaries.

    Arguments

    Type IntentOptional AttributesName
    class(glacier_boundary), intent(in) :: this

    Return Value integer, dimension(:), allocatable

procedure, public :: thickness_upper_type => bound_type

Returns an array indicating what type of boundary conditions apply for thickness at the upper boundary of each dimension. The types are specified using the parameters in [boundary_types_mod].

  • private pure function bound_type(this)

    Author
    Chris MacMackin
    Date
    January 2017

    Default implementation of the methods getting the boundary types for a glacier. It returns an array which indicates free boundaries.

    Arguments

    Type IntentOptional AttributesName
    class(glacier_boundary), intent(in) :: this

    Return Value integer, dimension(:), allocatable

procedure, public :: velocity_lower_type => bound_type

Returns an array indicating what type of boundary conditions apply for velocity at the lower boundary of each dimension. The types are specified using the parameters in [boundary_types_mod].

  • private pure function bound_type(this)

    Author
    Chris MacMackin
    Date
    January 2017

    Default implementation of the methods getting the boundary types for a glacier. It returns an array which indicates free boundaries.

    Arguments

    Type IntentOptional AttributesName
    class(glacier_boundary), intent(in) :: this

    Return Value integer, dimension(:), allocatable

procedure, public :: velocity_upper_type => bound_type

Returns an array indicating what type of boundary conditions apply for velocity at the upper boundary of each dimension. The types are specified using the parameters in [boundary_types_mod].

  • private pure function bound_type(this)

    Author
    Chris MacMackin
    Date
    January 2017

    Default implementation of the methods getting the boundary types for a glacier. It returns an array which indicates free boundaries.

    Arguments

    Type IntentOptional AttributesName
    class(glacier_boundary), intent(in) :: this

    Return Value integer, dimension(:), allocatable

procedure, public :: boundary_residuals

Returns an array consisting of the difference between the required boundary values and those which actually exist. The order in which these are listed is as follows: lower thickness boundary, upper thickness boundary, lower velocity boundary, and upper velocity boundary.

  • private function boundary_residuals(this, thickness, velocity, viscosity, t) result(residuals)

    Author
    Chris MacMackin
    Date
    September 2016

    Default implementation of the boundary_residuals method. It returns a zero-length array, effectively indicating free boundaries.

    Arguments

    Type IntentOptional AttributesName
    class(glacier_boundary), intent(in) :: this
    class(scalar_field), intent(in) :: thickness

    A field containing the thickness of the glacier

    class(vector_field), intent(in) :: velocity

    A field containing the flow velocity of the glacier

    class(scalar_field), intent(in) :: viscosity

    A field containing the viscosity of the ice in the glacier.

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

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

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

    An array containing the difference between the required boundary values and those which are actually present. They are stored in the order: lower thickness boundary, upper thickness boundary, lower velocity boundary, and upper velocity boundary.

Source Code

  type, public :: glacier_boundary
    !* Author: Chris MacMackin
    !  Date: September 2016
    !
    ! A type in which procedures for getting the boundary conditions
    ! of glaciers are to be specified. The descendent types can
    ! contain whatever data is needed to compute the result. It
    ! provides the routine
    ! [[glacier_boundary(type):boundary_residuals]] to return an
    ! array with the residuals representing deviation from satisfying
    ! the conditions. This can then be appended to a
    ! [[glacier(type)]]'s residual array.
    !
    ! When specifying boundary conditions in this way, it becomes
    ! necessary not to include the residual of the plume data at some
    ! location(s). Typically this would be adjacent to the boundaries
    ! being prescribed. In order to accomplish this, routines are
    ! provided which return arrays indicating at which boundaries data
    ! should be omitted and how much. These should be passed as
    ! arguments for the field methods to get and set the field's raw
    ! data.
    !
    ! This class effectively provides free boundary conditions. It's 
    ! type-bound procedures should be overridden to provide case-specific
    ! conditions.
    !
  contains
    procedure :: thickness_lower_bound => bound_array
      !! Returns a 1D array which should be passed as the
      !! `exclude_lower_bound`/`provide_lower_bound` argument when
      !! getting or setting the raw representation of the thickness
      !! field.
    procedure :: thickness_upper_bound => bound_array
      !! Returns a 1D array which should be passed as the
      !! `exclude_upper_bound`/`provide_upper_bound` argument when
      !! getting or setting the raw representation of the thickness
      !! field.
    procedure :: velocity_lower_bound => bound_array
      !! Returns a 1D array which should be passed as the
      !! `exclude_lower_bound`/`provide_lower_bound` argument when
      !! getting or setting the raw representation of the velocity
      !! field.
    procedure :: velocity_upper_bound => bound_array
      !! Returns a 1D array which should be passed as the
      !! `exclude_upper_bound`/`provide_upper_bound` argument when
      !! getting or setting the raw representation of the velocity
      !! field.
    procedure :: thickness_lower_type => bound_type
      !! Returns an array indicating what type of boundary conditions
      !! apply for thickness at the lower boundary of each
      !! dimension. The types are specified using the parameters in
      !! [boundary_types_mod].
    procedure :: thickness_upper_type => bound_type
      !! Returns an array indicating what type of boundary conditions
      !! apply for thickness at the upper boundary of each
      !! dimension. The types are specified using the parameters in
      !! [boundary_types_mod].
    procedure :: velocity_lower_type => bound_type
      !! Returns an array indicating what type of boundary conditions
      !! apply for velocity at the lower boundary of each
      !! dimension. The types are specified using the parameters in
      !! [boundary_types_mod].
    procedure :: velocity_upper_type => bound_type
      !! Returns an array indicating what type of boundary conditions
      !! apply for velocity at the upper boundary of each
      !! dimension. The types are specified using the parameters in
      !! [boundary_types_mod].
    procedure :: boundary_residuals
      !! Returns an array consisting of the difference between the
      !! required boundary values and those which actually exist. The
      !! order in which these are listed is as follows: lower
      !! thickness boundary, upper thickness boundary, lower velocity
      !! boundary, and upper velocity boundary.
  end type glacier_boundary