simple_plume_boundary_mod Module

Provides a derived type which specifies the boundary conditions for a 1-D plume model. Dirichlet boundary conditions are used at the grounding line, while an outflow condition is used at the end of the domain.


Uses

  • module~~simple_plume_boundary_mod~~UsesGraph module~simple_plume_boundary_mod simple_plume_boundary_mod module~plume_boundary_mod plume_boundary_mod module~simple_plume_boundary_mod->module~plume_boundary_mod factual_mod factual_mod module~simple_plume_boundary_mod->factual_mod iso_fortran_env iso_fortran_env module~simple_plume_boundary_mod->iso_fortran_env module~boundary_types_mod boundary_types_mod module~simple_plume_boundary_mod->module~boundary_types_mod module~plume_boundary_mod->factual_mod module~plume_boundary_mod->iso_fortran_env module~plume_boundary_mod->module~boundary_types_mod

Used by

  • module~~simple_plume_boundary_mod~~UsedByGraph module~simple_plume_boundary_mod simple_plume_boundary_mod module~asymmetric_plume_mod asymmetric_plume_mod module~asymmetric_plume_mod->module~simple_plume_boundary_mod module~static_plume_mod static_plume_mod module~static_plume_mod->module~simple_plume_boundary_mod module~plume_mod plume_mod module~plume_mod->module~simple_plume_boundary_mod

Contents


Variables

TypeVisibility AttributesNameInitial
type(uniform_scalar_field), private :: dummy

Interfaces

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)


Derived Types

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.

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

private pure function constructor(thickness, velocity, temperature, salinity)

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

Type-Bound Procedures

procedure, public :: set_time

Specifies the time at which to calculate the boundary conditions.

procedure, public :: thickness_bound_info => simple_thickness_info

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

procedure, public :: velocity_bound_info => simple_info

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

procedure, public :: temperature_bound_info => simple_info

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

procedure, public :: salinity_bound_info => simple_info

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

procedure, public :: thickness_bound => simple_thickness_bound

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

procedure, public :: velocity_bound => simple_velocity_bound

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

procedure, public :: temperature_bound => simple_temperature_bound

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

procedure, public :: salinity_bound => simple_salinity_bound

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


Functions

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)

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

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

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

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


Subroutines

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.

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.