|
PISM, A Parallel Ice Sheet Model stable 0.4.1779
|
#include <PISMSurface.hh>

Public Member Functions | |
| PSForceThickness (IceGrid &g, const NCConfigVariable &conf, PISMSurfaceModel *input) | |
| virtual | ~PSForceThickness () |
| PetscErrorCode | init (PISMVars &vars) |
| virtual void | attach_atmosphere_model (PISMAtmosphereModel *input) |
| virtual PetscErrorCode | ice_surface_mass_flux (IceModelVec2S &result) |
| virtual PetscErrorCode | ice_surface_temperature (IceModelVec2S &result) |
| Does not modify ice surface temperature. | |
| virtual PetscErrorCode | max_timestep (PetscReal t_years, PetscReal &dt_years) |
| virtual void | add_vars_to_output (string keyword, set< string > &result) |
| Adds ftt_modified_acab to "big" output files. | |
| virtual PetscErrorCode | define_variables (set< string > vars, const NCTool &nc, nc_type nctype) |
| virtual PetscErrorCode | write_variables (set< string > vars, string filename) |
Protected Attributes | |
| string | input_file |
| PetscReal | alpha |
| IceModelVec2S * | ice_thickness |
| current ice thickness produced by IceModel. | |
| IceModelVec2S | target_thickness |
| IceModelVec2S | ftt_mask |
| IceModelVec2S | ftt_modified_acab |
A class implementing a modified surface mass balance which forces ice thickness to a given target by the end of the run.
Definition at line 281 of file PISMSurface.hh.
| PSForceThickness | ( | IceGrid & | g, |
| const NCConfigVariable & | conf, | ||
| PISMSurfaceModel * | input | ||
| ) | [inline] |
Definition at line 283 of file PISMSurface.hh.
References alpha, PISMComponent::config, and ice_thickness.
| virtual ~PSForceThickness | ( | ) | [inline, virtual] |
Definition at line 290 of file PISMSurface.hh.
Adds ftt_modified_acab to "big" output files.
Reimplemented from Modifier< PISMSurfaceModel >.
Definition at line 917 of file PISMSurface.cc.
References PISMComponent::add_vars_to_output(), and Modifier< PISMSurfaceModel >::input_model.
| void attach_atmosphere_model | ( | PISMAtmosphereModel * | input | ) | [virtual] |
Reimplemented from PSModifier.
Definition at line 656 of file PISMSurface.cc.
References PISMSurfaceModel::attach_atmosphere_model(), and Modifier< PISMSurfaceModel >::input_model.
| PetscErrorCode define_variables | ( | set< string > | , |
| const NCTool & | , | ||
| nc_type | |||
| ) | [virtual] |
Defines requested couplings fields to file and/or asks an attached model to do so.
Reimplemented from Modifier< PISMSurfaceModel >.
Definition at line 926 of file PISMSurface.cc.
References PISMSurfaceModel::define_variables(), ftt_mask, ftt_modified_acab, Modifier< PISMSurfaceModel >::input_model, and target_thickness.
| PetscErrorCode ice_surface_mass_flux | ( | IceModelVec2S & | result | ) | [virtual] |
If -force_to_thk foo.nc is in use then vthktarget will have a target ice thickness map. Let
be this target thickness, and let
be the current model thickness. Recall that the mass continuity equation solved by IceModel::massContExplicitStep() is
and that this procedure is supposed to produce
. In this context, the semantics of -force_to_thk are that
is modified by a multiple of the difference between the target thickness and the current thickness. In particular, the
that is produced here is
where
is determined below. Note
is positive in areas where
, so we are adding mass there, and we are ablating in the other case.
Let
be the start time and
the end time for the run. Without flow or basal mass balance, or any surface mass balance other than the
computed here, we are solving
Let's assume
. This initial value problem has solution
and so
The constant
has a default value pism_config:force_to_thickness_alpha.
The final feature is that we turn on this mechanism so it is harshest near the end of the run. In particular,
where
The next exacmple uses files generated from the EISMINT-Greenland experiment; see the corresponding chapter of the User's Manual.
Suppose we regard the SSL2 run as a spin-up to reach a better temperature field. It is a spinup in which the surface was allowed to evolve. Assume the early file green20km_y1.nc has the target thickness, because it essentially has the input thickness. This script adds a 500 a run, to finalize the spinup, in which the ice sheet geometry goes from the the thickness values in green_ssl2_110ka.nc to values very close to those in green20km_y1.nc:
#!/bin/bash NN=8 mpiexec -n $NN pismr -ys -500.0 -ye 0 -skip 5 -i green_ssl2_110ka.nc -atmosphere searise_greenland \ -surface pdd,forcing -pdd_fausto -force_to_thk green20km_y1.nc \ -o with_force.nc -ts_file ts_with_force.nc -ts_times -500:10:0 mpiexec -n $NN pismr -ys -500.0 -ye 0 -skip 5 -i green_ssl2_110ka.nc -atmosphere searise_greenland \ -surface pdd -pdd_fausto \ -o no_force.nc -ts_file ts_no_force.nc -ts_times -500:10:0 mpiexec -n $NN pismr -ys -500.0 -ye 0 -skip 5 -i green_ssl2_110ka.nc -atmosphere searise_greenland \ -surface pdd,forcing -pdd_fausto -force_to_thk green20km_y1.nc -force_to_thk_alpha 0.0002 \ -o weak_force.nc -ts_file ts_weak_force.nc -ts_times -500:10:0
The script also has a run with no forcing, and one with forcing at a lower alpha value, a factor of ten smaller than the default.
As shown below, the time series for ivol in the above time series files show that the force-to-thickness mechanism is forcing a system with negative feedback. We see decaying oscillations toward the intended volume.
Volume results from the -force_to_thk mechanism.
Reimplemented from PSModifier.
Definition at line 838 of file PISMSurface.cc.
References alpha, ftt_mask, ftt_modified_acab, PISMComponent::grid, exactV::H(), PISMSurfaceModel::ice_surface_mass_flux(), ice_thickness, Modifier< PISMSurfaceModel >::input_model, PISMComponent_TS::t, and target_thickness.
| PetscErrorCode ice_surface_temperature | ( | IceModelVec2S & | result | ) | [virtual] |
Does not modify ice surface temperature.
Reimplemented from PSModifier.
Definition at line 882 of file PISMSurface.cc.
References PISMSurfaceModel::ice_surface_temperature(), and Modifier< PISMSurfaceModel >::input_model.
| PetscErrorCode init | ( | PISMVars & | vars | ) | [virtual] |
Reimplemented from PISMSurfaceModel.
Definition at line 660 of file PISMSurface.cc.
References alpha, ftt_mask, ftt_modified_acab, PISMComponent::grid, ice_thickness, PISMSurfaceModel::init(), input_file, Modifier< PISMSurfaceModel >::input_model, vnreport::nc, secpera, and target_thickness.
The timestep restriction is, by direct analogy, the same as for
with explicit (forward) Euler. If
is the time step then Euler is
. We require for stability that
, which is to say
. Equivalently (since
),
Therefore we set here
Reimplemented from Modifier< PISMSurfaceModel >.
Definition at line 901 of file PISMSurface.cc.
References alpha, Modifier< PISMSurfaceModel >::input_model, PISMComponent_TS::max_timestep(), and secpera.
Writes requested couplings fields to file and/or asks an attached model to do so.
Reimplemented from Modifier< PISMSurfaceModel >.
Definition at line 946 of file PISMSurface.cc.
References ftt_mask, ftt_modified_acab, Modifier< PISMSurfaceModel >::input_model, target_thickness, and PISMSurfaceModel::write_variables().
Definition at line 301 of file PISMSurface.hh.
Referenced by ice_surface_mass_flux(), init(), max_timestep(), and PSForceThickness().
IceModelVec2S ftt_mask [protected] |
Definition at line 303 of file PISMSurface.hh.
Referenced by define_variables(), ice_surface_mass_flux(), init(), and write_variables().
IceModelVec2S ftt_modified_acab [protected] |
Definition at line 303 of file PISMSurface.hh.
Referenced by define_variables(), ice_surface_mass_flux(), init(), and write_variables().
IceModelVec2S* ice_thickness [protected] |
current ice thickness produced by IceModel.
Definition at line 302 of file PISMSurface.hh.
Referenced by ice_surface_mass_flux(), init(), and PSForceThickness().
string input_file [protected] |
Definition at line 300 of file PISMSurface.hh.
Referenced by init().
IceModelVec2S target_thickness [protected] |
Definition at line 303 of file PISMSurface.hh.
Referenced by define_variables(), ice_surface_mass_flux(), init(), and write_variables().
1.7.3