A concrete implementation of the basal_surface abstract data type, representing the ground beneath an ice sheet. At the moment this doesn't actually do anything.
Instantiates a ground object.
Computes and returns the melt rate at the bottom of the ice sheet due to interaction with the ground.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ground), | intent(in) | :: | this |
The melt rate at the base of the ice sheet.
Computes and returns a quantity which may be necessary to determine the frictional drag the ground exerts on the bottom of the ice sheet. An example would be the coefficient of friction. The description of this method is left deliberately vague so that as not to constrain how the drag is parameterized.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ground), | intent(in) | :: | this |
The value of a paramter describing the drag of the ground on the ice sheet.
Computes and returns the density of the water beneath the ice sheet. This water would be subglacial discharge and would tend to lubricate the motion of the ice sheet. The density probably won't be important in the case of an ice sheet, but is included so that the ground data type can have the same interface as the plume data type.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ground), | intent(in) | :: | this |
The density of any water at the base of the ice sheet.
Updates the state of the ground from its state vector. The state vector is a real array containing the value of each of the ground's properties at each of the locations on the grid used in discretization.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ground), | intent(inout) | :: | this | |||
real(kind=r8), | intent(in), | dimension(:) | :: | state_vector | A real array containing the data describing the state of the ground. |
|
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. |
Returns the number of elements in the ground's state vector. This is the size of the vector returned by state_vector and taken as an argument by update.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ground), | intent(in) | :: | this |
The number of elements in the ground's state vector.
Returns the state vector for the current state of the ground. This takes the form of a 1D array.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ground), | intent(in) | :: | this |
The state vector describing the ground.
Reads the state of the ground object from the specified group in an HDF file.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ground), | intent(inout) | :: | this | |||
integer(kind=hid_t), | intent(in) | :: | file_id | The identifier for the HDF5 file/group from which this data is meant to be read. |
||
character(len=*), | intent(in) | :: | group_name | The name of the group in the HDF5 file storing the ground's data. |
||
integer, | intent(out) | :: | error | Flag indicating whether routine ran without error. If no error occurs then has value 0. |
Writes the state of the ground object to an HDF file in the specified group.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ground), | 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 ground's data. |
||
integer, | intent(out) | :: | error | Flag indicating whether routine ran without error. If no error occurs then has value 0. |
Solves the state of the ground for the specified ice properties, at the specified time.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(ground), | 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 |
type, extends(basal_surface), public :: ground
!* Author: Christopher MacMackin
! Date: April 2016
!
! A concrete implementation of the [[basal_surface]] abstract data type,
! representing the ground beneath an ice sheet. At the moment this
! doesn't actually do anything.
!
contains
procedure :: basal_melt => ground_melt
procedure :: basal_drag_parameter => ground_drag_parameter
procedure :: water_density => ground_water_density
procedure :: update => ground_update
procedure :: data_size => ground_data_size
procedure :: state_vector => ground_state_vector
procedure :: read_data => ground_read_data
procedure :: write_data => ground_write_data
procedure :: solve => ground_solve
end type ground