Program Listing for File HiblerConcentration.cpp¶
↰ Return to documentation for file (src/HiblerConcentration.cpp)
#include "include/HiblerConcentration.hpp"
#include "include/ModuleLoader.hpp"
#include "include/NextsimPhysics.hpp"
#include "include/PhysicsData.hpp"
#include "include/PrognosticData.hpp"
namespace Nextsim {
double HiblerConcentration::h0 = 0;
double HiblerConcentration::phiM = 0.;
template <>
const std::map<int, std::string> Configured<HiblerConcentration>::keyMap = {
{ HiblerConcentration::H0_KEY, "Hibler.h0" },
{ HiblerConcentration::PHIM_KEY, "Hibler.phiM" },
};
void HiblerConcentration::configure()
{
h0 = Configured::getConfiguration(keyMap.at(H0_KEY), 0.25);
phiM = Configured::getConfiguration(keyMap.at(PHIM_KEY), 0.5);
}
double HiblerConcentration::freeze(
const PrognosticData& prog, PhysicsData& phys, NextsimPhysics& nsphys) const
{
// Set the value of the reciprocal on the first invocation of freeze()
static const double ooh0 = 1. / h0;
return nsphys.newIce() * ooh0;
}
double HiblerConcentration::melt(
const PrognosticData& prog, PhysicsData& phys, NextsimPhysics& nsphys) const
{
if (prog.iceConcentration() >= 1)
return 0;
double del_hi = phys.updatedIceTrueThickness() - prog.iceTrueThickness();
return del_hi * prog.iceConcentration() * phiM / prog.iceTrueThickness();
}
} /* namespace Nextsim */