tInitialization.hh - pism - [fork] customized build of PISM, the parallel ice sheet model (tillflux branch) (HTM) git clone git://src.adamsgaard.dk/pism (DIR) Log (DIR) Files (DIR) Refs (DIR) LICENSE --- tInitialization.hh (2454B) --- 1 /* Copyright (C) 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 #ifndef PSINITIALIZATION_H 21 #define PSINITIALIZATION_H 22 23 #include "pism/coupler/SurfaceModel.hh" 24 25 namespace pism { 26 namespace surface { 27 28 /*! Surface model "modifier" that helps with initialization. 29 * 30 * This modifier saves *all* fields a surface model provides as a part of the model state and 31 * re-loads them during initialization so that they are available *before* the first time step in a 32 * re-started run. 33 * 34 * It is 35 * 36 * - not visible to the user, 37 * - is added automatically, and 38 * - does not have a corresponding "keyword" in surface::Factory. 39 */ 40 class InitializationHelper : public SurfaceModel { 41 public: 42 InitializationHelper(IceGrid::ConstPtr g, std::shared_ptr<SurfaceModel> in); 43 protected: 44 void init_impl(const Geometry &geometry); 45 void update_impl(const Geometry &geometry, double t, double dt); 46 47 const IceModelVec2S &layer_mass_impl() const; 48 const IceModelVec2S &liquid_water_fraction_impl() const; 49 const IceModelVec2S &temperature_impl() const; 50 const IceModelVec2S &mass_flux_impl() const; 51 const IceModelVec2S &layer_thickness_impl() const; 52 53 const IceModelVec2S& accumulation_impl() const; 54 const IceModelVec2S& melt_impl() const; 55 const IceModelVec2S& runoff_impl() const; 56 57 void define_model_state_impl(const File &output) const; 58 void write_model_state_impl(const File &output) const; 59 60 private: 61 // store pointers to fields so that we can iterate over them 62 std::vector<IceModelVec*> m_variables; 63 // storage 64 IceModelVec2S m_mass_flux; 65 IceModelVec2S m_temperature; 66 // the rest of the field are inherited from SurfaceModel 67 }; 68 69 } // end of namespace surface 70 } // end of namespace pism 71 72 73 #endif /* PSINITIALIZATION_H */