20#include "pism/coupler/ocean/ConstantPIK.hh"
21#include "pism/util/Config.hh"
22#include "pism/util/Grid.hh"
23#include "pism/util/MaxTimestep.hh"
24#include "pism/geometry/Geometry.hh"
25#include "pism/util/Logger.hh"
39 "* Initializing the constant (PIK) ocean model...\n");
42 ice_density =
m_config->get_number(
"constants.ice.density"),
43 water_density =
m_config->get_number(
"constants.sea_water.density"),
44 g =
m_config->get_number(
"constants.standard_gravity");
58 const auto &geometry = *inputs.
geometry;
69 ice_density =
m_config->get_number(
"constants.ice.density"),
70 water_density =
m_config->get_number(
"constants.sea_water.density"),
71 g =
m_config->get_number(
"constants.standard_gravity");
83 T0 =
m_config->get_number(
"constants.fresh_water.melting_point_temperature"),
84 beta_CC =
m_config->get_number(
"constants.ice.beta_Clausius_Clapeyron"),
85 g =
m_config->get_number(
"constants.standard_gravity"),
86 ice_density =
m_config->get_number(
"constants.ice.density");
90 for (
auto p :
m_grid->points()) {
91 const int i = p.i(), j = p.j();
92 const double pressure = ice_density *
g * depth(i,j);
94 result(i,j) = T0 -
beta_CC * pressure;
104 melt_factor =
m_config->get_number(
"ocean.pik_melt_factor"),
105 L =
m_config->get_number(
"constants.fresh_water.latent_heat_of_fusion"),
106 sea_water_density =
m_config->get_number(
"constants.sea_water.density"),
107 ice_density =
m_config->get_number(
"constants.ice.density"),
110 ocean_salinity = 35.0,
117 for (
auto p :
m_grid->points()) {
118 const int i = p.i(), j = p.j();
126 shelfbaseelev = - (ice_density / sea_water_density) * ice_thickness(i,j),
127 T_f = 273.15 + (0.0939 -0.057 * ocean_salinity + 7.64e-4 * shelfbaseelev);
132 double ocean_heat_flux = melt_factor * sea_water_density * c_p_ocean * gamma_T * (T_ocean - T_f);
138 result(i,j) = ocean_heat_flux / (
L * ice_density);
141 result(i,j) *= ice_density;
const units::System::Ptr m_sys
unit system used by this component
std::shared_ptr< const Config > m_config
configuration database used by this component
const std::shared_ptr< const Grid > m_grid
grid used by this component
std::shared_ptr< const Logger > m_log
logger (for easy access)
Combines the max. time step with the flag indicating if a restriction is active. Makes is possible to...
Makes sure that we call begin_access() and end_access() for all accessed array::Arrays.
std::shared_ptr< array::Scalar > m_shelf_base_mass_flux
std::shared_ptr< array::Scalar > m_shelf_base_temperature
std::shared_ptr< array::Scalar > m_water_column_pressure
MaxTimestep max_timestep_impl(double t) const
void melting_point_temperature(const array::Scalar &depth, array::Scalar &result) const
PIK(std::shared_ptr< const Grid > g)
void init_impl(const Geometry &geometry)
void mass_flux(const array::Scalar &ice_thickness, array::Scalar &result) const
Computes mass flux in [kg m-2 s-1].
void update_impl(const Inputs &inputs, double my_t, double my_dt)
static const double beta_CC
bool ocean(int M)
An ocean cell (floating ice or ice-free).
void compute_average_water_column_pressure(const Geometry &geometry, double ice_density, double water_density, double standard_gravity, array::Scalar &result)
double convert(System::Ptr system, double input, const std::string &spec1, const std::string &spec2)
Convert a quantity from unit1 to unit2.