dallaston2015_seasonal_mod Module

Provides a derived type which specifies the boundary conditions for a 1-D plume model, when subglacial discharge is oscillating over time. This corresponds to Dirichlet conditions at the grounding line and Neumann conditions (wth a gradient of 0) at the calving front.


Uses

  • module~~dallaston2015_seasonal_mod~~UsesGraph module~dallaston2015_seasonal_mod dallaston2015_seasonal_mod module~plume_boundary_mod plume_boundary_mod module~dallaston2015_seasonal_mod->module~plume_boundary_mod factual_mod factual_mod module~dallaston2015_seasonal_mod->factual_mod iso_fortran_env iso_fortran_env module~dallaston2015_seasonal_mod->iso_fortran_env module~boundary_types_mod boundary_types_mod module~dallaston2015_seasonal_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

Contents


Variables

TypeVisibility AttributesNameInitial
type(uniform_scalar_field), private :: dummy

Interfaces

  • 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)


Derived Types

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.

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)

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.

Type-Bound Procedures

procedure, public :: thickness_bound_info => seasonal_thickness_info

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

procedure, public :: velocity_bound_info => seasonal_info

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

procedure, public :: temperature_bound_info => seasonal_info

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

procedure, public :: salinity_bound_info => seasonal_info

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

procedure, public :: thickness_bound => seasonal_thickness_bound

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

procedure, public :: velocity_bound => seasonal_velocity_bound

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

procedure, public :: temperature_bound => seasonal_temperature_bound

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

procedure, public :: salinity_bound => seasonal_salinity_bound

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

procedure, public :: set_time => seasonal_set_time

Specifies the time at which to calculate the boundary conditions.


Functions

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)

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

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

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

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


Subroutines

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.

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.

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