ave_one_equation_melt_mod Module

Provides an implementation of melt similar to that used by Dallaston, Hewitt, and Wells (2015), prior to their neglecting certain terms on scaling arguments. This implementation has been modified to account for transverse variation in a horizontally-integrated model.


Uses

  • module~~ave_one_equation_melt_mod~~UsesGraph module~ave_one_equation_melt_mod ave_one_equation_melt_mod factual_mod factual_mod module~ave_one_equation_melt_mod->factual_mod iso_fortran_env iso_fortran_env module~ave_one_equation_melt_mod->iso_fortran_env module~melt_relationship_mod melt_relationship_mod module~ave_one_equation_melt_mod->module~melt_relationship_mod module~melt_relationship_mod->factual_mod module~melt_relationship_mod->iso_fortran_env

Contents


Interfaces

public interface ave_one_equation_melt

  • private pure function constructor(coef1, coef2, fresh_sal, melt_temp, a_UabsT) result(this)

    Arguments

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

    The unitless multiplier on the thermal forcing term, .

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

    The unitless multiplier applied to the theram forcing term to get the melt rate, .

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

    The salinity of fresh water. Defaults to 0.

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

    The melting point of the ice. Defaults to 0.

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

    The shape coefficient for a horizontally-integrated model. It is defined as where and are the shapes of the variables and in the transverse direction. Defaults to 1.

    Return Value type(ave_one_equation_melt)

    The newly created object representing the melt relationship.


Derived Types

A parameterisation of melting into a plume which comes from heavily simplifying the 3 equation model. It can work with horizontally-integrated plume models, taking account of the plume's transverse profile. It is taken from Dallaston, Hewitt, and Wells (2015), prior to the their dropping some terms based on scaling arguments. 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.

Components

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

Stores the resulting forcing values.

real(kind=r8), public :: coef1 =0.018208_r8

The unitless multiplier on the thermal forcing term, .

real(kind=r8), public :: coef2 =0.023761_r8

The unitless multiplier applied to the thermal forcing term to get the melt rate, .

real(kind=r8), public :: sal_forcing =0._r8

The unitless multiplier applied to the forcing values to get the salinity forcing. It corresponds to the product of coef2 and the ice salinity. Typically this would be zero, but it might be positive if there is some marine ice present. Alternatively, depending on how the salinity has been scaled, it may have a negative value.

real(kind=r8), public :: melt_temp =0._r8

The melting temperature. While intuitively it makes sense to set this to zero, it can be useful to scale temperature in such a way that it will have a negative value.

real(kind=r8), public :: a_UabsT =1._r8

The shape coefficient for a horizontally-integrated model. It is defined as where and are the shapes of the variables and in the transverse direction.

Constructor

private pure function constructor(coef1, coef2, fresh_sal, melt_temp, a_UabsT)

Type-Bound Procedures

procedure, public :: solve_for_melt => one_equation_solve
procedure, public :: heat_equation_terms => one_equation_heat

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

procedure, public :: salt_equation_terms => one_equation_salt

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

procedure, public :: melt_rate => ave_one_equation_melt_rate

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

procedure, public :: has_heat_terms => one_equation_has_heat

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

procedure, public :: has_salt_terms => one_equation_has_salt

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


Functions

private pure function constructor(coef1, coef2, fresh_sal, melt_temp, a_UabsT) result(this)

Arguments

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

The unitless multiplier on the thermal forcing term, .

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

The unitless multiplier applied to the theram forcing term to get the melt rate, .

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

The salinity of fresh water. Defaults to 0.

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

The melting point of the ice. Defaults to 0.

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

The shape coefficient for a horizontally-integrated model. It is defined as where and are the shapes of the variables and in the transverse direction. Defaults to 1.

Return Value type(ave_one_equation_melt)

The newly created object representing the melt relationship.

private function one_equation_heat(this) result(heat)

Arguments

Type IntentOptional AttributesName
class(ave_one_equation_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

private function one_equation_salt(this) result(salt)

Arguments

Type IntentOptional AttributesName
class(ave_one_equation_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

private function ave_one_equation_melt_rate(this) result(melt)

Arguments

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

Return Value class(scalar_field), pointer

The melt rate from the ice into the plume water.

private pure function one_equation_has_heat(this) result(has_heat)

Arguments

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

Return Value logical

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

private pure function one_equation_has_salt(this) result(has_salt)

Arguments

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

Return Value logical

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


Subroutines

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

Arguments

Type IntentOptional AttributesName
class(ave_one_equation_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.