tFrac_MBP.cc - pism - [fork] customized build of PISM, the parallel ice sheet model (tillflux branch)
HTML git clone git://src.adamsgaard.dk/pism
DIR Log
DIR Files
DIR Refs
DIR LICENSE
---
tFrac_MBP.cc (2383B)
---
1 /* Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019 PISM Authors
2 *
3 * This file is part of PISM.
4 *
5 * PISM is free software; you can redistribute it and/or modify it under the
6 * terms of the GNU General Public License as published by the Free Software
7 * Foundation; either version 3 of the License, or (at your option) any later
8 * version.
9 *
10 * PISM is distributed in the hope that it will be useful, but WITHOUT ANY
11 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
13 * details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with PISM; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20 #include "Frac_MBP.hh"
21 #include "pism/coupler/util/ScalarForcing.hh"
22
23 namespace pism {
24 namespace ocean {
25
26 Frac_MBP::Frac_MBP(IceGrid::ConstPtr g, std::shared_ptr<OceanModel> in)
27 : OceanModel(g, in) {
28
29 m_forcing.reset(new ScalarForcing(g->ctx(),
30 "ocean.frac_MBP",
31 "frac_MBP",
32 "1", "1",
33 "melange back pressure fraction"));
34
35 m_melange_back_pressure_fraction = allocate_melange_back_pressure(g);
36 }
37
38 Frac_MBP::~Frac_MBP() {
39 // empty
40 }
41
42 void Frac_MBP::init_impl(const Geometry &geometry) {
43
44 m_input_model->init(geometry);
45
46 m_log->message(2, "* Initializing melange back pressure fraction forcing...\n");
47
48 // Note: comparing it to zero using "==" *is* appropriate here.
49 if (m_config->get_number("ocean.melange_back_pressure_fraction") == 0.0) {
50 m_log->message(2,
51 "WARNING: ocean.melange_back_pressure_fraction == 0.0.\n"
52 " -ocean ...,frac_MBP is inactive.");
53 }
54
55 m_forcing->init();
56 }
57
58 void Frac_MBP::update_impl(const Geometry &geometry, double t, double dt) {
59 m_input_model->update(geometry, t, dt);
60
61 m_forcing->update(t, dt);
62
63 m_melange_back_pressure_fraction->copy_from(m_input_model->melange_back_pressure_fraction());
64 m_melange_back_pressure_fraction->scale(m_forcing->value());
65 }
66
67 const IceModelVec2S& Frac_MBP::melange_back_pressure_fraction_impl() const {
68 return *m_melange_back_pressure_fraction;
69 }
70
71
72 } // end of namespace ocean
73 } // end of namespace pism