20#include "pism/stressbalance/blatter/ismip-hom/BlatterISMIPHOM.hh"
22#include "pism/util/node_types.hh"
23#include "pism/util/Logger.hh"
26namespace stressbalance {
31 double alpha = 0.5 * (M_PI / 180.0);
32 return -x * tan(alpha);
35static double A_bed(
double x,
double y,
double L) {
36 double omega = 2 * M_PI /
L;
37 return A_surface(x, y,
L) - 1000.0 + 500.0 * sin(omega * x) * sin(omega * y);
40static double B_bed(
double x,
double y,
double L) {
42 double omega = 2 * M_PI /
L;
43 return A_surface(x, y,
L) - 1000.0 + 500.0 * sin(omega * x);
49 double alpha = 0.1 * (M_PI / 180.0);
50 return -x * tan(alpha);
53static double C_bed(
double x,
double y,
double L) {
59 int coarsening_factor,
61 :
Blatter(grid, Mz, coarsening_factor),
63 m_L(2.0 * grid->Lx()) {
65 char testname[] =
"ABCD";
66 m_log->message(2,
"Running ISMIP-HOM Experiment %c (L = %d km)...\n",
98 double *bottom_elevation,
99 double *ice_thickness,
100 double *surface_elevation,
101 double *sea_level)
const {
117 x = x_min + I.i * dx,
118 y = y_min + I.j * dy;
121 bottom_elevation[
n] =
m_b(x, y,
m_L);
124 if (surface_elevation !=
nullptr) {
125 surface_elevation[
n] =
m_s(x, y,
m_L);
128 if (sea_level !=
nullptr) {
130 sea_level[
n] = bottom_elevation[
n] - 1.0;
const std::shared_ptr< const Grid > m_grid
grid used by this component
std::shared_ptr< const Logger > m_log
logger (for easy access)
GlobalIndex local_to_global(int i, int j, int k, unsigned int n) const
void nodal_parameter_values(const fem::Q1Element3 &element, Parameters **P, int i, int j, int *node_type, double *bottom, double *thickness, double *surface, double *sea_level) const
BlatterISMIPHOM(std::shared_ptr< const Grid > grid, int Mz, int coarsening_factor, ISMIPHOMTest test)
const int n_chi
Number of shape functions on a Q1 element.
static double A_surface(double x, double y, double L)
static double C_surface(double x, double y, double L)
static double A_bed(double x, double y, double L)
static double C_bed(double x, double y, double L)
static double B_bed(double x, double y, double L)