PISM, A Parallel Ice Sheet Model  stable v2.1-1-g6902d5502 committed by Ed Bueler on 2023-12-20 08:38:27 -0800

◆ set_basal_heat_flux()

void pism::energy::enthSystemCtx::set_basal_heat_flux ( double  heat_flux)

Set coefficients in discrete equation for Neumann condition at base of ice.

This method generates the Neumann boundary condition for the linear system.

The Neumann boundary condition is

\[ \frac{\partial E}{\partial z} = - \frac{\phi}{K} \]

where \(\phi\) is the heat flux. Here \(K\) is allowed to vary, and takes its value from the value computed in assemble_R().

The boundary condition is combined with the partial differential equation by the technique of introducing an imaginary point at \(z=-\Delta z\) and then eliminating it.

In other words, we combine the centered finite difference approximation

\[ \frac{ E_{1} - E_{-1} }{2\dz} = -\frac{\phi}{K} \]

with

\[ -R_{k-\frac12} E_{k-1} + \left( 1 + R_{k-\frac12} + R_{k+\frac12} \right) E_{k} - R_{k+\frac12} E_{k+1} + \text{advective terms} = \dots \]

to get

\begin{align*} \frac{E_{1}-E_{-1}}{2\,\Delta z} & = -\frac{\phi}{K_{0}}, \\ E_{1}-E_{-1} & = -\frac{2\,\Delta z\,\phi}{K_{0}}, \\ E_{-1}\,R_{-\frac12}-R_{-\frac12}\,E_{1} & = \frac{2\,R_{-\frac12}\,\Delta z\,\phi}{K_{0}}, \\ -R_{\frac12}\,E_{1}+E_{0}\,\left(R_{\frac12}+R_{-\frac12}+1\right)-E_{-1}\,R_{-\frac12} + \text{advective terms} & = \dots, \\ \left(-R_{\frac12}-R_{-\frac12}\right)\,E_{1}+E_{0}\,\left(R_{\frac12}+R_{-\frac12}+1\right) + \text{advective terms} & = \frac{2\,R_{-\frac12}\,\Delta z\,\phi}{K_{0}}+\dots. \end{align*}

The error in the pure conductive and smooth conductivity case is \( O(\dz^2) \).

This method should only be called if everything but the basal boundary condition is already set.

Parameters
[in]heat_fluxprescribed heat flux (positive means flux into the ice)

Definition at line 328 of file enthSystem.cc.

References G, pism::hydrology::K(), pism::columnSystemCtx::m_dt, pism::columnSystemCtx::m_dz, m_ice_density, m_R, and set_basal_neumann_bc().

Referenced by pism::energy::CHSystem::update_impl(), and pism::energy::EnthalpyModel::update_impl().