dallaston2015_melt Derived Type

type, public, extends(abstract_melt_relationship) :: dallaston2015_melt

A parameterisation of melting into a plume which comes from heavily simplifying the 3 equation model. It is taken from Dallaston, Hewitt, and Wells (2015). The melt rate, as well as effect on termperature and salinity, are calculated by calling solve_for_melt and then accessed using melt_rate, heat_equation_terms, salt_equation_terms.


Inherits

type~~dallaston2015_melt~~InheritsGraph type~dallaston2015_melt dallaston2015_melt type~abstract_melt_relationship abstract_melt_relationship type~dallaston2015_melt->type~abstract_melt_relationship scalar_field scalar_field type~dallaston2015_melt->scalar_field melt_values

Contents

Source Code


Components

TypeVisibility AttributesNameInitial
class(scalar_field), public, allocatable:: melt_values

Stores the resulting melt rate

real(kind=r8), public :: coef =1449.29936

The coefficient by which the melt rate is multiplied in order to determine the contribution to the heat equation.

real(kind=r8), public :: melt_conversion =6.9e-4_r8

The factor to convert between the scale for melt used by Dallaston et al. (2015) and that used in ISOFT, where is the melt scale used by Dalalston et al.

real(kind=r8), public :: salinity_denom =1e100_r8

Constructor

public interface dallaston2015_melt

  • private pure function constructor(beta, melt_conversion, salinity_denom) result(this)

    Arguments

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

    The inverse stefan number,

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

    The factor to convert between the scale for melt used by Dallaston et al. (2015) and that used in ISOFT, where is the melt scale used by Dalalston et al.

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

    The factor which, when used to divide the melt_conversion term, produces a conversion factor for the melt-terms in the salinity equation of Dallaston et al. (2015). It has the form where is the subglacial discharge across the grounding line.

    Return Value type(dallaston2015_melt)

    The newly created object representing the melt relationship.


Type-Bound Procedures

procedure, public :: solve_for_melt => dallaston2015_solve

  • private subroutine dallaston2015_solve(this, velocity, pressure, temperature, salinity, plume_thickness, time)

    Arguments

    Type IntentOptional AttributesName
    class(dallaston2015_melt), intent(inout) :: this
    class(vector_field), intent(in) :: velocity

    The velocity field of the plume into which fluid is melting.

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

    The water pressure at the interface where the melting occurs.

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

    The temperature of the plume into which fluid is melting.

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

    The salinity of the plume into which fluid is melting.

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

    The thickness of the plume into which fluid is melting.

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

    The time at which the melting is being solved for. If not present then assumed to be same as previous value passed.

procedure, public :: heat_equation_terms => dallaston2015_heat

Returns the terms this melt formulation contributes to the heat equation, after they have been solved for using solve_for_melt.

  • private function dallaston2015_heat(this) result(heat)

    Arguments

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

    Return Value class(scalar_field), pointer

    The value of the contribution made by melting/thermal transfer to the heat equation for a plume

procedure, public :: salt_equation_terms => dallaston2015_salt

Returns the terms this melt formulation contributes to the salt equation, after they have been solved for using solve_for_melt.

  • private function dallaston2015_salt(this) result(salt)

    Arguments

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

    Return Value class(scalar_field), pointer

    The value of the contribution made by melting/thermal transfer to the salt equation for a plume

procedure, public :: melt_rate => dallaston2015_melt_rate

Returns the melt rate calculated using this formulation, after it has been solved for using solve_for_melt.

  • private function dallaston2015_melt_rate(this) result(melt)

    Arguments

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

    Return Value class(scalar_field), pointer

    The melt rate from the ice into the plume water.

procedure, public :: has_heat_terms => dallaston2015_has_heat

Whether this formulation of melting contributes any terms to a plume's heat equation.

  • private pure function dallaston2015_has_heat(this) result(has_heat)

    Arguments

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

    Return Value logical

    Whether this formulation of melting contributes terms to the heat equation of the plume.

procedure, public :: has_salt_terms => dallaston2015_has_salt

Whether this formulation of melting contributes any terms to a plume's salinity equation.

  • private pure function dallaston2015_has_salt(this) result(has_salt)

    Arguments

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

    Return Value logical

    Whether this formulation of melting contributes terms to the salinity equation of the plume.

Source Code

  type, extends(abstract_melt_relationship), public :: dallaston2015_melt
    !* Author: Christopher MacMackin
    !  Date: October 2016
    !
    ! A parameterisation of melting into a plume which comes from
    ! heavily simplifying the 3 equation model. It is taken from
    ! Dallaston, Hewitt, and Wells (2015). The melt rate, as well as
    ! effect on termperature and salinity, are calculated by calling
    ! [[abstract_melt_relationship:solve_for_melt]] and then accessed
    ! using [[abstract_melt_relationship:melt_rate]],
    ! [[abstract_melt_relationship:heat_equation_terms]],
    ! [[abstract_melt_relationship:salt_equation_terms]].
    ! 
    class(scalar_field), allocatable :: melt_values
      !! Stores the resulting melt rate
    real(r8) :: coef = 1449.29936
      !! The coefficient by which the melt rate is multiplied in order
      !! to determine the contribution to the heat equation.
    real(r8) :: melt_conversion = 6.9e-4_r8
      !! The factor to convert between the scale for melt used by
      !! Dallaston et al. (2015) and that used in ISOFT, $$
      !! \frac{m_0x_0}{D_0U_0}, $$ where \(m_0\) is the melt scale
      !! used by Dalalston et al.
    real(r8) :: salinity_denom = 1e100_r8
  contains
    procedure :: solve_for_melt => dallaston2015_solve
    procedure :: heat_equation_terms => dallaston2015_heat
      !! Returns the terms this melt formulation contributes to the
      !! heat equation, after they have been solved for using
      !! [[abstract_melt_relationship:solve_for_melt]]. 
    procedure :: salt_equation_terms => dallaston2015_salt
      !! Returns the terms this melt formulation contributes to the
      !! salt equation, after they have been solved for using
      !! [[abstract_melt_relationship:solve_for_melt]].
    procedure :: melt_rate => dallaston2015_melt_rate
      !! Returns the melt rate calculated using this formulation,
      !! after it has been solved for using 
      !! [[abstract_melt_relationship:solve_for_melt]]. 
    procedure :: has_heat_terms => dallaston2015_has_heat
      !! Whether this formulation of melting contributes any terms to
      !! a plume's heat equation.
    procedure :: has_salt_terms => dallaston2015_has_salt
      !! Whether this formulation of melting contributes any terms to
      !! a plume's salinity equation.
  end type dallaston2015_melt