tGeometry.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 --- tGeometry.hh (2836B) --- 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 GEOMETRY_H 21 #define GEOMETRY_H 22 23 #include "pism/util/IceGrid.hh" 24 #include "pism/util/iceModelVec.hh" 25 #include "pism/util/IceModelVec2CellType.hh" 26 27 namespace pism { 28 29 class Geometry { 30 private: 31 const unsigned int m_stencil_width; 32 public: 33 Geometry(IceGrid::ConstPtr grid); 34 35 /*! 36 * Ensures consistency of ice geometry by re-computing cell type, cell grounded fraction, and ice 37 * surface elevation. 38 */ 39 void ensure_consistency(double ice_free_thickness_threshold); 40 41 // This is grid information, which is not (strictly speaking) ice geometry, but it should be 42 // available everywhere we use ice geometry. 43 IceModelVec2S latitude; 44 IceModelVec2S longitude; 45 46 // Part of ice geometry, but managed by the bed model and the ocean model. From the point of view 47 // of the code updating ice geometry, these are inputs. These fields should be filled in before 48 // passing a Geometry instance to the code that uses it. 49 IceModelVec2S bed_elevation; 50 IceModelVec2S sea_level_elevation; 51 52 // the minimal "state" 53 IceModelVec2S ice_thickness; 54 IceModelVec2S ice_area_specific_volume; // previously known as Href 55 56 // redundant fields (can be computed using the ones above) 57 IceModelVec2CellType cell_type; 58 IceModelVec2S cell_grounded_fraction; 59 IceModelVec2S ice_surface_elevation; 60 }; 61 62 void ice_bottom_surface(const Geometry &geometry, IceModelVec2S &result); 63 64 double ice_volume(const Geometry &geometry, double thickness_threshold); 65 double ice_area_floating(const Geometry &geometry, double thickness_threshold); 66 double ice_area_grounded(const Geometry &geometry, double thickness_threshold); 67 double ice_area(const Geometry &geometry, double thickness_threshold); 68 double ice_volume_not_displacing_seawater(const Geometry &geometry, 69 double thickness_threshold); 70 double sea_level_rise_potential(const Geometry &geometry, double thickness_threshold); 71 72 void set_no_model_strip(const IceGrid &grid, double width, IceModelVec2Int &result); 73 74 } // end of namespace pism 75 76 #endif /* GEOMETRY_H */