<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing with OASIS Tables v3.0 20080202//EN" "journalpub-oasis3.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table" dtd-version="3.0"><?xmltex \makeatother\@nolinetrue\makeatletter?>
  <front>
    <journal-meta>
<journal-id journal-id-type="publisher">GMD</journal-id>
<journal-title-group>
<journal-title>Geoscientific Model Development</journal-title>
<abbrev-journal-title abbrev-type="publisher">GMD</abbrev-journal-title>
<abbrev-journal-title abbrev-type="nlm-ta">Geosci. Model Dev.</abbrev-journal-title>
</journal-title-group>
<issn pub-type="epub">1991-9603</issn>
<publisher><publisher-name>Copernicus Publications</publisher-name>
<publisher-loc>Göttingen, Germany</publisher-loc>
</publisher>
</journal-meta>

    <article-meta>
      <article-id pub-id-type="doi">10.5194/gmd-9-1019-2016</article-id><title-group><article-title>pynoddy 1.0: an experimental platform for automated 3-D
kinematic and potential field modelling</article-title>
      </title-group><?xmltex \runningtitle{pynoddy: 3-D kinematic and potential field modelling}?><?xmltex \runningauthor{J.~F.~Wellmann et al.}?>
      <contrib-group>
        <contrib contrib-type="author" corresp="yes" rid="aff1 aff2">
          <name><surname>Wellmann</surname><given-names>J. Florian</given-names></name>
          <email>wellmann@aices.rwth-aachen.de</email><email>florian.wellmann@graduate.uwa.edu.au</email>
        <ext-link>https://orcid.org/0000-0003-2552-1876</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff3">
          <name><surname>Thiele</surname><given-names>Sam T.</given-names></name>
          
        <ext-link>https://orcid.org/0000-0003-4169-0207</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff3">
          <name><surname>Lindsay</surname><given-names>Mark D.</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff3">
          <name><surname>Jessell</surname><given-names>Mark W.</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-0375-7311</ext-link></contrib>
        <aff id="aff1"><label>1</label><institution>RWTH Aachen University, Graduate School AICES, Schinkelstr. 2, 52062 Aachen, Germany</institution>
        </aff>
        <aff id="aff2"><label>2</label><institution>ABC/J Geoverbund, RWTH Aachen University, Aachen, Germany</institution>
        </aff>
        <aff id="aff3"><label>3</label><institution>The University of Western Australia, Centre for Exploration Targeting, 35 Stirling Hwy, 6009 Crawley, Australia</institution>
        </aff>
      </contrib-group>
      <author-notes><corresp id="corr1">J. Florian Wellmann (wellmann@aices.rwth-aachen.de, florian.wellmann@graduate.uwa.edu.au)</corresp></author-notes><pub-date><day>10</day><month>March</month><year>2016</year></pub-date>
      
      <volume>9</volume>
      <issue>3</issue>
      <fpage>1019</fpage><lpage>1035</lpage>
      <history>
        <date date-type="received"><day>26</day><month>October</month><year>2015</year></date>
           <date date-type="rev-request"><day>13</day><month>November</month><year>2015</year></date>
           <date date-type="rev-recd"><day>17</day><month>February</month><year>2016</year></date>
           <date date-type="accepted"><day>18</day><month>February</month><year>2016</year></date>
      </history>
      <permissions>
<license license-type="open-access">
<license-p>This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit <ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/3.0/">http://creativecommons.org/licenses/by/3.0/</ext-link></license-p>
</license>
</permissions><self-uri xlink:href="https://gmd.copernicus.org/articles/9/1019/2016/gmd-9-1019-2016.html">This article is available from https://gmd.copernicus.org/articles/9/1019/2016/gmd-9-1019-2016.html</self-uri>
<self-uri xlink:href="https://gmd.copernicus.org/articles/9/1019/2016/gmd-9-1019-2016.pdf">The full text article is available as a PDF file from https://gmd.copernicus.org/articles/9/1019/2016/gmd-9-1019-2016.pdf</self-uri>


      <abstract>
    <p>We present a novel methodology for performing experiments with
subsurface structural models using a set of flexible and extensible
Python modules. We utilize the ability of kinematic modelling
techniques to describe major deformational, tectonic, and
magmatic events at low computational cost to develop experiments
testing the interactions between multiple kinematic events, effect
of uncertainty regarding event timing, and kinematic
properties. These tests are simple to implement and perform, as they
are automated within the Python scripting language, allowing the
encapsulation of entire kinematic experiments within high-level
class definitions and fully reproducible results. In addition, we
provide a link to geophysical potential-field simulations to
evaluate the effect of parameter uncertainties on maps of gravity
and magnetics.</p>
    <p>We provide relevant fundamental information on
kinematic modelling and our implementation, and showcase the
application of our novel methods to investigate the interaction of
multiple tectonic events on a pre-defined stratigraphy, the effect
of changing kinematic parameters on simulated geophysical
potential fields, and the distribution of uncertain areas in a full
3-D kinematic model, based on estimated uncertainties in kinematic
input parameters.  Additional possibilities for linking kinematic
modelling to subsequent process simulations are discussed, as well
as additional aspects of future research.  Our modules are freely
available on github, including documentation and tutorial examples,
and we encourage the contribution to this project.</p>
  </abstract>
    </article-meta>
  </front>
<body>
      

<sec id="Ch1.S1" sec-type="intro">
  <title>Introduction</title>
      <p>A wide range of methods exists for the computational synthesis of
geological models as interpretations about the
structure of the subsurface <xref ref-type="bibr" rid="bib1.bibx16" id="paren.1"><named-content content-type="pre">see, for example,</named-content><named-content content-type="post">for a recent
overview of methods</named-content></xref>. Each modelling method focusses on
different aspects of geological data and concepts, but they can be
broadly classified in terms of (1) surface- or volume-based
interpolation techniques, (2) pure geophysical inversions, and (3) mechanical or
kinematic modelling approaches. We present here a set of open-source
Python modules for the efficient, flexible and reproducible
construction of kinematic structural models to enable the analysis of
uncertainties in geological models.</p>
      <p>Structural geological models are generally produced by combining
information from direct observations (e.g. measurements in outcrops or
boreholes) and indirect data, for example, interpreted from geophysical
data. Additional aspects of the conceptual geological model or
the structural setting are, in the general case, only indirectly taken
into account. Computational methods, which are able to capture several
or all of the previous considerations, are then used to produce the
model.</p>
      <p>Regardless of the approach taken, the resulting models always contain
uncertainties. These uncertainties are increasingly recognised
<xref ref-type="bibr" rid="bib1.bibx5 bib1.bibx6 bib1.bibx4" id="paren.2"/> and addressed with novel
methods for uncertainty analysis and visualization
<xref ref-type="bibr" rid="bib1.bibx3 bib1.bibx40 bib1.bibx18 bib1.bibx33 bib1.bibx43 bib1.bibx25 bib1.bibx9 bib1.bibx26 bib1.bibx24" id="paren.3"><named-content content-type="pre">e.g.</named-content></xref>.
So far, the analysis of uncertainties in kinematic models has been
performed for balanced cross sections <xref ref-type="bibr" rid="bib1.bibx19" id="paren.4"><named-content content-type="pre">e.g.</named-content></xref> and
detailed fault displacement models <xref ref-type="bibr" rid="bib1.bibx23" id="paren.5"/>. We
contribute here with a methods to analyse and visualize
uncertainties in automatically constructed kinematic forward models.</p>
      <p>To enable this functionality, we extend the capability of an
existing kinematic modelling method, implemented in the software
Noddy (Jessell, 1981; Jessell and Valenta, 1996), with a flexible
set of dedicated scripting modules developed in the programming
language Python. Our aim is to provide high-level access to the
underlying model construction methods, enabling (1) flexible and
rapid construction of kinematic models, (2) the definition of fully
reproducible modelling experiments, and (3) a framework for automatic
model generation, to enable experiments and analyses that require the
generation of multiple models, such as sensitivity evaluations or Monte
Carlo uncertainty analyses <xref ref-type="bibr" rid="bib1.bibx28" id="paren.6"/>.</p>
      <p>In the following, we will first describe the concepts of kinematic
modelling as implemented in Noddy, outline the limitations of this
method, and show how we address these with the newly developed Python
modules. We then apply these new methods to several typical modelling
scenarios: (1) the construction of a structural geological model on
the basis of kinematic considerations, (2) an analysis of the effect
of model uncertainty on calculated gravity fields, and (3) a
sensitivity study of kinematic parameters in a complex kinematic model
of the Gippsland Basin, Australia.</p>
      <p>The Python code described here is open-source and freely available online
(see section on “Code availability” and
Appendix <xref ref-type="sec" rid="App1.Ch1.S1"/>). All of the
examples used in this text are also part of the online repository, and
available as executable IPython notebooks.</p>
</sec>
<sec id="Ch1.S2">
  <title>Materials and methods</title>
      <p>Because we extend the functionality of an existing kinematic modelling
package, Noddy <xref ref-type="bibr" rid="bib1.bibx15 bib1.bibx17" id="paren.7"/>, we briefly describe its
functionality here, and then provide details about the implementation
of the Python package we have developed, referred to hereafter as
pynoddy. Finally, in order to describe the main difference between our
approach and other commonly used structural interpolation methods, we
also briefly review the relevant approaches in this direction.</p>
<sec id="Ch1.S2.SS1">
  <title>Structural geological modelling concepts</title>
      <p>Structural geological models can be constructed with different
approaches, and the choice of a specific modelling method directly
depends on the model applications and the available input
information.</p>
      <p><?xmltex \hack{\newpage}?>The approach that we apply here is based on kinematic modelling
concepts. The distinction between interpolation and kinematic methods
is most apparent when considering the types of data and geological
constraints that are honoured. The most common approach to construct
structural models is based on surface and volume interpolation methods
<xref ref-type="bibr" rid="bib1.bibx27 bib1.bibx21 bib1.bibx39 bib1.bibx8 bib1.bibx12 bib1.bibx16" id="paren.8"/>. An example of the general interpolation
function is presented in Fig. <xref ref-type="fig" rid="Ch1.F1"/>a.
Structural interpolations focus on honouring parameterised surface
contact points <xref ref-type="bibr" rid="bib1.bibx8" id="paren.9"/>, although secondary data like
orientation measurements can also be taken into account
<xref ref-type="bibr" rid="bib1.bibx21 bib1.bibx7 bib1.bibx12" id="paren.10"/>. Constraints on the
shape of geological surfaces, or the interaction with other units or
faults, are then assigned to different surfaces, according to
observations in the field or the expected geological settings. While
these considerations are clearly based on geological reasoning, it is
not guaranteed that an interpolated structural model matches all the
known aspects of the geological evolution of an area. For example, it
is easily possible that constraints on thickness of geological units
are not consistent, for example across a fault, leading to a violation
of mass conservation. Additionally, a wide range of structures
observed in multiply deformed terranes, such as complex fault networks
or refolded folds, are difficult to construct consistently using
current interpolation methods.</p>
      <p>Another endmember in the evaluation of the structural setting are simulations
of physical processes
<xref ref-type="bibr" rid="bib1.bibx11 bib1.bibx30 bib1.bibx20 bib1.bibx36" id="paren.11"><named-content content-type="pre">e.g.</named-content></xref>.
Instead of starting with geological observations, these methods are based on
mathematical models capturing relevant physical processes that led to the
formation of specific structures (Fig. <xref ref-type="fig" rid="Ch1.F1"/>b). For
realistic simulations, meaningful constitutive models and boundary conditions
are required. Multiple different methods exist, which capture different
aspects of the mechanical deformation, and more and more commonly also the
effect of coupled thermal, hydraulic,
mechanical and chemical simulations. However, these types of simulations are
not yet commonly applied to model the entire complexity of multiply deformed
geological regions as simulations are computationally demanding and rock
properties and boundary conditions are not always perfectly known.
Furthermore, they require an initial distribution of rock properties in space
as initial conditions, often determined from an explicit or implicit
interpolation approach.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F1" specific-use="star"><caption><p>Conceptual difference of modelling approaches: <bold>(a)</bold> interpolation,
<bold>(b)</bold> dynamic process simulations, <bold>(c)</bold> kinematic
models <xref ref-type="bibr" rid="bib1.bibx17" id="paren.12"><named-content content-type="pre">modified from</named-content></xref>.</p></caption>
          <?xmltex \igopts{width=341.433071pt}?><graphic xlink:href="https://gmd.copernicus.org/articles/9/1019/2016/gmd-9-1019-2016-f01.pdf"/>

        </fig>

      <p>Kinematic modelling methods focus on major tectonic and metamorphic
events in geological history <xref ref-type="bibr" rid="bib1.bibx17" id="paren.13"/> and are therefore
conceptually located between the previously described endmembers
(Fig. <xref ref-type="fig" rid="Ch1.F1"/>c). In these models, the
complexity of deformation is greatly reduced and captured in
simplified kinematic functions as surrogate models. This means that
direct geological observations of surface contacts and orientation
measurements are not taken into account in the simulation
step. However, the simulations are very fast and enable therefore a
quick testing of different deformational scenarios, and the
interaction of multiple events in geological history. Furthermore,
rapid simulation makes direct (and ideally automated) comparisons
between the model and observed structures feasible, allowing for the
indirect incorporation of geological observations. We will present
several examples in which this trade-off between physical realism and
geological observations can lead to useful insights into the
interaction and relevance of deformational events in geological
history.</p>
</sec>
<sec id="Ch1.S2.SS2">
  <title>Kinematic structural modelling with Noddy</title>
      <p>Noddy models begin as a layer cake stratigraphy, for which the heights
of the stratigraphic contacts and geophysical rock properties are
defined. A history of relevant events that affected the model region
is then developed from a predefined set of events, including folds,
faults, and shear zones; unconformities, dykes, and igneous plugs;
regional tilting and homogeneous strain. In addition to modifying the
initial stratigraphy, each event can define (geophysical) alteration
halos, penetrative cleavages, and lineations.</p>
      <p>Each Noddy event is defined by four classes of properties: form,
position, orientation, and scale
<xref ref-type="bibr" rid="bib1.bibx15 bib1.bibx17" id="paren.14"/>. For example, a fault is defined by
its dip and dip direction, the pitch and magnitude of the slip vector,
and the position of one point on its surface <xref ref-type="bibr" rid="bib1.bibx15" id="paren.15"><named-content content-type="pre">note that more
complex definitions of the fault plane are also possible;
cf.</named-content></xref>. The use of geological descriptions provides a
natural and intuitive framework for geologists to build a
model. Even though the structural events themselves are relatively
simple, complex geometries quickly develop as two or three events are
superimposed on one another (see examples in Sect. <xref ref-type="sec" rid="Ch1.S3"/>).</p>
      <p>Displacement equations are stored as a “history”, which provides
parameterised definitions of the model kinematics and rock properties.
A voxel model of any 3-D rectangular volume of interest can be
calculated from this history by considering each voxel independently
using the Eulerian (inverse) form of the defining Lagrangian
displacement equations, and applying them in reverse chronological
order (i.e. starting with the most recent deformation event). This
operation transforms the <inline-formula><mml:math display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula>, and <inline-formula><mml:math display="inline"><mml:mi>z</mml:mi></mml:math></inline-formula> position of each voxel into the
<inline-formula><mml:math display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math display="inline"><mml:mi>z</mml:mi></mml:math></inline-formula> position at the time the associated volume of rock was
created. The properties of this voxel can then be calculated directly
from the base stratigraphy.</p>
      <p>New lithologies can also be created during three specific event types:
unconformities, dykes, and plugs. These events are assumed to be
instantaneous, and are ordered relative to other events.  In order to
simplify the underlying kinematic equations, they are all defined in a
standard reference frame that is orthogonal to the symmetry of the
deformation event. The real world reference frame is rotated into the
standard reference frame prior to the calculation of each event, and
then subsequently rotated back to the real world reference frame using
the variations in the <inline-formula><mml:math display="inline"><mml:mi>z</mml:mi></mml:math></inline-formula> values as a continuous implicit field that can
be iso-surfaced to produce stratigraphic horizons.</p>
      <p>As well as the initial position of the point, a binary “discontinuity
code” is stored, that records each time a voxel is affected by an
event described by a discontinuous displacement equation (faults,
unconformities, dykes, and plugs) but ignores events described by
continuous displacement equations (folds, shear zones, strain,
rotation, foliations, and lineations). This discontinuity code allows for
the accurate transformation of the voxel data set to a vector data
set, since only voxels that have exactly the same sequence of
discontinuity codes are part of the same contiguous volume of rock. If
two adjacent voxels have different codes, the difference in the
discontinuity code that occurred most recently defines the
discontinuity that separates them.</p>
      <p>The orientations of specific features (bedding, foliation, fault
planes, remanence vectors, etc.) are calculated using both the inverse
and then the forward displacement equations. Starting with the current
3-D location of a point, the position of this point at the time of
formation of the structural feature (which may or may not be the time
of formation of the rock) is calculated. Three points are defined
close to this position, which define a plane with the orientation of
the feature prior to deformation. The positions of these three points
at the final time are then calculated, from which the final
orientation of the structural feature can be calculated.</p>
      <p>Similarly, the orientation of a linear feature is calculated from the
intersection of two planes. Thus, both the Eulerian (inverse) and
Lagrangian (forward) descriptions of the displacements must be
available for a new deformation event to be included in the modelling
scheme. For this reason, the displacement equations governing each
Noddy deformation event are kept as simple as possible, and
superimposed deformation events are combined to produce structural
complexity. A full description of the Noddy implementation is
presented in <xref ref-type="bibr" rid="bib1.bibx17" id="text.16"/>.</p>
</sec>
<sec id="Ch1.S2.SS3">
  <title>Geophysical potential-field modelling with Noddy</title>
<sec id="Ch1.S2.SS3.SSS1">
  <title>Basic concept</title>
      <p>Noddy has the capability to calculate potential field
responses of gravity and magnetics based on the spatial distribution
of rock properties in the subsurface, and this functionality is
exposed in pynoddy. The petrophysical rock properties of a
specific volume are defined by their original stratigraphic value,
unless a specific deformation event (faults, unconformities, plugs, and
dykes) has an associated alteration/metamorphic character, with allows for
the modification or replacement of pre-existing properties based on
that locations distance from the structural feature at the time of the
activity of the event.  A further complication is possible if a model
with an anisotropic magnetic susceptibility (a tensor property) or
magnetic remanence (a vector property) is defined, in which case there
is the possibility of calculating the voxel-level reorientation of
these properties as a result of deformation (for example, having a
remanence vector deformed during a folding event).</p>
      <p>For all surveys the rock property of a cube is defined as the value at
the centre of the cube, and for grid surveys (that is, not arbitrary
surveys or borehole surveys) the field strength is calculated at the
<inline-formula><mml:math display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>,<inline-formula><mml:math display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> location above the centre of each cube. The total magnetic intensity value calculated for all schemes is actually the value
projected onto the Earth's field, following the convention of many
modelling schemes. The gravity field calculated is for the <inline-formula><mml:math display="inline"><mml:mi>z</mml:mi></mml:math></inline-formula> component
only.</p>
      <p>Three geophysical computational schemes are available in Noddy to
calculate magnetic and gravity potential fields. The
criteria as to which scheme should be used depends on required
accuracy, speed, and the various geological situations being
modelled. A brief description of each scheme is provided below.</p><?xmltex \hack{\newpage}?>
</sec>
<sec id="Ch1.S2.SS3.SSS2">
  <title>Spatial convolution scheme</title>
      <p>The spatial convolution scheme works by calculating the summed
response of all the cubes within a cylinder centred on the sensor,
with a radius defined by the spatial range term. The calculation for
each cube is based on the analytical solution for a dipping prism
presented by <xref ref-type="bibr" rid="bib1.bibx13" id="text.17"/> and
<xref ref-type="bibr" rid="bib1.bibx14" id="text.18"/>.  In order to calculate solutions near the
edge of a block, extra geology is used to produce a padding zone
around the block equal in width to the spatial range, so that there
are no edge effects in this scheme. The scheme only provides exact
solutions when the range is larger than the length of the model. For
reasonably complex geology this limitation does not result in
inaccurate models; however, for idealized geometries using a range that
is too small results in a kink in resultant profiles. The spatial
convolution scheme is slower than the spectral scheme for medium
ranges (10–20 cube ranges), but generally much faster than the full spatial calculation. As long as the range is greater than the spacing
between high density/susceptibility features, the inaccuracies
associated with truncating the calculation is probably not
evident. The draped survey and down-hole surveys have not been
implemented for this scheme.</p>
</sec>
<sec id="Ch1.S2.SS3.SSS3">
  <title>Spectral scheme</title>
      <p>This scheme, based on pioneering work by <xref ref-type="bibr" rid="bib1.bibx32" id="text.19"/> works by
transforming the rock property distributions into the Fourier domain,
applying a transformed convolution, and then transforming this result
back into the spatial domain. The calculation is performed for each
horizontal slice through the geology, and the results are summed
vertically. The spectral scheme produces a different result than the
other two schemes in terms of absolute numbers for three reasons:
<list list-type="order"><list-item><p>The Fourier transform implies that the geology is infinitely
repeating outside the calculation area. This produces edge effects
when high susceptibility or density bodies are found near the edges
of the survey area. This effect can be lessened by the choice of a
suitable padding around the block, including over specified areas of
interest; however, it cannot be totally removed.</p></list-item><list-item><p>The calculation loses the absolute base line of the gravity or
magnetic field, so even when comparisons are made for well-padded
spectral and large range spatial models, an overall offset is
apparent between the two schemes. When trying to model real data
this offset is not a problem as any regional is removed before the
modelling process.</p></list-item><list-item><p>There is a high-frequency component to the calculated field that
is of the same wavelength as the cube size and especially
apparent when there are steep gradients in the values of the rock
properties.</p></list-item></list></p><?xmltex \hack{\newpage}?>
</sec>
<sec id="Ch1.S2.SS3.SSS4">
  <title>Full spatial scheme</title>
      <p>This is similar to the spatial convolution scheme except that all the
cubes in the model are summed using the Hjelt schemes in order to
calculate the response at any point. It generally takes significantly
longer to apply this calculation scheme than either of the other
schemes. The only exception is when there is a relatively sparse
geological model, in which case contiguous blocks with identical
petrophysical properties are aggregated to form rectangular blocks,
which reduces computation time. In the extreme case where only one
cube has non-zero values for both density and susceptibility, any
cubes that have both zero density and susceptibility are
ignored. This is the only scheme that can accurately calculate draped
surveys, down-hole surveys, and arbitrarily located airborne surveys.</p>
</sec>
</sec>
<sec id="Ch1.S2.SS4">
  <title>Creating input files for kinematic modelling with Noddy</title>
      <p>Noddy histories are stored as ASCII files with a simple keyword-value
ordering. These files can be written or adapted with any text editor,
and the kinematic modelling result computed with a compiled command
line version of the program and results visualized with other
software.</p>
      <p>A graphical user interface (GUI) has previously been created to
simplify this model set-up, combining convenient input file generation
directly with computation and visualization of the results. This GUI
is freely available (<uri>http://tinyurl.com/noddy-site</uri>), though
currently only runs on Windows operating systems. The GUI version of
Noddy is also limited to user-driven workflows, restricting further
automation or extension of the methods for scientific experiments.</p>
      <p>In order to overcome the problem of either having to work with a
direct text input file, or being restricted by the limitations of a
GUI, we have developed flexible modules in the programming language Python that enable scripted access to the  kinematic modelling functionality and enable the extension to uncertainty estimations.</p>
</sec>
<sec id="Ch1.S2.SS5">
  <title>Implementation of pynoddy</title>
      <p>Python is an object-oriented scripting language that is widely used in
scientific computation <xref ref-type="bibr" rid="bib1.bibx22" id="paren.20"><named-content content-type="pre">e.g.</named-content></xref>. It is highly
flexible language, and contains a variety of programming and
visualization libraries ideal for scientific purposes.  Python also
runs on virtually every operating system that is available, meaning
that python wrappers retain the platform independence of C
applications.</p>
      <p>The pynoddy module described here contains a set of classes and
functions for managing Noddy input files, passing them to the Noddy
command-line application, and processing the results. This approach
has many advantages, as it allows automatic generation and analysis of
kinematic models in a Python environment, while retaining the
performance of Noddy itself (which is written in C).</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F2"><caption><p>High-level structure of main pynoddy modules and
relationship to command-line application Noddy and other python
packages. Important to note is the concept of high-level classes, defined in
the module <monospace>pynoddy.experiments</monospace>, to encapsulate history
file and output methods.</p></caption>
          <?xmltex \igopts{width=236.157874pt}?><graphic xlink:href="https://gmd.copernicus.org/articles/9/1019/2016/gmd-9-1019-2016-f02.pdf"/>

        </fig>

<sec id="Ch1.S2.SS5.SSS1">
  <title>Overall module structure</title>
      <p>The package pynoddy contains three main modules:
<monospace>pynoddy.history</monospace>, <monospace>pynoddy.output</monospace>, and
<monospace>pynoddy.experiment</monospace>. The <monospace>pynoddy.history</monospace> and
<monospace>pynoddy.output</monospace> modules provide interfaces for managing Noddy
inputs and outputs, while classes defined in
<monospace>pynoddy.experiment</monospace> provide methods for implementing and
performing repeatable modelling experiments. The output of Noddy
simulations can be processed and analysed with classes in
<monospace>pynoddy.output</monospace>,
and exported in file formats of the Visualization Toolkit (VTK; <uri>http://www.vtk.org</uri>) for 3-D visualization with appropriate VTK viewers.</p>

<?xmltex \floatpos{t}?><table-wrap id="Ch1.T1" specific-use="star"><caption><p>Descriptions of the output files produced by the command line
version of Noddy. Files for calculated potential fields are
calculated when Noddy is called in Geophysics mode (see
Sect. <xref ref-type="sec" rid="Ch1.S2.SS3"/>).</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="3">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="justify" colwidth="256.074803pt"/>
     <oasis:thead>
       <oasis:row rowsep="1">  
         <oasis:entry colname="col1">File extension</oasis:entry>  
         <oasis:entry colname="col2">Contents</oasis:entry>  
         <oasis:entry colname="col3">Details</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>  
         <oasis:entry colname="col1">.g00</oasis:entry>  
         <oasis:entry colname="col2">Model header file</oasis:entry>  
         <oasis:entry colname="col3">Information on the dimensions of the model (voxel size etc.), lithology names and associated geophysical properties.</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">.g01</oasis:entry>  
         <oasis:entry colname="col2">Density</oasis:entry>  
         <oasis:entry colname="col3">Spatial distribution of final density in each voxel</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">.g02</oasis:entry>  
         <oasis:entry colname="col2">Susceptibility</oasis:entry>  
         <oasis:entry colname="col3">Spatial distribution of final magnetic susceptibility in each voxel</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">.g12</oasis:entry>  
         <oasis:entry colname="col2">Lithology model</oasis:entry>  
         <oasis:entry colname="col3">Contains the lithology ID of each voxel in the model.</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">.grv</oasis:entry>  
         <oasis:entry colname="col2">Gravity field</oasis:entry>  
         <oasis:entry colname="col3">2-D field data of Bouguer gravity calculated from Noddy model</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">.mag</oasis:entry>  
         <oasis:entry colname="col2">Magnetic field</oasis:entry>  
         <oasis:entry colname="col3">2-D field data of total magnetic intensity calculated from Noddy model.</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p>The relationship between these main modules and the command-line
application Noddy is presented in
Fig. <xref ref-type="fig" rid="Ch1.F2"/>. More details on the implementation
and detailed visualizations of the class structure reflecting the current
module state are given in the documentation (see
Appendix <xref ref-type="sec" rid="App1.Ch1.S2"/>).</p>
</sec>
<sec id="Ch1.S2.SS5.SSS2">
  <title>Noddy histories</title>
      <p>The <monospace>NoddyHistory</monospace> class (defined in the module
<monospace>pynoddy.history</monospace>) contains methods for generating, opening, and
manipulating Noddy history files. <monospace>NoddyHistory</monospace> instances can be
created by (1) loading existing Noddy history files (including those
created using the Noddy GUI), or (2) programmatically defining an
event sequence and all the associated properties.  The Noddy events
encapsulated by a <monospace>NoddyHistory</monospace> instance can easily be modified or
reordered, and simulation properties, such as voxel size or geophysical
properties, adjusted. Once a <monospace>NoddyHistory</monospace> instance contains the desired
properties, it can be written as a Noddy history file (.his) and
passed to the Noddy application for processing.</p>
</sec>
<sec id="Ch1.S2.SS5.SSS3">
  <title>Noddy output</title>
      <p>Noddy writes the results of a model (defined by a .his file) as a
series of output files, described individually in Table <xref ref-type="table" rid="Ch1.T1"/>. The
<monospace>NoddyOutput</monospace> class (defined in the <monospace>pynoddy.output</monospace> module) contains
methods for reading, analysing, and visualising these outputs, and can
be used to create visual representations of sections through the
model, or to export a computed model as a 3-D grid to the VTK format
for further analysis and visualization using, for example, the
open-source packages Paraview (<uri>http://www.paraview.org</uri>) or Visit
(<uri>http://visit.llnl.gov</uri>).</p>
</sec>
<sec id="Ch1.S2.SS5.SSS4">
  <title>Experiments combining Noddy input and output</title>
      <p>If all steps of a pynoddy experiment are automated properly,
they can be integrated into one script for model set-up and
analysis. This method is leading to a possible reproduction of results
(as an example: see the scripts that generate the figures in this
manuscript; see Appendix <xref ref-type="sec" rid="App1.Ch1.S2"/> for availability). This
method is often used successfully to ensure reproducibility. It does,
however, have one significant drawback: intermediate results or
adapted simulation settings have to be stored in separate files and
all of those files have to be available to continue with an experiment
at a given state.</p>
      <p>In order to overcome this limitation, we follow here the aim of
including an entire experiment, from the definition of input parameter
of the model, to parameters that are specific to an experiment, to the
post-processing of results, within a single Python object.  Specific
experiments can then be defined as child classes inheriting a set of
useful base methods. This object can then be stored (for example with
a serialization using the Python pickle package) and retrieved exactly
in the state that it was used and defined for a complete reproduction
of results, or the adaptation of model parameters to test different
model outputs.</p>
      <p>The core of the <monospace>pynoddy.experiment</monospace> module is the
<monospace>Experiment</monospace> class, which inherits methods from both the
<monospace>NoddyHistory</monospace> and <monospace>NoddyOutput</monospace> classes, combining and
extending their functionality into a single interface that allows for a
flexible modelling procedure were the Noddy computations are
automatically executed when required and outputs directly updated. In
addition, methods are provided to encapsulate relevant parameters of
an experiment in the most efficient and flexible way. We consider this
last point essential to ensure a full reproducibility of scientific
experiments with kinematic models.</p>
      <p>In order to generate a specific type of experiment, new child classes
can then be defined, inheriting from the <monospace>Experiment</monospace> base
class. Several classes for specific types of experiments are already
implemented in the pynoddy package, and we show below the
application of one such child class, the <monospace>UncertaintyAnalysis</monospace>,
applied to a Monte Carlo error propagation experiment.</p>
      <p>For more details on the implementation and the structure of the
modules in pynoddy, please see the documentation and
associated source code at the pynoddy GitHub directory (see section on “Code availability” and Appendix B).</p>
</sec>
</sec>
</sec>
<sec id="Ch1.S3">
  <title>Applications</title>
      <p>This section outlines the functionality and utility of our pynoddy
implementation using a variety of case studies. First, the
structural effect of multiple faulting events is investigated, serving
mainly as an introduction to the generation of event histories in
pynoddy and the visualization of results.  Then, a model from the
Atlas of Structural Geophysics is used to evaluate the sensitivities
of calculated gravity potential-field values to changes of parameters
in kinematic events. Finally, we use the pynoddy framework to evaluate
uncertainties in a case study of the Gippsland Basin, Australia.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F3"><caption><p>Development of a fault network model with pynoddy:
<bold>(a)</bold> initial stratigraphic pile, <bold>(b)</bold> effect of the first
fault only, <bold>(c)</bold> effect of the second fault only, and
<bold>(d)</bold> combined effect of both faults.</p></caption>
        <?xmltex \igopts{width=241.848425pt}?><graphic xlink:href="https://gmd.copernicus.org/articles/9/1019/2016/gmd-9-1019-2016-f03.png"/>

      </fig>

<?xmltex \hack{\newpage}?>
<sec id="Ch1.S3.SS1">
  <title>Analysis of fault interactions</title>
      <p>We start here with an example that is conceptually simple, but can quickly
lead to complex structural settings: the interaction of a sequence of fault
events on a predefined stratigraphy
(Fig. <xref ref-type="fig" rid="Ch1.F3"/>a). A more detailed description and
interactive version is available as an IPython notebook as part of the
repository and as Supplement for this manuscript (see section on “Code availability” and Appendix B).</p>
      <p>This model is constructed from a stratigraphic sequence
containing five units, each 1000 m thick. We consider a model domain
of 10 000 <inline-formula><mml:math display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 7000 <inline-formula><mml:math display="inline"><mml:mo>×</mml:mo></mml:math></inline-formula> 5000 m in <inline-formula><mml:math display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>, <inline-formula><mml:math display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula>, and <inline-formula><mml:math display="inline"><mml:mi>z</mml:mi></mml:math></inline-formula> directions.  In the
following descriptions, we define points with respect to an origin in
the model at the top, SW corner (i.e.: the point (0,0,<inline-formula><mml:math display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>1000) is at a
depth of 1000 m at the south-west corner). A representation of the model in a
(<inline-formula><mml:math display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula>,<inline-formula><mml:math display="inline"><mml:mi>z</mml:mi></mml:math></inline-formula>) section is given in Fig. <xref ref-type="fig" rid="Ch1.F3"/>a.</p>
      <p>The second event in the model is a fault that affects the eastern part
of the model.  We define the fault at the top of the model at position
(2000, 3500, 0) dipping 60 <inline-formula><mml:math display="inline"><mml:mo>→</mml:mo></mml:math></inline-formula> 090 and a fault slip of 1000 m. The effect of this fault on the previous stratigraphic pile is
visualized in Fig. <xref ref-type="fig" rid="Ch1.F3"/>b. The third
event is also a fault, defined with a surface at position (8000, 3500,
0), dipping 60 <inline-formula><mml:math display="inline"><mml:mo>→</mml:mo></mml:math></inline-formula> 270 and a slip of 1000 m
(Fig. <xref ref-type="fig" rid="Ch1.F3"/>c).</p>
      <p>In terms of this definition of kinematic equations, the two fault
events are symmetrical. However, the combination of both events leads,
as can be expected, to a non-symmetrical interaction pattern, here
clearly visible in the central part of the model
(Fig. <xref ref-type="fig" rid="Ch1.F3"/>d).</p>
      <p>The previous example is included to present the possibilities for the
simple construction of a kinematic model from start. The model itself
is mostly interesting from an instruction or teaching perspective
and we will move to more complex models in the following.</p>
</sec>
<sec id="Ch1.S3.SS2">
  <title>Potential field modelling and the Atlas of Structural Geophysics</title>
      <p>One motivation for the development of Noddy was to provide a method to
explain and teach the effect of subsequent geological events, as we
presented an example above. The capability of Noddy to calculate
geophysical fields can furthermore be used to provide insights for the
interpretation of geophysical potential field data. We can, for
example, quickly evaluate how changing the properties of a geological
event (for example the dip angle of a fault) influences a simulated
potential field.</p>
      <p>In fact, this capability of Noddy has been a main driver to develop
the Atlas of Structural Geophysics, an online collection of
geological models with their simulated corresponding potential fields
for a wide variety of typical structural geological settings
(<uri>http://tectonique.net/asg</uri>).</p>
      <p>We provide in pynoddy the functionality to directly load models from
this atlas into python objects, for further testing and
manipulation. In addition, the pynoddy.output module also contains a
class definition to read in the calculated potential field responses
(<monospace>NoddyGeophysics</monospace>). In combination, these methods enable us to quickly
test the effect of different event properties on calculated potential
fields.</p>
      <p>As an example, we evaluate here how changing properties of
deformational events affects the forward calculated gravity field with
a model of a fold and thrust belt (Fig. <xref ref-type="fig" rid="Ch1.F4"/>).
The required commands to download a model from the web page, to adjust
cube size (for better representation), to write it to a file, and to
run the model, are combined in a tutorial notebook for detailed
reference (see Appendix <xref ref-type="sec" rid="App1.Ch1.S2"/>). The 3-D
visualization in Fig. <xref ref-type="fig" rid="Ch1.F3"/>c was
generated through the pynoddy export to VTK and visualized in Paraview
(see Sect. <xref ref-type="sec" rid="Ch1.S2.SS5.SSS3"/>).</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F4" specific-use="star"><caption><p>Sections through the fold and thrust belt model in <bold>(a)</bold> north–south direction,
and <bold>(b)</bold> east–west direction (vertical exaggeration of 1.5)
through the centre of the model. <bold>(c)</bold> Three-dimensional
representation for the central three layers of the fold and thrust
belt model. The grey surfaces correspond
to the location of the sections in the figure above.</p></caption>
          <?xmltex \igopts{width=426.791339pt}?><graphic xlink:href="https://gmd.copernicus.org/articles/9/1019/2016/gmd-9-1019-2016-f04.pdf"/>

        </fig>

      <?xmltex \floatpos{t}?><fig id="Ch1.F5" specific-use="star"><caption><p>Evaluation of the effect of a wavelength change in a
late folding event on the forward calculated gravity field: <bold>(a)</bold> gravity
field of original model, <bold>(b)</bold> gravity field of model with
changed event parameters, and <bold>(c)</bold> difference plot of gravity
fields.</p></caption>
          <?xmltex \igopts{width=426.791339pt}?><graphic xlink:href="https://gmd.copernicus.org/articles/9/1019/2016/gmd-9-1019-2016-f05.png"/>

        </fig>

      <p>We calculate the gravity field for this model with the spectral scheme
(Sect. <xref ref-type="sec" rid="Ch1.S2.SS3.SSS3"/>) by calling
<monospace>pynoddy.compute</monospace> in the geophysics
simulation mode. The resulting z-component of the gravity field is visualized
in Fig. <xref ref-type="fig" rid="Ch1.F5"/>a.</p>
      <p>As a next step, we evaluate how the effect of a different wavelength in
the folding event, as the latest event in the model history, affects
the calculated gravity field. This adaptation, as well as the
recalculation and visualization of the geophysical field
(Fig. <xref ref-type="fig" rid="Ch1.F5"/>b), can be performed with a few lines
of Python code (see tutorial notebook for details). In addition, we
use simple Python commands to calculate and visualize the difference
between the gravity fields of the original and the changed model
(Fig. <xref ref-type="fig" rid="Ch1.F5"/>c).</p>
      <p><?xmltex \hack{\newpage}?>With the previous examples, we showed the application of
pynoddy to perform simple kinematical modelling
experiments. These types of experiments could also be performed with
the already existing GUI of Noddy, or even on the basis of the ASCII
input files, only. The use of pynoddy does, however, provide
a simple and direct way to adjust models, and to directly perform
additional calculations (e.g. for the difference of the gravity
fields), and to generate high-quality visualizations with additional
Python tools.</p>
      <p>With the following example, we now want to highlight an essential
advantage of our new implementation in pynoddy: the
high-level definition of scientific experiments with kinematic
models.</p>
</sec>
<sec id="Ch1.S3.SS3">
  <title>Reproducible experiments with pynoddy</title>
      <p>One main motivation for the definition of a python package to access
the functionality of kinematic modelling is the increased level of
flexibility that it offers when performing scientific studies
with kinematic models. Specifically, we can automate the entire model
construction processes and can hence easily perform multiple
simulations with different parameter settings. This possibility
enables a whole new range of applications, from simple scenario
testing (as shown above), to the analysis of model uncertainties due to
the propagation of errors in input parameter and model
settings. In this sense, pynoddy is ideally suited to perform
scientific experiments on the basis of kinematic modelling concepts.</p>
      <p>If all steps of a pynoddy experiment are automated properly, they can
be integrated into one script for model set-up and analysis. If
implemented properly, this method enables a complete reproduction of
results. As described in Sect. <xref ref-type="sec" rid="Ch1.S2.SS5.SSS4"/>, we
provide a high-level object-oriented method for classes of full
kinematic experiments, combining Noddy input and output, automatic
computation when required, and the additional integration of further
methods from external Python packages.</p>

      <?xmltex \floatpos{t}?><fig id="Ch1.F6" specific-use="star"><caption><p><bold>(a)</bold> Tectonic events in the kinematic model. Symbols
indicate main orientation of events, stratigraphic units in blue
font; <bold>(b)</bold> 3-D visualization of simulated block model (transparency
for better visualization of internal fold), colours indicate
geological lithologies; <bold>(c)</bold> Visualization of uncertainty with
information entropy, clearly visible are high uncertainties where
effects of uncertain fold and fault interact.</p></caption>
          <?xmltex \igopts{width=369.885827pt}?><graphic xlink:href="https://gmd.copernicus.org/articles/9/1019/2016/gmd-9-1019-2016-f06.png"/>

        </fig>

      <p>In the following example, we show how we use the
<monospace>pynoddy.experiment</monospace> methods to investigate
error propagation with a Monte Carlo experiment for a complex geological
model of the Gippsland Basin. The tectonic history input to Noddy is shown in
Fig. <xref ref-type="fig" rid="Ch1.F6"/>a. This simplified but representative
geological history has been primarily derived from <xref ref-type="bibr" rid="bib1.bibx35" id="text.21"/>,
<xref ref-type="bibr" rid="bib1.bibx31" id="text.22"/>, <xref ref-type="bibr" rid="bib1.bibx29" id="text.23"/>, and <xref ref-type="bibr" rid="bib1.bibx25" id="text.24"/>. Each event
shown in Fig. <xref ref-type="fig" rid="Ch1.F6"/>a corresponds to an event interpreted
from the Gippsland Basin, a Mesozoic to Cenozoic oil and gas field in
southeastern Australia <xref ref-type="bibr" rid="bib1.bibx10 bib1.bibx35" id="paren.25"/>. Our model basement is
Ordovician rocks and the cover sequences include the Oligocene Seaspray and
Pliocene Angler sequences. Of particular interest for oil and gas
prospectivity is the Paleocene to late Miocene Latrobe Group, which includes
the Cobia, Golden Beach, and Emperor subgroups <xref ref-type="bibr" rid="bib1.bibx2" id="paren.26"/>. The
basin is cross-cut by a number of transfer and normal faults; however, we
only model the most pervasive fault sets for this example. These include the
north-northeast to north-east-trending Lucas Point Fault, Spinnaker Fault,
and Cape Everard Fault systems, and the east–west-trending Wron
Wron/Rosedale Fault systems. Some large-scale (10 s km wavelength) folding
is observed; however, the basin retains an overall layer-cake stratigraphy.</p>
      <p>We now want to evaluate how uncertainties in the kinematic parameters
of the different tectonic events (Fig. <xref ref-type="fig" rid="Ch1.F6"/>a)
propagate to the final constructed model
(Fig. <xref ref-type="fig" rid="Ch1.F6"/>b). The general procedure is briefly
outlined here, for more details please see the IPython notebook with
the complete example and more thorough descriptions (see documentation
and tutorial, Sect. <xref ref-type="sec" rid="App1.Ch1.S2"/>).</p>
      <p>We use here the class <monospace>UncertaintyAnalysis</monospace>,
which contains methods for Monte Carlo-type error propagation and
subsequent uncertainty analyses. As a first step, we consider relevant
kinematic modelling parameters now as random variables, instead of
deterministic variables. The properties of these random variables can
be described as probability distributions in several ways. We use here
a simple definition in a table, stored in a comma separated file, that
can be loaded directly into the object.</p>
      <p>We assign normal distributions to location points and layer
thicknesses, with a mean value according to the prior mean, and a
standard deviation of 100 m, to reflect the overall uncertainty in
defining representative thickness and location values on the large
scale of the model. The wavelength of the late folding event
(Fig. <xref ref-type="fig" rid="Ch1.F6"/>a) has a mean of 15 km and we assign a
standard deviation of 2.5 km, assuming a high uncertainty in
determining a wavelength for this event. Uncertainties in
orientation measures are defined with a von Mises distribution. We
provide details on the parameter distributions in a table in the
Appendix (<xref ref-type="sec" rid="App1.Ch1.S3.SS2"/>).</p>
      <p>With the parameters of the random variables stored in an external
file, we can instantiate the uncertainty analysis object with the history file
of the kinematic model and the name of the parameter file as
arguments:</p>
      <p><monospace>ua = UncertaintyAnalysis(history_file,  params)</monospace></p>
      <p>We can now directly generate <inline-formula><mml:math display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula> random samples from this model with</p>
      <p><monospace>ua.estimate_uncertainty(n)</monospace></p>
      <p>The set of results is, by default, saved directly within the object,
and can be extracted in the form of Python <monospace>numpy</monospace> arrays for
further processing. In addition, a set of standard post-processing
methods and utility functions is already implemented in the class
definition. For example, it is directly possible to generate analyses
and visualizations for the probability of outcomes for a specific
geological lithology per voxel <xref ref-type="bibr" rid="bib1.bibx43 bib1.bibx25" id="paren.27"/>,
and for the analysis of voxel-based information entropy measures
<xref ref-type="bibr" rid="bib1.bibx42 bib1.bibx41" id="paren.28"/>.</p>
      <p>In this example of the Gippsland Basin, we perform Monte Carlo error
propagation for a set of 32 parameters of all kinematic events in the
model, and generate 100 random realizations of the model (see tutorial
notebook in documentation). For post-processing, we analyse and
visualize results in a 3-D plot of cell information entropies
(Fig. <xref ref-type="fig" rid="Ch1.F6"/>c). The estimated uncertain areas in
the model are clearly visible, and the highest uncertainties exist in
areas where the effect of uncertainties in different events overlaps
(see Fig. <xref ref-type="fig" rid="Ch1.F6"/>c).</p>
      <p>The previous experiment is a typical example of Monte Carlo sampling
methods <xref ref-type="bibr" rid="bib1.bibx28" id="paren.29"/>. One characteristic of the sampling
is that all realizations are drawn independently. Therefore, a
parallel implementation of the sampling is directly possible. As one
possibility, we provide a parallel sampling scheme implemented in the
<?xmltex \hack{\fontsize{9.1}{9.1}{\texttt{pynoddy.experiment.monte\_ carlo.MonteCarlo}}}?> class, based on the
Python threading module, and we used this scheme successfully on a
supercomputer. For more information on this possibility, see
documentation (Appendix <xref ref-type="sec" rid="App1.Ch1.S2"/>) and the source code of
the <monospace>monte_carlo.py</monospace> module.</p>
</sec>
</sec>
<sec id="Ch1.S4" sec-type="conclusions">
  <title>Discussion</title>
      <p>We have presented a newly developed python module for performing
scientific experiments with kinematic models, and provided examples of
possible applications for investigating the interaction of tectonic
events, assessing the effect of kinematic parameters on simulated
geophysical potential fields, and identifying uncertainty within 3-D
geological models. These examples would not have been possible without
the methodology that pynoddy provides for defining, modifying and
realising kinematic models in a scripting environment.  Our
developments therefore provide opportunities for performing scientific
experiments with kinematic models that have not been possible before.</p>
      <p>One aspect of the developed code is that entire experiments with
kinematic models can be encapsulated in a one class definition. We
demonstrated this encapsulation with the third example
(Sect. <xref ref-type="sec" rid="Ch1.S3.SS3"/>), performing complex analyses within a
single python class, and hence allowing full reproducibility. This
encapsulation has multiple further advantages, including a simple, but
still flexible, way to test effects of uncertainties in kinematic
parameters and the direct inclusion of post-processing and analysis
methods, as shown with the analysis of information entropy
(Fig. <xref ref-type="fig" rid="Ch1.F6"/>c), to ensure consistency between
experiments and subsequent analyses.  Several experiment classes in
addition to the presented Monte Carlo method are pre-defined,
including, for example, methods for local and global sensitivity
analysis. The definition of custom classes on the basis of this
framework is straightforward. In essence, the combination of input
and output generation with on-demand computation allows for high
flexibility, as well as an integration of essential aspects of entire
kinematic experiments in a single object. As the random state is
stored, this encapsulation facilitates easy reproduction of entire
scientific experiments with kinematic models.</p>
      <p>Limitations of the modelling approach presented here are related to (a) the specific kinematic functions available in Noddy, (b) the
conceptual simplification of representing complex dynamical evolutions
with purely kinematic functions in general (see
Fig. <xref ref-type="fig" rid="Ch1.F1"/>), and (c) the limited
consideration of surface contact information and measurements.</p>
      <p>The first limitation is based on the fact that we did not extend the
basic functionality of the kinematic equations implemented in
Noddy, and these equations may not be complex enough for
specific modelling requirements. For example, the fold model in Noddy
is based on a simple fold concept, and this may be a limitation when
other fold mechanisms need to be modelled. For a full definition of
possibilities and limitations, please see <xref ref-type="bibr" rid="bib1.bibx15" id="text.30"/> and
<xref ref-type="bibr" rid="bib1.bibx17" id="text.31"/>. However, as presented in this manuscript
(Fig. <xref ref-type="fig" rid="Ch1.F6"/>), in the examples of the Atlas of
Structural Geophysics (Sect. <xref ref-type="sec" rid="App1.Ch1.S1.SS6"/>), or even
in recent publications <xref ref-type="bibr" rid="bib1.bibx1" id="paren.32"/>, complex models can easily
evolve from the interaction of multiple kinematic events.</p>
      <p>The second limitation, that is the use of kinematic equations instead
of a full dynamic simulation, is a significant conceptual
simplification and has to be kept in mind when constructing and
interpreting results of kinematic modelling, to ensure that the
methods are used in the scope where they are valid. With the examples
presented in this manuscript, we wanted to highlight such
applications; in addition to the instructive aspect of using kinematic
models to teach and visualize the effect of interacting deformational
and magmatic events, we believe that main advantages come from the
potential to automatically generate multiple model realizations. These
methods are facilitated by the fact that the generation of a single
kinematic model is typically very fast (in the order of seconds to
minutes on a single core) compared to full dynamic simulations. This
possibility therefore enables the investigation of interaction between
simplified deformational events, but with the consideration of
uncertainties in event parameters, orders, and types.</p>
      <p>The final limitation is that kinematic modelling only allows for indirect
consideration of actual observations and measurements in the
models. An encouraging avenue of investigation is the inclusion of
observations facilitated by combining kinematic modelling with
interpolation methods (Fig. <xref ref-type="fig" rid="Ch1.F1"/>a). We note
at this point the similarity between the kinematic modelling methods
described in our work, and object modelling methods in geostatistics
<xref ref-type="bibr" rid="bib1.bibx34" id="paren.33"/>, which are widely and successfully use
in reservoir modelling. We envisage that experience from applications
of these object modelling methods can be transferred to kinematic
modelling concepts based on the flexible methods presented in this
work.</p>
      <p>The methods we have implemented are platform independent, as they are
completely implemented in Python, and Noddy itself in C. It
is therefore possible to port developed experiments and code easily to
other computational environments. We have, for example, tested
numerical experiments on supercomputers, a possibility that is
especially important for the generation of multiple (i.e. thousands or
more) high-resolution model realizations, or the combination with
complex post-processing methods. In addition, the platform
independence circumvents a limitation of the current GUI for
Noddy, which is restricted to one operating system. One of the
main motivations for the original development of Noddy, for
use a teaching tool, is therefore also ensured.</p>
      <p>Geological modelling is most often not an end in itself, but the input
to further modelling and simulation methods. For example, structural
geological models are often used as an input for subsequent flow
simulation studies, or for wave propagation experiments. This
combination is directly possible with our developed methods, as the
distribution and properties of lithological units in space are stored
in <monospace>numpy</monospace> arrays, that can easily be exported to other modelling
methods in Python or similar frameworks. One example would be using
the generated models as input for property distribution in
hydrothermal experiments with the widely used flow simulation code
TOUGH2, through the use of the Python package PyTOUGH,
<uri>https://github.com/acroucher/PyTOUGH</uri>
<xref ref-type="bibr" rid="bib1.bibx44" id="paren.34"><named-content content-type="pre">see</named-content></xref>, or to the generation of synthetic
seismic sections and simulations of wave propagation with Madagascar,
<uri>www.ahay.org</uri>.</p>
      <p><?xmltex \hack{\newpage}?>Future extensions of the developed code will include an optimised application
in parallel environments, including a better storage of results (e.g. in HDF5
formats), and a better link to geological data sets and parameters (e.g.
through the use of GeoSciML, see <xref ref-type="bibr" rid="bib1.bibx37" id="altparen.35"/> and
<xref ref-type="bibr" rid="bib1.bibx38" id="altparen.36"/>). In addition, we are actively working on
developments of additional experiment classes, for example for detailed
topological analyses of structural models, and further post-processing and
uncertainty quantification methods. Another path of future research is to
investigate the possibility to integrate kinematic modelling with Noddy into
inference frameworks, for example to test the possible inversion of kinematic
parameters from observations and geophysical measurements. We hope to include
functionality developed by other external users into the main package, and
encourage an active participation with successfully developed extensions.</p>
<sec id="Ch1.S4.SSx1" specific-use="unnumbered">
  <title>Code availability</title>
      <p>The information provided here is reflecting the current state of the
repository at the time of manuscript preparation. In case you find
information outdated, please contact the corresponding author.</p>
      <p><list list-type="bullet">
            <list-item>
              <p>pynoddy is free open-source software. It is currently
hosted on:<?xmltex \hack{\\}?><uri>https://github.com/flohorovicic/pynoddy</uri>.</p>
            </list-item>
            <list-item>
              <p>For detailed
information on the license, see the agreement in the <monospace>LICENSE</monospace>
file of the repository.</p>
            </list-item>
            <list-item>
              <p>Documentation is available as part of the package and online:<?xmltex \hack{\\}?><uri>http://pynoddy.readthedocs.org/</uri>.</p>
            </list-item>
          </list></p><?xmltex \hack{\clearpage}?>
</sec>
</sec>

      
      </body>
    <back><app-group>

<app id="App1.Ch1.S1">
  <?xmltex \opttitle{\hack{}{pynoddy} package information}?><title>pynoddy package information</title>
<sec id="App1.Ch1.S1.SS1">
  <title>Notes on installation</title>
      <p>A successful installation of pynoddy requires two steps:</p>
      <p><list list-type="order">
            <list-item>
              <p>an installation of the python modules in the package
pynoddy;</p>
            </list-item>
            <list-item>
              <p>the existance of an executable <monospace>Noddy(.exe)</monospace> program.</p>
            </list-item>
          </list></p>
      <p>Currently, pynoddy and Noddy can be installed in two
alternative ways: (a) directly from the source code with the full
repository, or (b) with a direct installation from the Python Package Index and pre-compiled executables. We suggest using option (a) for the
most recent and most complete version of the code. Version (b)
is suggested for less experienced users, who would like to quickly test
and apply kinematic modelling methods. We describe the installation the alternatives in
the following.</p>
      <p>Hereafter, for clarity, we denote command line prompts with a <inline-formula><mml:math display="inline"><mml:mo>&gt;</mml:mo></mml:math></inline-formula> symbol:</p>
      <p><inline-formula><mml:math display="inline"><mml:mo>&gt;</mml:mo></mml:math></inline-formula> <monospace>command to be executed</monospace></p>
</sec>
<sec id="App1.Ch1.S1.SS2">
  <?xmltex \opttitle{\hack{}Installation of {pynoddy}}?><title>Installation of pynoddy</title>
<sec id="App1.Ch1.S1.SS2.SSS1">
  <?xmltex \opttitle{\hack{}Installing {pynoddy} from the github repository}?><title>Installing pynoddy from the github repository</title>
      <p>As a first step, we suggest to clone the current repository to your
local machine. This step can be done with a github front-end, or simply
with the usual <monospace>git</monospace> command in a terminal:
<preformat><![CDATA[> git clone
https://github.com/flohorovicic/pynoddy]]></preformat></p>
      <p>Note: if you do not have a running version of <monospace>git</monospace> installed,
then you can also simply download the entire repository as a zip file
from the github page. However, you then do not have the full
flexibility of the entire repository, and therefore we recommend using
<monospace>git</monospace>.</p>
      <p>Once the repository is cloned (or downloaded), simply change to the
main directory of pynoddy and install the Python package with
the installation script:</p>
      <p><monospace><inline-formula><mml:math display="inline"><mml:mo mathvariant="normal">&gt;</mml:mo></mml:math></inline-formula> python setup.py install</monospace></p>
      <p>Note that this command adds pynoddy to your global Python
installation. If you plan to develop parts of pynoddy further
yourself, then installation in development mode is suggested:</p>
      <p><monospace><inline-formula><mml:math display="inline"><mml:mo mathvariant="normal">&gt;</mml:mo></mml:math></inline-formula> python setup.py develop</monospace></p>
      <p>In this mode, modifications in the cloned repository are directly
considered when importing the modules in your Python scripts.</p><?xmltex \hack{\newpage}?>
</sec>
<sec id="App1.Ch1.S1.SS2.SSS2">
  <?xmltex \opttitle{\hack{}Installation of {pynoddy} from Python Package Index}?><title>Installation of pynoddy from Python Package Index</title>
      <p>pynoddy is hosted on the Python Package Index
(<uri>https://pypi.python.org/pypi/pynoddy/</uri>) and the typical methods
can be used to install the Python packages.</p>
      <p>If <monospace>pip</monospace> is installed on your system, then the most
straight-forward installation is directly though executing in a
terminal:</p>
      <p><monospace><inline-formula><mml:math display="inline"><mml:mo mathvariant="normal">&gt;</mml:mo></mml:math></inline-formula> pip install pynoddy</monospace></p>
      <p>Alternatively, the package source can be downloaded from the index
page, as well as an installation program for Windows systems.</p>
      <p>Please note that the Python package on the index is not always the
newest version, but in a state that reflects the latest stable
developments. For the most current state, we suggest an installation
from the repository (Sect. <xref ref-type="sec" rid="App1.Ch1.S1.SS2.SSS1"/>).</p>
</sec>
</sec>
<sec id="App1.Ch1.S1.SS3">
  <?xmltex \opttitle{\hack{}Installation of the {Noddy} command line program}?><title>Installation of the Noddy command line program</title>
<sec id="App1.Ch1.S1.SS3.SSS1">
  <?xmltex \opttitle{\hack{}Using a pre-compiled version of {Noddy}}?><title>Using a pre-compiled version of Noddy</title>
      <p>The easy way to obtain a executable version of Noddy is simply
to download the appropriate version for your operating
system. Currently, these executables versions are also stored on
github (check the up-to-date online documentation if this should not
anymore be the case) in the directory:</p>
      <p><uri>https://github.com/flohorovicic/pynoddy/tree/master/noddyapp</uri></p>
      <p>Furthermore, the executables for Windows are also available for
download on the webpage:</p>
      <p><uri>http://www.tectonique.net/pynoddy</uri></p>
      <p>Download the appropriate app, rename it to Noddy or
<monospace>noddy.exe</monospace>  and place it into a folder that is in
your local environment path variable. If you are not sure if a folder
is in the <monospace>PATH</monospace> or would like to add new one, see
Sect. <xref ref-type="sec" rid="App1.Ch1.S1.SS3.SSS3"/>.</p>
</sec>
<sec id="App1.Ch1.S1.SS3.SSS2">
  <?xmltex \opttitle{\hack{}Compiling {Noddy} from source files (recommended)}?><title>Compiling Noddy from source files (recommended)</title>
      <p>The source code for the executable Noddy is located in the repository
directory <monospace>noddy</monospace>. In order to perform the
installation, a <monospace>gcc</monospace> compiler is required. This compiler
should be available on Linux and MacOSX operating systems. On Windows,
one possibility is to install MinGW. Otherwise, the code requires no
specific libraries.</p>
      <p>Note for MacOSX users: some header files have to be adapted to avoid
conflicts with local libraries. The required adaptations are executed
when running the script:</p>
      <p><monospace><inline-formula><mml:math display="inline"><mml:mo mathvariant="normal">&gt;</mml:mo></mml:math></inline-formula> adjust_for_MacOSX.sh</monospace></p>
      <p>The compilation is then performed (in a Linux, MacOSX, or Windows
MinGW terminal) with the command:</p>
      <p><monospace><inline-formula><mml:math display="inline"><mml:mo mathvariant="normal">&gt;</mml:mo></mml:math></inline-formula> compile.sh</monospace></p>
      <p>Compilation usually produces multiple warnings, but should otherwise
proceed successfully.</p>
      <p><?xmltex \hack{\newpage}?>The repository is in a state of active further development. We
identified the current state of the repository at the time of
manuscript submission with a <monospace>git</monospace> tag to ensure consistency of examples
and descriptions presented in this manuscript.</p>
</sec>
<sec id="App1.Ch1.S1.SS3.SSS3">
  <?xmltex \opttitle{\hack{}Placing {Noddy} in the path}?><title>Placing Noddy in the Path</title>
      <p>For the most general installation, the executable of Noddy
should be placed in a folder that can be located from any terminal
application in the system. This (usually) means that the folder with
the executable has to be in the <monospace>PATH</monospace> environment
variable. On Linux and MacOSX, a path can simply be added by
<preformat><![CDATA[> export PATH="path/to/executable/:$PATH"]]></preformat></p>
      <p>Note that this command should be placed into your
<monospace>.bash_profile</monospace> file to ensure that the path is added whenever
you start a new Python script.</p>
      <p>On <monospace>Windows</monospace>, adding a folder to the local environment variable
<monospace>PATH</monospace> is usually done through the System Control Panel
(Start – Settings – Control Panel – System). In Advanced mode, open
the Environment Variables sub-menu, and find the variable PATH. Click
to edit the variable, and add the location of your folder to this path.</p>
</sec>
<sec id="App1.Ch1.S1.SS3.SSS4">
  <?xmltex \opttitle{\hack{}Specifying path during {pynoddy} execution}?><title>Specifying path during pynoddy execution</title>
      <p>Another option is to tell <monospace>pynoddy.compute_model</monospace> the exact
path to the Noddy executable:
<preformat><![CDATA[pynoddy.compute_model(history,
output_name,
noddy_path = 'path/to/program')]]></preformat></p>
      <p>However, this method should only be used as the fall-back option if
adding the executable to a path (Sect. <xref ref-type="sec" rid="App1.Ch1.S1.SS3.SSS3"/>)
does not work. Also, in this case, the tests
(Sect. <xref ref-type="sec" rid="App1.Ch1.S1.SS4"/>) will most likely fail.</p>
</sec>
</sec>
<sec id="App1.Ch1.S1.SS4">
  <title>Testing the installation</title>
<sec id="App1.Ch1.S1.SS4.SSS1">
  <?xmltex \opttitle{\hack{}Testing {Noddy}}?><title>Testing Noddy</title>
      <p>Simply test the installation by running the generated (or downloaded)
executable in a terminal window (on Windows: <monospace>cmd</monospace>):</p>
      <p><monospace><inline-formula><mml:math display="inline"><mml:mo mathvariant="normal">&gt;</mml:mo></mml:math></inline-formula> noddy</monospace></p>
      <p>or (depending on your compilation or naming convention):</p>
      <p><monospace><inline-formula><mml:math display="inline"><mml:mo mathvariant="normal">&gt;</mml:mo></mml:math></inline-formula> noddy.exe</monospace></p>
      <p>Which should produce the general output:
<preformat><![CDATA[Arguments <historyfile> <outputfile>
<calc_mode>:
BLOCK
GEOPHYSICS
SURFACES
BLOCK_GEOPHYS
BLOCK_SURFACES
TOPOLOGY
ANOM_FROM_BLOCK
ALL]]></preformat></p>
      <p>Note: if the executable is correctly placed in a folder, which is
recognised by the (Environment) path variable, then you should be able
to run Noddy from any directory. If this is not the case,
please see Sect. <xref ref-type="sec" rid="App1.Ch1.S1.SS3.SSS3"/>.</p>
</sec>
<sec id="App1.Ch1.S1.SS4.SSS2">
  <?xmltex \opttitle{\hack{}Testing {pynoddy}}?><title>Testing pynoddy</title>
      <p>The pynoddy package contains a set of tests, which can be
executed in the standard Python testing environment. If you cloned or
downloaded the repository, then these tests can directly be performed
through the set-up script:</p>
      <p><monospace><inline-formula><mml:math display="inline"><mml:mo mathvariant="normal">&gt;</mml:mo></mml:math></inline-formula> python setup.py test</monospace></p>
      <p>Of specific relevance is the test that determines if the
<monospace>noddy(.exe)</monospace> executable is correctly accessible from
pynoddy. If this is the case, then the
<monospace>compute_model</monospace> test should return:</p>
      <p><monospace>test_compute_model (test.TestHistory) ... ok</monospace></p>
      <p>If this test is not ok, then please check carefully the installation
of the <monospace>noddy(.exe)</monospace> executable (see either
Appendix <xref ref-type="sec" rid="App1.Ch1.S1.SS3.SSS1"/> or <xref ref-type="sec" rid="App1.Ch1.S1.SS3.SSS2"/>).</p>
      <p>If all tests are successful, you are ready to continue.</p>
</sec>
</sec>
<sec id="App1.Ch1.S1.SS5">
  <title>Noddy executable and GUI</title>
      <p>The original graphical user interface for Noddy and the compiled
executable program for Windows can be obtained from
<uri>http://tinyurl.com/noddy-site</uri>. This site also contains the
source code, as well as extensive documentation and tutorial material
concerning the original implementation of the software, as well as
more technical details on the modelling method itself.</p>
</sec>
<sec id="App1.Ch1.S1.SS6">
  <title>Atlas of Structural Geophysics</title>
      <p>The Atlas of Structural Geophysics contains a collection of structural
models, together with their expression as geophysical potential fields
(gravity and magnetics), with a focus on guiding the interpretation of
observed features in potential-field maps.</p>
      <p>The atlas is currently available on
<uri>http://tectonique.net/asg</uri>. The structural models are
created with Noddy and the history files can be downloaded from the
atlas. Together with the Python package pynoddy, which is
presented in this manuscript, these models can easily be adjusted and
recomputed to reflect different settings, as shown in the example in
Sect. <xref ref-type="sec" rid="Ch1.S3.SS2"/>.</p><?xmltex \hack{\newpage}?>
</sec>
</app>

<app id="App1.Ch1.S2">
  <title>Documentation</title>
      <p>An up-to-date documentation is available as part of the
pynoddy repository, including all source files, a
compiled Latex pdf version (in <monospace>docs/_build/latex</monospace>), and a
version in html (in <monospace>docs/_build/html</monospace>).</p>
      <p>In addition, the documentation is hosted on the readthedocs webpage
for quick online reference on
<uri>http://pynoddy.readthedocs.org/</uri>.</p>
      <p>The most convenient way to get started with pynoddy is to
experiment with the interactive IPython notebooks, for example to
reproduce and adapt the examples given in this manuscript. These
notebooks are a part of the repository. The only requirement is to
have a running Jupyter installation; see <uri>http://jupyter.org</uri> for
more information. We furthermore plan to have these interactive
notebooks available for web-based experiments with pynoddy in
the future.</p><?xmltex \hack{\newpage}?>
</app>

<app id="App1.Ch1.S3">
  <title>Additional information on models and results in this
publication</title>
<sec id="App1.Ch1.S3.SS1">
  <title>Example models in this manuscript</title>
      <p>All example models presented in this manuscript, respectively the
python and pynoddy code to generate them, are available as
part of the repository. The experiments are directly accessible as
Jupyter notebooks to re-generate the presented experiments, or to test
different parameters (in <monospace>docs/notebooks</monospace>).</p>
</sec>
<sec id="App1.Ch1.S3.SS2">
  <title>Gippsland Basin uncertainty study</title>
      <p>The Gippsland Basin model was inspired by previous work of the authors
in this region <xref ref-type="bibr" rid="bib1.bibx25" id="paren.37"/>, and further references to the
geological setting can be found there. For the purpose of this work,
the kinematic parameters for the geological events, as well as the
probability distribution considerations of these parameters as random
variables, are given in Table <xref ref-type="table" rid="App1.Ch1.T1"/>.</p><?xmltex \hack{\clearpage}?><?xmltex \floatpos{h!}?><table-wrap id="App1.Ch1.T1"><?xmltex \hack{\hsize\textwidth}?><caption><p>Distributions and parameters for Gippsland Basin study.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="6">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="left"/>
     <oasis:colspec colnum="4" colname="col4" align="right"/>
     <oasis:colspec colnum="5" colname="col5" align="right"/>
     <oasis:colspec colnum="6" colname="col6" align="left"/>
     <oasis:thead>
       <oasis:row rowsep="1">  
         <oasis:entry colname="col1">Event</oasis:entry>  
         <oasis:entry colname="col2">Parameter</oasis:entry>  
         <oasis:entry colname="col3">Distribution type</oasis:entry>  
         <oasis:entry colname="col4">Mean</oasis:entry>  
         <oasis:entry colname="col5">Shape parameter</oasis:entry>  
         <oasis:entry colname="col6">Event name</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>  
         <oasis:entry colname="col1">2</oasis:entry>  
         <oasis:entry colname="col2">Amplitude</oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">500</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Early fold</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">2</oasis:entry>  
         <oasis:entry colname="col2">Wavelength</oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">15000</oasis:entry>  
         <oasis:entry colname="col5">2500</oasis:entry>  
         <oasis:entry colname="col6">Early fold</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">2</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>X</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">0</oasis:entry>  
         <oasis:entry colname="col5">500</oasis:entry>  
         <oasis:entry colname="col6">Early fold</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">2</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>Z</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">0</oasis:entry>  
         <oasis:entry colname="col5">500</oasis:entry>  
         <oasis:entry colname="col6">Early fold</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">3</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>Z</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">250</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Permian seds.</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">4|11</oasis:entry>  
         <oasis:entry colname="col2">Dip</oasis:entry>  
         <oasis:entry colname="col3">von Mises</oasis:entry>  
         <oasis:entry colname="col4">70</oasis:entry>  
         <oasis:entry colname="col5">10</oasis:entry>  
         <oasis:entry colname="col6">Cape Howe Fault</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">4|11</oasis:entry>  
         <oasis:entry colname="col2">Dip Direction</oasis:entry>  
         <oasis:entry colname="col3">von Mises</oasis:entry>  
         <oasis:entry colname="col4">270</oasis:entry>  
         <oasis:entry colname="col5">5</oasis:entry>  
         <oasis:entry colname="col6">Cape Howe Fault</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">4|11</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>X</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">23000</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Cape Howe Fault</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">4|11</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>Z</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">5000</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Cape Howe Fault</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">4</oasis:entry>  
         <oasis:entry colname="col2">Slip</oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4"><inline-formula><mml:math display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>100</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Cape Howe Fault</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">5|10</oasis:entry>  
         <oasis:entry colname="col2">Dip</oasis:entry>  
         <oasis:entry colname="col3">von Mises</oasis:entry>  
         <oasis:entry colname="col4">70</oasis:entry>  
         <oasis:entry colname="col5">10</oasis:entry>  
         <oasis:entry colname="col6">Cape Everard Fault</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">5|10</oasis:entry>  
         <oasis:entry colname="col2">Dip Direction</oasis:entry>  
         <oasis:entry colname="col3">von Mises</oasis:entry>  
         <oasis:entry colname="col4">286</oasis:entry>  
         <oasis:entry colname="col5">5</oasis:entry>  
         <oasis:entry colname="col6">Cape Everard Fault</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">5|10</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>X</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">18000</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Cape Everard Fault</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">5|10</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>Y</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">0</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Cape Everard Fault</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">5|10</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>Z</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">5000</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Cape Everard Fault</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">5</oasis:entry>  
         <oasis:entry colname="col2">Slip</oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4"><inline-formula><mml:math display="inline"><mml:mo>-</mml:mo></mml:math></inline-formula>100</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Cape Everard Fault</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">6</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>Z</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">750</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Strzelecki seds.</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">7</oasis:entry>  
         <oasis:entry colname="col2">Dip</oasis:entry>  
         <oasis:entry colname="col3">von Mises</oasis:entry>  
         <oasis:entry colname="col4">70</oasis:entry>  
         <oasis:entry colname="col5">10</oasis:entry>  
         <oasis:entry colname="col6">Lake Wellington Thrust</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">7</oasis:entry>  
         <oasis:entry colname="col2">Dip Direction</oasis:entry>  
         <oasis:entry colname="col3">von Mises</oasis:entry>  
         <oasis:entry colname="col4">180</oasis:entry>  
         <oasis:entry colname="col5">5</oasis:entry>  
         <oasis:entry colname="col6">Lake Wellington</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">7</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>Y</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">13000</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Lake Wellington</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">7</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>Z</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">5000</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Lake Wellington</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">7</oasis:entry>  
         <oasis:entry colname="col2">Slip</oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">500</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Lake Wellington</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">8</oasis:entry>  
         <oasis:entry colname="col2">Dip</oasis:entry>  
         <oasis:entry colname="col3">von Mises</oasis:entry>  
         <oasis:entry colname="col4">45</oasis:entry>  
         <oasis:entry colname="col5">10</oasis:entry>  
         <oasis:entry colname="col6">Foster Thrust</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">8</oasis:entry>  
         <oasis:entry colname="col2">Dip Direction</oasis:entry>  
         <oasis:entry colname="col3">von Mises</oasis:entry>  
         <oasis:entry colname="col4">10</oasis:entry>  
         <oasis:entry colname="col5">5</oasis:entry>  
         <oasis:entry colname="col6">Foster Thrust</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">8</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>X</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">8730</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Foster Thrust</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">8</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>Y</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">0</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Foster Thrust</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">8</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>Z</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">5000</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Foster Thrust</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">8</oasis:entry>  
         <oasis:entry colname="col2">Slip</oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">500</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Foster Thrust</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">9</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>Z</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">750</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">La Trobe seds.</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">10</oasis:entry>  
         <oasis:entry colname="col2">Slip</oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">200</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Cape Everard</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">11</oasis:entry>  
         <oasis:entry colname="col2">Slip</oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">200</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Cape Howe</oasis:entry>
       </oasis:row>
       <oasis:row>  
         <oasis:entry colname="col1">12</oasis:entry>  
         <oasis:entry colname="col2"><inline-formula><mml:math display="inline"><mml:mi>Z</mml:mi></mml:math></inline-formula></oasis:entry>  
         <oasis:entry colname="col3">Normal</oasis:entry>  
         <oasis:entry colname="col4">1000</oasis:entry>  
         <oasis:entry colname="col5">100</oasis:entry>  
         <oasis:entry colname="col6">Angler–Seaspray seds.</oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

<?xmltex \hack{\clearpage}?><supplementary-material position="anchor"><p><bold>The Supplement related to this article is available online at <inline-supplementary-material xlink:href="http://dx.doi.org/10.5194/gmd-9-1019-2016-supplement" xlink:title="pdf">doi:10.5194/gmd-9-1019-2016-supplement</inline-supplementary-material>.</bold></p></supplementary-material>
</sec>
</app>
  </app-group><ack><title>Acknowledgements</title><p>Florian Wellmann would like to acknowledge the support from the AICES
Graduate School, funded by the German Research Foundation
(DFG). Mark Lindsay would like to acknowledge the support of the
Geological Survey of Western Australia and the Exploration Incentive
Scheme. Mark Jessell would like to acknowledge his Western
Australian Fellowship and the Geological Survey of Western Australia
for their support of this work. We thank Gautier Laurent and Sergio Zlotnik
for their constructive criticism that helped us improve the
manuscript. Furthermore, we would like to thank
Andrew King and other early contributors to the pynoddy
package – and everyone who will contribute in the future, in
advance.<?xmltex \hack{\newline}?><?xmltex \hack{\newline}?>
Edited by: L. Gross</p></ack><ref-list>
    <title>References</title>

      <ref id="bib1.bibx1"><label>Armit et al.(2012)Armit, Betts, Schaefer, and
Ailleres</label><mixed-citation>
Armit, R. J., Betts, P. G., Schaefer, B. F., and Ailleres, L.: Constraints on
long-lived Mesoproterozoic and Palaeozoic deformational events and crustal
architecture in the northern Mount Painter Province, Australia, Gondwana
Res., 22, 207–226, 2012.</mixed-citation></ref>
      <ref id="bib1.bibx2"><label>Bernecker et al.(2001)Bernecker, Woollands, Wong, Moore, and
Smith</label><mixed-citation>
Bernecker, T., Woollands, M., Wong, D., Moore, D., and Smith, M.: Hydrocarbon
prospectivity of the deep water Gippsland Basin, Victoria, Australia, APPEA
Journal, 41, 91–113, 2001.</mixed-citation></ref>
      <ref id="bib1.bibx3"><label>Bistacchi et al.(2008)</label><mixed-citation>
Bistacchi, A., Massironi, M., Dal Piaz, V. G., Monopoli, B., Schiavo, A., and
Toffolon, G.: 3-D fold and fault reconstruction with an uncertainty model: An
example from an Alpine tunnel case study, Comput. Geosci., 34,
351–372, 2008.</mixed-citation></ref>
      <ref id="bib1.bibx4"><label>Bond(2015)</label><mixed-citation>
Bond, C. E.: Uncertainty in structural interpretation: Lessons to be learnt,
J. Struct. Geol., 74, 185–200, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx5"><label>Bond et al.(2007)Bond, Shipton, Jones, Butler, and Gibbs</label><mixed-citation>Bond, E. C., Shipton, K. Z., Jones, R. R., Butler, W. R., and Gibbs, D. A.:
Knowledge transfer in a digital world: Field data acquisition, uncertainty,
visualization, and data management, Geosphere, 3,  568–576, <ext-link xlink:href="http://dx.doi.org/10.1130/GES00094.1" ext-link-type="DOI">10.1130/GES00094.1</ext-link>, 2007.</mixed-citation></ref>
      <ref id="bib1.bibx6"><label>Caers(2011)</label><mixed-citation>
Caers, J.: Modeling Uncertainty in the Earth Sciences, John Wiley &amp; Sons,
Ltd, Chichester, UK, 2011.</mixed-citation></ref>
      <ref id="bib1.bibx7"><label>Calcagno et al.(2008)Calcagno, Chiles, Courrioux, and
Guillen</label><mixed-citation>
Calcagno, P., Chiles, J.-P., Courrioux, G., and Guillen, A.: Geological
modelling from field data and geological knowledge: Part I. Modelling method
coupling 3-D potential-field interpolation and geological rules: Recent
Advances in Computational Geodynamics: Theory, Numerics and Applications,
Phys. Earth Planet. In., 171, 147–157, 2008.</mixed-citation></ref>
      <ref id="bib1.bibx8"><label>Caumon et al.(2009)Caumon, Collon-Drouaillet, Le Carlier de Veslud,
Viseur, and Sausse</label><mixed-citation>
Caumon, G., Collon-Drouaillet, P., Le Carlier de Veslud, C., Viseur, S., and
Sausse, J.: Surface-Based 3-D Modeling of Geological Structures,
Math. Geosci., 41, 927–945, 2009.</mixed-citation></ref>
      <ref id="bib1.bibx9"><label>Cherpeau et al.(2012)</label><mixed-citation>
Cherpeau, N., Caumon, G., Caers, J., and Levy, B.: Method for Stochastic
Inverse Modeling of Fault Geometry and Connectivity Using Flow Data,
Math. Geosci., 44, 147–168, 2012.</mixed-citation></ref>
      <ref id="bib1.bibx10"><label>Cook(2006)</label><mixed-citation>
Cook, P. J.: Carbon dioxide capture and geological storage: research,
development and application in Australia, Int. J. Environ. Stud., 63,
731–749, 2006.</mixed-citation></ref>
      <ref id="bib1.bibx11"><label>Gerya and Yuen(2007)</label><mixed-citation>
Gerya, T. V. and Yuen, D. A.: Robust characteristics method for modelling
multiphase visco-elasto-plastic thermo-mechanical problems, computational Challenges in
the Earth Sciences, Phys.
Earth Planet. In., 163, 83–105, 2007.</mixed-citation></ref>
      <ref id="bib1.bibx12"><label>Hillier et al.(2014)Hillier, Schetselaar, de Kemp, and
Perron</label><mixed-citation>
Hillier, M. J., Schetselaar, E. M., de Kemp, E. A., and Perron, G.:
Three-Dimensional Modelling of Geological Surfaces Using Generalized
Interpolation with Radial Basis Functions, Math. Geosci., 46,
931–953, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx13"><label>Hjelt(1972)</label><mixed-citation>
Hjelt, S.-E.: Magnetostatic anomalies of dipping prisms, Geoexploration, 10,
239–254, 1972.</mixed-citation></ref>
      <ref id="bib1.bibx14"><label>Hjelt(1974)</label><mixed-citation>
Hjelt, S.-E.: The gravity anomaly of a dipping prism, Geoexploration, 12,
29–39, 1974.</mixed-citation></ref>
      <ref id="bib1.bibx15"><label>Jessell(1981)</label><mixed-citation>
Jessell, M.: “Noddy” – An interactive Map creation Package, Master's
thesis, Imperial College of Science and Technology, London, UK, 1981.</mixed-citation></ref>
      <ref id="bib1.bibx16"><label>Jessell et al.(2014)Jessell, Ailleres, de Kemp, Lindsay, Wellmann,
Hillier, Laurent, Carmichael, and Martin</label><mixed-citation>
Jessell, M., Aillères, L., de Kemp, E., Lindsay, M., Wellmann, J. F.,
Hillier, M., Laurent, G., Carmichael, T., and Martin, R.: Next Generation
Three-Dimensional Geologic Modeling and Inversion, Society of Economic
Geologists Special Publication, 18, 261–272, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx17"><label>Jessell and Valenta(1996)</label><mixed-citation>
Jessell, M. W. and Valenta, R. K.: Structural geophysics: Integrated
structural and geophysical modelling, in: Structural Geology and Personal
Computers, edited by: De Paor, D. G., 303–324, Pergamon, Elsevier, Oxford,
1996.</mixed-citation></ref>
      <ref id="bib1.bibx18"><label>Jessell et al.(2010)Jessell, Ailleres, and Kemp</label><mixed-citation>
Jessell, W. M., Ailleres, L., and Kemp, A. E.: Towards an Integrated
Inversion of Geoscientific data: what price of Geology?, Tectonophysics, 490,
294–306, 2010.</mixed-citation></ref>
      <ref id="bib1.bibx19"><label>Judge and Allmendinger(2011)</label><mixed-citation>
Judge, P. A. and Allmendinger, R. W.: Assessing uncertainties in balanced
cross sections, J. Struct. Geol., 33, 458–467, 2011.</mixed-citation></ref>
      <ref id="bib1.bibx20"><label>Kaus et al.(2008)Kaus, Gerya, and Schmid</label><mixed-citation>
Kaus, B. J., Gerya, T. V., and Schmid, D. W.: Recent advances in
computational geodynamics: Theory, numerics and applications, recent Advances
in Computational Geodynamics: Theory, Numerics and Applications, Phys. Earth
Planet. In., 171, 2–6, 2008.</mixed-citation></ref>
      <ref id="bib1.bibx21"><label>Lajaunie et al.(1997)Lajaunie, Courrioux, and Manuel</label><mixed-citation>
Lajaunie, C., Courrioux, G., and Manuel, L.: Foliation fields and 3-D
cartography in geology: Principles of a method based on potential
interpolation, Math. Geol., 29, 571–584, 1997.</mixed-citation></ref>
      <ref id="bib1.bibx22"><label>Langtangen(2008)</label><mixed-citation>
Langtangen, P. H.: Python scripting for computational science, Springer
Verlag, New York, USA, 2008.</mixed-citation></ref>
      <ref id="bib1.bibx23"><label>Laurent et al.(2013)Laurent, Caumon, Bouziat, and
Jessell</label><mixed-citation>
Laurent, G., Caumon, G., Bouziat, A., and Jessell, M.: A parametric method to
model 3-D displacements around faults with volumetric vector fields,
Tectonophysics, 590, 83–93, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx24"><label>Laurent et al.(2015)Laurent, Caumon, and Jessell</label><mixed-citation>
Laurent, G., Caumon, G., and Jessell, M.: Interactive editing of 3-D geological
structures and tectonic history sketching via a rigid element method,
Comput. Geosci., 74, 71–86, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx25"><label>Lindsay et al.(2012)Lindsay, Ailleres, Jessell, de Kemp, and
Betts</label><mixed-citation>
Lindsay, M., Ailleres, L., Jessell, M., de Kemp, E., and Betts, P. G.:
Locating and quantifying geological uncertainty in three-dimensional models:
Analysis of the Gippsland Basin, southeastern Australia, Tectonophysics,
546–547,   10–27, 2012.</mixed-citation></ref>
      <ref id="bib1.bibx26"><label>Lindsay et al.(2013)Lindsay, Perrouty, Jessell, and
Ailleres</label><mixed-citation>
Lindsay, M. D., Perrouty, S., Jessell, M. W., and Ailleres, L.: Making the
link between geological and geophysical uncertainty: geodiversity in the
Ashanti Greenstone Belt, Geophys. J. Int., 195, 903–922,
2013.</mixed-citation></ref>
      <ref id="bib1.bibx27"><label>Mallet(1992)</label><mixed-citation>
Mallet, J.-L.: Discrete smooth interpolation in geometric modelling,
Comput. Aided Design, 24, 178–191, 1992.</mixed-citation></ref>
      <ref id="bib1.bibx28"><label>Metropolis and Ulam(1949)</label><mixed-citation>
Metropolis, N. and Ulam, S.: The Monte Carlo Method, J. Am. Stat. Assoc.,
44, 335–341, 1949.</mixed-citation></ref>
      <ref id="bib1.bibx29"><label>Moore and Wong(2002)</label><mixed-citation>
Moore, D. and Wong, D.: Eastern and Central Gippsland Basin, Southeast
Australia; Basement Interpretation and Basin Links, Victorian Initiative for
Minerals and Petroleum Report 69, Department of Natural Resources and
Environment, East Melbourne, 2002.</mixed-citation></ref>
      <ref id="bib1.bibx30"><label>Moresi et al.(2007)</label><mixed-citation>
Moresi, L., Quenette, S., Lemiale, V., Mériaux, C., Appelbe, B., and
Mühlhaus, H.-B.: Computational approaches to studying non-linear dynamics
of the crust and mantle, computational Challenges in the Earth Sciences,
Phys. Earth Planet. In., 163, 69–82, 2007.</mixed-citation></ref>
      <ref id="bib1.bibx31"><label>Norvik and Smith(2001)</label><mixed-citation>
Norvik, M. and Smith, M.: Mapping the plate tectonic reconstruction of southern
and southeastern Australia and implications for petroleum systems, APPEA
Journal, 41, 15–35, 2001.</mixed-citation></ref>
      <ref id="bib1.bibx32"><label>Parker(1972)</label><mixed-citation>
Parker, R.: The rapid calculation of potential anomalies, Geophys. J. Roy.
Astr. S., 31, 447–455, 1972.</mixed-citation></ref>
      <ref id="bib1.bibx33"><label>Polson and Curtis(2010)</label><mixed-citation>
Polson, D. and Curtis, A.: Dynamics of uncertainty in geological
interpretation, J. Geol. Soc. London, 167, 5–10, 2010.</mixed-citation></ref>
      <ref id="bib1.bibx34"><label>Pyrcz and Deutsch(2014)</label><mixed-citation>
Pyrcz, M. J. and Deutsch, C. V.: Geostatistical reservoir modeling, Oxford
university press, Oxford, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx35"><label>Rahmanian et al.(1990)Rahmanian, Moore, Mudge, and
Spring</label><mixed-citation>
Rahmanian, V. D., Moore, P. S., Mudge, W. J., and Spring, D. E.: Sequence
stratigraphy and the habitat of hydrocarbons, Gippsland Basin, Australia,
Geological Society, London, Special Publications, 50, 525–544, 1990.</mixed-citation></ref>
      <ref id="bib1.bibx36"><label>Regenauer-Lieb et al.(2013)Regenauer-Lieb, Veveakis, Poulet,
Wellmann, Karrech, Liu, Hauser, Schrank, Gaede, and
Trefry</label><mixed-citation>
Regenauer-Lieb, K., Veveakis, M., Poulet, T., Wellmann, F., Karrech, A., Liu,
J., Hauser, J., Schrank, C., Gaede, O., and Trefry, M.: Multiscale coupling
and multiphysics approaches in earth sciences: Theory, Journal of Coupled
Systems and Multiscale Dynamics, 1, 49–73, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx37"><label>Sen and Duffy(2005)</label><mixed-citation>Sen, M. and Duffy, T.: GeoSciML: development of a generic geoscience markup
language, Comput. Geosci., 31, 1095–1103, 2005.
 </mixed-citation></ref><?xmltex \hack{\newpage}?>
      <ref id="bib1.bibx38"><label>Simons et al.(2006)Simons, Boisvert, Brodaric, Cox, Duffy, Johnson,
Laxton, and Richard</label><mixed-citation>
Simons, B., Boisvert, E., Brodaric, B., Cox, S., Duffy, T. R., Johnson, B. R.,
Laxton, J. L., and Richard, S.: GeoSciML: enabling the exchange of geological
map data, ASEG Extended Abstracts, 2006, 1–4, 2006.</mixed-citation></ref>
      <ref id="bib1.bibx39"><label>Sprague et al.(2006)Sprague, Kemp, Wong, McGaughey, Perron, and
Barrie</label><mixed-citation>
Sprague, K., Kemp, E., Wong, W., McGaughey, J., Perron, G., and Barrie, T.:
Spatial targeting using queries in a 3-D GIS environment with application to
mineral exploration, Comput. Geosci., 32, 396–418, 2006.</mixed-citation></ref>
      <ref id="bib1.bibx40"><label>Suzuki et al.(2008)Suzuki, Caumon, and Caers</label><mixed-citation>
Suzuki, S., Caumon, G., and Caers, J.: Dynamic data integration for structural
modeling: model screening approach using a distance-based model
parameterization, Computat. Geosci., 12, 105–119, 2008.</mixed-citation></ref>
      <ref id="bib1.bibx41"><label>Wellmann(2013)</label><mixed-citation>
Wellmann, J. F.: Information Theory for Correlation Analysis and Estimation of
Uncertainty Reduction in Maps and Models, Entropy, 15, 1464–1485, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx42"><label>Wellmann and Regenauer-Lieb(2012)</label><mixed-citation>
Wellmann, J. F. and Regenauer-Lieb, K.: Uncertainties have a meaning:
Information entropy as a quality measure for 3-D geological models,
Tectonophysics, 526-529, 207–216, 2012.</mixed-citation></ref>
      <ref id="bib1.bibx43"><label>Wellmann et al.(2010)Wellmann, Horowitz, Schill, and
Regenauer-Lieb</label><mixed-citation>
Wellmann, J. F., Horowitz, F. G., Schill, E., and Regenauer-Lieb, K.: Towards
incorporating uncertainty of structural data in 3-D geological inversion,
Tectonophysics, 490, 141–151, 2010.</mixed-citation></ref>
      <ref id="bib1.bibx44"><label>Wellmann et al.(2011)Wellmann, Croucher, and
Regenauer-Lieb</label><mixed-citation>
Wellmann, J. F., Croucher, A., and Regenauer-Lieb, K.: Python scripting
libraries for subsurface fluid and heat flow simulations with TOUGH2 and
SHEMAT, Comput. Geosci., 43, 197–206, 2011.</mixed-citation></ref>

  </ref-list><app-group content-type="float"><app><title/>

    </app></app-group></back>
    <!--<article-title-html>pynoddy 1.0: an experimental platform for automated 3-D
kinematic and potential field modelling</article-title-html>
<abstract-html><p class="p">We present a novel methodology for performing experiments with
subsurface structural models using a set of flexible and extensible
Python modules. We utilize the ability of kinematic modelling
techniques to describe major deformational, tectonic, and
magmatic events at low computational cost to develop experiments
testing the interactions between multiple kinematic events, effect
of uncertainty regarding event timing, and kinematic
properties. These tests are simple to implement and perform, as they
are automated within the Python scripting language, allowing the
encapsulation of entire kinematic experiments within high-level
class definitions and fully reproducible results. In addition, we
provide a link to geophysical potential-field simulations to
evaluate the effect of parameter uncertainties on maps of gravity
and magnetics.</p><p class="p">We provide relevant fundamental information on
kinematic modelling and our implementation, and showcase the
application of our novel methods to investigate the interaction of
multiple tectonic events on a pre-defined stratigraphy, the effect
of changing kinematic parameters on simulated geophysical
potential fields, and the distribution of uncertain areas in a full
3-D kinematic model, based on estimated uncertainties in kinematic
input parameters.  Additional possibilities for linking kinematic
modelling to subsequent process simulations are discussed, as well
as additional aspects of future research.  Our modules are freely
available on github, including documentation and tutorial examples,
and we encourage the contribution to this project.</p></abstract-html>
<ref-html id="bib1.bib1"><label>Armit et al.(2012)Armit, Betts, Schaefer, and
Ailleres</label><mixed-citation>
Armit, R. J., Betts, P. G., Schaefer, B. F., and Ailleres, L.: Constraints on
long-lived Mesoproterozoic and Palaeozoic deformational events and crustal
architecture in the northern Mount Painter Province, Australia, Gondwana
Res., 22, 207–226, 2012.
</mixed-citation></ref-html>
<ref-html id="bib1.bib2"><label>Bernecker et al.(2001)Bernecker, Woollands, Wong, Moore, and
Smith</label><mixed-citation>
Bernecker, T., Woollands, M., Wong, D., Moore, D., and Smith, M.: Hydrocarbon
prospectivity of the deep water Gippsland Basin, Victoria, Australia, APPEA
Journal, 41, 91–113, 2001.
</mixed-citation></ref-html>
<ref-html id="bib1.bib3"><label>Bistacchi et al.(2008)</label><mixed-citation>
Bistacchi, A., Massironi, M., Dal Piaz, V. G., Monopoli, B., Schiavo, A., and
Toffolon, G.: 3-D fold and fault reconstruction with an uncertainty model: An
example from an Alpine tunnel case study, Comput. Geosci., 34,
351–372, 2008.
</mixed-citation></ref-html>
<ref-html id="bib1.bib4"><label>Bond(2015)</label><mixed-citation>
Bond, C. E.: Uncertainty in structural interpretation: Lessons to be learnt,
J. Struct. Geol., 74, 185–200, 2015.
</mixed-citation></ref-html>
<ref-html id="bib1.bib5"><label>Bond et al.(2007)Bond, Shipton, Jones, Butler, and Gibbs</label><mixed-citation>
Bond, E. C., Shipton, K. Z., Jones, R. R., Butler, W. R., and Gibbs, D. A.:
Knowledge transfer in a digital world: Field data acquisition, uncertainty,
visualization, and data management, Geosphere, 3,  568–576, <a href="http://dx.doi.org/10.1130/GES00094.1" target="_blank">doi:10.1130/GES00094.1</a>, 2007.
</mixed-citation></ref-html>
<ref-html id="bib1.bib6"><label>Caers(2011)</label><mixed-citation>
Caers, J.: Modeling Uncertainty in the Earth Sciences, John Wiley &amp; Sons,
Ltd, Chichester, UK, 2011.
</mixed-citation></ref-html>
<ref-html id="bib1.bib7"><label>Calcagno et al.(2008)Calcagno, Chiles, Courrioux, and
Guillen</label><mixed-citation>
Calcagno, P., Chiles, J.-P., Courrioux, G., and Guillen, A.: Geological
modelling from field data and geological knowledge: Part I. Modelling method
coupling 3-D potential-field interpolation and geological rules: Recent
Advances in Computational Geodynamics: Theory, Numerics and Applications,
Phys. Earth Planet. In., 171, 147–157, 2008.
</mixed-citation></ref-html>
<ref-html id="bib1.bib8"><label>Caumon et al.(2009)Caumon, Collon-Drouaillet, Le Carlier de Veslud,
Viseur, and Sausse</label><mixed-citation>
Caumon, G., Collon-Drouaillet, P., Le Carlier de Veslud, C., Viseur, S., and
Sausse, J.: Surface-Based 3-D Modeling of Geological Structures,
Math. Geosci., 41, 927–945, 2009.
</mixed-citation></ref-html>
<ref-html id="bib1.bib9"><label>Cherpeau et al.(2012)</label><mixed-citation>
Cherpeau, N., Caumon, G., Caers, J., and Levy, B.: Method for Stochastic
Inverse Modeling of Fault Geometry and Connectivity Using Flow Data,
Math. Geosci., 44, 147–168, 2012.
</mixed-citation></ref-html>
<ref-html id="bib1.bib10"><label>Cook(2006)</label><mixed-citation>
Cook, P. J.: Carbon dioxide capture and geological storage: research,
development and application in Australia, Int. J. Environ. Stud., 63,
731–749, 2006.
</mixed-citation></ref-html>
<ref-html id="bib1.bib11"><label>Gerya and Yuen(2007)</label><mixed-citation>
Gerya, T. V. and Yuen, D. A.: Robust characteristics method for modelling
multiphase visco-elasto-plastic thermo-mechanical problems, computational Challenges in
the Earth Sciences, Phys.
Earth Planet. In., 163, 83–105, 2007.
</mixed-citation></ref-html>
<ref-html id="bib1.bib12"><label>Hillier et al.(2014)Hillier, Schetselaar, de Kemp, and
Perron</label><mixed-citation>
Hillier, M. J., Schetselaar, E. M., de Kemp, E. A., and Perron, G.:
Three-Dimensional Modelling of Geological Surfaces Using Generalized
Interpolation with Radial Basis Functions, Math. Geosci., 46,
931–953, 2014.
</mixed-citation></ref-html>
<ref-html id="bib1.bib13"><label>Hjelt(1972)</label><mixed-citation>
Hjelt, S.-E.: Magnetostatic anomalies of dipping prisms, Geoexploration, 10,
239–254, 1972.
</mixed-citation></ref-html>
<ref-html id="bib1.bib14"><label>Hjelt(1974)</label><mixed-citation>
Hjelt, S.-E.: The gravity anomaly of a dipping prism, Geoexploration, 12,
29–39, 1974.
</mixed-citation></ref-html>
<ref-html id="bib1.bib15"><label>Jessell(1981)</label><mixed-citation>
Jessell, M.: “Noddy” – An interactive Map creation Package, Master's
thesis, Imperial College of Science and Technology, London, UK, 1981.
</mixed-citation></ref-html>
<ref-html id="bib1.bib16"><label>Jessell et al.(2014)Jessell, Ailleres, de Kemp, Lindsay, Wellmann,
Hillier, Laurent, Carmichael, and Martin</label><mixed-citation>
Jessell, M., Aillères, L., de Kemp, E., Lindsay, M., Wellmann, J. F.,
Hillier, M., Laurent, G., Carmichael, T., and Martin, R.: Next Generation
Three-Dimensional Geologic Modeling and Inversion, Society of Economic
Geologists Special Publication, 18, 261–272, 2014.
</mixed-citation></ref-html>
<ref-html id="bib1.bib17"><label>Jessell and Valenta(1996)</label><mixed-citation>
Jessell, M. W. and Valenta, R. K.: Structural geophysics: Integrated
structural and geophysical modelling, in: Structural Geology and Personal
Computers, edited by: De Paor, D. G., 303–324, Pergamon, Elsevier, Oxford,
1996.
</mixed-citation></ref-html>
<ref-html id="bib1.bib18"><label>Jessell et al.(2010)Jessell, Ailleres, and Kemp</label><mixed-citation>
Jessell, W. M., Ailleres, L., and Kemp, A. E.: Towards an Integrated
Inversion of Geoscientific data: what price of Geology?, Tectonophysics, 490,
294–306, 2010.
</mixed-citation></ref-html>
<ref-html id="bib1.bib19"><label>Judge and Allmendinger(2011)</label><mixed-citation>
Judge, P. A. and Allmendinger, R. W.: Assessing uncertainties in balanced
cross sections, J. Struct. Geol., 33, 458–467, 2011.
</mixed-citation></ref-html>
<ref-html id="bib1.bib20"><label>Kaus et al.(2008)Kaus, Gerya, and Schmid</label><mixed-citation>
Kaus, B. J., Gerya, T. V., and Schmid, D. W.: Recent advances in
computational geodynamics: Theory, numerics and applications, recent Advances
in Computational Geodynamics: Theory, Numerics and Applications, Phys. Earth
Planet. In., 171, 2–6, 2008.
</mixed-citation></ref-html>
<ref-html id="bib1.bib21"><label>Lajaunie et al.(1997)Lajaunie, Courrioux, and Manuel</label><mixed-citation>
Lajaunie, C., Courrioux, G., and Manuel, L.: Foliation fields and 3-D
cartography in geology: Principles of a method based on potential
interpolation, Math. Geol., 29, 571–584, 1997.
</mixed-citation></ref-html>
<ref-html id="bib1.bib22"><label>Langtangen(2008)</label><mixed-citation>
Langtangen, P. H.: Python scripting for computational science, Springer
Verlag, New York, USA, 2008.
</mixed-citation></ref-html>
<ref-html id="bib1.bib23"><label>Laurent et al.(2013)Laurent, Caumon, Bouziat, and
Jessell</label><mixed-citation>
Laurent, G., Caumon, G., Bouziat, A., and Jessell, M.: A parametric method to
model 3-D displacements around faults with volumetric vector fields,
Tectonophysics, 590, 83–93, 2013.
</mixed-citation></ref-html>
<ref-html id="bib1.bib24"><label>Laurent et al.(2015)Laurent, Caumon, and Jessell</label><mixed-citation>
Laurent, G., Caumon, G., and Jessell, M.: Interactive editing of 3-D geological
structures and tectonic history sketching via a rigid element method,
Comput. Geosci., 74, 71–86, 2015.
</mixed-citation></ref-html>
<ref-html id="bib1.bib25"><label>Lindsay et al.(2012)Lindsay, Ailleres, Jessell, de Kemp, and
Betts</label><mixed-citation>
Lindsay, M., Ailleres, L., Jessell, M., de Kemp, E., and Betts, P. G.:
Locating and quantifying geological uncertainty in three-dimensional models:
Analysis of the Gippsland Basin, southeastern Australia, Tectonophysics,
546–547,   10–27, 2012.
</mixed-citation></ref-html>
<ref-html id="bib1.bib26"><label>Lindsay et al.(2013)Lindsay, Perrouty, Jessell, and
Ailleres</label><mixed-citation>
Lindsay, M. D., Perrouty, S., Jessell, M. W., and Ailleres, L.: Making the
link between geological and geophysical uncertainty: geodiversity in the
Ashanti Greenstone Belt, Geophys. J. Int., 195, 903–922,
2013.
</mixed-citation></ref-html>
<ref-html id="bib1.bib27"><label>Mallet(1992)</label><mixed-citation>
Mallet, J.-L.: Discrete smooth interpolation in geometric modelling,
Comput. Aided Design, 24, 178–191, 1992.
</mixed-citation></ref-html>
<ref-html id="bib1.bib28"><label>Metropolis and Ulam(1949)</label><mixed-citation>
Metropolis, N. and Ulam, S.: The Monte Carlo Method, J. Am. Stat. Assoc.,
44, 335–341, 1949.
</mixed-citation></ref-html>
<ref-html id="bib1.bib29"><label>Moore and Wong(2002)</label><mixed-citation>
Moore, D. and Wong, D.: Eastern and Central Gippsland Basin, Southeast
Australia; Basement Interpretation and Basin Links, Victorian Initiative for
Minerals and Petroleum Report 69, Department of Natural Resources and
Environment, East Melbourne, 2002.
</mixed-citation></ref-html>
<ref-html id="bib1.bib30"><label>Moresi et al.(2007)</label><mixed-citation>
Moresi, L., Quenette, S., Lemiale, V., Mériaux, C., Appelbe, B., and
Mühlhaus, H.-B.: Computational approaches to studying non-linear dynamics
of the crust and mantle, computational Challenges in the Earth Sciences,
Phys. Earth Planet. In., 163, 69–82, 2007.
</mixed-citation></ref-html>
<ref-html id="bib1.bib31"><label>Norvik and Smith(2001)</label><mixed-citation>
Norvik, M. and Smith, M.: Mapping the plate tectonic reconstruction of southern
and southeastern Australia and implications for petroleum systems, APPEA
Journal, 41, 15–35, 2001.
</mixed-citation></ref-html>
<ref-html id="bib1.bib32"><label>Parker(1972)</label><mixed-citation>
Parker, R.: The rapid calculation of potential anomalies, Geophys. J. Roy.
Astr. S., 31, 447–455, 1972.
</mixed-citation></ref-html>
<ref-html id="bib1.bib33"><label>Polson and Curtis(2010)</label><mixed-citation>
Polson, D. and Curtis, A.: Dynamics of uncertainty in geological
interpretation, J. Geol. Soc. London, 167, 5–10, 2010.
</mixed-citation></ref-html>
<ref-html id="bib1.bib34"><label>Pyrcz and Deutsch(2014)</label><mixed-citation>
Pyrcz, M. J. and Deutsch, C. V.: Geostatistical reservoir modeling, Oxford
university press, Oxford, 2014.
</mixed-citation></ref-html>
<ref-html id="bib1.bib35"><label>Rahmanian et al.(1990)Rahmanian, Moore, Mudge, and
Spring</label><mixed-citation>
Rahmanian, V. D., Moore, P. S., Mudge, W. J., and Spring, D. E.: Sequence
stratigraphy and the habitat of hydrocarbons, Gippsland Basin, Australia,
Geological Society, London, Special Publications, 50, 525–544, 1990.
</mixed-citation></ref-html>
<ref-html id="bib1.bib36"><label>Regenauer-Lieb et al.(2013)Regenauer-Lieb, Veveakis, Poulet,
Wellmann, Karrech, Liu, Hauser, Schrank, Gaede, and
Trefry</label><mixed-citation>
Regenauer-Lieb, K., Veveakis, M., Poulet, T., Wellmann, F., Karrech, A., Liu,
J., Hauser, J., Schrank, C., Gaede, O., and Trefry, M.: Multiscale coupling
and multiphysics approaches in earth sciences: Theory, Journal of Coupled
Systems and Multiscale Dynamics, 1, 49–73, 2013.
</mixed-citation></ref-html>
<ref-html id="bib1.bib37"><label>Sen and Duffy(2005)</label><mixed-citation>
Sen, M. and Duffy, T.: GeoSciML: development of a generic geoscience markup
language, Comput. Geosci., 31, 1095–1103, 2005.

</mixed-citation></ref-html>
<ref-html id="bib1.bib38"><label>Simons et al.(2006)Simons, Boisvert, Brodaric, Cox, Duffy, Johnson,
Laxton, and Richard</label><mixed-citation>
Simons, B., Boisvert, E., Brodaric, B., Cox, S., Duffy, T. R., Johnson, B. R.,
Laxton, J. L., and Richard, S.: GeoSciML: enabling the exchange of geological
map data, ASEG Extended Abstracts, 2006, 1–4, 2006.
</mixed-citation></ref-html>
<ref-html id="bib1.bib39"><label>Sprague et al.(2006)Sprague, Kemp, Wong, McGaughey, Perron, and
Barrie</label><mixed-citation>
Sprague, K., Kemp, E., Wong, W., McGaughey, J., Perron, G., and Barrie, T.:
Spatial targeting using queries in a 3-D GIS environment with application to
mineral exploration, Comput. Geosci., 32, 396–418, 2006.
</mixed-citation></ref-html>
<ref-html id="bib1.bib40"><label>Suzuki et al.(2008)Suzuki, Caumon, and Caers</label><mixed-citation>
Suzuki, S., Caumon, G., and Caers, J.: Dynamic data integration for structural
modeling: model screening approach using a distance-based model
parameterization, Computat. Geosci., 12, 105–119, 2008.
</mixed-citation></ref-html>
<ref-html id="bib1.bib41"><label>Wellmann(2013)</label><mixed-citation>
Wellmann, J. F.: Information Theory for Correlation Analysis and Estimation of
Uncertainty Reduction in Maps and Models, Entropy, 15, 1464–1485, 2013.
</mixed-citation></ref-html>
<ref-html id="bib1.bib42"><label>Wellmann and Regenauer-Lieb(2012)</label><mixed-citation>
Wellmann, J. F. and Regenauer-Lieb, K.: Uncertainties have a meaning:
Information entropy as a quality measure for 3-D geological models,
Tectonophysics, 526-529, 207–216, 2012.
</mixed-citation></ref-html>
<ref-html id="bib1.bib43"><label>Wellmann et al.(2010)Wellmann, Horowitz, Schill, and
Regenauer-Lieb</label><mixed-citation>
Wellmann, J. F., Horowitz, F. G., Schill, E., and Regenauer-Lieb, K.: Towards
incorporating uncertainty of structural data in 3-D geological inversion,
Tectonophysics, 490, 141–151, 2010.
</mixed-citation></ref-html>
<ref-html id="bib1.bib44"><label>Wellmann et al.(2011)Wellmann, Croucher, and
Regenauer-Lieb</label><mixed-citation>
Wellmann, J. F., Croucher, A., and Regenauer-Lieb, K.: Python scripting
libraries for subsurface fluid and heat flow simulations with TOUGH2 and
SHEMAT, Comput. Geosci., 43, 197–206, 2011.
</mixed-citation></ref-html>--></article>
