PISM, A Parallel Ice Sheet Model  stable v2.1-1-g6902d5502 committed by Ed Bueler on 2023-12-20 08:38:27 -0800
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
pism::energy::BTU_Full Class Reference

Given the temperature of the top of the bedrock, for the duration of one time-step, provides upward geothermal flux at that interface at the end of the time-step. More...

#include <BTU_Full.hh>

+ Inheritance diagram for pism::energy::BTU_Full:

Public Member Functions

 BTU_Full (std::shared_ptr< const Grid > g, const BTUGrid &vertical_grid)
 
virtual ~BTU_Full ()=default
 
const array::Array3Dtemperature () const
 Bedrock thermal layer temperature field. More...
 
- Public Member Functions inherited from pism::energy::BedThermalUnit
 BedThermalUnit (std::shared_ptr< const Grid > g)
 
virtual ~BedThermalUnit ()=default
 
void init (const InputOptions &opts)
 
const array::Scalarflux_through_top_surface () const
 Return the upward heat flux through the top surface of the bedrock thermal layer. More...
 
const array::Scalarflux_through_bottom_surface () const
 Return the upward heat flux through the bottom surface of the bedrock thermal layer. More...
 
void update (const array::Scalar &bedrock_top_temperature, double t, double dt)
 
double vertical_spacing () const
 
double depth () const
 
unsigned int Mz () const
 
- Public Member Functions inherited from pism::Component
 Component (std::shared_ptr< const Grid > grid)
 
virtual ~Component ()=default
 
DiagnosticList diagnostics () const
 
TSDiagnosticList ts_diagnostics () const
 
std::shared_ptr< const Gridgrid () const
 
const Timetime () const
 
const Profilingprofiling () const
 
void define_model_state (const File &output) const
 Define model state variables in an output file. More...
 
void write_model_state (const File &output) const
 Write model state variables to an output file. More...
 
MaxTimestep max_timestep (double t) const
 Reports the maximum time-step the model can take at time t. More...
 

Protected Member Functions

virtual void bootstrap (const array::Scalar &bedrock_top_temperature)
 
virtual void init_impl (const InputOptions &opts)
 Initialize the bedrock thermal unit. More...
 
virtual double vertical_spacing_impl () const
 
virtual double depth_impl () const
 
virtual unsigned int Mz_impl () const
 
virtual MaxTimestep max_timestep_impl (double my_t) const
 
virtual void update_impl (const array::Scalar &bedrock_top_temperature, double t, double dt)
 
virtual void define_model_state_impl (const File &output) const
 The default (empty implementation). More...
 
virtual void write_model_state_impl (const File &output) const
 The default (empty implementation). More...
 
void update_flux_through_top_surface ()
 
virtual void update_impl (const array::Scalar &bedrock_top_temperature, double t, double dt)=0
 
- Protected Member Functions inherited from pism::energy::BedThermalUnit
virtual void initialize_bottom_surface_flux ()
 
virtual DiagnosticList diagnostics_impl () const
 
- Protected Member Functions inherited from pism::Component
virtual TSDiagnosticList ts_diagnostics_impl () const
 
void regrid (const std::string &module_name, array::Array &variable, RegriddingFlag flag=NO_REGRID_WITHOUT_REGRID_VARS)
 

Protected Attributes

std::shared_ptr< array::Array3Dm_temp
 
double m_k
 bedrock thermal conductivity More...
 
double m_D
 diffusivity of the heat flow within the bedrock layer More...
 
unsigned int m_Mbz
 number of vertical levels within the bedrock More...
 
double m_Lbz
 thickness of the bedrock layer, in meters More...
 
bool m_bootstrapping_needed
 true if the model needs to "bootstrap" the temperature field during the first time step More...
 
std::shared_ptr< BedrockColumnm_column
 
- Protected Attributes inherited from pism::energy::BedThermalUnit
array::Scalar m_bottom_surface_flux
 upward heat flux through the bottom surface of the bed thermal layer More...
 
array::Scalar m_top_surface_flux
 upward heat flux through the top surface of the bed thermal layer More...
 
- Protected Attributes inherited from pism::Component
const std::shared_ptr< const Gridm_grid
 grid used by this component More...
 
const Config::ConstPtr m_config
 configuration database used by this component More...
 
const units::System::Ptr m_sys
 unit system used by this component More...
 
const Logger::ConstPtr m_log
 logger (for easy access) More...
 

Additional Inherited Members

- Public Types inherited from pism::energy::BedThermalUnit
typedef std::shared_ptr< BedThermalUnitPtr
 
typedef std::shared_ptr< const BedThermalUnitConstPtr
 
- Static Public Member Functions inherited from pism::energy::BedThermalUnit
static std::shared_ptr< BedThermalUnitFromOptions (std::shared_ptr< const Grid > g, std::shared_ptr< const Context > ctx)
 
- Protected Types inherited from pism::Component
enum  RegriddingFlag { REGRID_WITHOUT_REGRID_VARS , NO_REGRID_WITHOUT_REGRID_VARS }
 This flag determines whether a variable is read from the -regrid_file file even if it is not listed among variables in -regrid_vars. More...
 

Detailed Description

Given the temperature of the top of the bedrock, for the duration of one time-step, provides upward geothermal flux at that interface at the end of the time-step.

The geothermal flux actually applied to the base of an ice sheet is dependent, over time, on the temperature of the basal ice itself. The purpose of a bedrock thermal layer in an ice sheet model is to implement this dependency by using a physical model for the temperature within that layer, the upper lithosphere. Because the upper part of the lithosphere stores or releases energy into the ice, the typical lithosphere geothermal flux rate is not the same thing as the geothermal flux applied to the base of the ice. This issue has long been recognized by ice sheet modelers [e.g. RitzFabreLetreguilly].

For instance, suppose the ice sheet is in a balanced state in which the geothermal flux deep in the crust is equal to the heat flux into the ice base. If the near-surface ice cools from this state then, because the ice temperature gradient is now greater in magnitude, between the warm bedrock and the cooler ice, the ice will for some period receive more than the deep geothermal flux rate. Similarly, if the ice warms from the balanced state then the temperature difference with the bedrock has become smaller and the magnitude of the ice basal heat flux will be less than the deep geothermal rate.

We regard the lithosphere geothermal flux rate, which is applied in this model to the base of the bedrock thermal layer, as a time-independent quantity. This concept is the same as in all published ice sheet models, to our knowledge.

Because the relevant layer of bedrock below an ice sheet is typically shallow, modeling the bedrock temperature is quite simple. Let \(T_b(t,x,y,z)\) be the temperature of the bedrock layer, for elevations \(-L_b \le z \le 0\). In this routine, \(z=0\) refers to the top of the bedrock, the ice/bedrock interface. (Note \(z=0\) is the base of the ice in IceModel, and thus a different location if ice is floating.) Let \(G\) be the lithosphere geothermal flux rate, namely the PISM input variable bheatflx; see Related Page std_names . Let \(k_b\) = bedrock_thermal_conductivity in pism_config.cdl) be the constant thermal conductivity of the upper lithosphere. In these terms the actual upward heat flux into the ice/bedrock interface is the quantity,

\[G_0 = -k_b \frac{\partial T_b}{\partial z}.\]

This is the output of the method flux_through_top_surface() in this class.

The evolution equation solved in this class, for which a timestep is done by the update() method, is the standard 1D heat equation

\[\rho_b c_b \frac{\partial T_b}{\partial t} = k_b \frac{\partial^2 T_b}{\partial z^2}\]

where \(\rho_b\) = bedrock_thermal_density and \(c_b\) = bedrock_thermal_specific_heat_capacity in pism_config.cdl.

If 3 or more levels are used then everything is the general case. The lithospheric temperature in temp is saved in files as litho_temp. The flux_through_top_surface() method uses second-order differencing to compute the values of \(G_0\).

If 2 levels are used then everything is the general case except that flux_through_top_surface() method uses first-order differencing to compute the values of \(G_0\).

Definition at line 84 of file BTU_Full.hh.


The documentation for this class was generated from the following files: