PISM, A Parallel Ice Sheet Model 2.3.0-79cae578d committed by Constantine Khrulev on 2026-03-22
Loading...
Searching...
No Matches
Initialization.cc
Go to the documentation of this file.
1/* Copyright (C) 2016, 2017, 2018, 2019, 2020, 2021, 2023, 2025 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 "pism/coupler/ocean/Initialization.hh"
21#include "pism/util/io/File.hh"
22#include "pism/coupler/util/init_step.hh"
23#include "pism/util/Logger.hh"
24#include "pism/util/io/IO_Flags.hh"
25
26namespace pism {
27namespace ocean {
28
29InitializationHelper::InitializationHelper(std::shared_ptr<const Grid> g, std::shared_ptr<OceanModel> in)
30 : OceanModel(g, in) {
31
33 m_water_column_pressure->set_name("effective_water_column_pressure");
34
36 m_shelf_base_temperature->set_name("effective_shelf_base_temperature");
37
39 m_shelf_base_mass_flux->set_name("effective_shelf_base_mass_flux");
40 // use internal units when saving
41 auto units = m_shelf_base_mass_flux->metadata()["units"];
42 m_shelf_base_mass_flux->metadata().output_units(units);
43}
44
45void InitializationHelper::update_impl(const Inputs &inputs, double t, double dt) {
46 OceanModel::update_impl(inputs, t, dt);
47
48 m_water_column_pressure->copy_from(m_input_model->average_water_column_pressure());
49 m_shelf_base_temperature->copy_from(m_input_model->shelf_base_temperature());
50 m_shelf_base_mass_flux->copy_from(m_input_model->shelf_base_mass_flux());
51}
52
54 m_input_model->init(geometry);
55
57
58 if (opts.type == INIT_RESTART) {
59 m_log->message(2, "* Reading effective ocean model outputs from '%s' for re-starting...\n",
60 opts.filename.c_str());
61
63 const unsigned int time_length = file.nrecords();
64 const unsigned int last_record = time_length > 0 ? time_length - 1 : 0;
65
66 m_water_column_pressure->read(file, last_record);
67 m_shelf_base_mass_flux->read(file, last_record);
68 m_shelf_base_temperature->read(file, last_record);
69
70 file.close();
71 } else {
72 m_log->message(2, "* Performing a 'fake' ocean model time-step for bootstrapping...\n");
73
74 Inputs inputs;
75 inputs.geometry = &geometry;
76 init_step(this, inputs, time());
77 }
78
79 // Support regridding. This is needed to ensure that initialization using "-i" is equivalent to
80 // "-i ... -bootstrap -regrid_file ..."
81 {
82 regrid("ocean model initialization helper", *m_water_column_pressure,
84 regrid("ocean model initialization helper", *m_shelf_base_mass_flux,
86 regrid("ocean model initialization helper", *m_shelf_base_temperature,
88 }
89}
90
91std::set<VariableMetadata> InitializationHelper::state_impl() const {
92 auto variables = array::metadata({
96 });
97
98 return pism::combine(variables, m_input_model->state());
99}
100
102 m_water_column_pressure->write(output);
103 m_shelf_base_mass_flux->write(output);
104 m_shelf_base_temperature->write(output);
105
106 m_input_model->write_state(output);
107}
108
112
116
120
121} // end of namespace ocean
122} // end of namespace pism
const Time & time() const
Definition Component.cc:111
std::shared_ptr< const Config > m_config
configuration database used by this component
Definition Component.hh:160
const std::shared_ptr< const Grid > m_grid
grid used by this component
Definition Component.hh:158
void regrid(const std::string &module_name, array::Array &variable, RegriddingFlag flag=NO_REGRID_WITHOUT_REGRID_VARS)
Definition Component.cc:152
std::shared_ptr< const Logger > m_log
logger (for easy access)
Definition Component.hh:164
unsigned int nrecords() const
Get the number of records. Uses the length of an unlimited dimension.
Definition File.cc:280
void close()
Definition File.cc:237
High-level PISM I/O class.
Definition File.hh:57
const array::Scalar & shelf_base_mass_flux_impl() const
const array::Scalar & average_water_column_pressure_impl() const
void write_state_impl(const OutputFile &output) const
The default (empty implementation).
void update_impl(const Inputs &inputs, double t, double dt)
std::shared_ptr< array::Scalar > m_shelf_base_mass_flux
void init_impl(const Geometry &geometry)
InitializationHelper(std::shared_ptr< const Grid > g, std::shared_ptr< OceanModel > in)
std::set< VariableMetadata > state_impl() const
const array::Scalar & shelf_base_temperature_impl() const
std::shared_ptr< array::Scalar > m_shelf_base_temperature
std::shared_ptr< OceanModel > m_input_model
Definition OceanModel.hh:77
std::shared_ptr< array::Scalar > m_water_column_pressure
Definition OceanModel.hh:78
static std::shared_ptr< array::Scalar > allocate_shelf_base_temperature(std::shared_ptr< const Grid > g)
Definition OceanModel.cc:31
static std::shared_ptr< array::Scalar > allocate_shelf_base_mass_flux(std::shared_ptr< const Grid > g)
Definition OceanModel.cc:39
static std::shared_ptr< array::Scalar > allocate_water_column_pressure(std::shared_ptr< const Grid > g)
Definition OceanModel.cc:49
virtual void update_impl(const Inputs &inputs, double t, double dt)
A very rudimentary PISM ocean model.
Definition OceanModel.hh:38
std::set< VariableMetadata > metadata(std::initializer_list< const Array * > vecs)
Definition Array.cc:1244
@ PISM_GUESS
Definition IO_Flags.hh:57
@ PISM_READONLY
open an existing file for reading only
Definition IO_Flags.hh:69
bool ocean(int M)
An ocean cell (floating ice or ice-free).
Definition Mask.hh:40
static const double g
Definition exactTestP.cc:36
@ INIT_RESTART
Definition Component.hh:56
void init_step(M *model, const In &inputs, const Time &time)
Definition init_step.hh:33
T combine(const T &a, const T &b)
InputOptions process_input_options(MPI_Comm com, std::shared_ptr< const Config > config)
Definition Component.cc:45
InitializationType type
initialization type
Definition Component.hh:61
std::string filename
name of the input file (if applicable)
Definition Component.hh:63
const Geometry * geometry
Definition OceanModel.hh:34