diff --git a/ChangeLog b/ChangeLog index a8b775fa8b..6e80b659f9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -26,7 +26,7 @@ Changes since 0.4 (around June 1, 2011) (in no particular order, need to be orga * Implemented -tauc_to_phi * Updated and improved modeling examples * Removed pgrn - * Removed EISMINT-Ross + * Removed EISMINT-Ross (and the pross executable) * Inverse modeling tools (not part of the release) diff --git a/doc/browser/std_names.txt b/doc/browser/std_names.txt index a2c617ba34..753fc27624 100644 --- a/doc/browser/std_names.txt +++ b/doc/browser/std_names.txt @@ -2,8 +2,8 @@ \section existing Existing standard names -We start by listing standard names from the CF 1.4 Standard Name Table. The subset here -is a small subset of the CF 1.4 standard name table. We list only +We start by listing standard names from the CF 1.6 Standard Name Table. The subset here +is a small subset of the CF 1.6 standard name table. We list only \li those with "land_ice" in the name and/or \li those currently used by the Parallel Ice Sheet Model (PISM). @@ -58,7 +58,7 @@ These are merely proposed by Bueler and Aschwanden, for now. land_ice_basal_material_yield_stressPataucvtauc [IceModelVec2S] land_ice_basal_material_friction_angledegreetillphivtillphi [IceModelVec2S]majority of standard names with "angle" use canonical units "degree" land_ice_surface_temperature_below_firnKartmartm [IceModelVec2S] - land_ice_upward_velocitym s-1wvelw3 [IceModelVec3]compare CF 1.4 names "upward_air_velocity" and "upward_sea_water_velocity" + land_ice_upward_velocitym s-1wvelw3 [IceModelVec3]compare CF 1.6 names "upward_air_velocity" and "upward_sea_water_velocity" lithosphere_temperatureKlitho_tempTb3 [IceModelVec3Bedrock]here top of lithosphere is at "bedrock_altitude"; is that standard? upward_geothermal_flux_in_lithosphereW m-2bheatflxvGhf [IceModelVec2S]typically applied at depth in lithosphere; compare "upward_geothermal_heat_flux_at_sea_floor" land_ice_specific_enthalpyJ kg-1enthalpyEnth3 [IceModelVec3]enthalpy is defined in PISM to be sensible plus latent heat, plus potential energy of pressure; there is a nontrivial issue of the scaling; the enthalpy value for 273.15 K (cold) ice at atmospheric pressure is a possible standard diff --git a/doc/userman/hard-choices.tex b/doc/userman/hard-choices.tex index 1140df2ab7..0d92fec048 100644 --- a/doc/userman/hard-choices.tex +++ b/doc/userman/hard-choices.tex @@ -44,6 +44,7 @@ \subsection{Controlling basal strength} \label{subsect:basestrength} \textbf{Option} & \textbf{Description} \\\midrule \txtopt{topg_to_phi}{\emph{list of 4 numbers}} & Compute $\phi$ using \eqref{eq:1} and \eqref{eq:2}.\\ + \intextoption{pseudo_plastic} & enables the pseudo-plastic till model \\ \txtopt{plastic_pwfrac}{\emph{pure number}} & Set what fraction of overburden pressure is assumed as the till pore water pressure. Only relevant at basal points where there is a positive amount of basal water.\\ \intextoption{plastic_c0} & Set the value of the till cohesion ($c_{0}$) in the plastic till model. The value is a pressure, given in kPa.\\ \txtopt{plastic_reg}{(m/a)} & Set the value of $\eps$ regularization of plastic till; this is the second ``$\eps$'' in formula (4.1) in \cite{SchoofStream}. The default is $0.01$.\\ @@ -57,7 +58,7 @@ \subsection{Controlling basal strength} \label{subsect:basestrength} \label{tab:basal-strength} \end{table} -Option \texttt{-plastic_pwfrac} determines $\alpha$, the quantity controlling how $p_w$ is determined from the effective thickness of basal water, the quantity $w=$\texttt{bwat}; see the next subsection. The formula is $p_w = \alpha\, w \rho g H$. See \cite{BKAJS}. +Option \texttt{-plastic_pwfrac} determines $\alpha$, the quantity controlling how $p_w$ is determined from the effective thickness of basal water, the quantity $w=\mathtt{bwat}$; see the next subsection. The formula is $p_w = \alpha\, w \rho g H$. See \cite{BKAJS}. We find that an effective, though heuristic, way to determine \texttt{tillphi} is to make it a function of bed elevation \cite{BKAJS}. This heuristic is motivated by hypothesis that basal material with a marine history should be weak \cite{HuybrechtsdeWolde}. @@ -78,6 +79,11 @@ \subsection{Controlling basal strength} \label{subsect:basestrength} $$\tau_b = \tau_c \frac{|\mathbf{u}|^{q-1}}{u_{\text{threshold}}^q}\, \mathbf{u}.$$ Here $\tau_c$ corresponds to the variable \texttt{tauc} in PISM input and output files, $q$ is the power controlled by \texttt{-pseudo_plastic_q}, and the threshold velocity $u_{\text{threshold}}$ is controlled by \texttt{-pseudo_plastic_uthreshold}. The purely plastic case is $q=0$---see \cite{SchoofStream} for precise interpretation---and the linear case is $q=1$, in which case the coefficient of velocity, $\tau_c/u_{\text{threshold}}$, is more commonly called $\beta$ or $\beta^2$ \cite{MacAyeal}. +\begin{quote} + \textbf{WARNING!} Options \texttt{-pseudo_plastic_q} and \texttt{-pseudo_plastic_uthreshold} have no effect if \texttt{-preudo_plastic} is not set. +\end{quote} + + See \emph{PISM Source Code browser}, source files in \texttt{src/base/basal_resistance}, and \cite{BBssasliding,BKAJS} for more details. The major example of \texttt{-ssa_sliding} usage is in the first section of this manual. A made-up example, in which sliding happens in the ``trough'', is diff --git a/doc/userman/manual.tex b/doc/userman/manual.tex index 5fd7c7a6bf..2709ab1d29 100644 --- a/doc/userman/manual.tex +++ b/doc/userman/manual.tex @@ -405,7 +405,7 @@ \subsection{Initialization from a saved model state} ``Initialization''\index{i ignore these velocities use \texttt{-dontreadSSAvels}. \subsubsection*{\texttt{-i} file format} -PISM produces\footnote{Or, more accurately, attempts to produce; please let us know about violations you come across.} CF-1.4 compliant NetCDF\index{PISM!NetCDF file format}\index{NetCDF} files. The easiest way to learn the output format \emph{and} the \texttt{-i} format is to do a simple run and then look at the metadata in the resulting file, like this: +PISM produces\footnote{Or, more accurately, attempts to produce; please let us know about violations you come across.} CF-1.5 compliant NetCDF\index{PISM!NetCDF file format}\index{NetCDF} files. The easiest way to learn the output format \emph{and} the \texttt{-i} format is to do a simple run and then look at the metadata in the resulting file, like this: \begin{verbatim} $ pisms -eisII A -y 10 -o foo.nc $ ncdump -h foo.nc | less @@ -413,7 +413,7 @@ \subsubsection*{\texttt{-i} file format} Note that variables have a \texttt{pism_intent}\index{PISM!\texttt{pism_intent} attribute} attribute. When that attribute is \texttt{diagnostic}, the variable can be deleted from the file without affecting whether PISM can use it as a \texttt{-i} input file. Variables with \texttt{pism_intent} = \texttt{model_state}, by contrast, must be present for use with \texttt{-i}. -Regarding the automatically produced time variable, which has a \texttt{units} attribute like \texttt{"years since 1-1-1"}, note that CF metadata conventions require using a reference date in the units string of a time (\texttt{t}) variable. PISM completely ignores this reference date. +Regarding the automatically produced time variable, which has a \texttt{units} attribute like \texttt{"seconds since 1-1-1"}, note that CF metadata conventions require using a reference date in the units string of a time (\texttt{time}) variable. By default PISM ignores this reference date. \subsection{Bootstrapping} @@ -437,6 +437,8 @@ \subsection{Bootstrapping} When using \fileopt{boot_file} you will need to specify both grid dimensions (using \texttt{-Mx}, \texttt{-My} and \texttt{-Mz}) and the height of the computational box for the ice with \texttt{-Lz}. The data read from the file can determine the horizontal extent of the model, if options \texttt{-Lx}, \texttt{-Ly} are not set. The additional specification of vertical extent by \texttt{-Lz} is reasonably natural because realistic data used in ``bootstrapping'' are two-dimensional. Not specifying all four options \texttt{-Mx}, \texttt{-My}, \texttt{-Mz}, \texttt{-Lz} \emph{when bootstrapping with} \texttt{-boot_file} is an error. +If \texttt{-Lx} and \texttt{-Ly} specify horizontal grid dimensions smaller than in the bootstrapping file, PISM will cut out the \emph{center} portion of the domain. Options \intextoption{x_range} and \intextoption{y_range} each take a list of two numbers, a list of minimum and maximum $x$ and $y$ coordinates, respectively (in meters). This makes it possible to select a subset that is not in the center of a bootstrapping file grid. + \subsubsection*{\texttt{-boot_file} file format} \label{sec:bootstrapping-format} Allowed formats for a bootstrapping file are relatively simple to describe. \begin{enumerate} diff --git a/doc/userman/modeling-choices.tex b/doc/userman/modeling-choices.tex index 4cb0ae041e..a66159c723 100644 --- a/doc/userman/modeling-choices.tex +++ b/doc/userman/modeling-choices.tex @@ -88,6 +88,7 @@ \subsection{Model time} \\[2em] \noindent The default value for the end year is the start year (\texttt{-ys} or initialized model time from file) plus the default or given (\texttt{-y}) run length. If both \texttt{-ys} and \texttt{-ye} are used then the run length is set to the difference. Using all three of \texttt{-ys}, \texttt{-y} and \texttt{-ys} is not allowed. +Most of PISM (and its ice dynamics core in particular) only needs to know the length of the current time-step. This explains the unsophisticated interface described here. Careful application of climate data and model validation requires well-organized management of model time, though. Please see the \emph{PISM's climate forcing components} manual for an alternative, calendar-aware, time-management interface. \subsection{Diagnostic computations} \label{sec:diagnostic-computations} @@ -122,11 +123,13 @@ \subsection{Flotation criterion and mask} \label{subsect:floatmask} The most ba \small \begin{tabular}{p{0.25\linewidth}p{0.65\linewidth}} \toprule - \textbf{Mask value} & \textbf{Meaning}\\\midrule - 1=\texttt{MASK_SHEET} & ice is grounded (and only the SIA is always applied) \\ - 2=\texttt{MASK_DRAGGING_SHEET} & ice is grounded (and the SSA is applied if option \texttt{-ssa} is given) \\ - 3=\texttt{MASK_FLOATING} & ice is floating (and the SSA is applied if option \texttt{-ssa} is given) \\ - 7=\texttt{MASK_FLOATING_AT_TIME_0} & same as \texttt{MASK_FLOATING}, but the grid point was ice free ocean at initialization of the model by \texttt{-boot_file}; ice with this value will calve off if option \texttt{-ocean_kill} is given. + \textbf{Mask value} & \textbf{Meaning}\\ + \midrule + -1=\texttt{MASK_UNKNOWN} & not set, does not appear in PISM output files \\ + 0=\texttt{MASK_ICE_FREE_BEDROCK} & ice free bedrock \\ + 2=\texttt{MASK_GROUNDED}& ice is grounded (and only the SIA is always applied) \\ + 3=\texttt{MASK_FLOATING} & ice is floating (and the SSA is applied if one of \texttt{-ssa_sliding} or \texttt{-ssa_floating_only} is given) \\ + 4=\texttt{MASK_ICE_FREE_OCEAN} & ice-free ocean \\ \\\bottomrule \end{tabular} \normalsize @@ -134,8 +137,7 @@ \subsection{Flotation criterion and mask} \label{subsect:floatmask} The most ba \caption{The PISM mask\index{mask}, in combination with user options, determines the dynamical model.} \end{table} -Assuming the geometry of the ice evolves (which can be turned off by option \texttt{-no_mass}), and assuming an ocean exists (which can be turned off by option \texttt{-dry}), then at each time step the mask changes by the flotation criterion. Ice which becomes floating is marked as \texttt{MASK_FLOATING} while ice which becomes grounded is either marked as \texttt{MASK_SHEET} or \texttt{MASK_DRAGGING}. The latter case occurs if the option \texttt{-ssa_sliding} is used, while otherwise all points are marked \texttt{MASK_SHEET}. - +Assuming the geometry of the ice evolves (which can be turned off by option \texttt{-no_mass}), and assuming an ocean exists (which can be turned off by option \texttt{-dry}), then at each time step the mask changes by the flotation criterion. Ice which becomes floating is marked as \texttt{MASK_FLOATING} while ice which becomes grounded is marked as \texttt{MASK_GROUNDED}. \subsection{Rheology} \label{sec:rheology} @@ -145,7 +147,7 @@ \subsection{Rheology} Note that a ``flow law'' here means the function $F(\sigma,T,\omega,P,d)$ in the relation $$\dot \eps_{ij} = F(\sigma,T,\omega,P,d)\, \sigma_{ij}'$$ -where $\dot \eps_{ij}$ is the strain rate tensor, $\sigma_{ij}'$ is the stress deviator tensor, $T$ is the ice temperature, $\omega$ is the liquid water fraction in the ice, $\sigma^2 = \frac{1}{2} \|\sigma_{ij}'\|_F$, so $\sigma$ is the second invariant of the stress deviator tensor, $P$ is the pressure, and $d$ is the grain size. For example, $F = A \sigma^{n-1}$ is the isothermal Glen law.. That is, we are addressing isotropic flow laws only. In PISM one can choose the scalar function $F$ reasonably arbitrarily by modifying source code,\footnote{See source files \texttt{flowlaws.hh}, \texttt{flowlaws.cc} in \texttt{src/base/rheology/}.} or use the single polythermal law (above), or choose among a number of ``cold ice'' laws listed in table \ref{tab:flowlaw}. +where $\dot \eps_{ij}$ is the strain rate tensor, $\sigma_{ij}'$ is the stress deviator tensor, $T$ is the ice temperature, $\omega$ is the liquid water fraction in the ice, $\sigma^2 = \frac{1}{2} \|\sigma_{ij}'\|_F$, so $\sigma$ is the second invariant of the stress deviator tensor, $P$ is the pressure, and $d$ is the grain size. For example, $F = A \sigma^{n-1}$ is the isothermal Glen law. That is, we are addressing isotropic flow laws only. In PISM one can choose the scalar function $F$ reasonably arbitrarily by modifying source code,\footnote{See source files \texttt{flowlaws.hh}, \texttt{flowlaws.cc} in \texttt{src/base/rheology/}.} or use the single polythermal law (above), or choose among a number of ``cold ice'' laws listed in table \ref{tab:flowlaw}. Note that the inverse form of such a flow law in needed for ice shelves and ice streams: $$\sigma_{ij}' = 2 \nu(\dot\eps,T,\omega,P,d)\,\dot \eps_{ij} $$ @@ -153,9 +155,9 @@ \subsection{Rheology} The command-line options \intextoption{sia_e} and \intextoption{ssa_e} set flow enhancement factors for the SIA and SSA respectively. These options can be used with any flow law. (The enhancement factor $e$ alters the SIA flow law to be ``$\dot \eps_{ij} = e\, F(\sigma,T,\omega,P,d)\, \sigma_{ij}'.$'') -The command-line option \intextoption{flow_law} control the flow law in the \texttt{-cold} mode. Arguments to \texttt{-flow_law} are in table \ref{tab:flowlaw} below. +Command-line options \intextoption{sia_flow_law} and \intextoption{ssa_flow_law} control SIA and SSA the flow laws in the \texttt{-cold} mode. Allowed arguments are listed in table \ref{tab:flowlaw} below. -Flow law parameters such as ice softness can be changed using configuration parameters (see section \ref{sec:pism-defaults}) and the implementation of flow laws in the \emph{Source Code Browser}. +Flow law parameters such as ice softness can be changed using configuration parameters (see section \ref{sec:pism-defaults} and the implementation of flow laws in the \emph{Source Code Browser}). \begin{table}[ht] \centering @@ -184,7 +186,7 @@ \subsection{Choosing the stress balance} \label{subsect:ssacontrol} The shallow shelf approximation (SSA)\index{SSA (shallow shelf approximation)} stress balance is used in PISM to describe the sliding of grounded ice and the formation of ice streams \cite{BBssasliding}, as well as being the only stress balance which applies to floating ice. For the SSA with ``plastic'' basal resistance, the locations of ice streams are determined as part of a free boundary problem identified by Schoof \cite{SchoofStream}. Schoof's model describes emergent ice streams within a larger ice sheet and ice shelf system. It explains the existence of ice streams by a combination of the plastic failure of the till and the SSA stress balance. Schoof's model is one way to understand how PISM uses the SSA. -We also assert that this SSA description of ice streams should be regarded as a preferred ``sliding law'' for the SIA \cite{BBssasliding}.\index{SIA (shallow ice approximation)!sliding laws} It should be used instead of classical SIA sliding laws which make ice basal velocity a local function of the basal value of the driving stress, a quantity which can be quite different from the actual basal stress when there is sliding. This combination of SIA+SSA is ``hybrid'' approximation of the Stokes model \cite{Winkelmannetal2011}. +We also assert that this SSA description of ice streams should be regarded as a preferred ``sliding law'' for the SIA \cite{BBssasliding}.\index{SIA (shallow ice approximation)!sliding laws} It should be used instead of classical SIA sliding laws which make ice basal velocity a local function of the basal value of the driving stress, a quantity which can be quite different from the actual basal stress when there is sliding. This combination of SIA+SSA is a ``hybrid'' approximation of the Stokes model \cite{Winkelmannetal2011}. In PISM the user gives the option \texttt{-ssa_sliding} to turn on the use of the plastic till SSA as a sliding law. At all grounded points a yield stress, or pseudo-yield-stress in the case of power law sliding (subsection \ref{subsect:basestrength}), is computed from the amount of stored basal water and from a (generally) spatially-varying till strength. The amount of stored basal water is thermodynamically determined. See subsection \ref{subsect:basestrength}. Table \ref{tab:stressbalchoice} describes the basic choice of stress balance, while Table \ref{tab:ssausage} describes additional controls on the manner of solution. @@ -260,7 +262,7 @@ \subsection{Earth deformation models} \label{subsect:beddef} \index{earth deform The first model \verb|-bed_def iso|, is instantaneous pointwise isostasy. This model assumes that the bed at the starting time is in equilibrium with the load. Then, as the ice geometry evolves, the bed elevation is equal to the starting bed elevation minus a multiple of the increase in ice thickness from the starting time: $b(t,x,y) = b(0,x,y) - f [H(t,x,y) - H(0,x,y)]$. Here $f$ is the density of ice divided by the density of the mantle, so its value is determined by setting the values of \verb|lithosphere_density| and \verb|ice_density| in the configuration file; see subsection \ref{sec:pism-defaults}. For an example and verification, see Test H in Verification section. -The second model \verb|-bed_def lc| is much more effective. It is based on papers by Lingle and Clark \cite{LingleClark}\index{People!Lingle, Craig} \index{People!Clark, J.} and Bueler and others \cite{BLKfastearth}. It generalizes and improves the most widely-used earth deformation model in ice sheet modeling, the flat earth Elastic Lithosphere Relaxing Asthenosphere (ELRA) model \cite{Greve2001}. It imposes essentially no computational burden because the Fast Fourier Transform is used to solve the linear differential equation \cite{BLKfastearth}. When using this model in PISM, the rate of bed movement (uplift) is stored in the PISM output file and then is used to initialize the next part of the run. In fact, if gridded ``observed'' uplift data is available, for instance from a combination of actual point observations and/or paleo ice load modeling, and it that uplift field is put in a NetCDF variable with standard name \verb|tendency_of_bedrock_altitude| in the \texttt{-boot_file} file, then this model will initialize so that it starts with the given uplift rate. +The second model \verb|-bed_def lc| is much more effective. It is based on papers by Lingle and Clark \cite{LingleClark}\index{People!Lingle, Craig} \index{People!Clark, J.} and Bueler and others \cite{BLKfastearth}. It generalizes and improves the most widely-used earth deformation model in ice sheet modeling, the flat earth Elastic Lithosphere Relaxing Asthenosphere (ELRA) model \cite{Greve2001}. It imposes essentially no computational burden because the Fast Fourier Transform is used to solve the linear differential equation \cite{BLKfastearth}. When using this model in PISM, the rate of bed movement (uplift) is stored in the PISM output file and then is used to initialize the next part of the run. In fact, if gridded ``observed'' uplift data is available, for instance from a combination of actual point observations and/or paleo ice load modeling, and if that uplift field is put in a NetCDF variable with standard name \verb|tendency_of_bedrock_altitude| in the \texttt{-boot_file} file, then this model will initialize so that it starts with the given uplift rate. Minimal example runs to compare these models: \begin{verbatim} @@ -276,7 +278,13 @@ \subsection{Disabling PISM components} \label{sec:turning-off} \optsection{Disabling PISM components} -Major model components, unlike ``peripheral'' ones like bed deformation, do not need to be turned ``on'' explicitly.\footnote{It would be a hassle to ask for SIA computations every time you need them, for example.} However, in some cases it is useful to be able to disable particular components (during model spin-up, for example). Currently PISM has switches disabling the mass-continuity step (command-line option \intextoption{no_mass}), energy balance computation (option \intextoption{no_energy}) and polythermal energy balance computation: option \intextoption{cold} makes PISM use temperature instead of enthalpy in the energy balance code. +Major model components, unlike ``peripheral'' ones like bed deformation, do not need to be turned ``on'' explicitly.\footnote{It would be a hassle to ask for SIA computations every time you need them, for example.} However, in some cases it is useful to be able to disable particular components (during model spin-up, for example). Currently PISM has the following switches: +\begin{itemize} +\item \intextoption{no_mass} disables the mass-continuity step +\item \intextoption{no_energy} disables the energy balance computation +\item \intextoption{cont} makes PISM use temperature instead of enthalpy in the energy balance code +\item \intextoption{no_sia} disables the SIA stress balance computation (useful for ice-shelf modeling) +\end{itemize} %%% Local Variables: %%% mode: latex diff --git a/doc/userman/pism-pik.tex b/doc/userman/pism-pik.tex index f43843281b..c5ead0fe8c 100644 --- a/doc/userman/pism-pik.tex +++ b/doc/userman/pism-pik.tex @@ -52,20 +52,22 @@ \subsection{Stress condition at calving fronts} \subsection{Calving} \label{sec:calving} \optsection{Calving} -At the start, PISM-PIK included a physically based 2D-calving parameterization, further developed in \cite{LevermannAlbrecht11}. This calving parameterization is turned on by option \intextoption{eigen_calving} $(k)$. Average calving rates, $c$, are proportional to the product of principal components of the horizontal strain rates, $\dot{\epsilon}_{_\pm}$, derived from SSA-velocities +At the start, PISM-PIK included a physically based 2D-calving parameterization, further developed in \cite{LevermannAlbrecht11}. This calving parameterization is turned on by option \intextoption{eigen_calving}. Average calving rates, $c$, are proportional to the product of principal components of the horizontal strain rates, $\dot{\epsilon}_{_\pm}$, derived from SSA-velocities \begin{equation} \label{eq: calv2} -c = k\; \dot{\epsilon}_{_+}\; \dot{\epsilon}_{_-}\quad\text{and}\quad\dot{\epsilon}_{_\pm}>0\:. +c = K\; \dot{\epsilon}_{_+}\; \dot{\epsilon}_{_-}\quad\text{and}\quad\dot{\epsilon}_{_\pm}>0\:. \end{equation} -Constant $k$ is a configuration parameter ($k=$\texttt{pism_config:eigen_calving} in \texttt{src/pism_config.cdl}) comprising material properties of the ice at the front. The actual strain rate pattern very much depends on the geometry and boundary conditions along the the confinements of an ice shelf (coast, ice rises, front position). The strain rate pattern provides information in which regions preexisting fractures are likely to propagate, forming rifts (in two directions). These rifts may ultimately intersect, leading to the release of icebergs. This and other ice shelf model calving models are not intended to resolve individual rifts or calving events. This first-order approach produces structurally-stable calving front positions which agree well with observations. Calving rates balance terminal SSA velocities on average. +The constant $K$ incorporating material properties of the ice at the front can be set using the \intextoption{eigen_calving_K} option or a configuration parameter (\texttt{eigen_calving_K} in \texttt{src/pism_config.cdl}). -The partially-filled grid cell formulation (subsection \ref{sec:part-grid}) provides a suitable framework to relate the calving rate produced by \intextoption{eigen_calving} to the mass transport scheme at the ice shelf terminus. Ice shelf front advance and retreat due to calving are limited to a maximum of one grid cell length per (adaptive) timestep. +The actual strain rate pattern strongly depends on the geometry and boundary conditions along the the confinements of an ice shelf (coast, ice rises, front position). The strain rate pattern provides information in which regions preexisting fractures are likely to propagate, forming rifts (in two directions). These rifts may ultimately intersect, leading to the release of icebergs. This and other ice shelf model calving models are not intended to resolve individual rifts or calving events. This first-order approach produces structurally-stable calving front positions which agree well with observations. Calving rates balance terminal SSA velocities on average. -PISM also includes three more basic calving mechanisms (Table \ref{tab:calving}). Option \intextoption{calving_at_thickness} is based on the observation that ice shelf calving fronts are commonly thicker than about 150--250\,m (even though the physical reasons are not clear yet). Accordingly, any floating ice thinner than $H_{\textrm{cr}}$ is removed along the front, at a rate at most one grid cell per time step. +The partially-filled grid cell formulation (subsection \ref{sec:part-grid}) provides a framework suitable to relate the calving rate produced by \intextoption{eigen_calving} to the mass transport scheme at the ice shelf terminus. Ice shelf front advance and retreat due to calving are limited to a maximum of one grid cell length per (adaptive) time step. + +PISM also includes three more basic calving mechanisms (Table \ref{tab:calving}). The option \intextoption{thickness_calving} is based on the observation that ice shelf calving fronts are commonly thicker than about 150--250\,m (even though the physical reasons are not clear yet). Accordingly, any floating ice thinner than $H_{\textrm{cr}}$ is removed along the front, at a rate at most one grid cell per time step. The value of $H_{\mathrm{cr}}$ can be set using the \intextoption{calving_at_thickness} option or the \texttt{calving_at_thickness} configuration parameter. Option \intextoption{float_kill} removes (calves) any ice that satisfies the flotation criterion; this option means there are no ice shelves in the model at all. -Option \intextoption{ocean_kill} is based on the mask values at the beginning of the run. Any locations which were ice-free ocean at the beginning of the run are places where floating ice is removed. +Option \fileopt{ocean_kill} reads in the ice thickness field from a file. Any locations which were ice-free ocean in the provided data set are places where floating ice is removed. By omitting the file name it is possible to use the ice thickness at the beginning of the run. When \begin{table}[ht] \centering @@ -73,10 +75,12 @@ \subsection{Calving} \toprule \textbf{Option} & \textbf{Description} \\ \midrule - \intextoption{eigen_calving ($k$)} & Physically-based calving parameterization \cite{LevermannAlbrecht11,Winkelmannetal2011}. Calving proportional to product of principle strain rates, where they are positive. \\ - \intextoption{calving_at_thickness ($H_{\textrm{cr}}$)} & Grid-cell wise calving depending on terminal ice thickness.\\ + \intextoption{eigen_calving} & Physically-based calving parameterization \cite{LevermannAlbrecht11,Winkelmannetal2011}. Calving proportional to product of principle strain rates, where they are positive. \\ + \intextoption{eigen_calving_K} ($K$) & sets the calving parameter $K$ \\ + \intextoption{thickness_calving} & enables grid-cell wise calving depending on terminal ice thickness \\ + \intextoption{calving_at_thickness ($H_{\textrm{cr}}$)} & sets the terminal thickness threshold \\ \intextoption{float_kill} & All floating ice is calved off immediately.\\ - \intextoption{ocean_kill} & All ice flowing into grid cells marked as \texttt{MASK_FLOATING_AT_TIME_0}, and satisfying the flotation criterion, is calved off. \\ + \fileopt{ocean_kill} & All ice flowing into grid cells marked as ``ice free ocean'' according to the ice thickness in a provided file \\ \bottomrule \end{tabular} \caption{Calving options} @@ -89,9 +93,9 @@ \subsection{Iceberg removal} The PISM-PIK calving mechanism removes ice along the seaward front of the ice shelf domain. This can lead to isolated grid cells of floating (or partially filled) ice or even a patch of floating ice (iceberg) fully surrounded by ice free ocean neighbors and hence detached from the feeding ice sheet. In such a situation the stress balance solver in SSA is not well-posed \cite{SchoofStream}. Option \intextoption{kill_iceberg} cleans this up. It identifies such regions by checking iteratively for grid neighbors that are grounded, creating an ``iceberg mask'' showing floating ice that is, and is not (icebergs), attached to grounded ice. It then eliminates these free-floating icebergs. -%%% Local Variables: +%%% Local Variables: %%% mode: latex %%% TeX-master: "manual" -%%% End: +%%% End: % LocalWords: html PISM PISM's diff --git a/doc/userman/practical-usage.tex b/doc/userman/practical-usage.tex index 1336c142bb..43e80653b8 100644 --- a/doc/userman/practical-usage.tex +++ b/doc/userman/practical-usage.tex @@ -71,12 +71,12 @@ \subsubsection{PISM file I/O performance} \texttt{t,z,y,x} order. The reason is that PISM uses the \texttt{x,y,z} order internally\footnote{This - is not likely to change.} and transposing an array stored in memory is an -inherently computationally expensive operation, because it involves -simultaneously accessing memory locations that are ``far away'' from each -other. + is not likely to change.} and writing an array in a different order is an +inherently expensive operation. -You can choose one of the three supported output orders using the \intextoption{o_order} option with one of \texttt{xyz}, \texttt{yxz}, and \texttt{zyx} as the argument. +You can choose one of the three supported output orders using the +\intextoption{o_order} option with one of \texttt{xyz}, \texttt{yxz}, and +\texttt{zyx} as the argument. To transpose dimensions in an existing file, use the \texttt{ncpdq} (``permute dimensions quickly'') tool from the NCO (\emph{NetCDF Operators}) suite. @@ -88,10 +88,22 @@ \subsubsection{PISM file I/O performance} to turn \texttt{bad.nc} (with an unspecified inconvenient storage order) into \texttt{good.nc} using the \texttt{t,z,y,x} order. +PISM also supports NetCDF-4 parallel I/O, which gives better performance in +high-resolution runs and avoids NetCDF-3 file format limitations. (In a +NetCDF-3 file a variable record cannot exceed 4 gigabytes.) Build PISM with +parallel NetCDF-4 and use \txtopt{o_format}{\texttt{netcdf4_parallel}} to +enable this code. -\subsection{Saving time series of scalar diagnostic quantities}\index{time-series}\index{PISM!saving time-series} +In addition to \texttt{-o_format netcdf4_parallel} and \texttt{netcdf3} +(default) modes, PISM can be built with PnetCDF for best I/O performance. The +option \texttt{-o_format pnetcdf} turns ``on'' PnetCDF I/O code. (PnetCDF seems +to be somewhat fragile, though, so use at your own risk.) + +\subsection{Saving time series of scalar diagnostic quantities} +\index{time-series}\index{PISM!saving time-series} \label{sec:saving-time-series} \optsection{Saving scalar time-series} + It is also possible to save time-series of certain scalar diagnostic quantities using a combination of the options \texttt{-ts_file}, \texttt{-ts_times}, and \texttt{-ts_vars}. For example, \begin{verbatim} $ pismr -i foo.nc -y 1e4 -o output.nc -ts_file time-series.nc \ @@ -99,7 +111,7 @@ \subsection{Saving time series of scalar diagnostic quantities}\index{time-serie \end{verbatim} %$ just to make emacs happy will run for 10000 years, saving total ice volume and grounded ice area to \texttt{time-series.nc} \emph{yearly}. See tables \ref{tab:time-series-opts} for the list of options and \ref{tab:time-series-1}~and~\ref{tab:time-series-2} for the full list of supported time-series. -Note that, similarly to the snapshot-saving code, this mechanism does not affect adaptive time-stepping. Here, however, PISM will save exactly the number of time-series records requested, \emph{linearly interpolated onto requested times}. +Note that, similarly to the snapshot-saving code (section \ref{sec:snapshots}), this mechanism does not affect adaptive time-stepping. Here, however, PISM will save exactly the number of time-series records requested, \emph{linearly interpolated onto requested times}. Omitting the \texttt{-ts_vars} option makes PISM save \emph{all} available variables, as listed in tables \ref{tab:time-series-1}~and~\ref{tab:time-series-2}. Because scalar time-series take minimal storage space, compared to spatially-varying data, this is usually a reasonable choice. @@ -118,7 +130,9 @@ \subsection{Saving time series of scalar diagnostic quantities}\index{time-serie \midrule \fileopt{ts_file} & Specifies the file to save to.\\ \timeopt{ts_times} & Specifies times to save at either as a MATLAB-style range $a:\Delta t:b$ or a comma-separated list. \\ - \listopt{ts_vars} & Comma-separated list of variables, see tables~\ref{tab:time-series-1}~and~\ref{tab:time-series-2}. Omitting this option is equivalent to listing the default variables.\\ + \listopt{ts_vars} & Comma-separated list of variables, see + tables~\ref{tab:time-series-1}~and~\ref{tab:time-series-2}. Omitting this + option is equivalent to listing the \emph{all} variables.\\ \intextoption{ts_append} & Append time series to file if it already exists. No effect if file does not yet exist. \\ \bottomrule \end{tabular} @@ -132,9 +146,8 @@ \subsection{Saving time series of scalar diagnostic quantities}\index{time-serie \item Basic ice volume and area are computed and then split among floating and grounded portions: \texttt{ivol} $\mapsto$ (\texttt{ivolf}, \texttt{ivolg}) while \texttt{iarea} $\mapsto$ (\texttt{iareaf},\texttt{iareag}). \item Quantities which are used primarily for diagnosing thermodynamic state, namely amounts of cold or temperate (``\texttt{temp}'') ice, are reported both in absolute and relative terms. The absolute quantities have units \textsl{$m^3$} for volumes and \textsl{$m^2$} for areas. The relative quantities have suffix ``\texttt{f}'' for ``fraction'', and dimensionless units. Here are the \{absolute,relative\} pairs: \texttt{iarea\{cold,coldf\}}, \texttt{iarea\{temp,tempf\}}, \texttt{ivol\{cold,coldf\}}, and \texttt{ivol\{temp,tempf\}}. \item If a PISM input file contains the \texttt{mapping} variable which has the -\texttt{grid_mapping_name} attribute then PISM computes corrected cell areas -using stored latitude and longitude fields and the WGS84 reference ellipsoid. -This compute areas and volumes more accurately. +\texttt{proj4} attribute containing a PROJ.4 string defining the projection then PISM computes corrected cell areas +using this information, grid parameters, and the WGS84 reference ellipsoid. This compute areas and volumes more accurately. \item The sea-level-relevant ice volume \texttt{slvol} is the total grounded ice volume minus the amount of ice, that, in liquid form, would fill up the regions with bedrock below sea level, if this ice were removed. That is, \texttt{slvol} is the sea level rise potential of the ice sheet at that time. The result is reported in sea-level equivalent, i.e.~meters of sea level rise. \item Fields \texttt{max_diffusivity} and \texttt{max_hor_vel} relate to PISM time-stepping, and they appear in per-time-step form in the standard output from PISM (i.e.~at default verbosity). \texttt{max_diffusivity} determines the length of the mass continuity substeps for the SIA stress balance (sub-)model. \texttt{max_hor_vel} determines the CFL-type restriction for mass continuity and conservation of energy contributions of the SSA stress balance (i.e.~sliding) velocity. \end{itemize} @@ -189,7 +202,7 @@ \subsection{Saving time series of scalar diagnostic quantities}\index{time-serie \texttt{ivoltemp} & \textsl{$m^{3}$} & total volume of temperate ice \\ \texttt{ivoltempf} & \textsl{1} & temperate ice volume fraction \\ \texttt{max_diffusivity} & \textsl{$m^{2}$ / s} & maximum diffusivity \\ - \texttt{max_hor_vel} & \textsl{$m^{2}$ / s} & maximum (absolute) component of horizontal ice velocity over the grid \\ + \texttt{max_hor_vel} & \textsl{m / s} & maximum (absolute) component of horizontal ice velocity over the grid \\ \texttt{nonneg_rule_flux} & \textsl{kg / s} & \emph{numerical} ice flux resulting from enforcing the $\mathrm{thk} \ge 0$ rule \\ \texttt{ocean_kill_flux} & \textsl{kg / s} & \texttt{-ocean_kill} flux \\ \texttt{slvol} & \textsl{m} & total sea-level relevant ice \textbf{in sea-level equivalent} \\ diff --git a/src/base/iceModel.cc b/src/base/iceModel.cc index 7611bf0046..d1a59f372c 100644 --- a/src/base/iceModel.cc +++ b/src/base/iceModel.cc @@ -79,7 +79,7 @@ IceModel::IceModel(IceGrid &g, NCConfigVariable &conf, NCConfigVariable &conf_ov // frequently used physical constants and parameters: standard_gravity = config.get("standard_gravity"); - global_attributes.set_string("Conventions", "CF-1.4"); + global_attributes.set_string("Conventions", "CF-1.5"); global_attributes.set_string("source", string("PISM ") + PISM_Revision); // Do not save snapshots by default: diff --git a/src/pclimate.cc b/src/pclimate.cc index 52e9ac2f48..f929a4d33d 100644 --- a/src/pclimate.cc +++ b/src/pclimate.cc @@ -212,7 +212,7 @@ static PetscErrorCode writePCCStateAtTimes(PISMVars &variables, if (shelfbasemassflux == NULL) { SETERRQ(com, 1, "shelfbasemassflux is not available"); } global_attrs.init("global_attributes", com, grid.rank); - global_attrs.set_string("Conventions", "CF-1.4"); + global_attrs.set_string("Conventions", "CF-1.5"); global_attrs.set_string("source", string("pclimate ") + PISM_Revision); // Create a string with space-separated command-line arguments: