basal_surface_mod Module

Provides an abstract data type to model the ground or ocean below the glacier.


Uses

  • module~~basal_surface_mod~~UsesGraph module~basal_surface_mod basal_surface_mod module~nitsol_mod nitsol_mod module~basal_surface_mod->module~nitsol_mod factual_mod factual_mod module~basal_surface_mod->factual_mod iso_fortran_env iso_fortran_env module~basal_surface_mod->iso_fortran_env hdf5 hdf5 module~basal_surface_mod->hdf5 module~nitsol_mod->iso_fortran_env

Used by

  • module~~basal_surface_mod~~UsedByGraph module~basal_surface_mod basal_surface_mod module~plume_mod plume_mod module~plume_mod->module~basal_surface_mod module~cryosphere_mod cryosphere_mod module~cryosphere_mod->module~basal_surface_mod module~asymmetric_plume_mod asymmetric_plume_mod module~asymmetric_plume_mod->module~basal_surface_mod module~static_plume_mod static_plume_mod module~static_plume_mod->module~basal_surface_mod module~ground_mod ground_mod module~ground_mod->module~basal_surface_mod

Contents


Variables

TypeVisibility AttributesNameInitial
character(len=10), public, parameter:: hdf_type_attr ='basal_type'

Abstract Interfaces

abstract interface

  • private function get_scalar(this) result(property)

    Arguments

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

    Return Value class(scalar_field), pointer

    The value of whatever property of the basal surface is being returned.

abstract interface

  • private function get_real(this) result(property)

    Arguments

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

    Return Value real(kind=r8)

    The value of whatever property of the basal surface is being returned.

abstract interface

  • private function get_r81d(this) result(state_vector)

    Arguments

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

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

    The state vector of the basal surface

abstract interface

  • private function get_i(this) result(property)

    Arguments

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

    Return Value integer

    The value of whatever property of the basal surface is being returned.

abstract interface

  • private subroutine setter(this, state_vector, ice_thickness)

    Arguments

    Type IntentOptional AttributesName
    class(basal_surface), intent(inout) :: this
    real(kind=r8), intent(in), dimension(:):: state_vector

    A real array containing the data describing the state of the basal surface.

    class(scalar_field), intent(in), optional :: ice_thickness

    The ice thickness which, if present, will be used to update the calculation of the melt rate and/or drag parameter.

abstract interface

  • private subroutine time_setter(this, time)

    Arguments

    Type IntentOptional AttributesName
    class(basal_surface), intent(inout) :: this
    real(kind=r8), intent(in) :: time

    The time at which the basal surface is in the present state.

abstract interface

  • private subroutine read_dat(this, file_id, group_name, error)

    Arguments

    Type IntentOptional AttributesName
    class(basal_surface), intent(inout) :: this
    integer(kind=hid_t), intent(in) :: file_id

    The identifier for the HDF5 file/group from which the data will be read.

    character(len=*), intent(in) :: group_name

    The name of the group in the HDF5 file from which to read basal surface's data.

    integer, intent(out) :: error

    Flag indicating whether routine ran without error. If no error occurs then has value 0.

abstract interface

  • private subroutine write_dat(this, file_id, group_name, error)

    Arguments

    Type IntentOptional AttributesName
    class(basal_surface), intent(in) :: this
    integer(kind=hid_t), intent(in) :: file_id

    The identifier for the HDF5 file/group in which this data is meant to be written.

    character(len=*), intent(in) :: group_name

    The name to give the group in the HDF5 file storing the basal surface's data.

    integer, intent(out) :: error

    Flag indicating whether routine ran without error. If no error occurs then has value 0.

abstract interface

  • private subroutine surface_solve(this, ice_thickness, ice_density, ice_temperature, time, success)

    Arguments

    Type IntentOptional AttributesName
    class(basal_surface), intent(inout) :: this
    class(scalar_field), intent(in) :: ice_thickness

    Thickness of the ice above the basal surface

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

    The density of the ice above the basal surface, assumed uniform

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

    The temperature of the ice above the basal surface, assumed uniform

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

    The time to which the basal surface should be solved

    logical, intent(out) :: success

    True if the solver is successful, false otherwise


Derived Types

type, public, abstract :: basal_surface

An abstract data type which represents whatever lies below a glacier. This could be the ground, a plume, or a fully dynamic ocean model. Methods are available to provide the coupling information between the glacier and the basal surface.

Type-Bound Procedures

procedure(get_scalar), public :: basal_melt

Returns the basal melt rate.

procedure(get_scalar), public :: basal_drag_parameter

Returns a value which may be needed to calculate basal drag, such as the coefficient of friction.

procedure(get_real), public :: water_density

Density of the water at the basal surface.

procedure(setter), public :: update

Sets the state of the basal surface

procedure(get_i), public :: data_size

Returns the number of elements in the basal surface's state vector

procedure(get_r81d), public :: state_vector

Returns the basal surface's state vector, a 1D array with all necessary data to describe its state.

procedure(read_dat), public :: read_data

Read the basal surface data from an HDF5 file on the disc.

procedure(write_dat), public :: write_data

Writes the data describing the basal surface to the disc as an HDF5 file.

procedure(surface_solve), public :: solve

Solves for the state of the basal surface given a particular ice shelf geometry.