Loading web-font TeX/Math/Italic
PISM, A Parallel Ice Sheet Model 2.2.1-cd005eec8 committed by Constantine Khrulev on 2025-03-07
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages

◆ 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_ERROR_LOCATION, pism::array::Array::set(), and pism::array::Array::stencil_width().

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