tsia.py - 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 --- tsia.py (2452B) --- 1 # Copyright (C) 2011, 2012, 2014, 2015, 2016, 2017, 2018 David Maxwell and Constantine Khroulev 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 """Module containing helper functions for using the SIA stress balance 20 model.""" 21 22 import PISM 23 24 def computeSIASurfaceVelocities(modeldata, siasolver=PISM.SIAFD): 25 """Generates surface horizontal velocities corresponding to solving 26 the SIA with zero basal sliding. 27 28 :param `modeldata`: :class:`PISM.model.ModelData` containing 29 variables and model physics 30 31 :param `siasolver`: specific class used for solving the SIA 32 33 """ 34 md = modeldata 35 grid = md.grid 36 sia = siasolver(grid) 37 sia.init() 38 39 geometry = PISM.Geometry(grid) 40 41 geometry.ice_thickness.copy_from(md.vecs.thk) 42 geometry.bed_elevation.copy_from(md.vecs.topg) 43 geometry.sea_level_elevation.set(0.0) 44 geometry.ice_area_specific_volume.set(0.0) 45 46 geometry.ensure_consistency(md.config.get_number("geometry.ice_free_thickness_standard")) 47 48 inputs = PISM.StressBalanceInputs() 49 50 inputs.geometry = geometry 51 inputs.basal_melt_rate = None 52 inputs.melange_back_pressure = None 53 inputs.basal_yield_stress = None 54 inputs.enthalpy = md.vecs.enthalpy 55 inputs.age = None 56 57 sliding_velocity = PISM.IceModelVec2V() 58 sliding_velocity.create(grid, 'sliding_velocity', False) 59 sliding_velocity.set(0.0) 60 61 sia.update(sliding_velocity, inputs, True) 62 u = sia.velocity_u() 63 v = sia.velocity_v() 64 65 vel_sia = PISM.model.create2dVelocityVec(grid, name="_sia", stencil_width=1) 66 tmp = PISM.IceModelVec2S(grid, 'tmp', False) 67 68 u.getSurfaceValues(tmp, md.vecs.thk) 69 vel_sia.set_component(0, tmp) 70 71 v.getSurfaceValues(tmp, md.vecs.thk) 72 vel_sia.set_component(1, tmp) 73 74 return vel_sia