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

◆ theta()

void pism::stressbalance::BedSmoother::theta ( const array::Scalar usurf,
array::Scalar result 
) const

Implements the strategy for computing \(\theta(h,x,y)\) from previously- stored coefficients, described on Bed roughness parameterization page and in [Schoofbasaltopg2003].

Specifically, \(\theta = \omega^{-n}\) where \(\omega\) is a local average of a rational function of surface elevation, approximated here by a Taylor polynomial:

\[ \omega = \fint \left(1 - \frac{\tilde b(x_1,x_2,\xi_1,\xi_2)}{H} \right)^{-(n+2)/n}\,d\xi_1\,d\xi_2 \approx 1 + C_2 H^{-2} + C_3 H^{-3} + C_4 H^{-4} \]

where \(h =\) usurf, \(H = h -\) topgsmooth and \(\tilde b\) is the local bed topography, a function with mean zero. The coefficients \(C_2,C_3,C_4\), which depend on \(x,y\), are precomputed by preprocess_bed().

Ghosted values are updated directly and no communication occurs. In fact, we assume usurf and theta have stencil width at least equal to GHOSTS. We check whether topgsmooth, which has stencil width maxGHOSTS, has at least GHOSTS stencil width, and throw an error if not.

Call preprocess_bed() first.

Definition at line 350 of file BedSmoother.cc.

References pism::ParallelSection::check(), pism::clip(), pism::ParallelSection::failed(), pism::RuntimeError::formatted(), m_C2, m_C3, m_C4, m_config, m_Glen_exponent, m_grid, m_maxtl, m_Nx, m_Ny, m_topgsmooth, pism::array::max(), PISM_ERROR_LOCATION, pism::array::Array::set(), and pism::array::Array::stencil_width().

Referenced by pism::stressbalance::SIAFD::compute_diffusivity().