Isostasy is one of the oldest and most widely applied concepts in the
geosciences, but the geoscientific community lacks a coherent, easy-to-use
tool to simulate flexure of a realistic (i.e., laterally heterogeneous)
lithosphere under an arbitrary set of surface loads. Such a model is needed
for studies of mountain building, sedimentary basin formation, glaciation,
sea-level change, and other tectonic, geodynamic, and surface processes. Here
I present gFlex (for GNU flexure), an open-source model that can produce
analytical and finite difference solutions for lithospheric flexure in one
(profile) and two (map view) dimensions. To simulate the flexural isostatic
response to an imposed load, it can be used by itself or within GRASS GIS for better integration with
field data. gFlex is also a component with the Community Surface Dynamics
Modeling System (CSDMS) and Landlab modeling frameworks for coupling with a
wide range of Earth-surface-related models, and can be coupled to additional
models within Python scripts. As an example of this in-script coupling, I
simulate the effects of spatially variable lithospheric thickness on a
modeled Iceland ice cap. Finite difference solutions in gFlex can use any of
five types of boundary conditions: 0-displacement, 0-slope (i.e., clamped);
0-slope, 0-shear; 0-moment, 0-shear (i.e., broken plate); mirror symmetry;
and periodic. Typical calculations with gFlex require

Flexure of the lithosphere is a frequently observed processes by which loads
bend the elastic outer shell of Earth or other planets

Theory to describe deflections of the lithosphere under loads has evolved
significantly over the past 160 years

Even though the early geological theories of

Flexural isostasy can be produced in response to a range of geological loads.

In the first half of the twentieth century,

Flowchart for gFlex as either a standalone model with configuration and input files, a Python module or coupled component in a modeling framework, or a GRASS GIS component.

Computational advances allowed discretized models to replace purely
analytical solutions. These models fall into one of several categories. Many
take advantage of the linear nature of the flexure equation for constant
elastic thickness to superimpose analytical solutions of point loads (in the
spatial domain) or sinusoidal loads (in the wavenumber domain) in order to
produce the flexural response to an arbitrary load

Here I introduce a broadly implementable open-source package of solutions to
flexural isostasy. This package, called gFlex (for GNU flexure), advances and
makes more accessible an earlier model, generically called

gFlex can solve plate flexure in two major ways (Fig.

Boundary conditions. Names provided here are the same as those used
in the model, and b.c. stands for boundary condition. The first five can be
selected for numerical solutions. The final one, NoOutsideLoads, is the
outcome of superposition of analytical solutions, which allows the entire
space to respond to local loads as if the 0-deflection boundaries were
infinitely far away. In this notation, the subscript b indicates the
boundary, generically. Where

Two solution types for flexural isostasy are provided in gFlex, and these are
formulated for both one-dimensional (line load, assumed to extend infinitely
in an orientation orthogonal to the line along which the equation is solved)
and two-dimensional (point load) cases. The derivation that forms the basis
for both of these is provided in Appendix Sect.

Numerical (FD) and analytical (SAS) solutions in one dimension

The first solution type takes advantage of the linear nature of the
analytical solution for flexure of a plate of constant thickness and elastic
properties when subjected to a point or line load. These solutions may be
superposed (i.e., summed) in space to compute the full flexural response. The
second approach is to solve the equation for lithospheric flexure as a matrix
equation by employing a finite difference scheme. This employs a sparse
matrix elimination solver

The analytical solution imposes the assumption that scalar flexural rigidity,

The above equations are linearizable, and therefore can be solved by
superposition of analytical solutions. In gFlex, this is done in the spatial
domain on both structured grids and as a response to an arbitrarily placed
set of point loads. Spectral solutions are possible

Lithospheric flexure calculated by superposition of analytical solutions can
be represented as a simple sum across all line loads

For a given elastic thickness, each flexural response to a line or point load
is similar in shape, but different in amplitude. Therefore, I optimize
solution speed by pre-calculating the flexural response to a unit load in the
center of a template array. This pre-calculated unit deflection array has
twice the linear dimensions of the solution array, and is subsampled and
re-scaled to compute the distributed response to each cell in the grid that
contains a load. This technique works for all for rectilinear grids with
uniform

The analytical solution response to point or line loads can also be computed
for a scattered set of loads and a scattered (and not necessarily the same)
set of points at which the flexural response is calculated. This solution
type is termed SAS_NG, which stands for, superposition of analytical solutions: no grid. Because it lacks the grid uniformity that permits the a
solution template to be used, its computational time is not optimized in this
way (Sect.

Finite difference solutions in one and two dimensions employ Eqs. (

The two-dimensional solution is based on an expansion of Eq. (

Finite difference solutions in two dimensions may also be generated following
the solution and discretization of

The finite difference solution is computed as a linear matrix equation,

gFlex supports a number of boundary conditions, and these are summarized in
Table

Schematics of boundary condition types allowed in the finite difference solutions to gFlex.

Example runs of gFlex with varying elastic thickness and boundary
conditions.

The 0Displacement0Slope (or

The 0Moment0Shear boundary condition (Fig.

The 0Slope0Shear boundary condition (Fig.

The

Model benchmarking.

The

The names of the boundary conditions are based on their effects on
deflections,

In two-dimensional solutions, boundary conditions meet at corners. Where a
boundary condition meets another of the same boundary conditions at the
corner, the two generate a continuous boundary condition that includes the
corner of the array. This is always the case for the analytical solutions
with implicit NoOutsideLoads boundary conditions. Where mirror or periodic
boundary conditions meet themselves at corners, these produce doubly
reflecting or doubly periodic boundaries; if every boundary is mirror or
periodic (necessary in the latter case as periodic boundary conditions must
always exist as pairs on opposite sides), these generate an infinite
tessellated plane of loads and elastic thicknesses. Some boundary conditions
in gFlex can work harmoniously with others. Periodic and mirror boundary
conditions propagate 0Moment0Shear, 0Slope0Shear, and 0Displacement0Slope
boundary conditions that exist orthogonally to them. Where mirror and
periodic boundary conditions intersect at a corner, the periodic boundary
condition will propagate the mirror boundary to

Two notable issues inherent to the finite difference solutions and the
treatment of a continuous plate become apparent as

These issues are important to note, but unlikely to be important in most
cases of gFlex. First, discontinuous transitions to zones of

A set of tests was performed to measure the speed at which gFlex computes
solutions. In these tests, an elastic plate that is 1000 km long
(one-dimensional and two-dimensional) and 1000 km wide (two-dimensional) is
subjected to a square load at its center that ranges from 100 km to the full
1000 km on each side. This load places a normal stress of 9 702 000 Pa on
the surface, which is equal to 300 m of mantle material
(3300 kg m

Comparison between solution methods where every cell in the domain contains a load. The ungridded superposition of analytical solutions (SAS_NG) scales best but in these tests is the slowest. It can, however, be faster when fewer cells contain loads. Some fits are to a subset of the data to avoid those solutions that are so rapid that the amount of time required for the non-solver portions of the code becomes significant. All marker symbols are semi-transparent, meaning that darker symbols than those that appear in the legend imply additional data points underneath.

The factors that determine computation time are the solution method and the
inclusion of periodic boundary conditions. While the SAS_NG method scales
the best with increasing grid size, it is so much slower than the other
methods for standard model-run grid sizes that it will not often exceed their
speed. The finite difference method is the fastest if every cell contains a
load, but can become slower than the analytical methods if only a few cells
contain loads, as analytical methods must make one set of calculations across
the grid per load. Standard runtimes are between a fraction of a second and a
few minutes on a personal laptop computer (Dell XPS 13 Developer Edition
running Ubuntu 14.10) (Figs.

Some users of gFlex may want to run a single calculation, while others may
want to produce many solutions as part of a larger-scale numerical modeling
exercise, such as an inversion for elastic thickness or coupling with another
model. Therefore, four different methods to use gFlex have been prepared:

standalone, with input files;

as part of a Python script;

driven by GRASS GIS

as a component for the CSDMS
framework

Some users may want to employ gFlex as a single calculation, for example to calculate the flexural response to a set of loads generated by a sedimentary deposit that was measured in the field. The user prepares an input file of model settings, an input ASCII grid of loads, and, should the elastic thickness be nonuniform, an input ASCII grid of lithospheric elastic thicknesses. Outputs from this mode of running gFlex include an ASCII grid of surface deflections and a set of plots of surface deflections and loads.

gFlex may also be imported as a Python module to be run either as a
standalone simulation or as a
component in a multi-model integration effort. This allows it, for example,
to be a part of a flexural backstripping toolchain or a model of
glacial-isostatic adjustment. Backstripping calculations may be performed by
simply removing the sedimentary load

gFlex is also prepared for integration with the open-source geospatial
software GRASS GIS

full integration within a geospatially registered environment, meaning that data can be used directly as model inputs, and that model outputs may be compared against data;

a documented and standardized command-line interface;

a pre-built and standardized graphical user interface (GUI).

CSDMS (broadly) and Landlab (in particular) both include methods for
integrating modular blocks of code as part of their respective efforts
towards the community-wide goal to make modeling of Earth systems less
time intensive and more streamlined

This coupled model run for a hypothetical extent of the Iceland ice
cap shows the influence of a variable elastic thickness structure

As a first example to utilize both the ability of gFlex to generate solutions
with variable effective elastic thickness and its incorporation into GRASS
GIS, gFlex is used along with a simple and efficient GIS-enabled glacier and
ice cap model modified from the work of

This coupled ice dynamics and flexural isostatic model of Iceland requires
four input components: the elastic thickness structure around Iceland, the
modern topography of Iceland, the modern surface temperature field of
Iceland, and modern precipitation rates across Iceland. The ice cap model
used here

The elastic thickness structure under Iceland, in this schematic example, is
related to the age of the oceanic crust.

The underlying digital elevation model, GEBCO_08

Modern temperature and precipitation fields are from the Monthly
NOAA-CIRES (National Oceanographic and Atmospheric Administration–
Cooperative Institute for Research in Environmental Sciences)
20th Century Reanalysis (V2) by

Three experiments were run: one with no flexure, one with flexure using a
constant elastic thickness of 3.7 km

The results in Fig.

The example of isostatic response to ice advance in Iceland is just one
possibility of a feedback between an Earth-surface (or other geological)
process and flexural deformation. Further such scenarios involving, for
example, orogenesis and foreland basin formation

gFlex
is available from the University of Minnesota Earth-surface GitHub repository
at

Interfaces to GRASS GIS and Landlab are available from their respective
repositories. The GRASS GIS interface works with GRASS GIS 7.X and can be
downloaded and installed automatically with the g.extension tool within
GRASS

gFlex is a new, open-source, easy-to-use model to compute isostatic deflections of Earth's lithosphere with uniform or nonuniform flexural rigidity due to arbitrarily distributed surface loads. It can be run as a standalone model through a configuration file, a Python module, a component in the Landlab and CSDMS community modeling frameworks, or via one of two GRASS GIS add-ons for a direct link to geospatial data. Its open-source code base may be updated and improved by the community, it may be easily installed using automated tools, and it is poised to be coupled with other models in efforts to understand interactions between multiple components of the Earth system. These attributes all embody my primary aim in creating gFlex: to provide an accessible set of flexural isostatic solutions for work across the geosciences by field scientists and modelers alike.

Schematic of the bending of a
buoyant plate under a load that is long in the

Plates resist bending (i.e., flexure) through fiber stresses that develop in response to loading-induced deformation. In this appendix, the background of the theory is provided by an abridged derivation of plate flexure, which provides the background for the assumptions and solution methods employed in both the analytical and finite difference one-dimensional and two-dimensional solutions. Components of the theoretical background are also relevant for the various boundary condition options introduced in the main text.

A derivation of flexural response to a load can be subdivided into two components. The first is the bending moment, which describes the internally generated torques that resist bending. The second is the relationship between the bending moment and the imposed load.

The bending moment of a plate,

Classical (Kirchhoff–Love) plate theory is derived using an approximation of
cylindrical bending

The layer halfway between the top and the bottom of a homogeneous
plate experiences no net extension or shortening during bending.
This midpoint layer is
therefore taken to be the reference radius of curvature,

As radius of curvature decreases, curvature increases:

The bending moment itself,

It is possible to solve for the bending moment in one dimension by using Eq. (

The terms to the left of the derivative define the scalar flexural rigidity,

To generalize the bending moment of a plate that is loaded in
two dimensions, one can start by writing a vector of curvatures,

The flexural rigidity must also be defined in three dimensions, and is defined
here following linear elasticity:

Using Eqs. (

A static lithospheric plate that experiences the downward force of an
imposed load,

These shear forces generate torques that must be balanced in turn by the bending moments.
Here I explicitly ignore end loads because they are
not part of the numerical solution in gFlex, which was designed with surface
loads in mind, though they are straightforward to include

Equations (

To solve the two-dimensional case, one can follow

ADW greatly appreciates Eric Hutton's insights and help with CSDMS
integration and project architecture as well as Daniel Hobley's work to
integrate gFlex with Landlab. Václav Petráš' help in
incorporating gFlex as an official set of GRASS GIS extensions was very much
appreciated. Liam Colgan kindly supplied his glacier model source code, and
conversations with Robert S. Anderson, Leif S. Anderson, and Gregory E.
Tucker helped to inspire the project. The 20th Century Reanalysis V2 data were
provided by the NOAA/OAR/ESRL PSD, Boulder, Colorado, USA, from their website at