SUTRA 2 2-Documentation
SUTRA 2 2-Documentation
SUTRA
A Model for Saturated-Unsaturated,
Variable-Density Ground-Water Flow
with Solute or Energy Transport
Reston, Virginia
2010
i
U.S. Department of the Interior
KEN SALAZAR, Secretary
For additional information write to: Copies of this report can be purchased from:
This document and the SUTRA computer code may be downloaded without cost from a
U.S. Geological Survey Internet site: http://water.usgs.gov/nrp/gwsoftware
ii
PREFACE
This report describes a complex computer model, SUTRA, for analysis of fluid flow and solute
or energy transport in subsurface systems. The original version of SUTRA was released in 1984
(Voss, 1984). The version described in this report (SUTRA 2.2) is an upgrade that adds to the
previous version (SUTRA 2.1) (Voss and Provost, 2002, version of June 2, 2008) the ability to
specify time-dependent sources and boundary conditions (without programming) and to output
information pertaining to source and boundary condition nodes in a convenient format. The user
is cautioned that although the model will accurately reproduce the physics of flow and transport
when used with proper discretization, it will give meaningful results only for well-posed
problems based on sufficient supporting data.
The user is kindly requested to notify the originating office of any errors found in this report or
in the computer program. Please report these by mail to:
SUTRA Support
U.S. Geological Survey
411 National Center
Reston, VA 20192
USA
Updates will occasionally be made to the report and the computer program to include corrections
of errors, addition of processes that may be simulated, and changes in numerical algorithms. The
version date of this report is given on the title page.
Copies of the computer program and manual for SUTRA and associated utility codes for
preprocessing and postprocessing are available free of charge from a U.S. Geological Survey
Web site:
http://water.usgs.gov/nrp/gwsoftware/sutra.html
iii
iv
SUTRA
CONTENTS
Page
Abstract ......................................................................................................................................... 1
INTRODUCTION
SUTRA FUNDAMENTALS
v
4.6 Consistent Evaluation of Fluid Velocity ..................................................................... 99
4.7 Temporal Evaluation of Adsorbate Mass Balance.................................................... 102
APPENDICES
vi
LIST OF FIGURES
Page
vii
Figure 6.13. Diagram showing radial two-dimensional finite-element mesh for the aquifer
thermal energy storage example. ........................................................................................ 173
Figure 6.14. Plot of SUTRA results for aquifer thermal storage example after 30 days of hot
water injection. .................................................................................................................... 175
Figure 6.15. Plot of SUTRA results for aquifer thermal storage example after 90 days of hot
water injection. .................................................................................................................... 175
Figure 6.16. Plot of SUTRA results for aquifer thermal storage example after 30 days of
pumping (120 days total elapsed time). .............................................................................. 176
Figure 6.17. Plot of SUTRA results for aquifer thermal storage example after 60 days of
pumping (150 days total elapsed time). .............................................................................. 176
Figure 6.18. Plot of SUTRA results for aquifer thermal storage example after 90 days of
pumping (180 days total elapsed time). .............................................................................. 176
Figure 6.19. Plot showing propagation of moisture front for unsaturated flow and solute-transport
example. .............................................................................................................................. 179
Figure 6.20. Plot showing propagation of solute slug for unsaturated flow and solute-transport
example. .............................................................................................................................. 179
Figure 6.21. Diagram showing boundary conditions and finite-element mesh for the 2D
formulation of the island problem....................................................................................... 181
Figure 6.22. Diagram showing plan view of the finite-element mesh for the 3D formulation of
the island problem. .............................................................................................................. 181
Figure 6.23. Diagram showing oblique view of the finite-element mesh for the 3D model of the
island problem. .................................................................................................................... 182
Figure 6.24. Plot showing comparison of results from the 2D and 3D models of the island
problem; solute concentrations at t = 20 yr......................................................................... 184
Figure 6.25. Plot showing comparison of results from the 2D and 3D models of the island
problem; water saturations and water table below sea level at t = 20 yr. ........................... 184
Figure 6.26. Plot showing areal view of results from the 3D model of the island problem; solute
concentrations at 35m below sea level at t = 20 yr. ............................................................ 185
Figure 7.1. Illustration showing minimization of bandwidth by careful numbering of nodes. .. 207
Figure B.1. Illustration showing allocation of sources and boundary fluxes in equal-sized
elements. ............................................................................................................................. 273
CONVERSION FACTORS
Multiply By To obtain
kilograms (kg) 2.205 pounds, avoirdupois (lb)
meters (m) 3.281 feet (ft)
Joules (J) 0.2389 calories (cal)
Pascals (Pa) 1.450×10-4 pounds per square inch (psi)
cubic meters (m3) 264.2 U.S. gallons (gal)
Temperature in degrees Celsius (°C) can be converted to degrees Fahrenheit (°F) using the
following equation:
° F = 1.8 (°C ) + 32
viii
Abstract
SUTRA (Saturated-Unsaturated Transport) is a computer program that simulates fluid
movement and the transport of either energy or dissolved substances in a subsurface
environment. The original version of SUTRA was released in 1984 (Voss, 1984). The version
described in this report (SUTRA 2.2) is an upgrade that adds to the previous version (SUTRA
2.1) (Voss and Provost, 2002, version of June 2, 2008) the ability to specify time-dependent
sources and boundary conditions (without programming) and to output information pertaining to
source and boundary condition nodes in a convenient format. The code employs a two- or three-
dimensional finite-element and finite-difference method to approximate the governing equations
that describe the two interdependent processes that are simulated:
1) fluid density-dependent saturated or unsaturated ground-water flow; and
2) either
(a) transport of a solute in the ground water, in which the solute may be subject to:
equilibrium adsorption on the porous matrix, and both first-order and zero-order
production or decay; or
(b) transport of thermal energy in the ground water and solid matrix of the aquifer.
SUTRA may also be used to simulate simpler subsets of the above processes. As the primary
calculated result, SUTRA provides fluid pressures and either solute concentrations or
temperatures, as they vary with time, everywhere in the simulated subsurface system.
SUTRA flow simulation may be employed for two-dimensional (2D) areal, cross sectional and
three-dimensional (3D) modeling of saturated ground-water flow systems, and for cross sectional
and 3D modeling of unsaturated zone flow. Solute-transport simulation using SUTRA may be
employed to model natural or man-induced chemical-species transport including processes of
solute sorption, production, and decay. For example, it may be applied to analyze ground-water
contaminant transport problems and aquifer restoration designs. In addition, solute-transport
simulation with SUTRA may be used for modeling of variable-density leachate movement, and
for cross sectional modeling of saltwater intrusion in aquifers at near-well or regional scales,
with either dispersed or relatively sharp transition zones between freshwater and saltwater.
SUTRA energy-transport simulation may be employed to model thermal regimes in aquifers,
subsurface heat conduction, aquifer thermal-energy storage systems, geothermal reservoirs,
thermal pollution of aquifers, and natural hydrogeologic convection systems.
Mesh construction, which is quite flexible for arbitrary geometries, employs quadrilateral finite
elements in 2D Cartesian or radial-cylindrical coordinate systems, and hexahedral finite elements
in 3D systems. Permeabilities may be anisotropic and may vary in both direction and magnitude
throughout the system, as may most other aquifer and fluid properties. Boundary conditions,
sources and sinks may be time dependent. A number of input data checks are made to verify the
input data set. An option is available for storing intermediate results and restarting a simulation
at the intermediate time. Output options include fluid velocities, fluid mass and solute mass or
energy budgets, and time-varying observations at points in the system. Both the mathematical
basis for SUTRA and the program structure are highly general, and are modularized to allow for
straightforward addition of new methods or processes to the simulation. The FORTRAN-90
coding stresses clarity and modularity rather than efficiency, providing easy access for later
modifications.
1
INTRODUCTION
3
Chapter 1: Introduction
1.1 Purpose and Scope
This report describes the physical-mathematical basis and the numerical methodology of the
SUTRA computer code. The report can be divided into four groups, which may be read
depending on the reader’s background and interest.
The overview of simulation with SUTRA and methods may be obtained from
Chapter 1—Introduction.
The basics, at a fundamental level, for a reader who will carry out simulations with
SUTRA, may be obtained by additional reading of
Chapter 2—Physical-Mathematical Basis of SUTRA Simulation, which gives a
complete and detailed description of processes that SUTRA simulates and
describes each physical parameter required by SUTRA input data;
Chapter 3—Fundamentals of Numerical Algorithms, which gives an introduction
to the numerical aspects of simulation with SUTRA;
Chapter 6—Simulation Examples; and
Chapter 7—Simulation Setup.
The complete details of SUTRA methodology are given in the following additional
sections:
Chapter 4—Numerical Methods; and
Chapter 5—Other Methods and Algorithms.
Chapter 4 provides the detail upon which program modifications may be based, and
portions of Chapter 5 are valuable background for certain simulation applications.
Additional details are contained in the appendices:
Appendix A—List of Symbols; and
Appendix B— SUTRA Input Data List.
5
Appendix A contains a complete listing of all nomenclature and symbols used in this
report. Appendix B describes in detail the SUTRA input datasets.
SUTRA is based on a general physical, mathematical and numerical structure implemented in the
computer code in a modular design. This allows straightforward modifications and additions to
the code. Eventual modifications may be, for example, the addition of nonequilibrium sorption
(such as two-site models), equilibrium chemical reactions or chemical kinetics, or addition of
over- and underburden heat-loss functions, a wellbore model, or confining bed leakage.
The SUTRA model stresses general applicability, numerical robustness and accuracy, and clarity
in coding. Computational efficiency is somewhat diminished to preserve these qualities. The
modular structure of SUTRA, however, allows implementation of any eventual changes that may
improve efficiency. Such modifications may be in the configuration of the matrix equations, in
the solution procedure for these equations, or in the finite-element integration routines.
Furthermore, the general nature and flexibility of the input data allows easy adaptability to user-
friendly and graphical input-output programming. The modular structure would also ease major
changes such as modifications for simultaneous energy and solute-transport simulations.
Simulation using SUTRA is in two or three spatial dimensions. A pseudo-3D quality is provided
for 2D, in that the thickness of the 2D region in the third direction may vary from point to point.
A 2D simulation may be done either in the areal plane or in a cross sectional view. The 2D
spatial coordinate system may be either Cartesian (x,y) or radial-cylindrical (r,z). Areal
simulation is usually physically unrealistic for variable-density fluid and for unsaturated flow
problems. The 3D spatial coordinate system is Cartesian (x,y,z).
SUTRA tracks the transport of either solute mass or energy in flowing ground water through a
unified equation, which represents the transport of either solute or energy. Solute transport is
simulated through numerical solution of a solute mass-balance equation where solute
concentration may affect fluid density. The single solute species may be transported
conservatively, or it may undergo equilibrium sorption (through linear, Freundlich, or Langmuir
isotherms). In addition, the solute may be produced or decay through first- or zero-order
processes. Energy transport is simulated through numerical solution of an energy-balance
equation. The solid grains of the aquifer matrix and fluid are locally assumed to have equal
temperature, and fluid density and viscosity may be affected by the temperature.
Most aquifer material, flow, and transport parameters may vary in value throughout the
simulated region. Sources and boundary conditions of fluid, solute and energy may be specified
to vary with time or may be constant.
SUTRA dispersion processes include diffusion and two types of fluid velocity-dependent
dispersion. The standard dispersion model for isotropic media assumes direction-independent
6
values of longitudinal and transverse dispersivity. A flow-direction-dependent dispersion process
for anisotropic media is also provided. This process assumes that longitudinal and transverse
dispersivities vary depending on the orientation of the flow direction relative to the principal
axes of aquifer permeability.
SUTRA may be employed in one-, two-, or three-dimensional analyses. Flow and transport
simulation may be either steady state, which requires only a single solution step, or transient,
which requires a series of time steps in the numerical solution. Single-step steady-state solutions
are usually not appropriate for nonlinear problems with variable density, saturation, viscosity or
nonlinear sorption.
SUTRA flow simulation may be employed for 2D areal, cross sectional, and fully 3D modeling
of saturated ground-water flow systems and unsaturated-zone flow. Hydraulic aquifer tests may
be analyzed using flow simulation. SUTRA solute-transport simulation may be employed to
model natural or man-induced chemical-species transport including processes of solute sorption,
production and decay. Such simulation may be used to analyze ground-water contaminant-
transport problems and aquifer restoration designs. SUTRA solute-transport simulation may also
be used for modeling of variable-density leachate movement, and for cross sectional modeling of
seawater intrusion and other saline-water migration in aquifers at near-well or regional scales
with either dispersed or relatively sharp transition zones between freshwater and saltwater.
SUTRA energy-transport simulation may be employed to model thermal regimes in aquifers,
subsurface heat conduction, aquifer thermal-energy storage systems, geothermal reservoirs,
thermal pollution of aquifers, and natural hydrogeologic convection systems. A review of
published SUTRA applications is given in Voss (1999).
SUTRA employs a special finite-element method for calculation of fluid velocities in variable
density fluids. Fluid velocities, when calculated with standard finite-element methods for
systems with variable fluid density, may display spurious numerically generated components
within each element. These errors are due to fundamental numerical inconsistencies in spatial
and temporal approximations for the pressure gradient and density-gravity terms, which are
involved in velocity calculation. Spurious velocities can significantly add to the dispersion of
solute or energy. This false dispersion makes accurate simulation of all systems impossible,
except those with very low vertical concentration or temperature gradients, even when fine
vertical spatial discretization is employed. Velocities as calculated in SUTRA, however, are
based on a consistent spatial and temporal discretization, which is described in this report and by
Voss and Souza (1987). The consistently evaluated velocities allow stable and accurate transport
7
simulation (even at steady state) for systems with large vertical gradients of concentration or
temperature. An example of such a system that SUTRA successfully simulates is a cross
sectional regional model of a coastal aquifer wherein the transition zone between horizontally
flowing freshwater and deep stagnant saltwater is relatively narrow (Voss and Souza, 1987).
The finite-element method used in SUTRA allows the simulation of irregular regions with
irregular internal discretization in 2D and, beginning with version 2.1, in 3D. This is made
possible through use of quadrilateral elements with four corner nodes in 2D and hexahedral
elements with eight corner nodes in 3D. Coefficients and properties of the system may vary in
value throughout the mesh. Manual construction and data preparation for 2D and 3D meshes
requires considerable labor; instead, preprocessing software such as the interactive graphical user
interface SutraGUI (Winston and Voss, 2002) should be used for this purpose.
SUTRA will provide clear, accurate answers only to well-posed, well-defined, and well-
discretized simulation problems. In less well-defined systems, SUTRA simulation can help
visualize a conceptual model of the flow and transport regime, and can aid in deciding between
various conceptual models. In such less well-defined systems, simulation can help answer
questions such as: Is an inaccessible aquifer boundary, which is ten kilometers offshore either
leaky or impermeable? How leaky? Does this boundary affect the primary analysis of onshore
water supply? This mode of modeling is called ‘hypothesis testing.’
SUTRA is not useful for making exact predictions of future responses of typical hydrologic
systems that are not well defined. Rather, SUTRA is useful for hypothesis testing and for helping
to understand the physics of such a system. On the other hand, developing an understanding of a
system based on simulation analysis can help make a set of worthwhile predictions that are
predicated on uncertainty of both the physical model design and model parameter values. In
particular, transport simulation that relies on large amounts of dispersion must be considered an
8
uncertain basis for prediction because of the idealized mathematical assumptions inherent in the
SUTRA dispersion process.
In some cases, the available real data on a system may be so poor that a simulation using
SUTRA is so ambiguously defined that no prediction at all can be made. In this instance, the
simulation may be used to point out the need for particular types of data collection. The model
could be used to advantage in visualizing possible regimes of system behavior rather than to
determine which is accurate.
9
SUTRA FUNDAMENTALS
Chapter 2: Physical-Mathematical Basis of SUTRA Simulation
The physical mechanisms that drive thermal energy transport and solute transport in the
subsurface environment are described by nearly identical mathematical expressions. SUTRA
takes advantage of this similarity, and with a simple program structure provides for simulation of
either energy or solute transport. In fact, SUTRA simulation combines two physical models, one
to simulate the flow of ground water, and the second to simulate the movement of either thermal
energy or a single solute in the ground water.
The flow of ground water, in turn, is a fundamental mechanism upon which the physical models
of energy transport and solute transport are based. The primary variable characterizing the
thermal energy distribution in a ground-water system is fluid temperature, T [°C] = T(x,y[,z],t),
in degrees Celsius, which may vary spatially and with time. The primary variable characterizing
the state of solute distribution in a ground-water system is solute mass fraction, C[Ms/M] =
C(x,y[,z],t), which may also vary spatially and with time. The units are a ratio of solute mass,
[Ms] to fluid mass, [M]. The term “solute mass fraction” may be used interchangeably with
“solute concentration”, and no difference should be implied. Note that “solute volumetric
concentration”, c[Ms/Lf3], (mass of solute, Ms, per volume of fluid, Lf3), is not the primary
variable characterizing solute transport referred to either in this report or in output from the
SUTRA model. Note that the measure of solute mass [Ms] may be in units such as [mg], [kg], or
[lbm], and may differ from the measure, [M], of fluid mass.
SUTRA allows only the transport of either thermal energy or a single solute to be modeled in a
given simulation. Thus, when simulating energy transport, a constant value of solute
concentration is assumed in the ground water. When simulating solute transport, a constant
ground-water temperature is assumed.
When SUTRA simulation is carried out in two space dimensions, parameters vary only in these
two directions (x,y). However, the region of space to be simulated may be defined as 3D, when
the assumption is made that all SUTRA parameters and coefficients have a constant value in the
third space direction. A SUTRA simulation may be carried out over a region defined over two
space coordinates (x,y) in which the thickness of the region measured in the third coordinate
direction (z) varies depending on (x,y) position.
13
2.1 Physical Properties of Solid Matrix and Fluid
The ground-water fluid density and viscosity may vary depending on pressure, temperature and
solute concentration. These fundamental variables are defined as follows:
2
p(x,y[,z],t) [M/(L s )] fluid pressure
c = ρC (2.1)
ρ = ρw + c (2.2)
Total fluid density is the sum of pure water density, ρw, and c. Note again that “solute
concentration” refers to solute mass fraction, C, and not c. Fluid density is a weak function of
pressure and depends primarily upon fluid solute concentration and temperature. The
approximate density models employed by SUTRA are first order Taylor expansions (in either T
or C) about a base (reference) density, but other density models may be substituted through
minor modifications to the program. For energy transport:
∂ρ
ρ = ρ(T) ≅ ρ o + (T − To ) (2.3)
∂T
where ρo is the base fluid density at a base (reference) temperature of To, and ∂ρ/∂T is a constant
value of density change with temperature. For the range 20°C to 60°C, ∂ρ/∂T is approximately
-0.375 [kg/(m3 °C)]; however, this factor varies and should be carefully chosen for the
temperature range of interest.
14
For solute transport:
∂ρ
ρ = ρ(C) ≅ ρ o + (C − C o ) (2.4)
∂C
where ρo is the base fluid density at base concentration, Co. (Usually, Co = 0, and the base
density is that of pure water.) The factor ∂ρ/∂C is a constant value of density change with
concentration. For example, for mixtures of freshwater and seawater at 20°C, when C is the mass
fraction of total dissolved solids, Co = 0, and ρo = 998.2 [kg/m3], then the factor, ∂ρ/∂C, is
approximately 700. [kg/m3].
Fluid viscosity, μ [M/Lf s], is a weak function of pressure and of concentration (for all except
very high concentrations), and depends primarily on fluid temperature. For energy transport the
viscosity of pure water is given in m-k-s units by:
⎛ 248.37 ⎞
⎜ ⎟
μ(T) ≅ (239.4 × 10 ) 10 -7 ⎝ T +133.15 ⎠
[kg/(m ⋅ s)] (2.5)
(The units may be converted to those desired via a scale factor in the program’s input data.)
For solute transport, viscosity is taken to be constant. For example, at 20°C in m-k-s units,
The total volume of a porous medium is composed of a matrix of solid grains typically of solid
earth materials, and of void space, which includes the entire remaining volume that the solid
does not fill. The volume of void space may be fully or partly filled with gas or liquid, and is
commonly referred to as the pore volume. Porosity is defined as a volume of voids in the soil
matrix per total volume of voids plus matrix:
It should be noted that SUTRA employs only one type of porosity, ε. In some instances there
may be need to distinguish between a porosity for pores which take part in fluid flow (effective
porosity) and pores which contain both stagnant and flowing fluid (total porosity).
(Modifications may be made by the user to include this process.)
15
The fraction of total volume filled by the fluid is εSw where:
When Sw = 1, the void space is completely filled with fluid and is said to be saturated. When
Sw < 1, the void space is only partly water filled and is referred to as being unsaturated.
When Sw < 1, water adheres to the surface of solid grains by surface tension effects, and the fluid
pressure is less than atmospheric. Fluid pressure, p, is measured with respect to background or
atmospheric pressure. The negative pressure is defined as capillary pressure, which exists only
for p < 0:
pc = –p when p < 0
pc = 0 when p ≥
_0 (2.7)
In a saturated porous medium, as fluid (gauge) pressure drops below zero, air may not directly
enter the void space, but may enter suddenly when a critical capillary pressure is reached. This
pressure, pcent, is the entry pressure (or bubble pressure):
Typical values for pcent range from about 1.0 x 103 [kg/(m s2)] for coarse sand to approximately
5.0 x 103 [kg/(m s2)] for fine silty sand.
The relation between fluid saturation and capillary pressure in a given medium is typically
determined by laboratory experiment, and except for the portion near bubble pressure, tends to
have an exponential character (Figure 2.1). Different functional relations exist for different
materials as measured in the laboratory. In addition, a number of general functions with
parameters to be fitted to laboratory data are available. Because of the variety of possible
functions, no particular function is set by SUTRA; any desired function may be specified for
simulation of unsaturated flow. For example, a general function with three fitting parameters is
(Van Genuchten, 1980):
⎛ n −1 ⎞
⎡ 1 ⎤ ⎜ ⎟
S w = S wres + (1 − S wres ) ⎢ n ⎥
⎝ n ⎠
(2.8)
⎣1 + (ap c ) ⎦
where Swres is a residual saturation below which saturation is not expected to fall (because the
fluid becomes immobile), and both a and n are parameters. The values of these parameters
depend upon a number of factors and these must be carefully chosen for a particular material.
The total mass of fluid contained in a total volume, VOL, of solid matrix plus pore space is
(εSwρ)VOL. The actual amount of total fluid mass contained depends solely on fluid pressure, p,
and solute concentration, C, or fluid temperature, T. A change in total fluid mass in a volume,
assuming VOL is constant, is expressed as follows:
16
⎡ ∂ (εS w ρ ) ∂ (εS w ρ ) ⎤
VOL ⋅ d (εS w ρ ) = VOL ⋅ ⎢ dp + dU ⎥ (2.9)
⎢⎣ ∂p ∂U ⎥⎦
where U represents either C or T. Saturation, Sw, is entirely dependent on fluid pressure, and
porosity, ε, does not depend on concentration or temperature:
⎡⎛ ∂ (ερ ) ∂S ⎞ ∂ρ ⎤
VOL ⋅ d (εS w ρ ) = VOL ⋅ ⎢⎜⎜ S w + ερ w ⎟⎟dp + εS w dU ⎥ (2.10)
⎣⎝ ∂p ∂p ⎠ ∂U ⎦
17
The factor, ∂ρ/∂U, is a constant value defined by the assumed density models, given by
equations (2.3) and (2.4).
Aquifer storativity under fully saturated conditions is related to the factor, ∂(ερ)/∂p, by
definition, as follows (Bear, 1979):
∂ (ερ)
≡ ρS op (2.12)
∂p
where:
1 ⎛ ΔVOL w ⎞
S op ≡ ⎜ ⎟⎟ (2.13)
VOL ⎜⎝ Δp ⎠
The specific pressure storativity, Sop, is the volume of water released from saturated pore storage
due to a unit drop in fluid pressure per total solid matrix plus pore volume. Note that the
common specific storativity, So [L–1], which when multiplied by confined aquifer thickness gives
the well known storage coefficient, S[1], is related to Sop as, S o = ρ g S op , where g [L/s2] is the
magnitude of the gravitational acceleration vector. The common specific storativity, So, is
analogous to the specific pressure storativity, Sop, used in SUTRA, except that So expresses the
volume of water released from pore storage due to a unit drop in hydraulic head.
SUTRA employs an expanded form of the specific pressure storativity based on fluid and bulk
porous matrix compressibilities. The relation is obtained as follows by expanding (2.12):
∂ε ∂ρ
ρ S op ≡ ρ +ε (2.14)
∂p ∂p
1 ∂ρ
β≡ (2.15)
ρ ∂p
For pure water at 20°C, β ~ 4.47 x 10–10 [kg/(m s2)]–1. As the volume of solid grains, VOLs, in a
volume, VOL, of porous solid matrix plus void space is VOLs = (1–ε) VOL, the factor, ∂ε/∂p,
may be expressed as:
∂ε (1 − ε) ∂ (VOL)
≡ (2.16)
∂p VOL ∂p
18
which assumes that individual solid grains are relatively incompressible. The total stress at any
2
point in the solid matrix-fluid system is the sum of effective (intergranular) stress, σ' [M/(L s )],
and fluid pore pressure, p, in systems where the total stress remains nearly constant, dσ' = –dp,
and any drop in fluid pressure increases intergranular stress by a like amount. This consideration
allows (2.16) to be expressed in terms of bulk porous matrix compressibility, as:
∂ε/∂p = (1–ε)α, where
1 ∂ (VOL)
α≡ - (2.17)
VOL ∂σ'
Factor α ranges from α ~ 10–10 [kg/(m s2)]–1 for sound bedrock to about α ~ 10–7 [kg/(m s2)]–1
for clay (Freeze and Cherry, 1979). Thus equation (2.14) may be rewritten as
ρSop = ρ(1–ε)α + ερβ, and, in effect, the specific pressure storativity, Sop, is expanded as:
S op = (1 - ε)α + εβ (2.18)
The porosity value itself is held constant for SUTRA, despite relation (2.16), although this may
cause small errors in some cases (Goode, 1992). A more thorough discussion of storativity is
presented by Bear (1979).
Fluid movement in porous media where fluid density varies spatially may be driven by
differences either in fluid pressure or by unstable variations in fluid density. Pressure-driven
flows, for example, are directed from regions of higher than hydrostatic fluid pressure toward
regions of lower than hydrostatic pressure. Density-driven flows occur when gravity forces act
on denser regions of fluid causing them to flow downward relative to fluid regions that are less
dense. A stable density configuration drives no flow, and is one in which fluid density remains
constant or increases with depth.
The mechanisms of pressure and density driving forces for flow are expressed for SUTRA
simulation by a general form of Darcy’s law, which is commonly used to describe flow in porous
media:
⎛ kk r ⎞
v = − ⎜⎜
εS μ ⎟ (
⎟ ⋅ ∇p − ρg ) (2.19a)
⎝ w ⎠
19
where:
The gravity vector is defined in relation to the direction in which vertical elevation is measured:
g = – g ∇(ELEVATION) (2.19b)
where g is the magnitude of the gravitational acceleration vector. For example, if the y-space-
coordinate is oriented directly upwards, then ∇(ELEVATION) is a vector of values (for x, y and
z directions, respectively): (0,1,0), and g = (0, – g ,0). If for example, ‘directly upwards’ is
½
within in the x-y plane at a 60° angle to the x-axis, then ∇ (ELEVATION) = ((1/2), (3 /2), 0)
½
and g = (–(1/2) g , –(3 /2) g , 0). The z-component is ignored for 2D analysis.
The average fluid velocity, v, is the velocity of fluid with respect to the stationary solid matrix.
The velocity is referred to as an “average”, because true velocities in a porous medium vary from
point to point due to variations in the permeability and porosity of the medium at a spatial scale
smaller than that at which measurements are made. The so-called Darcy velocity, q, for the sake
of reference, is q = εSwv. This value is always less than the true average fluid velocity, v, and
thus, is not a true indicator of the speed of water movement. “Darcy velocity”, q, is actually a
‘flux’ of fluid, representing the volume of fluid crossing an area of porous medium per time.
Fluid velocity, even for a given pressure and density distribution, may take on different values
depending on how mobile the fluid is within the solid matrix. Fluid mobility depends on the
combination of permeability, k , relative permeability, kr, and viscosity, μ, which occurs in
equation (2.19a). Permeability is a measure of the ease of fluid movement through
interconnected voids in the solid matrix when all voids are completely saturated. Relative
permeability expresses what fraction of the total permeability remains when the voids are only
partly fluid-filled and only part of the total interconnected void space is connected by continuous
fluid channels. Viscosity directly expresses ease of fluid flow; a less viscous fluid flows more
readily under a driving force.
As a point of reference, in order to relate the general form of Darcy’s law, (2.19a), back to a
better known form dependent on hydraulic head, the dependence of flow on density and
saturation must be ignored. When the solid matrix is fully saturated, Sw = 1, the relative
20
permeability to flow is unity kr = 1. When, in addition, fluid density is constant, the right side of
(2.19a) expanded by (2.19b) may be multiplied and divided by ρ g :
− kρ g ⎡ ⎛ p ⎞ ⎤
v= ⋅ ⎢ ∇⎜ ⎟ + ∇(ELEVATION)⎥ (2.20a)
εμ ⎢ ⎜ρg ⎟ ⎥
⎣ ⎝ ⎠ ⎦
⎛K⎞
v = - ⎜⎜ ⎟⎟ ⋅ ∇ h (2.20b)
⎝ε⎠
which is Darcy’s law written in terms of the hydraulic head. Even in this basic form of Darcy’s
law, flow may depend on solute concentration and temperature. The hydraulic conductivity,
through viscosity, is highly dependent on temperature, and measurably, but considerably less on
concentration. In cases where density or viscosity is not constant, therefore, hydraulic
conductivity, K , is not a fundamental parameter describing ease of flow through the solid matrix.
Permeability, k , is, in most situations, essentially independent of pressure, temperature and
concentration and therefore is the appropriate fundamental parameter describing ease of flow in
the SUTRA model.
Permeability, k , describes ease of fluid flow in a saturated solid matrix. When permeability in a
particular small volume of solid matrix depends on the direction of the flow, the permeability is
said to be anisotropic. Direction-independent permeability is called isotropic. It is commonly
assumed that permeability is the same for flow forward or backward along a particular line in
space. When permeability is anisotropic, there is always one particular direction, xmax, along
which permeability has a maximum value, kmax [L2], and another direction, xmin, along which
permeability has a minimum value, kmin [L2]. These two principal directions are mutually
perpendicular. In 3D, there exists a third principal direction, xmid, which is perpendicular to the
first two, and in which the permeability has an intermediate, or “middle,” value, kmid [L2].
The permeability tensor, k , of Darcy’s law, equation (2.19), has four components in 2D and nine
components in 3D. The values of these tensorial components depend on the effective
permeabilities in the x, y, and z coordinate directions, which are not necessarily aligned with the
principal directions of permeability. The required coordinate rotations are carried out
automatically by SUTRA according to the method described in section 5.1, “Rotation of
Permeability Tensor.”
21
(a)
(b)
Figure 2.2. Definition of anisotropic permeability and effective permeability, k, in (a) 2D and (b) 3D. In
2D, xmax and xmin are the directions of maximum and minimum permeability, kmax and kmin, and θ is
the angle of the maximum permeability direction from the x-axis. In 3D, xmid is an additional direction
that corresponds to a middle permeability, kmid. (For the sake of visual clarity, the 3D diagram omits
the (x, y, z)-coordinate axes and the angles that relate coordinate systems.)
22
At any given point in space, an anisotropic permeability field in 2D is completely described by
the permeability ellipse shown in Figure 2.2a, in which
The lengths of the semi-major and semi-minor axes of the ellipse are defined as k 1/2 1/2
max and k min ,
½
respectively, and the length of any radius is k , where k is the effective permeability for flow
along that direction. The angle θ orients the principal directions, xmax, and xmin, to the x and y
coordinate directions. In the case of isotropic permeability, kmax = kmin, and θ is arbitrary.
The lengths of the principal semi-axes of the ellipsoid are defined as k 1/2 1/2 1/2
max , k mid , and k min , and
½
the length of any radius is k , where k is the effective permeability for flow along that direction.
The angles θ1, θ2, and θ3 orient the principal directions, xmax, xmid, and xmin, to the x, y, and z
coordinate directions. In the case of isotropic permeability, kmax = kmid = kmin, and θ1, θ2, and θ3
are arbitrary. For the definition of θ1, θ2, and θ3, see the note titled “Permeability” in the
description of dataset 15B in Appendix B, in which they are called ANGLE1, ANGLE2,
and ANGLE3, respectively.
23
then air or another gas has entered the matrix and the void space is only partly fluid filled,
Sw < 1. In this case, the ease with which fluid can pass through the solid matrix depends on the
remaining cross section of well-connected fluid channels through the matrix, as well as on
surface tension forces at fluid-gas, and fluid-solid interfaces. When saturation is so small such
that no interconnected fluid channels exist and residual fluid is scattered about and tightly bound
in the smallest void spaces by surface tension, flow ceases entirely. The relative permeability to
flow, kr, which is a measure of this behavior, varies from a value of zero or near zero at the
residual fluid saturation, Swres, to a value of one at saturation, Sw = 1. A relative permeability-
saturation relation (Figure 2.3) is typically determined for a particular solid matrix material in the
laboratory as is the relation, Sw(pc). Relative permeability is assumed in SUTRA to be
independent of direction in the porous media.
SUTRA allows any desired function to be specified which gives the relative permeability in
terms of saturation or pressure. A general function, for example, based on the saturation-capillary
pressure relation given as an example in (2.8), is (Van Genuchten, 1980):
2
⎧ ⎛ n −1 ⎞ ⎫
⎜ ⎟
1/2 ⎪ ⎡ ⎤
⎛ n ⎞ ⎝ n ⎠
⎜ ⎟ ⎪
k r = S ∗w ⎨1 − ⎢1 − S ∗w ⎝ n −1 ⎠ ⎥ ⎬ (2.21a)
⎪ ⎣ ⎦ ⎪
⎩ ⎭
S w − S wres
S ∗w = (2.21b)
1 − S wres
Flow in the gaseous phase that fills the remaining void space not containing fluid when Sw < 1 is
assumed not to contribute significantly to total solute or energy transport which is due primarily
to fluid flow and other transport processes through both fluid and solid matrix. Furthermore, it is
assumed that pressure differences within the gas do not drive significant fluid flow. These
assumptions are justified in most common situations when gas pressure is approximately
constant throughout the solid matrix system. Should gas pressure vary appreciably in a field
system, simulation with SUTRA, which is by definition a single phase flow and transport model,
must be critically evaluated against the possible necessity of employing a multiphase fluid flow
and transport model.
The fluid mass balance is expressed as the sum of pure water and pure solute mass balances for a
solid matrix in which there is negligible net movement (i.e., no subsidence and no compaction):
24
∂ (εS w ρ )
≡ −∇ ⋅ (εS w ρ v ) + Q p + ϒ (2.22)
∂t
where:
3
Qp(x,y[,z],t) [M/(L s)] fluid mass source (including pure water mass
plus solute mass dissolved in source water)
3
ϒ (x,y[,z],t) [M/(L s)] solute mass source (e.g., dissolution of solid
matrix or desorption)
25
The term on the left may be recognized as the total change in fluid mass contained in the void
space with time. The term involving ∇ represents contributions to local fluid mass change due to
excess of fluid inflows over outflows at a point. The fluid mass source term, Qp, accounts for
external additions of fluid including pure water mass plus the mass of any solute dissolved in the
source fluid. The pure solute mass source term, ϒ, may account for external additions of pure
solute mass not associated with a fluid source. In most cases, this contribution to the total mass is
small compared to the total pure water mass contributed by fluid sources, Qp. Pure solute
sources, ϒ, are therefore neglected in the fluid mass balance, but may be readily included in
SUTRA for special situations. Note that solute mass sources are not neglected in the solute mass
balance, which is discussed in section 2.4.
While (2.22) is the most fundamental form of the fluid mass balance, it is necessary to express
each mechanism represented by a term of the equation, in terms of the primary variables, p, C,
and T. As SUTRA allows variation in only one of C or T at a time, the letter U is employed to
represent either of these quantities. The development from equation (2.9) to (2.18) allows the
time derivative in (2.22) to be expanded:
∂ (εS w ρ ) ⎛ ∂S ⎞ ∂p ⎛ ∂ρ ⎞ ∂U
= ⎜⎜ S w ρS op + ερ w ⎟⎟ + ⎜ εS w ⎟ (2.23)
∂t ⎝ ∂p ⎠ ∂t ⎝ ∂U ⎠ ∂t
While the concepts upon which specific pressure storativity, Sop, is based, do not exactly hold for
unsaturated media, the error introduced by summing the storativity term with the term involving
( ∂ Sw/ ∂ p) is insignificant as ( ∂ Sw/ ∂ p) >>> Sop.
The exact form of the fluid mass balance as implemented in SUTRA is obtained from (2.22) by
neglecting ϒ, substituting (2.23) and employing Darcy’s law, (2.19), for v:
⎛ ∂S ⎞ ∂p ⎛ ∂ρ ⎞ ∂U ⎡⎛ k k r ρ ⎞ ⎤
⎜⎜ S w ρS op + ερ w
∂p
⎟⎟ + ⎜ εS w ⎟ − ∇ ⋅ ⎢⎜⎜ ⎟( )
⎟ ⋅ ∇p − ρg ⎥ = Q p (2.24)
⎝ ⎠ ∂t ⎝ ∂U ⎠ ∂t ⎢⎣⎝ μ ⎠ ⎥⎦
Energy is transported in the water-solid matrix system by flow of ground water, and by thermal
conduction from higher to lower temperatures through both the fluid and solid. The actual flow
velocities of the ground water from point to point in the 3D space of an aquifer may vary
considerably about an average velocity, v(x, y[, z], t), calculated from Darcy’s law (2.19a). As
the true, not average, velocity field is usually too complex to measure in real systems, an
additional transport mechanism approximating the effects of mixing of different temperature
ground waters moving both faster and slower than the average velocity, v, is hypothesized. This
mechanism, called energy dispersion, is employed in SUTRA as the best currently available,
though approximate, description of the mixing process. In the simple dispersion model
employed, dispersion, in effect, adds to the thermal conductivity value of the fluid-solid medium
in particular directions dependent upon the direction of fluid flow. In other words, mixing due to
26
the existence of nonuniform, non-average velocities in three dimensions about the average flow,
v, is conceptualized as a diffusion-like process with anisotropic diffusivities.
The model has been shown, in fact, to well describe transport in purely homogeneous porous
media with uniform one-dimensional flows. In heterogeneous field situations with nonuniform
flow in, for example, irregular bedding or fractures, the model holds only at the predetermined
scale at which dispersivities have been determined and it must currently be considered as a
necessary approximation, and be very carefully applied when extrapolating to other scales of
transport.
The stored energy in a volume may change with time due to: ambient water with a different
temperature flowing in, well water of a different temperature injected, changes in the total mass
of water in the block, thermal conduction (energy diffusion) into or out of the volume, energy
dispersion in or out, and energy production or loss due to nuclear, chemical or biological
reactions.
This balance of changes in stored energy with various energy fluxes is expressed as follows:
∂[εS w ρe w + (1 − ε )ρ s e s ]
∂t
[
= −∇ ⋅ (εS w ρe w v ) + ∇ ⋅ λ I ⋅ ∇T ]
(2.25)
[ ]
+ ∇ ⋅ εS w ρc w D ⋅ ∇T + Q p c w T ∗ + εS w ργ ow + (1 − ε )ρ s γ so
27
T*(x,y[,z],t) [°C] temperature of source fluid
The time derivative expresses the total change in energy stored in both the solid matrix and fluid
per unit total volume. The term involving v expresses contributions to locally stored energy from
average-uniform flowing fluid (average energy advection). The term involving bulk thermal
conductivity, λ, expresses heat conduction contributions to local stored energy and the term
involving the dispersivity tensor, D , approximately expresses the contribution of irregular flows
and mixing, which are not accounted for by average energy advection. The term involving Qp
accounts for the energy added by a fluid source with temperature, T*. The last terms account for
energy production in the fluid and solid, respectively, due to endothermic reactions, for example.
While models that are more complex are available and may be implemented if desired, SUTRA
employs a volumetric average approximation for bulk thermal conductivity, λ:
λ ≡ εS w λ w + (1 − ε )λ s (2.26)
The specific energy content (per unit mass) of the fluid and the solid matrix depends on
temperature as follows:
ew = cwT (2.27a)
es = csT (2.27b)
∂
[εSwρcw + (1 − ε)ρscs ] T + ∇⋅ (εSwρcw vT) − ∇⋅ {[Swλw + (1 − ε)λs ]I + εSwρcw D}⋅ ∇T
∂t (2.28)
= QpcwT + εSwργo + (1 − ε) ρsγo
∗ w s
28
2.4 Solute Transport in Ground Water
Solute mass is transported through the porous medium by flow of ground water (solute
advection) and by molecular or ionic diffusion, which while small on a field scale, carries solute
mass from areas of high to low concentrations. The actual flow velocities of the ground water
from point to point in 3D space of an aquifer may vary considerably about an average velocity,
v, which is calculated from Darcy’s law (2.19a). As the true, not-average, velocity field is
usually too complex to measure in real systems, an additional transport mechanism
approximating the effects of mixing of waters with different concentrations moving both faster
and slower than the average velocity, v(x,y[,z],t), is hypothesized. This mechanism, called solute
dispersion, is employed in SUTRA as the best currently available, though approximate,
description of the mixing process. In the simple dispersion model employed, dispersion, in
effect, significantly adds to the molecular diffusivity value of the fluid in particular directions
dependent upon the direction of fluid flow. In other words, mixing due to the existence of
nonuniform, non-average velocities in three dimensions about the average flow, v, is
conceptualized as a diffusion-like process with anisotropic diffusivities.
The model has been shown, in fact, to describe transport well in purely homogeneous porous
media with uniform one-dimensional flows. In heterogeneous field situations with nonuniform
flows in, for example, irregular bedding or fractures, the model holds only at the predetermined
scale at which dispersivities have been determined and it must be considered as a currently
necessary approximation, and be very carefully applied when extrapolating to other scales of
transport.
SUTRA solute-transport simulation accounts for a single species mass stored in fluid solution as
well as solute and species mass stored as adsorbate on the surfaces of solid matrix grains. Solute
concentration, C, and adsorbate concentration, Cs(x,y[,z],t) [Ms/MG], (where [Ms] denotes units
of solute mass, and [MG] denotes units of solid grain mass), are related through equilibrium
adsorption isotherms. The species mass stored in solution in a particular volume of solid matrix
may change with time due to: ambient water with a different concentration flowing in, well water
injected with a different concentration, changes in the total fluid mass in the block, solute
diffusion or dispersion in or out of the volume, transfer of dissolved species to adsorbed species
(or reverse), or a chemical or biological reaction causing solute production or decay. The species
mass stored as adsorbate on the surface of solid grains in a particular block of solid matrix may
change with time due to a gain of adsorbed species by transfer of solute from the fluid (or
reverse), or a chemical or biological reaction causing adsorbate production or decay.
The separate balances for a single species stored in solution (solute) and on the solid grains
(adsorbate), are expressed, respectively, as follows:
29
∂ (εS w ρC )
∂t
[ ( ) ]
= - f − ∇ ⋅ (εS w ρ vC ) + ∇ ⋅ εS w ρ D m I + D ⋅ ∇C + εS w ρΓw + Q p C ∗ (2.29)
∂[(1 − ε ) ρ s C s ]
= + f + (1 − ε ) ρ s Γs (2.30)
∂t
3
f(x,y[,z],t) [Ms/(L s)] volumetric adsorbate source (gain of absorbed
species by transfer from fluid per unit total
volume)
Equation (2.29) is the solute mass balance in terms of the dissolved mass fraction (solute
concentration), C. The time derivative expresses the total changes in solute mass with time in a
volume due to the mechanisms represented by terms on the right side of the equation. The term
involving f(x,y[,z],t) represents the loss of solute mass from solution which becomes fixed on the
30
solid grain surfaces as adsorbate. The adsorbate source, f, may, in general, depend on solute
concentration, C, adsorbate concentration, Cs, and the rate of change of these concentrations,
depending on either an equilibrium adsorption isotherm or on nonequilibrium adsorption
processes. SUTRA algorithms are structured to directly accept nonequilibrium sorption models
as an addition to the code. However, the current version of SUTRA assumes equilibrium sorption
as shown in the following section, “Adsorption and production/decay processes.”
The term involving fluid velocity, v, represents average advection of solute mass into or out of
the local volume. The term involving molecular diffusivity of solute, Dm, and dispersivity, D ,
expresses the contribution of solute diffusion and dispersion to the local changes in solute mass.
The diffusion contribution is based on a true physical process often negligible at the field scale.
The dispersion contribution approximates the effect of solute advection and mixing in irregular
flows, which are not accounted for by solute advected by the average velocity. The solute mass
source term involving Γw(x,y[,z],t), the solute mass production rate per unit mass of fluid,
expresses the contribution to dissolved species mass of chemical, biological or radioactive
reactions in the fluid. The last term accounts for dissolved species mass added by a fluid source
with concentration, C*.
Equation (2.30) is the balance of mass, which has been adsorbed by solid grain surfaces in terms
of species concentration on the solid (specific adsorbate concentration), Cs. The change in total
adsorbate mass is expressed by the time derivative term. It may increase due to species leaving
solution as expressed by adsorbate source term, f. The adsorbed mass may also change due to a
production of adsorbate mass (per unit solid matrix mass), Γs by radioactive or chemical
processes within the adsorbate. Note that mass becomes immobile once adsorbed, and is affected
only by possible desorption or chemical and biological processes.
The total mass of a species in a volume is given by the sum of solute mass and adsorbate mass. A
balance of the total mass of a species is obtained by addition of (2.30) and (2.29). The general
form of the total species mass balance used in SUTRA is this:
∂ (εS w ρC ) ∂[(1 − ε ) ρ s C s ]
+ =
∂t ∂t (2.31)
− ∇ ⋅ (εS w ρ vC ) + ∇ ⋅ [εS w ρ(D m I + D ) ⋅ ∇C] + εS w ρΓw + (1 − ε ) ρ s Γs + Q p C ∗
Equation (2.31) is the basis for SUTRA solute-transport simulation. In cases of solute transport
where adsorption does not occur (Cs = 0), the adsorbate source term, f, simply has the value zero
(f = 0), and the terms that stem from equation (2.30) are ignored. Further discussion of solute and
adsorbate mass balances may be found in Bear (1979).
f = (1 − ε ) ρ s f s (2.32a)
31
A particular nonequilibrium (kinetic) model of sorption is obtained by defining the functional
dependence of the sorption rate, fs, on other parameters of the system. For example, for a linear
reversible nonequilibrium sorption model, the expression is: fs = m1(C – m2Cs), where m1 and
m2 are sorption parameters. This particular model and a number of other nonequilibrium sorption
models are accommodated by a general expression for fs, as follows:
∂C
f s ≡ κ1 + κ 2C + κ 3 (2.32b)
∂t
The equilibrium sorption models are based on definition of the general coefficients through the
following relation:
∂C s ∂C
= κ1 (2.33)
∂t ∂t
Only general sorption coefficient κ1 need be defined based on various equilibrium sorption
isotherms as shown in the following. The other coefficients are set to zero: κ2 = κ3 = 0.
The linear equilibrium sorption model is based on the linear sorption isotherm assuming constant
fluid density:
C s = (χ1 ρ o ) C (2.34a)
∂C s ∂C
= (χ1 ρ o ) (2.34b)
∂t ∂t
where:
32
and ρo is the fluid base density. For linear sorption, general coefficient κ1 takes on the definition:
κ1 = χ1ρ o (2.34c)
The Freundlich equilibrium sorption model is based on the following isotherm, which assumes a
constant fluid density, ρo:
⎛ ⎞
⎜
⎜
⎜
1 ⎟⎟⎟
⎜ ⎟
⎜
⎜ χ 2 ⎟⎠⎟
C s = χ1 (ρ o C )
⎝
(2.35a)
1 − χ 2 ⎟⎟⎟
⎛ ⎞
⎜
⎜
⎜
⎜ ⎟
∂C s ⎛ χ 1 ⎞
⎜
⎜ χ 2 ⎟⎠⎟ ∂C
= ⎜ ⎟ (ρ o C )
⎝
ρo (2.35b)
∂t ⎜⎝ χ 2 ⎟⎠ ∂t
where:
(When χ2 = 1, the Freundlich isotherm is equivalent to the linear isotherm.) For Freundlich
sorption, then, the general coefficient κ1 takes the definition:
1 − χ 2 ⎟⎟⎟
⎛ ⎞ ⎛ ⎞
⎜
⎜
⎜
1 ⎟⎟⎟ ⎜
⎜
⎜
⎜ ⎟
χ 2 ⎟⎟⎠
⎜ ⎟
⎛χ ⎞
⎜
⎜
⎝
χ 2 ⎟⎟⎠ ⎜
⎜
⎝
κ 1 = ⎜⎜ 1 ⎟⎟ ρ o C (2.35c)
⎝ χ2 ⎠
The Langmuir equilibrium sorption model is based on the following isotherm, which assumes a
constant fluid density, ρo:
χ1 (ρ o C )
Cs = (2.36a)
1 + χ 2 (ρ o C )
∂C s χ 1ρ o ∂C
= (2.36b)
∂t (1 + χ 2 ρ o C) ∂t
2
where:
33
For very low solute concentrations, C, Langmuir sorption becomes linear sorption with linear
distribution coefficient χ1. For very high solute concentrations, C, the concentration of adsorbate
mass, Cs, approaches an upper limit equal to (χ1/χ2). The general SUTRA coefficient κ1 is
defined for Langmuir sorption as:
χ 1ρ o
κ1 = (2.36c)
(1 + χ ρ o C)2
2
The production terms for solute, Γw, and adsorbate, Γs, allow for first-order mass production (or
decay) such as linear BOD (biochemical oxygen demand) or radioactive decay, biological or
chemical production, and zero-order mass production (or decay).
Γw = γ 1w C + γ ow (2.37a)
Γs = γ 1s C s + γ so (2.37b)
where:
2.5 Dispersion
Pseudotransport mechanism
34
Research trends have been to develop dispersion models for various hydrogeological conditions,
and SUTRA may be updated to include new results as they become available. Currently (2007),
SUTRA dispersion is based on a generalization for anisotropic media of the standard description
for dispersion in isotropic, homogeneous porous media. Because any inconsistencies that may
arise in applying this dispersion model to a particular field situation often would not be apparent
due to the poor quality or small amount of measured data, the user is warned to exercise good
judgment in interpreting results when large amounts of so-called dispersion are required to
explain the field measurements. In any case, the user is advised to consult up-to-date literature on
field-scale dispersion before employing this transport model.
The dispersion tensor, D , which appears in both the energy (2.28) and solute (2.31) balances, is
usually expressed for flow in systems with isotropic permeability and isotropic spatial
distribution of inhomogeneities in aquifer materials in 2D as
⎡ D xx D xy ⎤
D=⎢ ⎥ (2.38a)
⎣ D yx D yy ⎦
and in 3D as
⎡ D xx D xy D xz ⎤
⎢ ⎥
D = ⎢ D yx D yy D yz ⎥ (2.38b)
⎢⎣ D zx D zy D zz ⎦⎥
⎟(d L v x + d T v y )
⎛ 1 ⎞
D xx = ⎜ 2 2 2
(2.39a)
⎝v ⎠
⎟(d T v x + d L v y )
⎛ 1 ⎞
D yy = ⎜ 2 2 2
(2.39b)
⎝v ⎠
D ij = ⎜ 2 ⎟(d L − d T )(v i v j )
⎛ 1 ⎞
(2.39c)
⎝v ⎠
i ≠ j, i=x,y
j=x,y
35
In 3D, the diagonal elements are
⎟(d L v x + d T v y + d T v z )
⎛ 1 ⎞
D xx = ⎜ 2 2 2 2
(2.39d)
⎝v ⎠
⎟(d T v x + d L v y + d T v z )
⎛ 1 ⎞
D yy = ⎜ 2 2 2 2
(2.39e)
⎝v ⎠
⎟(d T v x + d T v y + d L v z )
⎛ 1 ⎞
D zz = ⎜ 2 2 2 2
(2.39f)
⎝v ⎠
D ij = ⎜ 2 ⎟(d L − d T )(v i v j )
⎛ 1 ⎞
(2.39g)
⎝v ⎠
i ≠ j, i=x,y,z
j=x,y,z
The variables that determine the elements of the dispersion tensor are defined as follows:
2
dL(x,y[,z],t) [L /s] longitudinal dispersion coefficient
2
dT(x,y[,z],t) [L /s] transverse dispersion coefficient
2
The longitudinal and transverse dispersion coefficients, dL and dT [L /s], are analogous to typical
diffusion coefficients. What is special is that these are directional in nature. The quantity dL acts
as a diffusion coefficient that causes dispersion forward and backward along the local direction
of fluid flow. The quantity dT acts as a diffusion coefficient that causes dispersion symmetrically
in the directions perpendicular to the local flow direction, and is called the transverse dispersion
coefficient. Thus, in 3D, if dL and dT were of equal value, a spherical mass of tracer released in
ground water flowing, on the average, uniformly and unidirectionally would disperse in a
perfectly symmetric spherical manner as it moved downstream. Similarly, in 2D, a circular disk
of tracer would disperse in a perfectly symmetric circular manner as it moved downstream.
However, if dL > dT then the tracer would disperse in an ellipsoidal (3D) or elliptical (2D)
manner, with the long axis oriented in the flow direction as it moved downstream.
36
The sizes of the dispersion coefficients in this model for dispersion in isotropic permeability
systems are dependent upon the absolute local magnitude of average velocity in a flowing system
(Bear, 1979):
dL = αLv (2.40a)
dT = αTv (2.40b)
When the isotropic-media dispersion model is applied to a particular field situation where aquifer
inhomogeneities are much smaller than the field transport scale, then dispersivities αL and αT
may be considered to be fundamental transport properties of the system just as, for example,
permeability is a fundamental property for flow through porous media. In cases where
inhomogeneities are large or scales of transport vary, dispersivities are not a fundamental system
property. In this case, simulated dispersion effects must be interpreted with care, because
dispersivity values are the only means available to represent the dispersive characteristics of a
given system to be simulated when using the SUTRA code.
In a system with anisotropic spatial distribution of heterogeneities in aquifer materials, the same
amount of dispersion may not occur for flow in all directions, even when the magnitude of flow
velocity, v, is the same. For example, in a layered aquifer, the amount of dispersion would not
necessarily be the same for flow parallel to the layers and flow perpendicular to the layers.
The isotropic-media dispersion model, described in the previous section, does not account for
this possibility, and its basic parameters, αL and αT, are independent of flow direction. A model
for anisotropic media is hypothesized that provides key aspects of expected dispersion behavior.
Although the hypothesized model described below is neither completely general nor rigorous, it
provides a practical means of describing dispersion in anisotropic media.
Dispersive spreading is assumed to occur along a set of mutually perpendicular directions (one of
which is the flow direction) in a symmetric manner (i.e., equal amounts in opposite directions
along each direction), just as in the isotropic case. Following the discussion in the previous
section referring to equations (2.40a) and (2.40b), but in a 2D anisotropic medium, a circular
disk of tracer would become elliptical, with the longest axis in the flow direction, as it moved
downstream, if αL > αT. However, it may not spread the same way if it moved with the same
speed, v, in a different direction. For example, if αL = αT (equal amounts of longitudinal and
transverse dispersion) for one flow direction, but αL > αT (greater longitudinal than transverse
dispersion) for all other flow directions, then the tracer would spread in a circular manner if the
flow occurred in the direction where αL = αT, but would spread as an ellipse for flow in any
other direction. In such a case, the values of both αL and αT would depend on the direction of
flow. Such a medium is considered anisotropic with respect to dispersion.
37
(a)
Figure 2.4a. Definition of flow-direction-dependent longitudinal dispersivity, αL(θkv), in 2D. The upper
figure is described in Figure 2.2a. In the lower figure, αLmax and αLmin are the longitudinal dispersivity
for flow in the maximum and minimum directions, respectively. θkv is the angle from the maximum
permeability direction to the flow direction and αL is the longitudinal dispersivity in that flow direction.
38
(b)
(c)
Figure 2.4b,c. Definition of flow-direction-dependent (b) longitudinal dispersivity, αL(θkv1, θkv2), and (c)
transverse dispersivities, αT1(θkv1, θkv2) and αT2(θkv1, θkv2), in 3D. (For the sake of visual clarity, the
(x,y,z)-coordinate axes are not shown, and the angles θkv1 and θkv2 are not labelled.) As in Figure
2.2b, xmax, xmid, and xmin are the principal directions of permeability. In the lower figure, the slicing
ellipse that defines the transverse dispersivities lies in the plane that is perpendicular to the flow
direction, v, and that passes through the center of the ellipsoid. The two transverse dispersivities and
their directions are given by the radii along the major and minor axes of the slicing ellipse.
39
In a 3D anisotropic medium, different amounts of transverse dispersion may occur in two
mutually perpendicular directions (the transverse directions), which are both perpendicular to the
flow direction. If the transverse dispersivities for each of these tranverse directions, αT1 and αT2,
are not equal to each other or to αL, then a sphere of tracer would spread in an ellipsoidal shape
with three unequal axes as it moved downstream. To further complicate the process in 3D,
although the transverse directions are both perpendicular to the flow direction and to each other,
their direction may be rotated at any angle about the flow direction. Their direction is here
assumed to be a function of the flow direction and the principal permeability directions of the
medium. Thus, the orientation of the ellipse that represents the transverse cross section of the
tracer ellipsoid is also a function of the flow direction and principal permeability directions of
the medium.
Dispersion in 2D and 3D anisotropic media is described in SUTRA by ad-hoc models that allow
dispersivity values to change as a function of flow direction relative to the principal permeability
directions of the medium. The model in 2D is based on selecting dispersivities, αL and αT, as
functions of flow direction from two ‘dispersivity ellipses’. The 3D model is based on selection
of αL from one ‘dispersivity ellipsoid’, and the two transverse dispersivity values, αT1 and αT2,
and their associated directions from another ‘dispersivity ellipsoid’, all as a function of flow
direction. These models are described below.
In an anisotropic medium, the 2D and 3D dispersion tensors take the form (2.38a,b), and they are
assumed symmetric, as for an isotropic medium. In 2D, the tensor has two mutually
perpendicular principal directions of dispersion, about which dispersion is symmetric; an initially
circular mass of tracer will disperse in an elliptical manner, with the axes of the ellipse falling
along the principal dispersion directions. In 3D, the tensor has three mutually perpendicular
principal directions of dispersion, about which dispersion is symmetric; an initially spherical
mass of tracer will disperse in an ellipsoidal manner, with the axes of the ellipsoid falling along
the principal dispersion directions. As a rule, the principal dispersion directions are not the same
as the principal directions of permeability; the former directions can depend on the flow
direction, whereas the latter do not.
The principal directions of the 2D dispersion tensor are denoted here by the unit vectors V and
U. In 3D, a third direction is added and is denoted by the unit vector W. The dispersion
coefficients that correspond to V, U, and W are dL, dT1 (called simply dT in 2D), and dT2,
respectively. The diagonal elements of the 2D dispersion tensor are
D xx = d L Vx2 + d T U 2x (2.41a)
D yy = d L Vy2 + d T U 2y (2.41b)
40
D ij = d L Vi V j + d T U i U j (2.41c)
i ≠ j, i=x,y
j=x,y
D ij = d L Vi Vj + d T1 U i U j + d T2 Wi W j (2.41g)
i ≠ j, i=x,y,z
j=x,y,z
To complete the dispersion model, it must be stated how the principal directions of dispersion, V,
U, [and W], and their corresponding dispersion coefficients, dL, dT1, [and dT2], vary with flow
direction. For SUTRA, an ad-hoc model is postulated in which one principal direction coincides
with the flow direction (as it does for an isotropic medium), that is, V=v/v. Thus, V points in the
longitudinal direction, and dL becomes the longitudinal dispersion coefficient. (Note that this is
only a simplifying assumption. In general, the principal directions of dispersion are not
necessarily parallel to and perpendicular to the flow direction.) In 2D, the vector U is transverse
to the flow, dT becomes the transverse dispersion coefficient, and equations (2.41a-c) reduce to
the isotropic form (2.39a-c), except that dL and dT are now functions of flow direction. In 3D,
the vectors U and W are both transverse to the flow, and dT1 and dT2 become the two transverse
dispersion coefficients. As in the isotropic-media dispersion model, dispersion coefficients are
obtained by multiplying dispersivities by the magnitude of the flow velocity:
dL = αLv (2.42a)
In the 2D SUTRA dispersion model, the longitudinal and transverse dispersivities, αL and αT, are
determined by the radii of two ellipses whose axes are assumed to be aligned with the maximum
and minimum permeability directions. The procedure is illustrated for αL in Figure 2.4a. The
semi-major and semi-minor axes of the ellipse are of length (αLmax)1/2 and (αLmin)1/2, respectively.
The radius of the ellipse along the flow direction, V, is then (αL)1/2. The transverse dispersivity,
αT, is determined by computing the radius along the transverse direction, U, of an ellipse with
semi-major and semi-minor axes of length (αTmax)1/2 and (αTmin)1/2, respectively. This
convention for computing αT was introduced in SUTRA version 2.0 (2D3D.1) (Voss and
Provost, 2002); in prior versions (Voss, 1984), αT was determined by computing the radius
41
along the flow direction. This convention is modified in version 2.0 and higher to make the
2D dispersion model consistent with the 3D model discussed below. Note also that the
subscripts “max” and “min” refer only to the maximum and minimum permeability directions.
These are not intended to imply the relation in magnitude of αLmax and αLmin (the longitudinal
dispersivities for flow in the max and min permeability directions, respectively), nor of αTmax and
αTmin (the transverse dispersivities for flow in the max and min permeability directions,
respectively).
Let (x̂, ŷ) represent 2D coordinates aligned with the max and min permeability directions, that is,
(x̂, ŷ) =(xmax, xmin). If V̂ and Û represent the vectors V and U, respectively, expressed in (x̂, ŷ) -
coordinates, then in 2D the longitudinal dispersivity is given by
or
α Lmax α Lmin
αL = (2.43b)
α Lmin cos θ kv + α Lmax sin 2 θ kv
2
where
or
α Tmax α Tmin
αT = (2.44b)
α Tmin sin θ kv + α Tmax cos 2 θ kv
2
where
42
αTmax(x,y) [L] squared radius of the transverse dispersivity
ellipse in the maximum permeability
direction, xmax,
This form of longitudinal dispersivity dependence on direction of flow relative to the principal
permeability directions is similar to that obtained for a transversely isotropic medium in a
stochastic analysis of macrodispersion by Gelhar and Axness (1983). For 2D flow along the
principal permeability directions, the longitudinal and transverse dispersivities take the following
values:
In the 3D SUTRA dispersion model, which is a generalization of the 2D model, the longitudinal
dispersivity, αL, is determined by the radius of an ellipsoid whose axes are assumed to be aligned
with the max, mid, and min permeability directions. The procedure for αL is illustrated in Figure
2.4b. The transverse dispersivities, αT1 and αT2, are determined using a second ellipsoid that is
distinct from the one used to compute αL, but whose axes are also assumed to be aligned with the
max, mid, and min permeability directions. The values of αT1 and αT2 are derived from the
principal radii of the ellipse (hereafter called the “slicing ellipse”) formed by the intersection of
the ellipsoid with the plane that is normal to the flow direction and passes through the center of
the ellipsoid. The procedure for αT1 and αT2 is illustrated in Figure 2.4c. The semi-axes of the
transverse dispersivity ellipsoid in the max, mid, and min permeability directions are of length
(αTmax)1/2, (αTmid)1/2, and (αTmin)1/2, respectively. The principal radii of the slicing ellipse are then
(αT1)1/2 and (αT2)1/2. Note also that the subscripts “max,” “mid,” and “min” refer only to the
maximum, middle, and minimum permeability directions. These are not intended to imply the
relation in magnitude of αLmax, αLmid, and αLmin (the longitudinal dispersivities for flow in the
max, mid, and min permeability directions, respectively), nor of αTmax, αTmid, and αTmin (the
transverse dispersivities for flow in the max, mid, and min permeability directions, respectively).
Let (x̂, ŷ, ẑ) represent 3D coordinates aligned with the max, mid, and min permeability
directions, that is, (x̂, ŷ, ẑ) =(xmax, xmid, xmin). If V̂ , Û , and Ŵ represent the vectors V, U, and
W, respectively, expressed in (x̂, ŷ, ẑ) -coordinates, then in 3D the longitudinal dispersivity is
given by
or
43
α Lmax α Lmid α Lmin
αL = , (2.45b)
α Lmin (α Lmid cos θ kv1
2
+ α Lmax sin 2 θ kv1 )cos 2 θ kv2 + α Lmax α Lmid sin 2 θ kv2
where
1 Ŵx̂2 Ŵ 2 Ŵ 2
= + ŷ + ẑ . (2.46b)
α T2 α Tmax α Tmid α Tmin
where
44
The geometric construction that determines αT1 and αT2 and their corresponding eigenvectors Û
and Ŵ (namely, the ellipse formed by the intersection of a plane with an ellipsoid) is analogous
to that which determines indices of refraction and directions of vibration in the optics of biaxial
crystals. Taking advantage of this analogy, SUTRA uses the Biot-Fresnel construction to
compute Û and Ŵ and, in turn, αT1 and αT2. The procedure is described in texts on optical
mineralogy (see, for example, Nesse (1986)) and is not described here except to note that the unit
flow vector, V̂ , is analogous to the wave normal; the other two eigenvectors, Û and Ŵ , are
analogous to the two vibration directions; the flow directions for which αT1=αT2 are analogous to
the optic axes; (αTmax)1/2, (αTmid)1/2, and (αTmin)1/2 are analogous to the principal indices of
refraction; and (αT1)1/2 and (αT2)1/2 are analogous to the indices of refraction corresponding to the
vibration directions.
For 3D flow along the principal permeability directions, the longitudinal and transverse
dispersivities take the following values:
Some informal guidelines may be given concerning values of dispersivities when other data are
not available. Longitudinal dispersivities may be considered to either be on the order of the size
of the largest hydrogeologic or flow inhomogeneities along the transport reach, or the distance
between inhomogeneities, whichever is the greater value. For transport in pure homogeneous
sand, longitudinal dispersivity is on the order of grain size. This is the type of situation where the
isotropic-media dispersion model describes well the observed transport behavior. In the case of a
sandy aquifer containing well-distributed inclusions of less permeable material, the longitudinal
dispersivity required to correct an average advective transport that has passed by many of the
inclusions would be on the order of the larger of either inclusion size or distance between
inclusions.
Should the dispersivity, estimated on the basis of the size of inhomogeneities or distance
between them, be greater than about one tenth of the longest transport reach, then the meaningful
use of a constant-dispersivity dispersion model must be questioned. In such a case, the ideal
action to take would be to more explicitly define the field distribution of velocity by taking into
account the actual geometry of inhomogeneities. This would correctly account for most of the
transport that takes place as advective in nature, with much smaller contributions of the
approximate dispersive process. Given a better-defined velocity field, and in the absence of other
data, dispersivity should then be chosen based on the largest postulated inhomogeneities met
along a given average stream tube. The size and distribution of inhomogeneities not explicitly
taken into account by the average flow field may be postulated based on the best available
knowledge of local geology.
45
Transverse dispersivity, αT, is typically even less well known for field problems than
longitudinal dispersivity. Values of αT used in simulation are typically between one tenth and
one third of αL. In systems with anisotropic permeability, αT may be less than one hundredth of
αL for flows along the maximum permeability direction (Gelhar and Axness, 1983). Should
simulated transport in a particular situation be sensitive to the value of transverse dispersivity,
further data collection is necessary and the transport model must be interpreted with great care.
The ad-hoc models for longitudinal dispersion in anisotropic media presented in the previous
sections allow for simulation experiments with two or three principal longitudinal dispersivities
that may be of special interest in systems with well-defined anisotropy values. Depending on the
particular geometry of layers or inhomogeneities causing the permeability anisotropy, the
longitudinal dispersivity in the minimum permeability direction, αLmin, may be either greater or
smaller than those in the middle and maximum permeability directions, αLmid and αLmax.
However, use of the anisotropic-media dispersion model is advised only when clearly required
by field data, and the additional longitudinal dispersion parameters are not intended for general
application without evaluation of their applicability in each particular case. Another use of the
ad-hoc model is in the case of 2D cross sectional or 3D simulation wherein the lateral extent of
the system is much greater than the vertical extent. In this case, lateral flow and transport may be
affected by heterogeneities similar in size to the lateral scale, and vertical flow and transport may
be affected by heterogeneities similar in size to the much smaller vertical scale. Here, it makes
sense to employ the ad-hoc model to assign different longitudinal dispersivities for lateral and
vertical flow.
The fluxes of energy and solute mass in solution, moreover, are caused by similar mechanisms.
Both quantities undergo advection based on average flow velocity, v. Both quantities undergo
dispersion. Both quantities undergo diffusion; the diffusive solute mass flux is caused by
molecular or ionic diffusion within the fluid, while the diffusive energy flux occurs by thermal
conduction through both fluid and solid. Fluid sources and sinks give rise to similar sources and
sinks of energy and solute mass. Energy and species mass may both be produced by zero-order
processes, wherein energy may be produced by an exothermic reaction and solute may be
produced, for example, by a biological process. The linear adsorption process affecting solutes is
similar to the storage of energy in solid portion of an aquifer. Only the nonlinear sorption
processes and first-order production of solute and adsorbate have no readily apparent analogy in
terms of energy.
46
Thus, the balances of energy per unit volume, (2.28), and total species mass per unit volume,
(2.31), may be expressed in a single unified balance in terms of a variable, U(x,y,t), which may
represent either T(x,y,t) or C(x,y,t), as follows:
∂
(ε S w ρc w U ) + ∂ [(1 − ε )ρ s U s ]
∂t ∂t
{ [ ( )
+ ∇ ⋅ (εS w ρc w v U ) − ∇ ⋅ ρc w εS w σ w I + D + (1 − ε ) σ s I ⋅ ∇U] } (2.47)
= Q p c w U ∗ + εS w ρΓ w + (1 − ε ) ρ s Γ s
where:
By simple redefinition according to (2.47a) or (2.47b), equation (2.47) directly becomes the
energy or species mass balance. This redefinition is automatically carried out by SUTRA as a
result of whether the user specifies energy or solute-transport simulation.
The energy and solute balances as well as their unified form, (2.47), track both types of
contributions to changes in total stored energy or solute mass. However, the fluid saturation and
pressure change contribution to energy and solute balances are already implicitly accounted for
by the fluid mass balance.
The fluid mass balance contribution to solute and energy balances is expressed by the product of
the fluid mass balance, equation (2.22) (which tracks changes in fluid mass per unit volume),
with cwU (which represents either energy or solute mass per unit fluid mass). Note that cw≡1 for
solute transport. This product tracks energy or solute mass changes per unit volume due to fluid
mass changes per unit volume:
47
∂ (εS w ρ )
(c w U ) + (c w U ) ∇ ⋅ (εS w ρ v ) = (c w U ) Q p (2.48)
∂t
where the solute mass source, ϒ , is neglected. Comparison of (2.48) with (2.47) will reveal that
the terms on the left of (2.48) also appear in the unified balance equation.
Prior to substituting (2.48) for the duplicate terms in (2.47), the search for redundant terms may
be extended to a balance of species mass or energy stored in the solid matrix, rather than in the
fluid. A simple mass balance for the solid matrix is:
∂
[(1 − ε ) ρ s ] + ∇ ⋅ [(1 − ε) ρ s v s ] = 0 (2.49)
∂t
Due to the assumption that the net solid matrix velocity, vs, is negligible, the associated term of
(2.49) is dropped. The contribution of this simple solid matrix mass balance to the unified solute-
energy balance may again be obtained by taking the product of (2.49) with Us:
(U s ) ∂ [(1 − ε )ρ s ] = 0 (2.50)
∂t
The redundant information in the unified energy-solute balance which keeps track of both solid
matrix and fluid mass balance contributions may be directly removed from (2.47) by subtracting
(2.48) and (2.50). The result is:
∂U ∂U s
εS w ρc w + (1 − ε ) ρ s
∂t ∂t
{ [ ( )
+ εS w ρc w v ⋅ ∇U − ∇ ⋅ ρc w εS w σ w I + D + (1 − ε ) σ s I ⋅ ∇ U ] } (2.51)
= Q p c w (U ∗ − U ) + εS w ρΓw + (1 − ε ) ρ s Γs
where:
48
For numerical simulation, this equation may be termed a “fluid-mass conservative” form of the
energy or species mass balance. When approximated numerically, the unified balance in the
original form, (2.47), would contain approximation errors in both the fluid mass balance
contributions (based on pressure and saturation changes) and the temperature or concentration
change contribution. However, in the revised form, equation (2.51), the complete fluid mass
balance contribution has already been analytically accounted for before any numerical
approximation takes place. Thus, the total approximation error for the unified balance, (2.51), is
significantly less as it is due to the temperature or concentration change contribution only.
The unified energy-species mass balance is brought to its final form by noticing that the form of
the term, ∂ Us/ ∂ t, for energy transport, is the same as that for solute transport when using the
equilibrium sorption relation (2.33), and that the form of the energy production terms is similar
to that of relations (2.37a) and (2.37b) for the mass production process:
[εS w ρc w + (1 − ε) ρ s c s ] ∂U
∂t
[
+ εS w ρc w v ⋅ ∇U − ∇ ⋅ {ρc w εS w (σ w I + D ) + (1 − ε ) σ s I ⋅ ∇U} ] (2.52)
= Q p c w (U ∗ − U ) + εS w ρ γ 1w U + (1 − ε ) ρ s γ 1s U s + εS w ρ γ ow + (1 − ε ) ρ s γ so
where:
The fluid-mass-conservative form of the unified energy-species mass balance, (2.52), is exactly
that which is implemented in SUTRA.
49
Chapter 3: Fundamentals of Numerical Algorithms
SUTRA methodology is complex because: (1) density-dependent flow and transport requires two
interconnected simulation models, (2) fluid properties are dependent on local values of
temperature or concentration, (3) geometry of a field area and distributions of hydrogeologic
parameters may be complex, and (4) hydrologic stresses on the system may be distributed in
space and change with time. Furthermore, a tremendous amount of data must be evaluated by
SUTRA with precision. This requires great computational effort, and considerable numerical
intricacy is required to minimize this effort. The mathematically elegant finite-element and
integrated-finite-difference hybrid method employed by SUTRA allows great numerical
flexibility in describing processes and characteristics of flow and transport in hydrologic field
systems. However, unlike simulation models based purely on the method of finite differences,
the numerical aspects of which allow straightforward interpretation at an intuitive level, some
finite-element aspects of SUTRA methodology require interpretation at a less physical level and
from a more mathematical point of view.
The water-table aquifer fluid mass balance equation is useful for demonstration of basic
numerical methods employed on SUTRA governing equations, because it displays some of the
salient aspects of the SUTRA equations: a time derivative, a nonlinear term involving space-
derivatives, and a source term. The simplified fluid mass balance equation is as follows:
∂h
So − ∇ ⋅ (K ∇h ) = Q ∗ (3.1)
∂t
where Q* = (Qp/ρ)
and
51
Q*(x,y) [s–1] volumetric fluid source (volume fluid injected
per time / volume aquifer) (assumed constant
for this example)
Qp(x,y) [M/(L3 s)] fluid mass source (mass fluid injected per
time / volume aquifer) (assumed constant for
this example)
This equation, (3.1), is obtained from the SUTRA fluid mass balance, (2.24), by assuming
saturated conditions, constant concentration and temperature, constant fluid density, and using
the definition of hydraulic conductivity, K ≡ (kρ g )/μ, where g is the acceleration of gravity,
and of hydraulic head, h ≡ hp + ELEVATION, where pressure head, hp ≡ p/(ρ g ). For clarity,
hydraulic conductivity is assumed isotropic in this example. While (3.1) may be considered a
fully 3D mass balance equation, it is assumed that flow takes place only areally in a water-table
aquifer with a fixed impermeable base (at z-position, BASE(x,y)), and a moveable free surface
(at z-position, h(x,y,t)). The z-direction is oriented vertically upward and the fluid is assumed to
be in vertical hydrostatic equilibrium at any (x,y) position (no vertical flow). Aquifer thickness,
B(x,y,t) [L], is measured as the distance along z from the free surface to the aquifer base, and
may change with time. Aquifer transmissivity, T(x,y,t), is given by:
T ≡ KB ≡ K (h − BASE ) (3.2)
The above assumption, in effect, makes (3.1) a 2D mass balance equation that is applied to an
aquifer of finite thickness. The 2D form of (3.1) describing an areal fluid mass balance for water-
table aquifers in terms of a head-dependent transmissivity arises during the basic numerical
analysis of (3.1) in section 3.3, “Integration of Governing Equation in Space.”
52
node
(a)
(b)
Figures 3.1a,b. (a) Two-dimensional finite-element mesh and quadrilateral element. (b) Three-
dimensional vertically-aligned finite-element mesh (with a regular pattern of elements) and vertically-
aligned generalized hexahedral element. In the lower figure, the z-direction is vertical and element
edges in the vertical direction are aligned with the z-coordinate direction. External and internal
surfaces of the mesh need not be planar.
53
node
3D element
(c)
(d)
Figures 3.1c,d. (c) Three-dimensional non-aligned finite-element mesh (with a regular pattern of
elements) and non-aligned generalized hexahedral element. In general, the z-direction need not be
vertical or aligned with the mesh, and the element edges need not be aligned with any coordinate
direction. External and internal surfaces of the mesh need not be planar. (d) Three-dimensional
vertically-aligned finite-element mesh (with an irregular pattern of elements in the two “horizontal”
numbering directions).
blocks, which may or may not be organized in layers. The blocks are called “finite elements.”
The subdivision is not done simply in a manner that creates one block (element) for each portion
of the aquifer system that has unique hydrogeological characteristics. Each hydrogeologic unit is
in fact divided into many elements, giving the subdivided aquifer region the appearance of a fine
mesh. Thus, subdivision of the aquifer region to be simulated into blocks is referred to as
“creating the finite-element mesh.”
The basic building block of a finite-element mesh is a finite element. The type of element
employed by SUTRA for 2D simulation is a quadrilateral that has a finite thickness in the third
54
space dimension. This type of a quadrilateral element and a typical 2D mesh are shown in Figure
3.1a.
All twelve edges of the 2D quadrilateral element are perfectly straight. Four of these edges are
parallel to the z-coordinate direction. The x-y plane (which contains the two coordinate
directions of interest) bisects each of the edges parallel to z, so that the top and bottom surfaces
of the element are mirror images of each other reflected about the central x-y plane in the
element. The midpoint of each z-edge (the point where the x-y plane intersects) is referred to as a
nodal point (or node). Thus, the element has a 3D shape, but always has only four nodes, each of
which in fact, represents the entire z-edge on which it is located. The nodes mark the fact that, in
this type of element, some aquifer parameters may be assigned a different value at each z-edge of
the element. The lack of nodes outside of the x-y plane is what makes this element 2D; while
some aquifer parameters may vary in value from node to node (i.e., from z-edge to z-edge), no
parameters may be assigned varying values in the z-direction.
Within a 2D finite-element mesh there is only a single layer of elements, the nodes of which lie
in the x-y plane. Nodal points are always shared by the elements adjoining the node. Only nodes
at external corners of the mesh are not contained in more than one element. The top and bottom
surfaces are at every (x,y) point equidistant from the x-y plane, but the thickness of the mesh,
measured in the z-direction, may vary smoothly from point to point.
When projected on the x-y plane, as in Figure 3.1a, a 2D finite-element mesh composed of the
type of elements used by SUTRA appears as a mesh of contiguous quadrilaterals with nodes at
the corners; hence, the term, “quadrilateral element”. Although the mesh in Figure 3.1a is
regularly connected (four elements attached to each internal node), 2D meshes may have
irregular connections; in other words, any number of elements may be connected to a given
node.
The type of element employed by SUTRA for 3D simulation is a generalized hexahedron. This
type of hexahedral element and a typical 3D meshes are shown in Figures 3.1b-d.
All twelve edges of the 3D generalized hexahedral element are perfectly straight, although the
six faces of the element need not be planar. The 3D SUTRA element differs from the 2D element
in that none of the edges of the 3D element need be parallel to the z-coordinate direction, and the
geometry of the 3D element is defined by eight (instead of four) nodes, each of which represents
the intersection of three edges (i.e., a corner of the element).
55
logically rectangular and non-aligned in the vertical direction. The 3D SUTRA mesh illustrated
in Figure 3.1d is not logically rectangular. Rather, it is what is referred to in input dataset 2B as
“layered” – see Appendix B.
Aquifer parameters and coefficients that vary from point to point in an aquifer, such as specific
storativity, So, and hydraulic conductivity, K, are represented in an approximate way in SUTRA.
Parameters are either assigned a particular constant value in each element of a finite-element
mesh (elementwise), or are assigned a particular value at each node in the mesh in two possible
ways (nodewise or cellwise). Descriptions of elementwise, nodewise, and cellwise discretization
are given for the 2D example that follows, based on (3.1). The discretization procedures in 3D
are analogous to those in 2D.
In the water-table aquifer, for a simple example, a regular 2D mesh is used. The step-like
appearance of elementwise assignment of K values over this simple mesh is shown in Figure 3.2.
Nodewise assignment for head over this mesh results in a continuous surface of h values as
shown in Figure 3.3, with linear change in value between adjoining nodes along (projected)
element edges. Cellwise assignment is employed for specific storativity, So, and the time
derivative, ∂h/∂t. This results in a step-like appearance of the assigned values over the mesh
similar to that of elementwise assignment in Figure 3.2, but each cell is centered on a node, not
on an element. Cell boundaries are half way between opposite sides of an element and are shown
for the regular mesh in Figure 3.4. Thus the spatial distributions of parameters, K, h and So, are
discretized (i.e., assigned discrete values) in three different ways: K, elementwise, h, nodewise,
and So, cellwise.
56
Figure 3.3. Nodewise discretization of coefficient h(x,y).
Figure 3.4. Cells, elements and nodes for a two-dimensional finite-element mesh composed of
quadrilateral elements. Dashed lines connect the midpoints along the element sides.
Because the internal program logic depends on the type of discretization, SUTRA expects
particular parameters or equation terms to be discretized elementwise, nodewise, or cellwise. The
primary dependent variables of the SUTRA code, p, and T or C, (in this example case, only
hydraulic head, h), are expressed nodewise when used in terms that calculate fluxes of fluid
mass, solute mass or energy.
57
Elementwise discretization
The equation that gives the values, over the finite element mesh, of an elementwise parameter,
may be expressed for the hydraulic conductivity of the present 2D example as:
NE
K (x, y ) ≈ ∑ K L (x, y ) (3.3)
L =1
where the elements have been numbered from one to NE (total number of elements in the mesh),
and KL(x,y) [L/s] has the value of hydraulic conductivity of element L for (x,y) coordinates
within the element, and a value of zero outside the element. Thus KL(x,y) is the flat-topped
“box” standing on an element L, in Figure 3.2, and K(x,y) is represented in a discrete
approximate way by the sum of all the “boxes”. Note that KL(x,y) has the same value throughout
each 2D element from the top to the bottom.
Nodewise discretization
The equation that gives the values, over the finite-element mesh, of a nodewise value, may be
expressed for the 2D mesh as:
NN
h (x, y, t ) ≈ ∑ h j (t ) φ j (x, y ) (3.4)
j=1
where the nodes have been numbered from one to NN (total number of nodes in the mesh). There
are NN coefficients, hj(t), each of which is assigned the value of head at the coordinates (xj,yj) of
node number j. These nodal head values may change with time to represent transient responses
of the system. The function φj(x,y) is known as the “basis function”. It is the basis functions that
spread values of head between the nodes when head is defined only at the nodal points by values
of h. There is one basis function φj(x,y) defined for each node, j, of the NN nodes in the mesh.
Suffice it to say, at this point, that at the node j, to which it belongs, the basis function φj(x,y) has
a value of one. At all other nodes i, i ≠ j, in the mesh, it has a value of zero. It drops linearly in
value from one to zero along each projected element edge to which the node j is connected. This
means that even when all the NN products of hj and φj(x,y) are summed (as in relation (3.4)), if
the sum is evaluated at the coordinates (xj,yj) of node j, then h(x,y) exactly takes on the assigned
value, hj. This is because the basis function belonging to node j has a value of one at node j, and
all other basis functions belonging to other nodes, i, i ≠ j, have a value zero at node j, thereby
dropping them from the summation in (3.4). Basis functions are described mathematically in
section 4.1, “Basis and Weighting Functions.”
Cellwise discretization
The equation that gives the values, over the finite-element mesh, of a cellwise parameter may be
expressed for the specific storativity of the present 2D example as:
NN
S o (x, y ) ≈ ∑ S i (x, y ) (3.5)
i =1
58
where Si(x,y) has the value of specific storativity of the cell centered on node i for (x,y)
coordinates within the cell, and a value of zero outside the cell. Thus, Si(x,y) is a flat-topped
“box” standing on a cell i in Figure 3.4, and So(x,y) is represented in a discrete, approximate way
by the sum of all the “boxes.” Note Si(x,y) has the same value in the z-direction from the top to
bottom of each 2D element.
Reviewing the example problem, K is assigned elementwise and both So and ∂h/∂t are assigned
cellwise. Hydraulic head, h(x,y,t), and element thickness, B(x,y,t), measured in the z-direction,
are both discretized nodewise, with the nodewise expansion for thickness:
NN
B(x, y ) ≈ ∑ B i (t ) φ i (x, y ) (3.6)
i =1
The values Bi(t) are the NN particular values of element thickness at the nodes, and these values
may change with time in the present water-table example. Relation (3.6) should call to mind a
vision of discretized values of thickness represented by a surface similar to that of Figure 3.3.
The head surface of Figure 3.3 may stretch or shrink to move up or down as the head values at
nodes, hi(t), change with time due to stresses on the aquifer system. The nodewise discretized
surface may be viewed as the water table, and the element thickness, at any point (x,y), as the
thickness of the water-table aquifer.
The governing equation for the water-table example may be written in operator form as:
∂h
O(h ) = S o − ∇ ⋅ (K∇h ) − Q ∗ = 0 (3.7)
∂t
Certain variables in this equation are approximated through elementwise and nodewise
discretization. Particular terms of the equation are approximated through cellwise discretization.
The result is that neither the derivatives, nor the variables are described exactly. Relation (3.7) no
longer exactly equals zero:
where O(h ) is the result of approximating the terms of the equation and the variables, and
R(x,y,t) is the residual value of the approximated equation. When simulating a system with a
numerical model based on approximation of the governing equation, O(h ) , the residual, R,
must be kept small everywhere in the simulated region and for the entire time of simulation in
order to accurately reproduce the physical behavior predicted by the exact governing equation,
(3.7).
59
In order to achieve a minimum error, a method of weighted residuals is applied to (3.8). The
purpose of the method of weighted residuals is to minimize the error of approximation in
particular subregions of the spatial domain to be simulated. This is done by forcing a weighted
average of the residual to be zero over the subregions. This idea is the most abstract of those
required to understand SUTRA methodology. The Galerkin method of weighted residuals
chooses to use the “basis function”, φi(x,y), mentioned in the previous section, as the weighting
function for calculation of the average residual:
where V is the volume of the region to be modeled. The model volume is completely filled by a
single layer of quadrilateral finite elements. Relation (3.9) is actually NN relations, one for each
of NN nodes in the finite element mesh as indicated by the notation, i = 1, NN .
In each relation, the integral sums the residual weighted by the basis function over a volume of
space. Each integrated weighted residual is forced to zero over the region of space in which
φi(x,y) is nonzero. This region includes only elements which contain node i, because of the
manner in which the basis function is defined, as described earlier. Thus, over each of these NN
subregions of a mesh, the sum of positive and negative residuals after weighting is forced to zero
by relation (3.9). This, in effect, minimizes the average error in approximating the governing
equation over each subregion.
After stating that the integral of weighted residuals must be zero for each subregion of the mesh
as in (3.9), the derivation of the numerical methods becomes primarily a job of algebraic
manipulation. The process is begun by substitution of the governing equation for O(h ) in
(3.9):
∂h
∫ So φ i (x, y ) dV − ∫ ∇ ⋅ (K∇h ) φ i (x, y ) dV − ∫ Q ∗ φ i (x, y ) dV = 0
V
∂t V V (3.10)
i = 1, NN
The terms in double angle brackets are the approximate discrete forms of the respective terms in
(3.7). These are expanded in the manipulations that follow. Relation (3.10) is discussed term by
term in the following paragraphs.
The first term involving the volume integral of the time derivative may be written in terms of the
three space dimensions, x, y, and z. Although the governing equation and parameters vary only
in two space dimensions, they apply to the complete 3D region to be modeled.
60
∂h ∂h
∫ So φ i (x, y ) dV = ∫ ∫ ∫ So φ i (x , y ) dz dy dx
V
∂t z y x
∂t
(3.11)
∂h ⎡ ⎤
=∫∫ So φ i (x, y ) ⎢ ∫ dz ⎥ dx dy
y x
∂t ⎣z ⎦
The rearrangement in the final term of (3.11) is possible because no parameter depends on z. In
fact, referring to (3.2), the aquifer thickness, B(x,y,t), may be defined as:
∂h
∫∫ So φ i (x , y ) B(x , y, t ) dx dy (3.13)
y x
∂t
Now cellwise discretization is chosen for So and for ∂h/∂t, making these terms take on a constant
value for the region of each cell i. The region of cell i is the same region over which Si(x,y) is
non-zero. Then, for any cell i, term (3.13) becomes:
∂h i
Si
∂t ∫ ∫ φ (x, y ) B(x, y, t ) dx dy
y x
i (3.14)
where Si and ∂hi/∂t are the values taken by So and ∂h/∂t in cell i.
It can be shown that the volume of cell i, denoted by Vi(t), is, in fact, the integral in (3.14):
For a particular finite-element mesh, the volume Vi(t) of each cell is determined by numerical
integration of (3.15). Numerical integration by Gaussian quadrature is discussed in section 4.3,
“Gaussian Integration.”
Given the value of the specific storativity of each cell, Si, the time derivative of head in each cell,
∂hi/∂t, and given the volume of each cell, Vi(t), determined numerically, the first term of the
weighted residual statement takes on its discrete approximation in space:
∂h ∂h i
∫ So φ i (x, y ) dV = S i Vi (t ) (3.16)
V
∂t ∂t
61
Elementwise integration of flux term and origin of boundary fluxes
Manipulation of the second integral in (3.10) begins with the application of Green’s theorem,
which is an expanded form of the divergence theorem. This converts the integral into two terms,
one of which is evaluated only at the surface of the region to be simulated. Green’s theorem is:
∫ (∇ ⋅ W ) A dV = ∫ (W ⋅ n ) A dΓ − ∫ (W ⋅ ∇A ) dV
V Γ V
(3.17)
[
− ∫ ∇ ⋅ K ∇h ] φ (x, y ) dV = − ∫ [
i ]
K ∇h ⋅ n φ i dΓ
V Γ
(3.18)
+ ∫ K ∇h ⋅ ∇φ i dV
V
The first term on the right of (3.18) contains a fluid flux given by Darcy’s law:
ε v OUT = − K ∇h ⋅ n (3.19)
where v OUT is the outward velocity at the boundary normal to the bounding surface. Thus, the
integral gives the total flow out across the bounding surface, Q OUTi , in the vicinity of a node i on
the surface:
An inflow would have a negative value of Q OUTi , and the relation between an inflow, Q IN i , and
outflow is: Q IN i = -Q OUTi . Thus, the first integral on the right of (3.18) represents flows across
boundaries of the water-table aquifer model.
The second integral on the right of (3.18) may be expressed in three spatial coordinates:
∫
V
K ∇h ⋅ ∇φ i dV = ∫ ∫ ∫ K ∇h ⋅ ∇φ i dz dy dx
x y z
(3.21)
⎡ ⎤
=∫∫ K ∇h ⋅ ∇φ i ⎢ ∫ dz ⎥ dy dx = ∫ ∫ K ∇h ⋅ ∇φ i B(x, y, t ) dy dx
x y ⎣z ⎦ x y
No term varies in the z-direction, allowing the use of (3.12), which defines aquifer thickness B.
Notice that the transmissivity as given by (3.2), T = KB, appears in the form of the integral just
obtained.
62
Now the approximation K ∇h is specified in the integral. Hydraulic head, h(x,y,t), is
approximated in a nodewise manner as given by relation (3.4). The integral of (3.21) becomes:
⎡ NN
⎤
∫∫ K ∇h ⋅ ∇φi B dy dx = ∫ ∫ ⎢ K ∇∑ h j (t ) φ j (x, y )⎥ ⋅ ∇φi B dy dx
x y x y ⎣ j=1 ⎦
(3.22)
= ∑ h j (t ) ∫ ∫ K (∇φ j ⋅ ∇φi ) B dy dx = ∑ h j (t ) I ij (t )
NN NN
j=1 x y j=1
where K is the elementwise approximation for K(x,y). The summation and hj(t) may be
factored out of the integral because hj is a value of head at a node and does not vary with x and y
location. The integral is represented by Iij(t) and depends on time because aquifer thickness, B, is
time-dependent for this water-table case. For each node i, there are apparently j=NN integrals
which need to be evaluated. In fact, due to the way in which basis functions are defined, there are
only a few which are nonzero, because (∇φj ∇φi) is nonzero only when nodes i and j are in the
same finite element. When nodes i and j are in different elements, then ∇φj is zero in the element
containing node i.
The integrals are evaluated numerically by Gaussian integration. This is accomplished by first
breaking up the integral over the whole volume to be simulated, into a sum of integrals, one each
over every finite element in the mesh:
There are NE elements in the mesh, L is the element number, and xL and yL are the x and y
spatial domains of element L. Thus, for a given L, the integral over xL and yL is integrated only
over the area of element L.
Now, the discrete elementwise approximation for hydraulic conductivity, as given by (3.3),
allows one term for element L in the summation of (3.23) to be written as:
KL ∫ ∫ (∇φ
x L yL
j ⋅ ∇φ i ) B dy dx (3.24)
Here, the thickness B is specified to vary nodewise. The formula for B in this example is
obtained by substituting the nodewise expression for head, (3.4), into the definition of B, relation
(3.2).
The integral over one element, as given by term (3.24), must be evaluated numerically. In order
to do this, the coordinates of the element L, which has an arbitrary quadrilateral shape as
suggested in Figure 3.1a, is transformed to a new coordinate system in which the element is a
two-by-two square. Then, Gaussian integration is carried out to evaluate the integral. For a given
combination of nodes i and j, this transformation and numerical integration is carried out for all
elements in the mesh in which both nodes i and j appear. (There are 16 i-j combinations
63
evaluated in each quadrilateral element.) The elementwise pieces of the integral for each i-j
combination are then summed according to (3.23) in order to obtain the value of the integral over
the whole region. The summation is called the “assembly” process. This element transformation,
integration of the 16 integrals arising in each element, and summation, makes up a large part of
the computational effort of a finite-element model and requires the most complex algorithm in a
finite-element model. It is in this way that the second term of (3.10) is evaluated. More
information on finite-element integration and assembly may be found in numerical methods texts
such as Wang and Anderson (1982), Pinder and Gray (1977), or Huyakorn and Pinder (1983).
The details of this method as applied in SUTRA are given in Chapter 4, “Numerical Methods.”
The last term of equation (3.10) deals with sources of fluid to the aquifer such as injection wells.
The volume integral may, as before, be written in x, y, and z coordinates:
− ∫ Q ∗ (x, y ) φ i (x, y ) dV = − ∫ ∫ ∫ Q ∗ φ i dz dy dx
V x y z
(3.25)
= − ∫ ∫ Q ∗ φ i B(x, y, t ) dy dx
x y
where thickness B is introduced because Q* and φi do not vary with z. It is assumed that all fluid
entering the aquifer within the region of cell i, which surrounds node i, enters at node i. If Q*i
3 –1
[L /s] is defined as the volume of fluid entering cell i per unit time, then Q* [s ], which is the
volume of fluid entering the aquifer per unit volume of aquifer per unit time, is given as:
NN
⎛ Q *i ⎞
Q (x , y ) = ∑ ⎜⎜
∗
⎟⎟ (3.26)
i =1 ⎝ Vi ⎠
This is a cellwise discretization for the source term, Q*. For cell i:
⎛ Q *i ⎞
− ∫ ∫ Q φ i B dy dx = −⎜⎜
∗
⎟⎟ ∫ ∫ φ i B dy dx = −Q *i (3.27)
x y ⎝ Vi ⎠ x y
Thus, all recharges within cell i due to areal infiltration, well injection or other types are
allocated to the source at node i.
This completes the spatial integration of the governing equation for the example problem.
64
3.4 Time Discretization of Governing Equation
When the integrated terms of the governing equation are substituted in (3.10), the following
results:
dh i NN
S i Vi (t ) + ∑ I ij (t ) h j (t ) = Q IN i + Q ∗i i = 1, NN (3.28)
dt j=1
All the parameters in (3.28) are no longer functions of the space coordinates. Each parameter
takes on a particular value at each node in the mesh. Some of these values vary with time and a
particular time for evaluation of these values needs to be specified. In addition, the time
derivative requires discretization.
Time steps
Time is broken up into a series of discrete steps, or time steps. The length of a time step, Δt, is
the difference in time between the beginning and the end of a time step:
Δt n +1 = t n +1 − t n (3.29)
where Δtn+1 is the length of the (n+1)th time step, tn is the actual time at the beginning of the
(n+1)th time step and tn+1 is the actual time at the end of this time step. The time steps are chosen
to discretize the time domain before a simulation just as a mesh (or “spatial steps”) is chosen to
discretize space. The time step length may vary from step to step.
The entire spatially integrated governing equation, (3.28), is evaluated at the end of each time
step, t = tn+l. The time derivative of head in (2.28) is approximated, using a finite-difference
approximation, as the change in head over a time step, divided by the time step length:
dh i h i (t n + Δt n +1 ) − h i (t n )
= (3.30)
dt Δt n +1
In order to simplify the notation, the head at the end of the time step, hi(tn + Δtn+1) is denoted
h in +1 , and the head at the beginning of the time step hi(tn) is denoted h in . Thus,
dh i h in +1 − h in
= (3.31)
dt Δt n +1
The parameters that depend on time in (3.28), vi(t) and Iij(t), are also evaluated at the time, tn+1, at
the end of a time step:
65
h j (t ) t n +1
= h nj +1 (3.32a)
Vi (t ) t n +1
= Vin +1 (3.32b)
I ij (t ) t n +1
= I ijn +1 (3.32c)
The sources, Q IN i and Qi*, are assumed constant in time for the present example.
Resolution of nonlinearities
The variability in time of cell volume, Vi, and the integral, Iij, depends on the changing thickness
of the aquifer with time, B(x,y,t). The aquifer thickness at node i at the end of a time step, Bin+1,
is not known until the head at the end of the time step is known, giving the water-table elevation.
This typifies a nonlinear problem wherein the problem requires values of coefficients in order to
be solved, but the values of these coefficients depend on the solution to be obtained. This circular
problem is avoided in this example by using estimates of the coefficient values in the solution.
An estimate of the head at the end of the next time step is obtained by a linear projection:
⎛ Δt ⎞
h iproj = h in + ⎜⎜ n +1 ⎟⎟ (h in − h in −1 ) (3.33)
⎝ Δt n ⎠
where h iproj is the projected or estimated head at the end of the as-yet-unsolved time step, which
would have an exact value, h in +1 . Actually, in addition to projection, SUTRA also employs a
simple iterative process to resolve nonlinearities. This is described in sections 4.4 and 4.5 under
the subheading “Temporal discretization and iteration.”
where B in +1 is the value of thickness needed to evaluate Vin +1 and I ijn +1 , B iproj is the estimated
value of B in +1 , and BASEi is the value of BASE(x,y) at node i.
Now the spatially integrated equation, (3.28), may be written discretely in time:
⎛ h n +1 − h in ⎞ NN n +1 n +1
S i Vin +1 ⎜⎜ i ⎟⎟ + ∑ I ij h j = Q IN i + Q ∗i i = 1, NN (3.35)
⎝ Δt n +1 ⎠ j=1
where Vin +1 and I ijn +1 are evaluated based on projected thickness, B iproj .
66
3.5 Boundary Conditions and Solution of Discretized Equation
The NN relations given by (3.35) may be rearranged and rewritten in matrix form:
⎡S1V1n+1 0 0 L 0⎤ ⎧h1n+1 ⎫
⎢ ⎥⎪ ⎪
⎢0 S2 V2n+1 0 L 0 ⎥ ⎪h 2n+1 ⎪
⎛ 1 ⎞⎢ ⎪ ⎪
⎜⎜ ⎟⎟ 0 0 S3 V3n+1 0 ⎥ ⎨h 3n+1 ⎬
⎝ Δt n+1 ⎠ ⎢⎢M ⎥
M MO M ⎥⎪ M ⎪
⎪ ⎪
⎢ n +1 ⎥
⎥⎦ ⎩ NN ⎪⎭
⎪ n +1
⎢⎣0 0 0 L SNN VNN h
n +1 n +1 n +1 n +1
⎡I11 I12 I13 I14 . . . . I1n,+NN
1
⎤⎧h1n+1 ⎫
⎢ n+1 n +1 n +1
⎥⎪ n+1 ⎪
⎢I 21 I 22 I 23 . . . . . . ⎥⎪h 2 ⎪
⎢I n+1 n +1
I 32 n +1
I 33 . . . . . . ⎥⎪ n+1 ⎪
+⎢ 31 ⎥⎪⎨h 3 ⎪⎬
⎢I 41
n +1
. . . . . . . . ⎥⎪. ⎪
⎢ ⎥⎪ ⎪
⎢M M M M M M M M M ⎥⎪M ⎪
⎢I n+1 . . . . . . . +1
I nNN ⎥⎪h n+1 ⎪
⎣ NN,1 , NN ⎦⎩ NN ⎭
By adding the two matrices on the left side, and the vectors on the right side, a matrix equation is
obtained which may be solved for the model heads at the new time level, tn+1, on each time step:
67
⎡⎛ S1V1n+1 n+1 ⎞ n +1 n +1
⎤ ⎧h1n+1 ⎫
⎢⎜⎜ + I11 ⎟⎟ I12 I13 . . . . . I1n,+NN
1
⎥ ⎪ n+1 ⎪
⎢⎝ Δtn+1 ⎠ ⎥ ⎪h2 ⎪
⎢ ⎛ S2V2n+1 n+1 ⎞ ⎥ ⎪ n+1 ⎪
⎢I21
n +1
⎜⎜ + I22 ⎟⎟ n +1
I23 . . . . . M ⎥ ⎪h3 ⎪
⎢ ⎝ Δtn+1 ⎠ ⎥ ⎪M ⎪
⎢ n+1 n +1 ⎥⎪ ⎪
⎢I31 I32 O M ⎥ ⎨M ⎬
⎢M M O M ⎥⎪ ⎪
⎢ ⎥⎪ ⎪
⎢ n+1 ⎛ SNNVNN
n +1
⎞⎥ ⎪M ⎪
⎢INN,1 . . . . . . . O ⎜⎜ + INN,NN ⎟⎟⎥ ⎪ ⎪
n +1
⎢ ⎝ Δtn+1 ⎠⎥ ⎪M ⎪
⎢ ⎥ ⎪hnNN
+1
⎪
⎣ ⎦ ⎩ ⎭
⎧S1V1n+1h1n ⎫
⎪ t + QIN1 + Q1∗ ⎪
⎪ Δ n+1 ⎪
⎪S2V2n+1h2n ∗
⎪
⎪ + QIN2 + Q2 ⎪
⎪ Δtn+1 ⎪
⎪ ⎪
=⎨ M ⎬
⎪ M ⎪
⎪ ⎪
∗ ⎪
n +1 n
⎪SNNVNN hNN
⎪ Δt + QIN + QNN⎪
NN
⎪ n +1 ⎪
⎪⎩ ⎪⎭
(3.37)
The solution progresses through time as follows: On a given time step, the nodal heads at the
beginning of the step are known values and are placed in h nj in the right-hand-side vector of
(3.37). The thickness-dependent values are determined based on the projection of B in (3.34)
using the projected head of (3.33). The integrals and volumes are evaluated and the matrix and
vector completed. The linear system of equations (3.37) is solved for the nodal heads at the end
of the current time step using (banded) Gaussian elimination or an iterative sparse matrix
equation solver. The new heads are then placed on the right side of (3.37) into h nj , and a new
time step is begun.
Before solving the matrix equation as described above, information about boundary conditions
must be included. In the case of solving for heads, the boundary conditions take the form of
either specified fluid fluxes across boundaries which are directly entered in the terms, Q IN i , or of
particular head values specified at nodal locations. At a point of fixed head in an aquifer, a
particular value of fluid inflow or outflow occurs at that point in order to keep the head constant
when the aquifer is stressed. This is the flux of fluid that is added to the model aquifer in order to
obtain fixed heads at nodes.
68
In order to illustrate how specified heads are implemented in SUTRA, consider the closed
system of Figure 3.5 in which head at node i, hi, is to have a specified value, hBC, for all time. A
well is removing water from the system at an internal node. A core of porous medium with
conductance ν is connected to node i. The head outside the core is held at the specified value,
hBC. The head at node i, hi, is calculated by the model. Under steady-state conditions, a flow of
Q BC i [L3/s] enters through the core at node i in order to balance the rate of fluid removal at the
well. The resulting head at node i depends on the conductance value ν of the core. If ν is very
small, then a large head drop is required across the core in order to supply fluid at the rate the
pumping well requires. This results in hi having quite a different value from hBC. If, however, ν
is very large, then the value of head at node i is very close to hBC, as only a tiny head drop across
the core supplies the fluid required by the well. Therefore, when the required flux is applied to a
node through a highly conductive core, the outside of which is held at a specified head value, the
node responds with a head value nearly equal to that specified. An advantage of specifying head
this way is that when head at a node in the mesh is fixed, a calculation of the flux entering the
mesh at this node is obtained at the same time:
(
Q BCi = ν h BCi − h 1n +1 ) (3.38)
where Q BCi is the inflow at node i resulting from the specified head boundary condition, ν is the
conductance of the “core,” and h BCi is the specified value of head at node i on the boundary.
Figure 3.5. Schematic representation of specified head (or pressure) boundary condition. Specified
concentration boundary conditions are implemented using an analogous construction.
69
The matrix equation (3.37) may be written in short form as:
NN
⎛ S i Vin +1 ⎞ n
∑ M n +1
ij h n +1
j = ⎜⎜ ⎟⎟ h i + Q ∗i + Q IN i + Q BCi i = 1, NN (3.39)
j=1 ⎝ Δt n +1 ⎠
wherein an additional flux Q BC i has been added only to the equations that represent the specified
head nodes. At such a node, say node A, the equation is:
⎛ S V n +1 ⎞
( )
NN
∑ h j = ⎜⎜ A A ⎟⎟ h nA + Q∗A + Q IN A + ν h BC A − h nA+1
n +1 n +1
M Aj (3.40)
j =1 ⎝ Δt n +1 ⎠
If ν is very large, then the last term dominates the equation and (3.40) becomes:
h nA+1 ≅ h BC A (3.41)
Thus, the specified head is set at node A, but as h nA+1 and h BC A are slightly different, a flux may
be determined from (3.38).
70
DETAILS OF SUTRA
METHODOLOGY
71
Chapter 4: Numerical Methods
In this section, the numerical methods upon which SUTRA is based are presented in detail. The
purpose of this presentation is to provide a complete reference for the computer code.
Basis functions, weighting functions and their derivatives are all described in local element
geometry. In a 2D local coordinate system, every element takes the shape of a two-by-two
square. The 2D local coordinates, ξ and η, are shown along with a generic local 2D finite
element in Figure 4.1a. The origin of the local coordinate system is at the center of the element.
Local node 1 always has local coordinates (ξ, η) = (–1, –1). The other nodes are numbered
counterclockwise from the first node as shown in Figure 4.1a.
(a) (b)
Figure 4.1. (a) Quadrilateral 2D finite element in local coordinate system (ξ, η). (b) Hexahedral 3D
finite element in local coordinate system (ξ, η, ζ). The ζ-axis points directly out of the page.
73
The following one-dimensional (1D) basis functions are defined over the region of the 2D
element:
Ξ − (ξ ) = 1
2
(1 − ξ ) (4.1)
Ξ + (ξ ) = 1
2
(1 + ξ ) (4.2)
Η − (η) = 1
2
(1 − η) (4.3)
Η + (η) = 1
2
(1 + η) (4.4)
These linear one-dimensional basis functions are continuous in ξ and η and range between zero
and one as ξ and η range between +1 to –1. The one-dimensional functions are combined to
create the bilinear basis functions used in 2D SUTRA simulations:
Ω 1 (ξ, η) = Ξ − Η − (4.5)
Ω 2 (ξ, η) = Ξ + Η − (4.6)
Ω 3 (ξ, η) = Ξ + Η + (4.7)
Ω 4 (ξ, η) = Ξ − Η + (4.8)
The 2D bilinear basis functions, when defined in the local element coordinate system, are
denoted as Ωi(ξ, η), i=1,2,3,4. There is one basis function defined for each node.
The basis function Ωi, defined for node i, has a value of one at the node and a value of zero at the
other nodes. The surface representing Ωi(ξ, η) over an element is curved due to the product of
ξ and η in equations (4.5) through (4.8). A trajectory in the surface parallel to an element side,
however, is a perfectly straight line as shown in Figure 4.2. This is borne out in the derivatives of
the bilinear basis functions, which depend on only one space coordinate:
∂Ω 1 ∂Ω 1
= − 12 H − = − 12 Ξ − (4.9)
∂ξ ∂η
∂Ω 2 ∂Ω 2
= + 12 H − = − 12 Ξ + (4.10)
∂ξ ∂η
∂Ω 3 ∂Ω 3
= + 12 H + = + 12 Ξ + (4.11)
∂ξ ∂η
∂Ω 4 ∂Ω 4
= − 12 H + = + 12 Ξ − (4.12)
∂ξ ∂η
74
Figure 4.2. Perspectives of the 2D basis function Ωi(ξ, η) at node i.
Asymmetric weighting functions are defined for use in a Galerkin-Petrov method (one version of
which is described in Huyakorn and Pinder, 1983). These are not applied for nodewise
discretization of parameters, but rather for weighting in the volume integrals of the governing
equation. They may be used to give an “upstream weighting” to the advective flux term in the
transport equations or to provide “upstream weighting” to the fluid flux term in the fluid mass
balance when the medium is unsaturated. In 2D, the asymmetric functions are defined as follows:
75
θ1 (ξ, η) = ( Ξ − − Ξ ∗ ) (Η − − Η ∗ ) (4.13)
θ 2 (ξ, η) = ( Ξ + + Ξ ∗ ) (Η − − Η ∗ ) (4.14)
θ 3 (ξ, η) = ( Ξ + + Ξ ∗ ) (Η + + Η ∗ ) (4.15)
θ 4 (ξ, η) = ( Ξ − − Ξ ∗ ) (Η + + Η ∗ ) (4.16)
where:
Ξ ∗ = 3a ξ Ξ − Ξ + (4.17)
Η ∗ = 3a η Η − Η + (4.18)
∂θ1 ∂θ1
= − 12 ( 1 − 3a ξ ξ ) (Η − − Η ∗ ) = − 12 (1 − 3a η η) (Ξ − − Ξ ∗ ) (4.19)
∂ξ ∂η
∂θ 2 ∂θ 2
= + 12 ( 1 − 3a ξ ξ )(Η − − Η ∗ ) = − 12 (1 − 3a η η)(Ξ + + Ξ ∗ ) (4.20)
∂ξ ∂η
∂θ 3 ∂θ 3
= + 12 ( 1 − 3a ξ ξ )(Η + + Η ∗ ) = + 12 (1 − 3a η η)(Ξ + + Ξ ∗ ) (4.21)
∂ξ ∂η
∂θ 4 ∂θ 4
= − 12 ( 1 − 3a ξ ξ )(Η + + Η ∗ ) = + 12 (1 − 3a η η)(Ξ − − Ξ ∗ ) (4.22)
∂ξ ∂η
The parameters aξ and aη determine the amount of asymmetry (or upstream weight) in each
coordinate direction. When these parameters have a value of zero, then (4.13) through (4.22)
reduce to the symmetric 2D basis functions and their derivatives, (4.5) through (4.12). The
values of aξ and aη depend on location in the element:
⎛ vξ ⎞
a ξ (ξ, η) = (UP ) ⎜⎜ ⎟
⎟ (4.23)
⎝ v local ⎠
⎛ vη ⎞
a η (ξ, η) = (UP ) ⎜⎜ ⎟
⎟ (4.24)
⎝ v local ⎠
where UP is the fractional strength of upstream weighting desired (chosen by the model user),
vξ(ξ, η) and vη(ξ, η) are the components of fluid velocity given in terms of local element
coordinates, and ⏐vlocal(ξ, η)⏐is the magnitude of fluid velocity given in terms of local
coordinates. Each velocity component may vary in value throughout the element. A description
76
of the calculation of fluid velocity is given in section 4.6, “Consistent Evaluation of Fluid
Velocity.”
Note that the 2D basis functions, weighting functions and their derivatives are calculated by the
SUTRA subroutine “BASIS2”.
In 3D SUTRA simulations, the basis functions depend on three local coordinates, ξ, η, and ζ. As
in 2D, the origin of the local coordinate system is at the center of the element. The local node
numbering in 3D is illustrated in Figure 4.1b. Local node one always has local coordinates
(ξ, η, ζ) = (–1, –1, –1). The other nodes are numbered as follows, assuming a right-handed
coordinate system. If the element is viewed from the outside, looking through one face, such that
the element face farthest away has node 1 as its lower-left-hand corner, then nodes 2 – 4 are the
remaining nodes in that element face, proceeding counterclockwise from node 1. Nodes 5 – 8 are
then located on the nearest element face (the one being looked through and opposite the first
face), such that nodes 5, 6, 7, and 8 are connected by element edges to nodes 1, 2, 3, and 4,
respectively.
The following one-dimensional basis functions are defined over the region of the 3D element:
Ξ − (ξ) = 1
2
(1 − ξ) (4.25)
Ξ + (ξ) = 1
2
(1 + ξ) (4.26)
Η − (η) = 1
2
(1 − η) (4.27)
Η + (η) = 1
2
(1 + η) (4.28)
Ψ − (ζ ) = 1
2
(1 − ζ ) (4.29)
Ψ + (ζ ) = 1
2
(1 + ζ ) (4.30)
These linear one-dimensional basis functions are continuous in ξ, η, and ζ, and range between
zero and one as ξ, η, and ζ range between +1 to –1. The one-dimensional functions are combined
to create the trilinear basis functions used in 3D SUTRA simulations:
Ω 1 (ξ, η, ζ ) = Ξ − Η − Ψ − (4.31)
Ω 2 (ξ, η, ζ ) = Ξ + Η − Ψ − (4.32)
Ω 3 (ξ, η, ζ ) = Ξ + Η + Ψ − (4.33)
Ω 4 (ξ, η, ζ ) = Ξ − Η + Ψ − (4.34)
Ω 5 (ξ, η, ζ ) = Ξ − Η − Ψ + (4.35)
77
Ω 6 (ξ, η, ζ ) = Ξ + Η − Ψ + (4.36)
Ω 7 (ξ, η, ζ ) = Ξ + Η + Ψ + (4.37)
Ω 8 (ξ, η, ζ ) = Ξ − Η + Ψ + (4.38)
The 3D trilinear basis functions, when defined in the local element coordinate system, are
denoted as Ωi(ξ, η, ζ), i=1,…,8. There is one basis function defined for each node.
The basis function Ωi, defined for node i, has a value of one at the node and a value of zero at the
other nodes. It varies linearly along the straight element edges that connect node i to its
neighbors and has curvature in 3D analogous to that described above for 2D elements. The
derivatives of the trilinear basis functions are as follows:
∂Ω 1 ∂Ω 1 ∂Ω 1
= − 12 H − Ψ − = − 12 Ξ − Ψ − = − 12 Ξ − H − (4.39)
∂ξ ∂η ∂ζ
∂Ω 2 ∂Ω 2 ∂Ω 2
= + 12 H − Ψ − = − 12 Ξ + Ψ − = − 12 Ξ + H − (4.40)
∂ξ ∂η ∂ζ
∂Ω 3 ∂Ω 3 ∂Ω 3
= + 12 H + Ψ − = + 12 Ξ + Ψ − = − 12 Ξ + H + (4.41)
∂ξ ∂η ∂ζ
∂Ω 4 ∂Ω 4 ∂Ω 4
= − 12 H + Ψ − = + 12 Ξ − Ψ − = − 12 Ξ − H + (4.42)
∂ξ ∂η ∂ζ
∂Ω 5 ∂Ω 5 ∂Ω 5
= − 12 H − Ψ + = − 12 Ξ − Ψ + = + 12 Ξ − H − (4.43)
∂ξ ∂η ∂ζ
∂Ω 6 ∂Ω 6 ∂Ω 6
= + 12 H − Ψ + = − 12 Ξ + Ψ + = + 12 Ξ + H − (4.44)
∂ξ ∂η ∂ζ
∂Ω 7 ∂Ω 7 ∂Ω 7
= + 12 H + Ψ + = + 12 Ξ + Ψ + = + 12 Ξ + H + (4.45)
∂ξ ∂η ∂ζ
∂Ω 8 ∂Ω 8 ∂Ω 8
= − 12 H + Ψ + = + 12 Ξ − Ψ + = + 12 Ξ − H + (4.46)
∂ξ ∂η ∂ζ
78
In 3D, the asymmetric functions are used to provide “upstream weighting” in a manner
analogous to that described above for 2D. These functions are defined as follows:
θ1 (ξ, η, ζ ) = ( Ξ − − Ξ ∗ ) (Η − − Η ∗ ) (Ψ − − Ψ ∗ ) (4.47)
θ 2 (ξ, η, ζ ) = ( Ξ + + Ξ ∗ ) (Η − − Η ∗ ) (Ψ − − Ψ ∗ ) (4.48)
θ 3 (ξ, η, ζ ) = ( Ξ + + Ξ ∗ ) (Η + + Η ∗ ) (Ψ − − Ψ ∗ ) (4.49)
θ 4 (ξ, η, ζ ) = ( Ξ − − Ξ ∗ ) (Η + + Η ∗ ) (Ψ − − Ψ ∗ ) (4.50)
θ 5 (ξ, η, ζ ) = ( Ξ − − Ξ ∗ ) (Η − − Η ∗ ) (Ψ + + Ψ ∗ ) (4.51)
θ 6 (ξ, η, ζ ) = ( Ξ + + Ξ ∗ ) (Η − − Η ∗ ) (Ψ + + Ψ ∗ ) (4.52)
θ 7 (ξ, η, ζ ) = ( Ξ + + Ξ ∗ ) (Η + + Η ∗ ) (Ψ + + Ψ ∗ ) (4.53)
θ 8 (ξ, η, ζ ) = ( Ξ − − Ξ ∗ ) (Η + + Η ∗ ) (Ψ + + Ψ ∗ ) (4.54)
where
Ξ ∗ = 3a ξ Ξ − Ξ + (4.55)
Η ∗ = 3a η Η − Η + (4.56)
Ψ ∗ = 3a ζ Ψ − Ψ + (4.57)
79
∂θ3 ∂θ3 ∂θ3
= + 12 ( 1 − 3a ξ ξ ) = + 12 (1 − 3a η η) = − 12 (1 − 3a ζ ζ ) (4.60)
∂ξ ∂η ∂ζ
⋅ (Η − + Η ∗ ) ⋅ (Ξ − + Ξ∗ ) ⋅ (Ξ − + Ξ∗ )
⋅ (Ψ − − Ψ ∗ ) ⋅ (Ψ − − Ψ ∗ ) ⋅ (Η − + Η ∗ )
⋅ (Ψ − + Ψ ∗ ) ⋅ (Ψ − + Ψ ∗ ) ⋅ (Η − − Η ∗ )
The parameters aξ, aη, and aζ determine the amount of asymmetry (or upstream weight) in each
coordinate direction. When these parameters have a value of zero, then (4.47) through (4.65)
reduce to the symmetric 3D basis functions and their derivatives, (4.31) through (4.46). The
values of aξ, aη, and aζ depend on location in the element:
80
⎛ vξ ⎞
a ξ (ξ, η, ζ ) = (UP ) ⎜⎜ ⎟
⎟ (4.66)
⎝ v local ⎠
⎛ vη ⎞
a η (ξ, η, ζ ) = (UP ) ⎜⎜ ⎟
⎟ (4.67)
⎝ v local ⎠
⎛ vζ ⎞
a ζ (ξ, η, ζ ) = (UP ) ⎜⎜ ⎟
⎟ (4.68)
⎝ v local ⎠
where UP is the fractional strength of upstream weighting desired (chosen by the model user),
vξ(ξ, η, ζ), vη(ξ, η, ζ), and vζ(ξ, η, ζ) are the components of fluid velocity given in terms of local
element coordinates, and ⏐vlocal(ξ, η, ζ)⏐is the magnitude of fluid velocity given in terms of
local coordinates.
Note that the 3D basis functions, weighting functions and their derivatives are calculated by the
SUTRA subroutine “BASIS3”.
During calculations for the finite-element mesh and during integral evaluations, transformations
are required between the global (x,y[,z]) coordinate system, in which an element may have an
arbitrary size and quadrilateral (2D) or generalized hexahedral (3D) shape, and the local (ξ,η[,ζ])
coordinate system in which each element is a two-by-two square (2D) or two-by-two-by-two
cube (3D). Transformations are required in each direction. The transformation employs the basis
functions to provide a linear remapping in each coordinate direction. The Jacobian matrix [J] is
calculated separately for each element that requires transformation and may vary from point to
point in an element. In 3D, the Jacobian matrix is
⎡x1 y1 z1 ⎤
⎢ z2 ⎥
⎡ ∂Ω 1 ∂Ω 2 ∂Ω 3 ∂Ω 4 ∂Ω 5 ∂Ω 6 ∂Ω 7 ∂Ω 8 ⎤ ⎢ x 2 y2
⎥
⎢ ∂ξ ∂ξ ∂ξ ∂ξ ∂ξ ∂ξ ∂ξ ∂ξ ⎥ ⎢ x 3 y3 z3 ⎥
⎢ ⎥⎢ ⎥
∂Ω ∂Ω 2 ∂Ω 3 ∂Ω 4 ∂Ω 5 ∂Ω 6 ∂Ω 7 ∂Ω 8 ⎥ ⎢ x 4 y4 z4 ⎥
[J ] = ⎢⎢ 1 (4.69)
∂η ∂η ∂η ∂η ∂η ∂η ∂η ∂η ⎥ ⎢ x 5 y5 z5 ⎥
⎢ ∂Ω ∂Ω 2 ∂Ω 3 ∂Ω 4 ∂Ω 5 ∂Ω 6 ∂Ω 7 ∂Ω 8 ⎥ ⎢ x ⎥
⎢ 1 ⎥⎢ 6 y6 z6 ⎥
⎣⎢ ∂ζ ∂ζ ∂ζ ∂ζ ∂ζ ∂ζ ∂ζ ∂ζ ⎦⎥ ⎢ x
7 y7 z7 ⎥
⎢ ⎥
⎣x 8 y8 z8 ⎦
The numbered subscripts refer to the local element numbering (which is shown in Figure 4.1).
The Jacobian matrix is used to transform derivatives of basis functions from the global to the
local coordinate systems and the reverse:
81
⎧ ∂Ω j ⎫ ⎧ ∂φ j ⎫
⎪ ⎪ ⎪ ⎪
⎪ ∂ξ ⎪ ⎪ ∂x ⎪
⎪ ∂Ω j ⎪ ⎪ ∂φ j ⎪
⎨ ⎬ = [J ] ⎨ ⎬ (4.70)
⎪ ∂η ⎪ ⎪ ∂y ⎪
⎪ ∂Ω j ⎪ ⎪ ∂φ j ⎪
⎪ ∂ζ ⎪ ⎪⎩ ∂z ⎪⎭
⎩ ⎭
⎧ ∂φ j ⎫ ⎧ ∂Ω j ⎫
⎪ ∂x ⎪ ⎪ ∂ξ ⎪
⎪ ∂φ ⎪ ⎪ ⎪
⎪ ∂Ω j ⎪
⎪ j⎪
⎨ ⎬= J [ ]
−1
⎨ ⎬ (4.71)
⎪ ∂y ⎪ ⎪ ∂η ⎪
⎪ ∂φ j ⎪ ⎪ ∂Ω j ⎪
⎪⎩ ∂z ⎪⎭ ⎪ ∂ζ ⎪
⎩ ⎭
where:
⎡ ∂x ∂y ∂z ⎤
⎢ ∂ξ ∂ξ ∂ξ ⎥
⎢ ⎥
∂y
[J ] = ⎢ ∂x ∂z ⎥
(4.72)
⎢ ∂η ∂η ∂η ⎥
⎢ ∂x ∂y ∂z ⎥
⎢ ⎥
⎣ ∂ζ ∂ζ ∂ζ ⎦
The subscript j refers to any one of the eight nodes in a 3D element (four nodes in a 2D element),
and φj refers to the global basis function as defined for the jth node in an element. The same
transformations apply to derivatives of the asymmetric weighting functions, which are denoted
ωj in global coordinates.
The equations above are presented in 3D. For 2D simulations, only terms involving x, y, ξ, η,
and node subscripts 1 through 4 are relevant; the remaining terms should be left out to obtain the
2D forms.
[ J −1 ][ J ] =[ I ] (4.73a)
where [I] is the identity matrix, whose diagonal elements are all equal to one and whose off-
diagonal elements are all equal to zero. In 2D, [J-1] takes the form
⎛ 1 ⎞ ⎡ J 22 − J 12 ⎤
[ J −1 ] = ⎜⎜ ⎟⎟ ⎢ (4.73b)
⎝ det J ⎠ ⎣ − J 21 J 11 ⎥⎦
82
det J = J 11 J 22 − J 12 J 21 (4.74)
The determinant may vary bilinearly over a 2D element. A detailed discussion of inverse
matrices and matrix determinants in 2D and 3D can be found in most linear algebra texts.
In 2D, differential elements of area, dA, are transformed between local and global coordinate
systems as
dA = dx dy = (det J ) dξ dη (4.75)
dV = dx dy dz = (det J ) dξ dη dζ (4.76)
Note that the Jacobian matrix, the determinant of the Jacobian and the derivatives of the basis
functions in local and global coordinates are calculated in SUTRA subroutine “BASIS2” for 2D
simulations and in subroutine “BASIS3” for 3D simulations.
Gaussian integration is a method by which exact integration of polynomials may be carried out
through a simple summation of point values of the integrand. The method is:
τ = +1 NP
∫ f (τ) dτ = ∑ G KG f (τ KG )
τ = −1 KG =1
(4.77)
where f(τ) is the function to be integrated between τ = –1 and τ = +1. KG is the Gauss point
number, NP is the total number of Gauss points, GKG is a constant, and τKG is the location of the
KGth Gauss point. An exact integration is guaranteed by the sum in (4.77) if n Gauss points are
used for a polynomial f(τ) of order (2n–1). For evaluation of integrals that arise in the SUTRA
methodology, only two Gauss points are used in a given coordinate direction, as the integrands
encountered are usually of order three or less. In this case, the constants, GKG have a value of one
and (4.77) simplifies to:
τ = +1 2
∫ f (τ) dτ =
τ = −1
∑ f (τ )
KG =1
KG (4.78)
–1/2
The values of τKG for the two Gauss points are ± 3 (≈ ±0.577350269189626).
In 2D, the need to define a two-by-two element in local coordinates is apparent here. Gaussian
integration is done over a range of two, from –1 to +1. In order to integrate a term of the
differential governing equation over an arbitrary quadrilateral element in the mesh, the limits of
the integral must first be transformed to values of –1 and +1, that is, to local coordinates. When
integrating a double integral over x and y, both integrals must be transformed to have limits of –1
83
and +1, and two Gauss points are needed in each coordinate direction. These are defined as
shown in Figure 4.3.
Figure 4.3. 2D finite element in local coordinate system with Gauss points.
A ij = ∫ ∫ (∇φ
xL yL
j ⋅ ∇φ i ) B i dy dx (4.79)
where xL and yL indicate that the integral is over the area of an element L in global coordinates.
First, the (x,y) integral is converted to an integral in local coordinates (ξ, η) through use of the
Jacobian:
+1 +1
A ij = ∫ ∫ (∇φ
ξ = −1 η = −1
j ⋅ ∇φ i ) B i (det J ) dη dξ (4.80)
84
The values of ∇φ are in global coordinates and are obtained by transformation of derivatives
calculated in local coordinates.
∑ ∑ [ (∇φ ⋅ ∇φ i ) B i (det J )] (ξ , η )
2 2
A ij = j (4.81)
Kξ Kη
K ξ =1K η =1
∑ [ (∇φ ⋅ ∇φ i ) B i (det J )]
4
A ij = j (ξ KG , ηKG )
(4.82)
KG =1
where Kξ and Kη refer to Gauss point locations in the ξ and η directions, and where ξKG and ηKG
refer to the four Gauss points arising in (4.81) as depicted in Figure 4.3. Thus, in order to
evaluate the integral (4.79) over a given element, only four values of the integrand need to be
summed as given in (4.82), with one value determined at each of the four Gauss points.
In the case where a 2D element is a nonrectangular quadrilateral with variable thickness B, the
polynomial to be integrated in (4.80) is of fourth order as each of the terms may vary linearly in
the same direction. Otherwise, it is always of third order or less, and two-point Gauss integration
provides exact results.
The procedure for integration in 3D is analogous to that in 2D. When integrating a triple integral
over x, y, and z, all three integrals must be transformed to have limits of –1 and +1, and two
Gauss points are needed in each of the three coordinate directions, making a total of 8 Gauss
points.
Note that the summation over the Gauss points (as in (4.82)) is carried out by SUTRA subroutine
“ELEMN2” in 2D and subroutine “ELEMN3” in 3D for each element in the mesh and for each
integral that requires evaluation.
The governing equation representing the SUTRA fluid mass balance, (2.24), is modified by the
addition of a point source term which is used to insert points at which pressure is specified. This
is done as described in text referring to relation (3.38).
⎛ ∂S ⎞ ∂p ⎛ ∂ρ ⎞ ∂U ⎡⎛ k k ρ ⎞ ⎤
( )
Op (p, U) = ⎜⎜SwρSop + ερ w ⎟⎟ + ⎜ εSw ⎟ − ∇ ⋅ ⎢⎜⎜ r ⎟⎟ ⋅ (∇p − ρg)⎥ − Qp − νp p BC − p = 0
∂U ⎠ ∂t
(4.83)
⎝ ∂p ⎠ ∂t ⎝ ⎣⎝ μ ⎠ ⎦
The last term is the source term arising from a specified pressure condition, wherein νp is a
“conductance” and pBC(t) is the externally specified pressure boundary condition value. When νp
is set to a sufficiently large value, the last term becomes much larger than the others in (4.83),
85
and p ≈ p BC , which is the desired boundary condition. Relation (4.83) is numerically
approximated in the following sections.
Spatial integration
When the expression for Op(p,U) is approximated through nodewise, elementwise and cellwise
discretizations, it no longer exactly equals zero. The approximate expression, 〈〈Op(p,U)〉〉, equals
a spatially varying residual, Rp(x,y[,z],t), as shown for a 2D example in (3.8). A weighted
residual formulation may be written as:
where Wi(x,y[,z]) is the weighting function in global coordinates chosen to be either the basis
function, φi(x,y[,z]) or the asymmetric weighting function, ωi(x,y[,z]), depending on the term of
the equation. Relation (4.83) is approximated discretely and substituted for 〈〈Op(p,U)〉〉 in (4.84).
The resulting set of integral terms is evaluated, one term at a time, in the following paragraphs.
⎡ ∂S w ∂p ⎤
∫ ⎢⎢ S w ρS op + ερ ⎥ φi (x, y[, z]) dV (4.85)
V ⎣ ∂p ∂t ⎦⎥
where the term in square brackets is discretized cellwise, with one value of the term for each of
the NN cells in the mesh, and the weighting function is chosen to be the basis function (written
in global coordinates). The double angle brackets surrounding a term indicate that it has
been approximated in one of the three ways. Because the cellwise-approximated term is constant
for a node i, it is removed from the integral, leaving only the basis function to be integrated. The
volume integral of φi(x,y[,z]) gives the volume Vi of cell i, which reduces to (3.15) for 2D
simulations. The term (4.85) becomes:
⎛ ∂S w ⎞ ∂p i
⎜⎜ S wρS op + ερ ∂p ⎟⎟ ∂t Vi (4.86)
⎝ ⎠i
The second term of the expanded form of (4.84) is also a time derivative, which is approximated
cellwise:
⎡ ∂ρ ∂U ⎤ ⎛ ∂ρ ⎞ ∂U i
∫ ⎢ εS w ⎥ φi (x, y[, z]) dV = ⎜ εS w ⎟ Vi (4.87)
V ⎣ ∂U ∂t ⎦ ⎝ ∂U ⎠ i ∂t
The third term of expanded relation (4.84), which involves the divergence of fluid flux, is
weighted with the asymmetric function. The asymmetry is intended for use only in unsaturated
flow problems to maintain solution stability when the mesh has not been designed fine enough to
represent sharp saturation fronts. In general, the usual symmetric function is used for weighting
this flux term even for unsaturated flow, but the term is developed with the asymmetric function
in order to provide generality. Green’s Theorem (3.17) is applied, yielding:
86
⎡ ⎛ k k rρ ⎞ ⎤
− ∫ ⎢∇ ⋅ ⎜⎜ ⎟⎟ ⋅ (∇p − ρg ) ⎥ ωi (x, y[, z]) dV
V⎣⎢ ⎝ μ ⎠ ⎦⎥ (4.88)
⎛ k k rρ ⎞ ⎛ k k rρ ⎞
=− ∫ ⎜⎜ ⎟⎟ ⋅ (∇p − ρg ) ⋅ n ωi (x, y[, z]) dΓ + ∫ ⎜⎜ ⎟⎟ ⋅ (∇p − ρg ) ⋅ ∇ωi dV
Γ ⎝ μ ⎠ V ⎝ μ ⎠
wherein the terms in double angle brackets are approximated discretely as described below, n is
the unit outward normal to the 3D surface bounding the region to be simulated, and Γ is the
surface of the region. The asymmetric weighting function in global (rather than local)
coordinates is denoted, ωi(x,y[,z]). The first term on the right of (4.88) is exactly the fluid mass
flux (see Darcy’s law, relation (2.19)) out across the region’s boundary at node i, qOUT (t ) [M/s]:
i
⎡ ⎛ k k rρ ⎞ ⎤
q OUTi (t ) = ∫ ερ v ⋅ n ωi dΓ = − ∫ ⎢ ⎜⎜ ⎟⎟ ⋅ (∇p − ρg ) ⎥ ⋅ n ωi dΓ (4.89)
Γ Γ⎢⎣ ⎝ μ ⎠ ⎥⎦
This term is used to specify fluid flows across boundaries in SUTRA. Note that an inflow,
q INi (t ) , is q IN i = −q OUTi .
The second term on the right of (4.88) is approximated using a combination of elementwise and
nodewise discretizations. The approximation of (∇p – ρ g ) requires particular attention and is
discussed in section 4.6, “Consistent Evaluation of Fluid Velocity.” The permeability tensor
appearing in (4.88) has nine components in 3D:
⎡ k xx
L L
k xy L
k xz ⎤
L ⎢ L ⎥
k = ⎢ k Lyx k Lyy k yz ⎥ (4.90)
⎢ k zx
L L
k zy L
k zz ⎥
⎣ ⎦
L
wherein k is discretized elementwise as indicated by k . In 2D simulations, (∇p – ρ g ) is
=
always zero in the third spatial direction, and only the four components of the permeability
tensor that do not involve the z-coordinate are relevant. The pressure is discretized nodewise:
NN
p(x, y[, z], t ) ≅ ∑ p i (t ) φi (x, y[, z]) (4.91)
i =1
Relative permeability, kr, depends on saturation, which in turn depends on pressure. Relative
permeabilities are evaluated at each Gauss point during numerical integration depending on the
saturation (and pressure) at the Gauss point. Viscosity is evaluated at each Gauss point for
energy transport as a function of nodewise discretized temperature, and is constant for solute
transport.
Density, ρ, when it appears in the permeability term, is also evaluated at each Gauss point
depending on the nodewise discretized value of U at the Gauss point. The density appearing in
87
product with the gravity term is expressly not evaluated in this usual manner. A particular
discretization is used to maintain consistency with the ∇p term, as described in section 4.6,
“Consistent Evaluation of Fluid Velocity”. This consistently evaluated ρ g term is denoted
〈〈ρ g 〉〉* (see relation (4.153)).
NN ⎧⎪ ⎡ L ⎧ k rρ ⎫ ⎤ ⎫⎪
∑ p j (t ) ∫ ⎨⎢⎢ k ⎨ ⎬ ⎥ ⋅ ∇φ j ⎬ ⋅ ∇ωi dV
j=1 V⎪ ⎩⎣ ⎩ μ ⎭ ⎥⎦ ⎪⎭
(4.92)
⎧⎪ ⎡ L ⎧ k rρ ⎫ ⎤ * ⎫⎪
− ∫ ⎨⎢ k ⎨ ⎬ ⎥ ⋅ ρg ⎬ ⋅ ∇ωi dV
V⎪ ⎩ ⎢⎣ ⎩ μ ⎭ ⎥⎦ ⎪⎭
L ⎧k ρ⎫
where 〈〈 k 〉〉 indicates an elementwise discretized permeability tensor, ⎨ r ⎬ indicates the
⎩ μ ⎭
value of the term based on nodewise discretized values of p and U (which is not the same as
discretizing the term in a nodewise manner), and 〈〈ρ g 〉〉* indicates a discretization of (ρ g )
consistent with the discretization of ∇p.
The last two terms of (4.83) are approximated cellwise with a basis function for weighting:
− ∫ Qp (
φi (x, y[, z]) dV − ∫ ν p (p BC − p ) φi (x, y[, z]) dV = −Q i − ν pi p BCi − p i ) (4.93)
V
The cellwise discretizations that are employed in the above evaluations are
NN
⎛Q ⎞
Qp = ∑ ⎜⎜ i ⎟⎟ (4.94)
i =1 ⎝ Vi ⎠
NN ⎡ ν
Q PBC = ν p (p BC − p ) = ∑ ⎢⎜⎜ i
⎛ p ⎞
(
⎟ p BCi − p i
⎟ )⎤⎥ (4.95)
⎣⎝ Vi
i =1 ⎢ ⎠ ⎥⎦
where Vi is the volume of cell i, Qi(t) [M/s] is the total mass source to cell i, QPBC (M/L3 s) is the
fluid mass source rate due to the specified pressure, and ν pi [L s] is the pressure-based
conductance for the specified pressure source in cell i. The conductance is set to zero for nodes at
which pressure is not specified (so that QPBC=0) and to a high value at nodes where pressure is
specified.
By combining and rearranging the evaluations of approximate terms of (4.84), the following
weighted residual relation is obtained in 3D:
dp i dU i NN
AFi + CFi + ∑ p j (t ) BFij + ν pi p i = Q i + ν pi p BCi + q INi + DFi i = 1, NN (4.96)
dt dt j=1
88
where:
⎛ ∂S ⎞
AFi = ⎜⎜ S wρSop + ερ w ⎟⎟ Vi (4.97)
⎝ ∂p ⎠ i
⎛ ∂ρ ⎞
CFi = ⎜ εS w ⎟ Vi (4.98)
⎝ ∂U ⎠ i
⎧⎪ ⎡ L ⎧ k rρ ⎫ ⎤ ⎫⎪
BFij = ∫ ∫ ∫ ⎨ ⎢ k ⎨ ⎬ ⎥ ⋅ ∇φ j ⎬ ⋅ ∇ω i dz dy dx (4.99)
x y z ⎪⎩ ⎣⎢ ⎩ μ ⎭ ⎦⎥ ⎪⎭
⎧⎪⎡ L ⎧ k rρ ⎫ ⎤ * ⎫⎪
DFi = ∫ ∫ ∫ ⎨⎢ k ⎨ ⎬ ⎥ ⋅ ρg ⎬ ⋅ ∇ω i dz dy dx (4.100)
x y z ⎪⎩⎣⎢ ⎩ μ ⎭ ⎦⎥ ⎪⎭
⎧⎪ ⎡ L ⎧ k rρ ⎫ ⎤ ⎫⎪
BFij = ∫ ∫ ⎨ ⎢ k ⎨ ⎬ ⎥ ⋅ ∇φ j ⎬ ⋅ ∇ω i B dy dx (4.101)
x y ⎪⎩ ⎣⎢ ⎩ μ ⎭ ⎦⎥ ⎪⎭
⎧⎪ ⎡ L ⎧ k rρ ⎫ ⎤ * ⎫⎪
DFi = ∫ ∫ ⎨ ⎢ k ⎨ ⎬ ⎥ ⋅ ρg ⎬ ⋅ ∇ω i B dy dx (4.102)
x y ⎪⎩ ⎣⎢ ⎩ μ ⎭ ⎦⎥ ⎪⎭
The thickness of the mesh, B(x,y), is evaluated at each Gauss point according to a nodewise
discretization:
NN
B(x, y ) ≅ ∑ B i φ i (x, y ) (4.103)
i =1
where Bi is the mesh thickness at node i. Note that mesh thickness is fixed and may not vary in
time as was allowed for illustrative purposes in Chapter 3, “Fundamentals of Numerical
Algorithms.”
The only integrals requiring Gaussian integration are BFij and DFi. Note that these are evaluated
in SUTRA subroutine ELEMN2 (for 2D) or ELEMN3 (for 3D) in an element-by-element
manner. The other terms, except for those involving ν pi , are evaluated cellwise (one for each
node) by subroutine NODAL. The specified pressure terms are evaluated by subroutine BC.
89
Temporal discretization and iteration
The time derivatives in the spatially discretized and integrated equation are approximated by
finite differences. The pressure term is approximated as:
dp i p in +1 − p in
≅ (4.104)
dt Δt n +1
where
p in = p i ( t n ) (4.105a)
p in +1 = p i (t n + Δt n +1 ) = p i (t n +1 ) (4.105b)
and
Δt n +1 = t n +1 − t n (4.106)
The new or current time step, Δtn+l, begins at time tn and ends at time tn+1. The previous time
step, for which a solution has already been obtained at time tn, is denoted at Δtn.
The term in (4.96) involving the time derivative of concentration or temperature, dU/dt, makes
only a very small contribution to the fluid mass balance. For solution over the present time step,
Δtn+l, this derivative is evaluated using information from the previous time step, as these values
are already known:
n
dU i ⎛ dU i ⎞ U in − U in −1
≅⎜ ⎟ = (4.107)
dt ⎝ dt ⎠ Δt n
This approximation gives a simple method of accounting for this small contribution to the fluid
mass balance.
All other terms in (4.96) are evaluated at the new time level tn+1 for solution of the present time
step, Δtn+1, except for the density in the consistently discretized 〈〈ρ g 〉〉* term. The density is
evaluated based on U(tn), the value of U at the beginning of the present time step. Because
coefficients depend on the yet unknown values of p and U at the end of the time step, one or
more iterations may be used to solve this nonlinear problem. On the first iteration, or when only
one iteration per time step is used, coefficients are based on a projected value of p and U.
⎛ Δt ⎞
p iproj = p in + ⎜⎜ n +1 ⎟⎟ (p in − p in −1 ) (4.108)
⎝ Δt n ⎠
⎛ Δt ⎞
U iproj = U in + ⎜⎜ n +1 ⎟⎟ (U in − U in −1 ) (4.109)
⎝ Δt n ⎠
90
These projections estimate the p and U values at a node i, p iproj and U iproj , at the end of the
present time step, Δtn+1, based on linear extrapolation of the two previous values of p and U. All
p and U dependent coefficients (except 〈〈ρ g 〉〉*) in (4.96) through (4.102) are estimated at time
level tn+1. These coefficient values are based on the most recent values of p and U, be they
projections or solutions to the previous iteration. Iterations end when the maximum change in p
and U at any node in the mesh falls below user-specified criteria of absolute change in p and U.
The weighted residual relations (4.96) may thus be written in a form which allows for solution of
pressures at nodes, p in +1 , at the end of the present time step:
⎛ AFin +1 ⎞ n +1 NN n +1
⎜⎜ ⎟⎟ p i + ∑ p i BFijn +1 + ν pi p in +1
Δt
⎝ n +1 ⎠ j=1
n
(4.110)
⎛ AF n +1 ⎞
+ ⎜⎜ i ⎟⎟ p in + (CFin +1 ) ⎜ i ⎟
⎛ dU ⎞
= Q in +1 + ν pi p nBC+1i + q nIN+1i + DFi(n +1)* i = 1, NN
⎝ Δt n +1 ⎠ ⎝ dt ⎠
where the superscript involving (n) or (n+l) indicates level of time evaluation. The term with
level (n+l)* indicates that the 〈〈ρ g 〉〉* term is evaluated at the (n) time level on the first iteration,
and at the most recent level on subsequent iterations. The other coefficients are evaluated at the
(n+l) time level by projection on the first iteration, and at the most recent level on subsequent
iterations.
Specified pressures are obtained through the cellwise addition of a fluid flux (see Figure 3.5),
Q BCi [M/s] with reference to (4.93):
(
Q nBC+1i = ν p i p nBC+1i − p in +1 ) (4.111)
For a cell in which ν pi is specified as a large number, this flux term dominates the fluid mass
balance and p nBC+1i ≅ p in +1 , achieving a specified pressure at the node representing cell i. Note that
specified pressure may change each time step. For cells in which pressure is not specified, ν pi is
set to zero, and no fluid is added to the cell by (4.111).
Both fluid sources, Q in +1 , and fluid inflows across region boundaries, q nIN+1i , are specified
cellwise. They directly add fluid mass to the node in cell i. Thus, fluid sources and boundary
inflows are indistinguishable in the model. Fluid sources and flows across boundaries are both
accounted for by the vector Q in +1 in SUTRA, and are referred to as fluid sources. Thus the term
n +1
q IN i
in (4.110) may be dropped, and the definition of Q in +1 may be generalized to include the
boundary flows.
The form of the discretized fluid mass balance implemented in SUTRA is as follows:
91
NN ⎡⎛ AFi δ ij ⎞ ⎤
∑ ⎢⎜⎜ Δt
j=1 ⎣⎝
⎟⎟ + BFijn +1 + ν pi δ ij ⎥ p nj +1
n +1 ⎠ ⎦
n
(4.112)
⎛ AF n +1 ⎞
+ ⎜⎜ i ⎟⎟ p in + (CFin +1 ) ⎜ i ⎟
⎛ dU ⎞
= Q in +1 + ν pi p nBC+1i + DFi(n +1)* i = 1, NN
⎝ Δt n +1 ⎠ ⎝ dt ⎠
⎧0 if i ≠ j
δ ij = ⎨ (4.112a)
⎩1 if i = j
4.5 Numerical Approximation of SUTRA Unified Solute Mass and Energy Balance
The governing equation representing the SUTRA unified energy and solute mass balance (2.52)
is modified by the addition of a point source term that arises due to fluid inflows and outflows at
points of specified pressure:
∂U
O u (U ) = [εS w ρc w + (1 − ε ) ρ s c s ] + εS w ρc w v ⋅ ∇U
∂t
[
− ∇ ⋅ { ρc w εS w (σ w I + D) + (1 − ε ) σ s I ⋅ ∇U}]
(4.113)
− Q p c w (U ∗ − U ) − εS w ργ 1w U − (1 − ε ) ρ s γ 1s U s − εS w ργ ow − (1 − ε ) ρ s γ os
− Q PBC c w (U BC − U ) = 0
The last term is the solute mass or energy source due to fluid inflow at a point of specified
3
pressure, QPBC [M/L s] is the fluid mass source rate given by (4.95), and UBC is the
concentration or temperature of the flow. For outflow, UBC = U, and the term goes to zero.
Relation (4.113) is numerically approximated in the following sections.
Spatial integration
When the expression for Ou(U) in (4.113) is approximated through nodewise, elementwise and
cellwise discretizations, it no longer exactly equals zero. The approximate expression , 〈〈Ou(U)〉〉,
equals a spatially varying residual, Ru(x,y[,z],t), as shown for a 2D example in (3.8). A weighted
residual formulation may be written as:
∫ O u (U ) Wi (x, y ) dV = 0 i = 1, NN (4.114)
V
where Wi(x,y[,z]) is the weighting function, chosen to be either the basis function, φi(x,y[,z]) or
the asymmetric weighting function, ωi(x,y[,z]), depending on the term of the equation. Relation
92
(4.113) is discretized and the approximation is substituted for 〈〈Ou(U)〉〉 in (4.114). The resulting
set of integral terms is evaluated, one term at a time, in the following paragraphs.
⎡ ∂U ⎤
∫ ⎢⎣ εS w ρc w + (1 − ε ) ρ s c s φ i (x, y[, z]) dV (4.115)
V
∂t ⎥⎦
where the term in square brackets is discretized cellwise, and the weighting function is the basis
function (written in global coordinates). As the term in double angle brackets has constant value
over a cell, i, the integral contains only the basis function and equals the cell volume, Vi, which
reduces to (3.15) for 2D simulations. Thus the term is
∂U i
[εS w ρc w + (1 − ε) ρ s c s ]i Vi (4.116)
∂t
where the asymmetric weighting function is chosen to allow the use of “upstream weighting” for
this term representing advective transport. “Upstream weighting” is intended for use only when
the finite-element mesh has been designed too coarse for a particular level of dispersive and
advective transport. The asymmetric function adds dispersion in an amount dependent on
element length in the flow direction. As a result, it changes the effective dispersion and thus
changes the physics of the problem being solved. This term is written in general to allow
upstream weighting, but simplifies to weighting with a basis function when the upstream weight
(UP in (4.23) and (4.24) for 2D; (4.66) through (4.68) for 3D) is set to zero. Thus, in order not to
alter the physics for most simulations, this term will have symmetric weighting.
The coefficients in this term (except velocity) are evaluated at each Gauss point and depend on
nodewise discretization of p and U, as indicated by the notation { } . Porosity is discretized
nodewise. Nodewise discretizations of ε and U are written:
NN
ε (x, y[, z]) ≅ ε = ∑ ε i φi (x, y[, z]) (4.118)
i =1
NN
U (x, y[, z], t ) ≅ ∑ U i (t ) φi (x, y[, z]) (4.119)
i =1
The velocity is evaluated at each Gauss point during numerical integration in a particular way
that depends on consistent discretization of ∇p and ρg terms in Darcy’s law. This consistent
*
approximated velocity is denoted v . Thus, the term (4.117) is evaluated as
93
∑ U (t )∫ [ ]
NN
{Swρ} ⋅ ∇φ j ω i (x, y[, z]) dV
*
j ε cw v (4.120)
j=1 V
{ [ ( )
− ∫ ∇ ⋅ ρc w εS w σ w I + D + (1 − ε )σ s I ⋅ ∇U ] } φ i (x, y[, z]) dV (4.121)
V
where the basis function weights the integral. Green’s Theorem (3.17) is applied to (4.121)
resulting in
[ ( ) ]
− ∫ ρc w εS w σ w I + D + (1 − ε ) σ s I ⋅ ∇U ⋅ n φ i (x, y[, z]) dΓ
Γ
(4.122)
[ ( )
+ ∫ ρc w εS w σ w I + D + (1 − ε ) σ s I ⋅ ∇U ⋅ ∇φ i dV ]
V
The first term represents the diffusive/dispersive flux of solute mass or energy out across a
system boundary in the region of node i. This term is denoted, ψ OUTi . An influx would be
− ψ OUTi or ψ IN i . The second term is based on nodewise discretization of U. The coefficients ρ
and Sw are evaluated at Gauss points based on nodewise discretization of U and p, as indicated
by the notation { } . Porosity, ε, is discretized nodewise as in (4.118), and cw, σw and σs are
constants. The dispersion tensor, D , is evaluated at each Gauss point according to equations
*
(2.41) and (2.42). Velocities used in this evaluation are the consistent values, v , and
dispersivities, αL and αT1 [and αT2], are discretized elementwise except that αL and αT1 [and αT2]
are evaluated depending on the velocity direction at each Gauss point for the anisotropic media
model. The approximated D is denoted D . Thus, the term (4.121) is evaluated as:
The remaining terms in (4.114) are discretized cellwise with the basis function as the weighting
function and with coefficients Us, Sw and ρ depending on the nodal values of p and U:
− ∫ εS w ργ 1w U φ i (x, y[, z ]) dV = − εS w ργ 1w [ ] i
U i Vi (4.125)
V
94
−∫ (1 − ε) ρ s γ 1s U s [ ]
φ i (x, y[, z ]) dV = − (1 − ε ) ρ s γ 1s U s i Vi (4.126)
V
− ∫ εS w ργ ow + (1 − ε ) ρ s γ os [ ]
φ i (x, y[, z ]) dV = − εS w ργ ow + (1 − ε ) ρ s γ os i Vi (4.127)
V
where
and
NN Q
⎛ BCi ⎞
Q PBC = ∑ ⎜⎜ ⎟
⎟ (4.130)
i =1 ⎝ Vi ⎠
The term evaluated in (4.126) is nonzero only for solute transport, and the value of Us is given
for solute transport by the adsorption isotherms in the form:
U s = Cs = s L C + s R (4.131)
where sL and sR are defined in section 4.7, “Temporal Evaluation of Adsorbate Mass Balance.”
In the above cellwise relations, cw, ρs, γ 1w , and γ 1s , are constant, and γ ow , γ so , sL, and sR may vary
cellwise and with time.
By combining and rearranging the evaluations of integrals in expanded relation (4.114) and the
definition (4.131), the following NN spatially discretized weighted residual relations are
obtained in 3D:
dUi NN NN
ATi + ∑ U j (t ) DTij + ∑ U j (t ) BTij − (GTi + G s TLi ) U i (t )
dt j=1 j=1
(4.132)
+ Q i c w U i (t ) + Q BCi c w U i (t )
where
95
DTij = ∫ ∫ ∫ [ ε {Swρ} c w ⋅ ∇φ j ] ωi dz dy dx
*
v (4.134)
x y z
G s TL i = [(1 − ε )ρ s γ 1s s L ]i Vi (4.136b)
G s TR i = [(1 − ε )ρ s γ 1s s R ]i Vi (4.136c)
DTij = ∫ ∫ [ε {Swρ} c w v
*
]
⋅ ∇φ j ωi B dy dx (4.138)
x y
BTij = ∫ ∫ { {ρ} c [
w ε {Sw } (σ w I + D )+ (1 − ε ) σ I]⋅ ∇φ }⋅ ∇φ
s j i B dy dx (4.139)
x y
The thickness of the mesh, B(x,y), is evaluated at each Gauss point according to (4.103).
The only integrals requiring Gaussian integration are DTij and BTij. Note that these are evaluated
in SUTRA subroutine ELEMN2 (for 2D) or ELEMN3 (for 3D) in an element-by-element
manner. The remaining terms that do not involve QBC are evaluated cellwise by SUTRA
subroutine NODAL. The flux terms arising from specified pressure (those with QBC) are
evaluated by subroutine BC.
The time derivative in the spatially discretized and integrated equation is approximated by finite
differences:
dU i U in +1 − U in
≅ (4.140)
dt Δ t n +1
96
where
U nt = U i (t n ) (4.141a)
U n +1
t = U i (t + Δt n ) = U i (t
n n +1
) (4.141b)
All terms in (4.132) are evaluated at the new time level, tn+1, except the velocity in (4.134) or
(4.138) and the dispersion tensor (which involves velocity) in (4.135) or (4.139), which are
lagged (based on values from previous time steps, as described just below) on the first iteration.
Because coefficients depend on the yet unknown values of p and U at the end of the time step,
one or more iterations may be used to solve this nonlinear problem. On the first iteration, and
when only one iteration per time step is used, coefficients are based on a projected value of p and
U as given by (4.108) and (4.109). On subsequent iterations, coefficients are based on the most
recent value of p and U. Iterations end when the convergence criteria are satisfied.
On the first iteration, and when only one iteration per time step is used, the velocities are
evaluated based on p in , U in -1 and ρ in -1 . This is because the pressure gradient in the velocity
calculation, ∇pn, is based on pressures calculated when the fluid density was ρn-1. On subsequent
iterations, velocities are calculated using the pressure solution for the most recent iteration
together with the densities resulting from the previous iteration upon which the most recent
pressure solution was based. No spurious velocities, which arise from mismatched p and ρ, are
generated this way. The flux term, QBC, arising from the specified pressures is evaluated on the
first iteration at the beginning of the time step in terms of p in and p nBCi . On subsequent iterations,
it is based on the most recent pressure solution and p nBC+1i .
The relations (4.132) may thus be written in a form which allows for solution of concentration or
temperature at nodes, U in +1 , at the end of the present time step:
⎛ ATin +1 ⎞ n +1 NN n +1 (n +1)∗ NN n +1 n +1
⎜⎜ ⎟⎟ U i + ∑ U j DTij + ∑ U j BTij
Δt
⎝ n +1 ⎠ j =1 j=1
( n +1)∗ ⎛ ATin +1 ⎞ n
=Q n +1
i c U
w
* n +1
i + Q BCi c w U n +1
BC i +ψ n +1
IN i + ET
i
n +1
+ G s TR n +1
i + ⎜⎜ ⎟⎟ U i i = 1, NN
Δ t
⎝ n +1 ⎠
The (n+1)* level indicates that velocity and QBC are evaluated on the first iteration at the previous
time step level (n) and on subsequent iterations, at the most recent iteration level of the present
time step. Other coefficients are evaluated at the (n+1) time level by projection on the first
iteration, and then at the most recent iteration level on subsequent iterations.
97
where ψ nBC+1i is a source of energy [E/s] or solute mass [Ms/M·s], ν U i is the user-specified
conductance value (for energy or solute flux through a hypothetical core - see Figure 3.5) which
+1
is nonzero only for nodes, k, at which temperature or concentration is specified, and U nUBC k
is the
user-specified value of temperature or concentration at time, tn+l and at node k.
Source boundary conditions for U arise whenever a fluid source Qi is specified. These may be
either point sources of fluid or fluid flows across the boundaries. These fluid inflows must be
+1
assigned concentration or temperature values, U *n i which may change with each time step.
Note that these sources are evaluated in SUTRA subroutine NODAL. Outflows of fluid result in
the disappearance of the source term from the transport equation because the sink and aquifer
+1
have the same U-value ( U *ni = U in +1 ).
Source boundary conditions for U may arise at points of specified pressure when an inflow Q BCi
+1
occurs at such a point. A value of U must be specified for such fluid inflows as U nUBC i
. These
values may change with each time step. This source term for U disappears for outflow at a point
of specified pressure. Note that specified pressure sources are evaluated in SUTRA subroutine
BC.
ρ c w [ε S w (σ w I + D ) + (1 − ε )σ s I ]⋅ ∇ U
n +1
ψ nIN+ 1i = ∫
Γ
⋅ n φidΓ (4.144)
For solute transport, this term may represent molecular diffusion and dispersion of solute mass
across a boundary. For energy transport, this term represents heat conduction and thermal
dispersion across a boundary. This heat or solute flux is a user-specified value, which may
change each time step. If the term is set to zero, it implies no diffusion and no dispersion across a
boundary for solute transport, or for energy transport, it implies perfect thermal insulation and no
dispersion across a boundary. For an open boundary across which fluid flows, this term is not
automatically evaluated by SUTRA. If no user-specified value exists at an open boundary, then
this term is set to zero. This implicitly assumes that the largest part of solute or energy flux
across an open boundary is advectively transported rather than diffusively or dispersively
transported. In cases where this assumption is inappropriate, the code may be modified to
evaluate this term at the new time level depending on the value of Un+1.
The form of the discretized unified energy and solute mass balance equation, which is
implemented in SUTRA, is as follows:
⎧⎪⎛ ATin +1 δ ij ⎞ ⎫
[ ( ) ]
⎟ + DTij(n +1)∗ + BTijn +1 + ν U + GTin +1 + G s TLni +1 + Q in +1 + Q nBC+1 c w δ ij ⎪⎬ U nj +1
NN
∑ ⎨⎜⎜ ⎟
⎩ Δt n +1 ⎠
j=1 ⎪⎝ ⎪⎭
i i
( n +1
= c w Qi U i ( n +1)∗ n +1
)
n +1 n +1 n +1
+ Q BCi U BCi + ν U i U UBCi + ψ IN i + ETin +1
(4.145)
⎛ ATin +1 ⎞ n
+ G s TR in +1 + ⎜⎜ ⎟⎟ U i i = 1, NN
Δt
⎝ n +1 ⎠
98
4.6 Consistent Evaluation of Fluid Velocity
Such an error would occur over an element where ∇p is allowed only a single constant value in a
vertical section of the element and ρ is allowed to vary linearly in the vertical direction. This is
the case in a standard finite-element approximation wherein both p and U vary linearly in the
vertical direction across an element. Linear change in p implies a constant value ∇p, while linear
change in U implies a linear change in the value of ρ according to (2.3) or (2.4). Thus, a standard
finite-element approximation over a bilinear element results in inconsistent approximation in the
vertical direction for ∇p and ρ g : constant ∇p and linearly varying ρ. This inconsistency
generates spurious vertical velocities, especially in regions of sharp vertical changes in U. A
consistent approximation of velocity is one in which ∇p and ρ g are allowed the same type of
spatial variability, and further, are evaluated at the same time level.
A consistent evaluation of velocity is required by the transport solution in (4.134) or (4.138) and
in the evaluation of the dispersion tensor in (4.135) or (4.139), where velocity is required in each
element, in particular, at the Gauss points for numerical integration. In addition, a consistent
evaluation of the ρ g term is required at the Gauss points in each element for the fluid mass
balance solution in the integral shown in (4.100) or (4.102).
The coefficients for calculation of velocity in (4.146) are discretized as follows: Permeability, k,
is discretized elementwise; porosity, ε, is discretized nodewise. Unsaturated flow parameters, kr
and Sw, are given values depending on the nodewise-discretized pressure according to relations
(2.8) and (2.21). Viscosity is either constant for solute transport or is given values depending on
nodewise-discretized temperature according to (2.5).
To complete the discretization of velocity, values in global coordinates at the Gauss points are
required for the term (∇p - ρ g ). Whenever this term is discretized consistently in local element
coordinates (ξ, η [,ζ]), a consistent approximation is obtained in global coordinates for any
arbitrarily oriented quadrilateral (2D) or hexahedral (3D) element. The remainder of this section
presents a consistent approximation for this term.
Consistent discretization in local coordinates is obtained when the spatial dependence of ∂p/∂ξ
and ∂p/∂η [and ∂p/∂ζ] is of the same type as that of ρgξ and ρgη [and ρgζ]. Because the
99
discretization for p(ξ, η [,ζ]) has already been chosen to be bilinear (2D) or trilinear (3D), it is
the discretization of the ρ g term, in particular, that must be adjusted. First, in the following, a
discretization of the ρ g term is presented which is consistent with the discretization of ∇p in
local coordinates, and then both ∇p and ρ g are transformed to global coordinates while
maintaining consistency. The development is presented for the 3D case. In 2D, the summations
are performed over four (instead of eight) nodes and only terms not involving z or ζ are relevant.
The pressure gradient within a 3D element in local coordinates is defined in terms of the
derivatives with respect to the local coordinates:
∂p 8
∂Ω
(ξ, η, ζ ) = ∑ p i i (4.147a)
∂ξ i =1 ∂ξ
∂p 8
∂Ω
(ξ, η, ζ ) = ∑ p i i (4.147b)
∂η i =1 ∂η
∂p 8
∂Ω
(ξ, η, ζ ) = ∑ p i i (4.147c)
∂ζ i =1 ∂ζ
The summations may be expanded and written in detail by reference to relations (4.39) - (4.46)
and (4.25) - (4.30) (in 2D, (4.9) - (4.12) and (4.1) - (4.4)).
A local discretization of ρ g with a spatial functionality that is consistent with the local pressure
derivatives (4.147a-c) is
8
∂Ω i
(ρg )ξ (ξ, η, ζ ) = ∑ ρ i g ξ (4.148)
i =1
i
∂ξ
8
∂Ω i
(ρg )η (ξ, η, ζ ) = ∑ ρ i g η (4.149)
i =1
i
∂η
8
∂Ω i
(ρg )ζ (ξ, η, ζ ) = ∑ ρ i g ζ (4.150)
i =1
i
∂ζ
where the vertical bars indicate absolute value, ρi is the value of ρ at node i in the element based
on the value of U at the node through relation (2.3) or (2.4), and g ξi , g ηi , and g ζ i are the ξ-, η-,
and ζ-components of g at node i, respectively. The 24 (in 2D, eight) gravity vector components
at the nodes in each element need be calculated only once for a given mesh and may be saved.
This discretization is robust in that it allows both the density and the direction and magnitude of
the gravity vector components to vary over an element. No particular significance should be
attached to the absolute values of basis function derivatives, except that these happen to give the
desired consistent approximations, as is shown shortly.
100
The gravity vector components in local coordinates at a point in the 3D element are obtained
from the global gravity components as:
⎧g ξ ⎫ ⎧g x ⎫
⎪ ⎪ ⎪ ⎪
⎨g η ⎬ = [J ] ⎨g y ⎬ (4.151)
⎪g ⎪ ⎪g ⎪
⎩ ζ⎭ ⎩ z⎭
The derivatives of pressure in local coordinates, (4.147a-c), and the consistent density-gravity
term components in local coordinates, (4.148) - (4.150), are transformed to global coordinates
for use in the evaluation of the integrals in which they appear by
⎧ ∂p ⎫ ⎧ ∂p ⎫
⎪ ∂x ⎪ ⎪ ∂ξ ⎪
⎪⎪ ∂p ⎪⎪ ⎪ ⎪
⎨ ⎬= J
∂
−1
[ ] ⎪ ∂p ⎪
⎨ ⎬ (4.152)
⎪ ⎪ y ⎪ ∂η ⎪
⎪ ∂p ⎪ ⎪ ∂p ⎪
⎪⎩ ∂z ⎪⎭ ⎪⎩ ∂ζ ⎪⎭
⎧⎛ *
⎞ ⎫
⎪⎜⎝ ρg ⎟ ⎪
⎪ ⎠x ⎪ ⎧(ρg )ξ ⎫
⎪⎛
⎨⎜ ρ g
*
⎞ ⎪ = J −1
⎟ ⎬ [ ] ⎪ ⎪
⎨(ρg )η ⎬ (4.153)
⎪⎝ ⎠y ⎪ ⎪(ρg ) ⎪
⎪⎛ ρg *
⎞ ⎪ ⎩ ζ⎭
⎪⎩⎜⎝ ⎟ ⎪
⎠z ⎭
where (〈〈 ρg 〉〉*)x, (〈〈 ρg 〉〉*)y, and (〈〈 ρg 〉〉*)z are the consistently discretized density-gravity term
components in global coordinates, and [J]–1 is the inverse Jacobian matrix defined by (4.73a).
The 2D forms of relations (4.147) to (4.153) are obtained by leaving out all terms involving z
and ζ.
The spatial consistency of these approximations may be seen by inspecting their expansions in
local coordinates. For example, in 2D, the ξ-components are
∂p 1
= [(p 2 − p 1 ) (1 − η) + (p 3 − p 4 ) (1 + η)] (4.154)
∂ξ 4
(ρg )ξ =
1
4
[( ) ( ) ]
ρ1 g ξ1 + ρ 2 g ξ2 (1 − η) + ρ 3 g ξ3 + ρ 4 g ξ4 (1 + η) (4.155)
The terms in parentheses preceding the terms containing η all have a constant value for the
element, and thus the approximations have consistent spatial dependences.
101
4.7 Temporal Evaluation of Adsorbate Mass Balance
The terms in the unified energy and solute mass balance equation that stem from the adsorbate
mass balance require particular temporal evaluation because some are nonlinear. The following
terms of relation (4.142) are evaluated here: ATin +1 , GTin +1 , and ETin +1 . For solute transport, the
coefficient c si in ATin +1 (4.133) becomes κ lni +1 according to (2.52b). The relation that defines κl
is given by either (2.34c), (2.35c), or (2.36c) depending on the sorption isotherm. The variable
U sni+1 is expressed in terms of the concentration of adsorbate, C sni+1 , in a form given by (4.131).
The parameters in (4.131), sL and sR, are defined in this section and are based on either (2.34a),
(2.35a) and (2.36a) depending again on the sorption isotherm. The temporal approximations of
these parameters are described below for each isotherm.
For linear sorption, all terms and coefficients related to the adsorbate mass are linear and are
evaluated at the new time level and strictly solved for at this level:
s L = χ1ρ o (4.156c)
sR = 0 (4.156d)
For Freundlich sorption, the adsorbate concentration is split into a product of two parts for
temporal evaluation. One part is treated as a first-order term as is linear sorption. This part is
evaluated strictly at the new time level and solved for on each iteration or time step. The
remaining part is evaluated as a known quantity, either based on the projected value of Ci at the
end of the time step on the first iteration, or based on the most recent Ci solution on any
subsequent iteration.
⎡ ⎛ 1 ⎞ ⎛ 1− χ 2 ⎞
⎤
U n +1
Si =C n +1
Si = ⎢χ1 (ρ o )
⎜⎜ χ ⎟⎟
⎝ 2⎠
(C ) proj
i
⎜⎜ χ ⎟⎟
⎝ 2 ⎠ ⎥ C in +1 (4.157a)
⎢ ⎥
⎣ ⎦
Also:
⎛ 1 ⎞ ⎛ 1− χ 2 ⎞
⎛χ ⎞ ⎜⎜⎝ χ 2 ⎟⎟⎠ proj ⎜⎜⎝
⎟⎟ ρ o (C i )
⎟
χ 2 ⎟⎠
C n +1
Si =κ n +1
1i = ⎜⎜ 1 (4.157b)
⎝ χ2 ⎠
⎛ 1 ⎞ ⎛ 1− χ 2 ⎞
(C )
⎜⎜ ⎟⎟ ⎜⎜ ⎟⎟
s L = χ 1 (ρ o ) ⎝ χ2 ⎠ proj
i
⎝ χ2 ⎠
sR = 0 (4.157c)
where the coefficient κ lni +1 is evaluated from the projected or most recent value of Ci, depending
on the iteration.
102
Finally, for Langmuir sorption the form used for the temporal evaluation preserves dependence
on a linear relation to Ci. However, the linear relation is appropriate only at low solute
concentrations. At high concentrations, the adsorbate concentration approaches (χ1/χ2).
Therefore, two temporal approximations are combined, (one for low C, and one for high C) in a
manner depending on the magnitude of concentration. When (χ 2 ρ o c ) << 1 , the following
temporal approximation for low values of C, referred to as C so , is employed:
⎡ χ 2 ρ o C proj ⎤
C = (χ 1ρ o C
o n +1
) ⎢1 − (4.158)
⎣ ( 1 + χ 2 ρ o C )⎦
s proj ⎥
⎛χ ⎞⎡ 1 ⎤
C s∞ = ⎜⎜ 1 ⎟⎟ ⎢1 − (4.159)
⎝ χ 2 ⎠ ⎣ ( 1 + χ 2 ρ o C )⎦
proj ⎥
χ 2 ρ o C proj
W∞ = (4.161a)
(1 + χ 2 ρ o C proj )
Wo = 1 − W∞ (4.161b)
By substituting (4.158), (4.159), (4.161a), and (4.161b) into (4.160), the following temporal
evaluation of C sni+1 is obtained after algebraic manipulation:
C n +1
=
χ 1 ρ o C in +1
+
(χ 1 ρ o C iproj )(χ 2 ρ o C iproj )
(4.162a)
si
(1 + χ 2 ρ o C iproj )
2
(1 + χ 2 ρ o C iproj )
2
103
The coefficient κ lni +1 is defined as
χ 1ρ o
C sni+1 = κ 1ni+1 = (4.162b)
(1 + χ ρ C )
2 o
proj 2
i
χ 1ρ o
sL = (4.162c)
(1 + χ ρ C )
2 o
proj 2
i
The first term in (4.162a) is solved for on each iteration, and the second term is treated as a
known. In the above four relations, C iproj is based on a projection for the first iteration on a time
step, and is the most recent value of Ci on subsequent iterations for the time step.
104
Chapter 5: Other Methods and Algorithms
The aquifer permeability may be anisotropic (as discussed in section 2.2 under the heading
“Fluid flow and flow properties”) and may vary in magnitude and direction from element to
element (as shown in (4.90)). In 2D, the permeability in each element is completely described by
input data values for the principal permeability values kmax and kmin, and for θ, the direction in
degrees from the global +x direction to the direction of maximum permeability. In 3D, it is
described completely by input data values for kmax, kmid, and kmin, and for the angles θ1, θ2, and
θ3, which describe how the principal permeability directions are related to the (x,y,z)-coordinate
directions (see section 2.2). The evaluation of integrals (4.99) and (4.100) (or (4.101) and
(4.102)) as well as the velocity evaluation (4.146) require the permeability tensor components in
global coordinates as given by (4.90). Thus, a rotation of the tensor is required from the principal
permeability directions to the global coordinate directions, as shown for 2D in Figure 2.2.
L L T
k = H kp H (5.1)
where in 2D,
L ⎡ k max
L
0 ⎤
kp = ⎢ L ⎥
(5.2a)
⎣0 k min ⎦
⎡cos θ − sin θ⎤
H=⎢ (5.2b)
⎣sin θ cos θ ⎥⎦
and in 3D,
⎡ k max
L
0 0 ⎤
L ⎢ ⎥
kp = ⎢ 0 L
k mid 0 ⎥ (5.3a)
⎢ 0 0 L
k min ⎥
⎣ ⎦
105
The matrix kL is given by the relevant portion of (4.90), depending on whether it is 2D or 3D.
=
T
The matrix H is the transpose of H , defined by
L
k xx = k max
L
cos2 θ + k min
L
sin 2 θ (5.5a)
k Lyy = k max
L
sin 2 θ + k min
L
cos 2 θ (5.5b)
L
k xy = k Lyx = (k max
L
− k min
L
) sin θ cos θ (5.5c)
A function, f(r,z), of radius r, and vertical coordinate z, is integrated over a cylindrical volume as
follows:
R=∫
z
∫ ∫ f (r, z ) r dθ dr dz
r θ
(5.6)
Assuming symmetry with respect to angular coordinate θ (f(r,z) does not depend on θ), the
integral becomes
Rr = ∫
z
∫ f (r, z ) (2πr ) dr dz
r
(5.7)
This integration may be compared with a general integration of a function g(x,y) in Cartesian
coordinates as it is carried out in SUTRA methodology:
Rc = ∫
y
∫ g(y, z ) B(x, y ) dx dy
x
(5.8)
B(x, y ) = 2 πr (5.9)
106
Thus, by a simple redefinition of coordinate names and by setting the mesh thickness, B, at each
node equal to the circumference of the circle it would sweep out when rotated about the r=0 axis
of the cylinder (Bi = 2πri), the SUTRA simulation is converted exactly to radial coordinates.
Figure 5.1 shows a mesh and the volume it sweeps out when in radial coordinates. Each element
becomes a 3D ring when used in radial coordinates.
107
5.3 User-defined Schedules
Beginning with SUTRA version 2.1, time stepping and the timing of observation output are
controlled by user-defined “schedules” – sequences of times or time steps. See sections 5.4 and
5.6 for details on how schedules are used to control time stepping and observation output,
respectively.
Time-based schedules may be defined in terms of either absolute or elapsed times. Absolute
times are expressed relative to a time datum of the user’s choice. Elapsed times are expressed
relative to the starting time of the simulation.
In SUTRA version 2.0 and earlier versions, user control over time stepping was limited.
Beginning with SUTRA version 2.1, time stepping in a transient simulation is controlled by a
user-defined schedule named “TIME_STEPS” that is specified in dataset 6 of the “.inp” file.
The first time value in the “TIME_STEPS” schedule determines the starting time of the
simulation. If the schedule is defined in terms of absolute times, then the first time value in the
schedule is the (absolute) starting time for the simulation. If the “TIME_STEPS” schedule is
defined in terms of elapsed times (times relative to the starting time of the simulation), then the
first time value in the schedule must be zero, and the (absolute) starting time of the simulation is
TICS (from dataset 1 of the “.ics” file). Subsequent time values define the ends of time steps in
terms of either absolute or elapsed times. For a purely steady-state simulation, user-defined
schedules are ignored by SUTRA and need not be specified.
On any given time step, the matrix equations are created and solved in the following order: (1)
the matrix equation for the fluid mass balance is set up, (2) the transport balance matrix equation
is set up, (3) pressure is solved for, and (4) concentration or temperature is solved for. Both
balances are set up on each pass such that the elementwise calculations need be done only once
per pass. However, SUTRA allows the p or U equation to be set up and solved only every few
time steps in a cyclic manner based on parameters NPCYC and NUCYC. These values represent
the solution cycle in time steps. For example, for transient flow and transient transport, setting up
and solving for both p and U each time step (NPCYC = NUCYC = l) gives the following cycle:
108
time step: 1 2 3 4 5 6 7 …
p p p p p p p …
solve for: { U U U U U U U …
or solving for p every third time step and for U each time step (NPCYC=3 and NUCYC=1)
gives:
time step: 1 2 3 4 5 6 7 8 9 10 11 12 13 …
p • p • • p • • p • • p • …
solve for: { U U U U U U U U U U U U U …
However, either of p or U must be solved for on each time step and therefore either NPCYC or
NUCYC must be set to one.
For a simulation with steady-state flow and transient transport, the sequencing is
time step: 0 1 2 3 4 5 …
p • • • • • …
solve for: { • U U U U U …
time step: 0 1
p •
solve for: { • U
The only exception to the cycling is that for nonsteady cases, both unknowns are solved for on
the first time step, as shown in the case for NPCYC=3, NUCYC=1, above, and on the last time
step, irrespective of the values of NPCYC and NUCYC.
time step: 1 2 3 4 5 6 7 8 9 10 11 12 …
p • • • • p • • • • • p …
solve for: { U U U U U U U U U U U U …
constant values constant values
back-substitute back-substitute
Note that p and U solutions must be set by the user to occur on time steps when relevant
boundary conditions, sources or sinks are set to change in value.
109
5.6 Observation Output
“Observations” are simulation results that are reported at particular times and locations of
interest to the user. In SUTRA version 2.0 and earlier versions, observations could be made only
at nodes, and only at the beginning/end of time steps. Beginning with SUTRA version 2.1,
observations can be made at any point within the model domain and at any time within the
simulated period. SUTRA interpolates results in space using finite-element basis functions to
compute pressure (p) and concentration or temperature (U), and the unsaturated functions in
subroutine UNSAT to compute saturation (Sw) from the interpolated value of p. Results are
interpolated linearly in time between the beginning and end of a time step.
Observation results are written to “.obs” and/or “.obc” output files. Both report the same
information, but they are organized differently. In “.obs” files, all results computed at a given
time are listed across the page on one line, unless a line wrapping option is invoked to avoid
generating extremely long lines of output. The organization of “.obc” files is analogous to that of
“.nod” and “.ele” files: results computed at a given time are preceded by a header and are listed
one observation point per line.
The timing of observation output is controlled by schedules defined in dataset 6 of the “.inp”
file. Observation points are defined in dataset 8D of the “.inp” file. The definition of each
observation point includes its name, its spatial coordinates, the name of the schedule that controls
its output, and an output format (“.obs” or “.obc”). Observations that have the same schedule and
output format are written to the same output file, so the number of “.obs” and/or “.obc” output
files depends on the number of combinations of schedule and output format that the user enters
in dataset 8D. SUTRA automatically generates the required number of output files, assigning
filenames derived from base filenames specified by the user in file “SUTRA.FIL”.
The velocities employed in the numerical solution of the fluid mass, and the solute mass or
energy balances are those calculated at the Gauss points in each element (as described in section
4.6, “Consistent Evaluation of Fluid Velocity.”) For purposes of output, however, only one
velocity value per element is made available. This is the velocity at the element centroid, which
is defined as the point whose coordinates are the arithmetic average of the coordinates of the four
(2D) or eight (3D) nodes at the corners of the element; for example, the x-coordinate of the
centroid is the average of the x-coordinates of the corner nodes. The centroid can equivalently be
defined as the point in the element where the lines connecting the midpoints of opposite sides
intersect, as shown in Figure 5.2 for both 2D and 3D elements.
The velocity at the centroid of an element is calculated by taking the average of the velocities (in
global coordinates) at the four (2D) or eight (3D) Gauss points; for example, the x-component of
velocity at the centroid is the average of the x-components of the velocity at the Gauss points.
This process gives the “true” velocity at the centroid that would be calculated employing the
consistent velocity approximation evaluated at this point in the element. In 2D, this may be seen
by setting ξ =η=0 in (4.154) and (4.155). Note that this velocity calculation is based on
previous, not current, pressures and concentrations or temperatures (i.e., from the
previous iteration or time step).
110
(a) (b)
Figure 5.2. (a) 2D finite element in global coordinates (x,y) with element centroid. The dashed lines
connect the midpoints of the element sides. (b) 3D finite element in global coordinates (x,y,z) with
element centroid. Crosses (+) indicate centroids of element faces.
A fluid mass and solute mass or energy budget provides information on the quantities of fluid
mass and either solute mass or energy entering or exiting the simulated region. Generally, it is
not intended as a check on numerical accuracy, but rather as an aid in interpreting simulation
results. When an iterative matrix solver is used, the discrepancy in the budget may be used to
judge iterative convergence.
The fluid budget is calculated based on the terms of the integrated-discretized fluid mass
balance, (4.96), as approximated in time according to (4.112). After the solution to a time step
makes available p in +1 and U in +1 , the time derivatives of these, dpi/dt and dUi/dt, are calculated
according to (4.104) and (4.140).
The total rate of change in stored fluid mass in the region due to pressure changes over the recent
time step is:
NN
dp i
∑ AFin +1 [M / s] (5.11)
i =1 dt
where AFi is defined in (4.97), and the total rate of change in stored fluid due to changes in
concentration or temperature is:
NN
dU i
∑ CFin +1 [M / s] (5.12)
i =1 dt
where CFi is defined in (4.98). The sum of (5.11) and (5.12) gives the total rate of change of
fluid mass in the entire region.
111
Fluid sources, Q in +1 , may vary with time, and those that do vary are reported by the budget at
each source node. The sum of Qin+1
NN
∑ Q in +1 [M / s] (5.13)
i =1
gives the total rate of fluid mass change due to all sources and sinks of fluid mass, as well as to
specified fluxes across boundaries. Fluid sources due to specified pressure conditions, Q nBC+1i ,
usually vary with time and are also reported by the budget at each node. This source is calculated
at each node from (4.111). The sum of Q nBC+1i
NN
∑ Q nBC+1i [M / s] (5.14)
i =1
gives the total rate of fluid mass change in the entire region due to inflows and outflows at all
specified pressure nodes.
The sum of (5.13) and (5.14) should be close to the value given by the sum of (5.11) and (5.12).
These may be expected to match better when iterations for nonlinearity have been used and
convergence was achieved, because the budget is calculated for a time step using only one
iteration with the (n+1) time level values of nonlinear coefficients, and the solution is obtained
with coefficients based on projected values of p and U.
The solute mass or energy budget is calculated based on the terms of the total balance (2.47)
(prior to subtraction of the terms that appear in the fluid mass balance done in equations (2.48)
through (2.52)). This allows simpler physical interpretation of the terms (particularly the fluid
source terms) in the balance than would the similar terms of the fluid-conservative balance form
(2.52). An integrated-discretized balance, similar to that given in (4.132) for the fluid-
conservative form, and as approximated in the time according to (4.142), is presented in
SUTRA’s solute mass or energy budget.
The total rate of change in stored solute mass or energy in the region due to change in
concentration or temperature over the recently computed time step is
NN
dU i
∑ ATin +1 [M s / s or E / s] (5.15a)
i =1 dt
where ATin+1 is calculated from (4.133) using U in +1 in all coefficients requiring a value
(including adsorption isotherms for cs = κ1). In reporting this portion of the budget, a separate
value is given for the sum of the portion stemming from (εswρcw) and for (1–ε)ρscs. The former
sum relates to the rate of solute mass or energy change in the fluid, and the latter relates to the
change in the solid-immobile portion. The total rate of change in stored solute mass or energy in
the region due to change in stored fluid mass (see first term of (2.48)) is
NN
⎛ dp n +1 dU in ⎞
∑ c w U in +1 ⎜⎜ AFin +1 i + CFin +1 ⎟ [M s / s or E / s] (5.15b)
i =1 ⎝ dt dt ⎟⎠
112
The total rate of first-order solute mass production in the fluid is calculated as
NN
∑ GTin +1 U in +1 [M / s] (5.16a)
i =1
∑ G s TLni +1 U in +1 + G s TR in +1 [M / s] (5.16b)
i =1
where GTi and GsTLi and GsTRi are defined by (4.136a-c), and all isotherms are based on U in +1 .
Fluid and adsorbate rates are reported separately by the budget. These terms have no analogy for
energy transport. The terms of zero-order production of solute and adsorbate mass or energy
production in the fluid and solid matrix are
NN
∑ ETin +1 [M s / s of E / s] (5.17)
i =1
where ETi is defined by (4.137) and the fluid and immobile phase production rates are reported
separately by the budget.
Solute mass and energy sources and sinks due to inflowing or outflowing fluid mass may vary
with time and are reported by the budget at each fluid source node and at each specified pressure
node. These are summed separately for the entire region:
NN
∑ Q in +1c w U ∗i n +1 [M s / s or E / s] (5.18)
i =1
NN
∑ n +1)*
Q (BC i
c w U nBC+1i [M s / s or E / s] (5.19)
i =1
+1
where U *n i and U nBC+1i take on the user-specified values of U for fluid inflows, and the U value of
the ambient system fluid for outflows. The (n+1)* level indicates that QBC is evaluated on the
first iteration at the previous time level (n) and on subsequent iterations, at the most recent
iteration level for the present time step. These sums give the total rate of change of solute mass
or energy in the entire system due to these fluid sources and sinks.
The diffusive-dispersive sources of solute mass or energy (4.144) are summed for the entire
system and are also reported by node as they may vary with time:
NN
∑ψ n +1
IN i [M s / s or E / s] (5.20)
i =1
Finally, solute mass or energy sources due to specified concentration or temperature conditions,
ψ nBC+1i , usually vary with time and are calculated at each node from (4.143). These are
additionally reported by the budget at each node. The sum of these sources:
113
NN
∑ψ n +1
BCi [Ms / s or E / s] (5.21)
i =1
gives the total rate of solute mass or energy change in the entire region due to fluxes of solute or
energy at all specified concentration or temperatue nodes.
The sum of (5.16a), (5.16b), (5.17), (5.18), (5.19), (5.20) and (5.21) should be close to the value
given by (5.15a) and (5.15b). These values may be expected to match best when nonlinearity
iterations have been used and convergence achieved, because the budget is calculated for a time
step with only one iteration with all information at the (n+1) time level, whereas the solution is
obtained using nonlinear coefficients based on projections of p and U.
In addition to providing the net changes in storage, net sources and inflows, and net production
of fluid and energy or solute, the budget also separately provides the total of all positive
contributions and the total of all negative contributions for each of these quantities. For example,
the net inflow of fluid at specified pressure nodes is provided as the sum over all nodes at which
there is an inflow (a positive flow) and the sum over all nodes at which there is an outflow (a
negative flow).
Based on the sums described above, SUTRA computes and reports absolute and relative balance
errors for fluid mass and for energy or solute mass. For fluid mass, the absolute error is defined
as
absolute fluid mass balance error = Sf − Ff (5.22)
where
S f = net rate of change in stored fluid (5.23)
and
Ff = net rate of gain/loss of fluid through inflows/outflows (5.24)
The superscripts “+” and “-“ indicate the summed positive and negative contributions,
respectively, to Sf and Ff. By definition, Sf+ and Ff+ are positive, and Sf− and Ff− are negative, so
Af is always positive and is a measure of the overall fluid mass balance “activity” (storage,
release, inflow, and outflow of fluid) in the system. The relative error is expressed as a
percentage of this activity.
For energy or solute mass (including adsorbate), the absolute error is defined as
absolute energy or solute mass balance error = S t − Pt − Ft (5.27)
114
where
S t = net rate of change in stored energy or solute mass (5.28)
The superscripts “+” and “-“ indicate the summed positive and negative contributions,
respectively, to St, Pt, and Ft. By definition, S+t , Pt+ , and Ft+ are positive, and S−t , Pt− , and Ft− are
negative, so At is always positive and is a measure of the overall energy or solute mass balance
“activity” (storage, release, production, decay, inflows, outflows, sources, and sinks of energy or
solute mass) in the system. The relative error is expressed as a percentage of this activity.
115
5.9 Source and Boundary Condition Output
In this version of SUTRA (2.2), information regarding sources and boundary conditions defined
in datasets 17 – 20 of the “.inp” (main input) file, subroutine BCTIME, and the optional “.bcs”
(time-dependent sources and boundary conditions) files is written to the “.bcof”, “.bcos”,
“.bcop”, and “.bcou” output files. Input specifications and simulation results at source and
boundary conditions nodes appear together in a format that is more complete than that presented
in the “.lst” output file and is useful for extracting information that is typically of interest during
model calibration.
116
• resultant solute or energy source/sink rate (the rate at which solute or energy enters or leaves
the system at that node to maintain the specified concentration or temperature)
• computed concentration or temperature
• specified concentration or temperature
Inflows/outflows of fluid mass and solute mass or energy are computed as described in section
5.8, “Budget Calculations.”
SUTRA is structured in a modular, top-down programming style that allows for code readability,
ease in tracing logic, and hopefully, ease in eventual modifications. Each subroutine carries out a
primary function that is clearly distinguished from all other program functions. User-required
program changes are limited to coding portions of a subroutine that sets the unsaturated flow
functions when unsaturated flow is simulated. The program is commented to aid in tracing logic.
SUTRA is written in FORTRAN-90 and takes advantage of dynamic array allocation; however,
few structures are used that are not compatible with FORTRAN-77. The code runs accurately
when it employs “double-precision” real variables (64 bit words with 47 bit mantissa) with a
precision of about 15 significant figures, and 32 bit word integer variables. Should the code
require modification to run on machines with other word lengths or other bit to byte ratios, the
number of significant figures in a real variable should be preserved, if not increased.
Input and output are also somewhat modularized. Input is through as many as four types of data
files consisting of list-directed records. The first input file, called “SUTRA.FIL”, contains a list
of the names of the remaining input and output files (and, optionally, their corresponding
FORTRAN unit numbers). The second input file, typically given the filename extension “.ics”,
contains only data on initial conditions for p and U at the nodes. The third input file, typically
given the filename extension “.inp”, contains the main input data for a simulation. The fourth
type of file, typically given the filename extension “.bcs”, is optional and contains specifications
for time-dependent sources and boundary conditions, which override the constant values
specified in the “.inp” file. Multiple “.bcs” files are allowed.
117
• A file or series of files, typically given the filename extension “.obc”, that receives results,
called observations, for a set of points in space and a sequence of times or time steps
specified by the user. Offers an alternative output format to the “.obs” file.
• A single file, typically given the filename extension “.lst”, that can list (at the user’s option) a
variety of information, including a summary of the input parameters and fluid and solute
mass budget calculations, as shown in Figure 5.3.
• A single file, typically given the filename extension “.smy”, that summarizes simulation
progress, receives convergence and error information; its default name is “SUTRA.SMY”.
• A single file, typically given the filename extension “.bcof”, that lists input specifications
and computed results at fluid source/sink nodes.
• A single file, typically given the filename extension “.bcos”, that lists input specifications
and computed results at solute or energy source/sink nodes.
• A single file, typically given the filename extension “.bcop”, that lists input specifications
and computed results at specified pressure nodes.
• A single file, typically given the filename extension “.bcou”, that lists input specifications
and computed results at specified concentration or temperature nodes.
118
Figure 5.3. Schematic of SUTRA output to the “.lst” file.
119
The input and output files are summarized below:
The main logic flow of the program is straightforward. A schematic diagram of the code is
shown in Figure 5.4. The main program sets up dimensions and calls the main control routine,
SUTRA, which cycles the program tasks by calling most of the remaining subroutines in
sequence. Subroutines are named to describe their main function. The remainder of this section
describes the SUTRA main program and each of the subroutines and subprograms in
alphabetical order.
• Purpose:
2. To compute the dimensions of and dynamically allocate memory for the various arrays
used by SUTRA.
• Calls to:
BANWID, BOUND, CONNEC, DIMWRK, FINDL2, FINDL3, FOPEN, INDAT0,
INDAT1, INDAT2, PRSWDS, PTRSET, READIF, SOURCE, SUTERR, SUTRA, ZERO
• Uses:
ALLARR, EXPINT, PTRDEF, SCHDEF
120
Figure 5.4. SUTRA logic flow. “Other program units” are subroutines, functions, modules, and block
subprograms that are not integral to the main logic flow; they are listed separately for the sake of
clarity and completeness. GLOxxx refers to either GLOBAN or GLOCOL.
121
• Description:
The main program reads data from the “.inp” input file and initial conditions from the “.ics”
input file. It uses the input data to compute (in part, by way of a call to subroutine
DIMWRK) the dimensions of the various arrays that are declared in subroutine SUTRA;
these dimensions are passed through COMMON blocks. It then passes control to subroutine
SUTRA.
Subroutine ADSORB
• Purpose:
To calculate and supply values from adsorption isotherms to the simulation.
• Called by:
BUDGET, SUTRA
• Description:
ADSORB calculates the sorption coefficient, κ1ni+1 (called CS1), and sL (called SL) and sR
(called SR), which are used in calculating adsorbate concentrations, Us, depending on the
particular isotherm chosen: linear, Freundlich or Langmuir. The calculations are based on the
description given in section 4.7, “Temporal Evaluation of Adsorbate Mass Balance.”
ADSORB is called once per time step for U, when sorption is employed in the simulation.
Module ALLARR
• Purpose:
1. To declare the main allocatable arrays.
2. To define the derived type OBSDAT.
• Used by:
Main program, INDAT1, LODOBS, OUTOBC, OUTOBS, PTRSET, SUTRA, TERSEQ
• Description:
ALLARR declares the main allocatable arrays used by SUTRA and defines the derived type
OBSDAT, which is used in the declaration of array OBSPTS, which holds observation point
information.
Subroutine BANWID
• Purpose:
To calculate the bandwidth of the mesh.
• Called by:
Main program
122
• Description:
BANWID checks the incidence array, IN, in all elements for the maximum difference in
node numbers contained in an element. This value, NDIFF, is used to calculate the
bandwidth, NBL.
Subroutine BASIS2
• Purpose:
To calculate values of basis functions, weighting functions, their derivatives, Jacobians, and
coefficients at a point in a quadrilateral element for 2D meshes.
• Called by:
ELEMN2
• Calls to:
UNSAT
• Description:
BASIS2 receives the coordinates of a point in an element in local coordinates (ξ, η), denoted
(XLOC,YLOC) in the routine. At this point, BASIS2 determines the following: values of the
four basis functions and their derivatives in each local coordinate direction, elements of the
Jacobian matrix, the determinant of the Jacobian matrix, elements of the inverse Jacobian
matrix, and if required, four values of the asymmetric weighting function (one for each node)
and their derivatives. In addition, the derivatives are transformed to global coordinates and
passed out to ELEMN2. Values of nodewise-discretized parameters, the local and global
velocity, and parameters dependent on p or U are calculated at this location in the element.
Unsaturated parameters are obtained by a call to UNSAT. The calculations are based on
section 4.1 “Basis and Weighting Functions”, 4.2 “Coordinate Transformations,” and 4.6
“Consistent Evaluation of Fluid Velocity.”
Subroutine BASIS3
• Purpose:
To calculate values of basis functions, weighting functions, their derivatives, Jacobians, and
coefficients at a point in a hexahedral element for 3D meshes.
• Called by:
ELEMN3
• Calls to:
UNSAT
123
• Description:
BASIS3 receives the coordinates of a point in an element in local coordinates (ξ, η, ζ),
denoted (XLOC,YLOC,ZLOC) in the routine. At this point, BASIS3 determines the
following: values of the eight basis functions and their derivatives in each local coordinate
direction, elements of the Jacobian matrix, the determinant of the Jacobian matrix, elements
of the inverse Jacobian matrix, and if required, eight values of the asymmetric weighting
function (one for each node) and their derivatives. In addition, the derivatives are
transformed to global coordinates and passed out to ELEMN3. Values of nodewise-
discretized parameters, the local and global velocity, and parameters dependent on p or U are
calculated at this location in the element. Values of parameters dependent on p or U are
calculated at this location. Unsaturated parameters are obtained by a call to UNSAT. The
calculations are based on section 4.1 “Basis and Weighting Functions”, 4.2 “Coordinate
Transformations,” and 4.6 “Consistent Evaluation of Fluid Velocity.”
Subroutine BC
• Purpose:
• Called by:
SUTRA
• Description:
The source terms involving ν pi in (4.112) are added to fluid balance matrix equation to
implement specified p nodes. The unified energy-solute mass balance is modified by the
addition of a source, QPL (calculated with the most recent p solution by subroutine SUTRA)
with concentration or temperature, UBC. The source terms involving ν Ui in (4.145) are
added to the energy-solute mass balance matrix equation in order to implement specified U
nodes.
Subroutine BCSTEP
• Purpose:
To read time-dependent sources and boundary conditions from the “.bcs” input files and
update the arrays in which sources and boundary conditions are stored.
• Called by:
SUTRA
124
• Calls to:
BOUND1, READIF, SOURCE1, SUTERR
• Description:
If optional “.bcs” (time-dependent sources and boundary conditions) input files exist,
BCSTEP is called on each time step. It reads from the “.bcs” files any sources or boundary
conditions that are specified for the current time step and updates the arrays in which sources
and boundary conditions are stored, overwriting the corresponding constant values specified
in datasets 17 – 20 of the “.inp” (main input) file.
Subroutine BCTIME
• Purpose:
A user-programmed routine in which time-dependent sources and boundary conditions can
be specified.
• Called by:
SUTRA
• Description:
BCTIME is called on each time step when a user-programmed, time-dependent source or
boundary condition is specified. It allows the value of a source or boundary condition to be
changed on any or all time steps.
BCTIME is divided into four sections. The first section allows the user to specify either time-
dependent pressure and concentration or temperature of an inflow, or both, at specified
pressure nodes (PBC or UBC). The second section allows user specification of time-
dependent U at specified concentration/temperature nodes. The third section allows user
specification of time-dependent fluid source or source concentration/temperature. The fourth
section allows user-specification of time-dependent solute mass or energy sources.
The current time step number, IT, and current time (at the end of the present time step) in
various units are available for use in the user-supplied programming. The user may program
in any convenient way through data statements, calls to other programs, logical structures,
“read” or “write” statements, or other preferred methods of specifying the time variability of
sources or specified p and U conditions. More information may be found in section 7.5,
“User-Supplied Programming.”
125
Block-data Subprogram BDINIT
• Purpose:
To initialize variables named in COMMON blocks.
• Description:
BDINIT is a block-data subprogram that initializes certain variables named in COMMON
blocks.
Subroutine BOUND
• Purpose:
1. To read specified pressure node numbers and pressure values, check the data, and print
information.
2. To read specified concentration or temperature node numbers and the values, check the
data, and print information.
3. To set up pointer arrays that track the specified p and U nodes for the simulation.
• Called by:
Main program
• Calls to:
READIF, SUTERR
• Description:
BOUND reads and organizes, checks and prints information on specified p nodes and
specified U nodes. The pressure information read is node number, pressure value and U value
of any inflow at this node. If there are NPBC specified pressure nodes, the above information
becomes the first NPBC values in vectors IPBC, PBC and UBC. The specified U information
read is node number and U value. If there are NUBC specified concentration nodes, the
above information begins in the (NPBC+1) position of IUBC and UBC, and ends in the
(NUPBC+NUBC) position of IUBC and UBC. This is shown below:
126
1 2 3 4 5 6 7 8 9 10 11
IPBC
( x x x x x x )
1 2 3 4 5 6
PBC
( x x x x x x )
x x x x x x y y y y
UBC
( 1 2 3 4 5 6 7 8 9 10 11 )
y y y y
IUBC
( 1 2 3 4 5 6 7 8 9 10 11 )
where “x “ refers to specified p information, and “y” refers to specified U information.
Counts are made of each type of specification and are checked against NPBC and NUBC for
correctness. A zero node number ends the data set for p and then for U. One blank element is
left at the end of each of these arrays in case there are no specified p or U nodes. The first
NPBC elements of IUBC are blank. These arrays are used primarily by subroutines BC and
BUDGET.
Subroutine BOUND1
• Purpose:
1. To read time-dependent specified pressure node numbers and pressure values from the
“.bcs” (time-dependent sources and boundary conditions) input files.
2. To read specified concentration or temperature node numbers and the values from the
“.bcs” input files.
3. To set up pointer arrays that track the time-dependent specified p and U nodes for the
current time step.
• Called by:
BCSTEP
127
• Calls to:
READIF, SUTERR
• Description:
BOUND1 reads and organizes information on time-dependent specified p nodes and
specified U nodes listed in the optional “.bcs” input files. This information is stored in arrays
in a manner that is analogous to that used by subroutine BOUND, except that the arrays
populated by BOUND1 include only the time-dependent specifications that pertain to the
current time step.
Subroutine BUDGET
• Purpose:
1. To calculate and output a fluid mass budget on each time step with output.
2. To calculate and output a solute mass or energy budget on each time step with output.
• Called by:
SUTRA
• Calls to:
ADSORB, UNSAT
• Description:
BUDGET calculates and outputs a fluid mass, solute mass or energy budget on each output
time step for whichever of p and/or U are solved for on the just-completed time step. The
calculations are done as described in section 5.8, “Budget Calculations.”
Subroutine CONNEC
• Purpose:
To read, output, and organize node incidence data.
• Called by:
SUTRA
• Calls to:
READIF, SUTERR
• Description:
CONNEC reads the nodal incidence list, which describes how nodes are connected. The data
are organized as an array, IN, which contains the ordered set of node numbers (four in 2D;
eight in 3D) in each element in order of element number. Thus, for a 2D simulation, the ninth
128
through twelfth values in IN are the four nodes in element number three. Array IN is passed
to a number of program units and is used in computations in BANWID, BASIS2, BASIS3,
ELEMN2, ELEMN3, FINDL2, FINDL3, GLOBAN, GLOCOL, OUTELE, PTRSET, PU,
and SUTRA.
Function CUTSML
• Purpose:
To set numbers of magnitude less than 1.D-99 to zero.
• Called by:
SUTRA
• Description:
If the absolute value of the argument is less than 1.D-99, CUTSML returns zero; otherwise, it
returns the argument unchanged. CUTSML is used to round down to zero quantities that are
small enough to require a three-digit exponent on output, thereby avoiding potential
problems caused by FORTRAN omitting the exponent specifier “E” or “D” when a three-
digit exponent is written.
Subroutine DIMWRK
• Purpose:
To return dimensions for the iterative solver work arrays.
• Called by:
Main program
• Description:
DIMWRK computes the dimensions of the integer and floating-point work arrays used by the
iterative matrix solvers.
Subroutine DISPR3
• Purpose:
2. To return the angles of the velocity vector with respect to the principal permeability
directions.
129
• Called by:
ELEMN3
• Calls to:
ROTATE, ROTMAT, TENSYM
• Description:
DISPR3 computes longitudinal and transverse dispersivities using an ad hoc, 3D anisotropic
dispersion model that is a generalization of the 2D SUTRA dispersion model (see section
2.5). Three dispersivities are computed: AL, the longitudinal dispersivity, and AT1 and AT2,
the two transverse dispersivities.
Function DP3STR
• Purpose:
To return three double-precision numbers in the form of a string.
• Called by:
OUTOBC, OUTOBS
• Description:
DP3STR is used by subroutines OUTOBC and OUTOBS to facilitate interpolation and
output of observation data.
Subroutine ELEMN2
• Purpose:
1. To carry out all 2D elementwise calculations required in the matrix equations.
2. To calculate 2D element centroid velocities for output.
• Called by:
SUTRA
• Calls to:
BASIS2, GLOBAN, GLOCOL, SUTERR
• Description:
ELEMN2 undertakes a loop through all the elements in a mesh. For each element, subroutine
BASIS2 is called four times, once for each Gauss point. BASIS2 provides basis function
information, and values of coefficients and velocities at each Gauss point, all of which is
saved by ELEMN2 for use in calculations for the present element.
130
Gaussian integration (two by two points) as described in section 4.3, is carried out for each
integral in the fluid mass balance ((4.101) and (4.102)), and for each integral in the unified
energy and solute mass balance ((4.138) and (4.139)). The portion of cell volume within the
present element for node I, VOLE(I), is calculated with the fluid balance integrals. The
values of the integrals are saved either as four-element vectors or as four-by-four arrays.
Separate (nearly duplicate) sections of the integration code employ either basis functions for
weighting or asymmetric weighting functions.
The vectors and arrays containing the values of integrals over the present element are passed
to subroutine GLOBAN or GLOCOL for addition to the global matrix equation (assembly
process).
Subroutine ELEMN3
• Purpose:
1. To carry out all 3D elementwise calculations required in the matrix equations.
2. To calculate 3D element centroid velocities for output.
• Called by:
SUTRA
• Calls to:
DISPR3, BASIS3, GLOBAN, GLOCOL, SUTERR
• Description:
ELEMN3 undertakes a loop through all the elements in a mesh. For each element, subroutine
BASIS3 is called eight times, once for each Gauss point. BASIS3 provides basis function
information, and values of coefficients and velocities at each Gauss point, all of which is
saved by ELEMN3 for use in calculations for the present element.
Gaussian integration (two by two by two points) as described in section 4.3, is carried out for
each integral in the fluid mass balance ((4.99) and (4.100)), and for each integral in the
unified energy and solute mass balance ((4.134) and (4.135)). The portion of cell volume
within the present element for node I, VOLE(I), is calculated with the fluid balance integrals.
The values of the integrals are saved either as eight-element vectors or as eight-by-eight
arrays. Separate (nearly duplicate) sections of the integration code employ either basis
functions for weighting or asymmetric weighting functions.
The vectors and arrays containing the values of integrals over the present element are passed
to subroutine GLOBAN or GLOCOL for addition to the global matrix equation (assembly
process).
131
Module EXPINT
• Purpose:
To provide explicit interfaces for the procedures that need them.
• Used by:
Main program, FOPEN, INDAT0, INDAT1, OUTELE, OUTNOD, OUTOBC, OUTOBS,
SUTRA
• Uses:
LLDEF
• Description:
EXPINT provides an explicit interface for subroutines LLD2AR and LLDINS and
subroutines PUSWF and DP3STR.
Subroutine FINDL2
• Purpose:
To determine whether a given point in 2D global coordinates is contained within a given 2D
element.
• Called by:
Main program
• Description:
FINDL2 determines whether a given point in 2D global coordinates is contained within a
given element by computing the local coordinates of the point and checking whether each
coordinate lies within the range -1 to 1. The point is contained within the element if and only
if both coordinates are within this range.
Subroutine FINDL3
• Purpose:
To determine whether a given point in 3D global coordinates is contained within a given 3D
element.
• Called by:
Main program
132
• Description:
FINDL3 determines whether a given point in 3D global coordinates is contained within a
given element by computing the local coordinates of the point and checking whether each
coordinate lies within the range -1 to 1. The point is contained within the element if and only
if all three coordinates are within this range.
Subroutine FOPEN
• Purpose:
1. To open the file “SUTRA.FIL” and read in unit numbers and file names.
2. Assign unit numbers to SUTRA input and output files.
3. Determine files needed for observation output.
4. To check for the existence of and open files used in the SUTRA simulation.
• Called by:
Main program
• Calls to:
SUTERR
• Uses:
EXPINT, SCHDEF
• Description:
FOPEN is called twice by the main program. On the first call, FOPEN first opens the file
“SUTRA.FIL”, from which it reads the Fortran unit numbers and associated filenames to be
used during the SUTRA run. It then assigns unit numbers, checks for the existence of the
input files, and opens the input and output files, except for the observation output files. On
the second call, FOPEN determines how many files are needed for observation output,
assigns filenames and unit numbers, and opens the observation output files.
Function FRCSTP
• Purpose:
To return the fractional time step that corresponds to a given time.
• Called by:
INDAT0
• Uses:
LLDEF, SCHDEF
133
• Description:
FRCSTP uses the “TIME_STEPS” schedule, which controls time stepping, to determine the
time step number that corresponds to a given time. If the time falls within a time step (as
opposed to the beginning/end of a time step), a fractional time step number is returned. For
example, the time step number that corresponds to the time half-way between the end of time
step 1 and the end of time step 2 is 1.5.
Subroutine GLOBAN
• Purpose:
To assemble elementwise integrations into the global banded matrix form used by the direct
(Gaussian elimination) solver.
• Called by:
ELEMN2, ELEMN3
• Description:
GLOBAN carries out the sum over elements of integrals evaluated over each element by
ELEMN2 or ELEMN3 (as suggested in 2D by relation (3.23)). Both the matrix and right-
hand-side vector terms involving integrals in the discretized governing equations (4.112) and
(4.145) are constructed.
Subroutine GLOCOL
• Purpose:
To assemble elementwise integrations into the global “column” matrix form used by the
SLAP iterative solvers.
• Called by:
ELEMN2, ELEMN3
• Description:
GLOCOL carries out the sum over elements of integrals evaluated over each element by
ELEMN2 or ELEMN3 (as suggested in 2D by relation (3.23)). Both the matrix and right-
hand-side vector terms involving integrals in the discretized governing equations (4.112) and
(4.145) are constructed.
Subroutine INDAT0
• Purpose:
To input, output, and organize a portion of the “.inp” input data.
• Called by:
Main program
134
• Calls to:
LLD2AR, LLDINS, READIF, SUTERR
• Uses:
EXPINT, LLDEF, SCHDEF
• Description:
INDAT0 reads data from the “.inp” file (datasets 5 – 7) that are needed by the main program
to compute array dimensions before passing control to subroutine SUTRA. It also constructs
the schedules that control time stepping and observation output.
Subroutine INDAT1
• Purpose:
1. To read simulation and mesh data from the “.inp” data file, and output this information.
2. To initialize some variables and carry out minor calculations.
• Called by:
Main program
• Calls to:
FOPEN, LLDINS, READIF, SUTERR, ROTMAT, TENSYM
• Uses:
ALLARR, EXPINT, LLDEF, SCHDEF
• Description:
INDAT1 reads a portion of the “.inp” input data file, ending with the elementwise data set.
Most information is printed on the “.lst” data file after reading; the amount of output depends
on the user choice of long or short output format. Scale factors are multiplied with
appropriate input data. Calculations are carried out for a thermal conductivity adjustment and
for determination of the components of the permeability matrix k in each element from kmax,
kmin, and θ (for 2D) or from kmax, kmid, kmin, θ1, θ2, and θ3 (for 3D).
Subroutine INDAT2
• Purpose:
1. To read initial conditions from the “.ics” file.
2. To initialize some arrays.
135
• Called by:
Main program
• Calls to:
READIF, SUTERR, UNSAT, ZERO
• Description:
INDAT2 reads the “.ics” data file, which contains initial conditions for p and U. The warm-
start section reads initial conditions and parameter values of a previous time step, all of
which must have been stored by subroutine OUTRST on a previous simulation. For a cold
start, INDAT2 reads only initial p and initial U. On a cold start, INDAT2 calls UNSAT for
calculation of initial saturation values.
Subroutine LLD2AR
• Purpose:
To load a linked list of pairs of double-precision numbers into two arrays.
• Called by:
INDAT0
• Uses:
LLDEF
• Description:
LLD2AR is used by subroutine INDAT0 to temporarily transfer schedules, which are stored
as linked lists of (time, time step) pairs, to ordinary arrays.
Module LLDEF
• Purpose:
To define the derived type LLDEF.
• Used by:
EXPINT, FRCSTP, INDAT0, INDAT1, LLD2AR, LLDINS, OUTOBC, OUTOBS,
SCHDEF, SUTRA, TIMETS
• Description:
LLDEF defines the derived type LLD, which is used to linked lists with three components:
two double-precision numbers and a pointer to the next entry in the list.
136
Subroutine LLDINS
• Purpose:
To insert a pair of double-precision values into a linked list.
• Called by:
INDAT0, INDAT1
• Uses:
LLDEF
• Description:
LLDINS inserts a pair of double-precision values into a linked list in ascending order based
on the first value in the pair.
Subroutine LODOBS
• Purpose:
To load into an array the indices of observation points to be written.
• Called by:
OUTOBS
• Uses:
ALLARR, SCHDEF
• Description:
LODOBS is used by subroutine OUTOBS to load into an array the indices of observation
points to be written to the next line of the current “.obs” output file.
Subroutine NAFU
• Purpose:
To find the next available FORTRAN unit.
• Called by:
FOPEN, READIF
• Calls to:
SUTERR
137
• Uses:
SCHDEF
• Description:
NAFU loops through existing files to find the next available FORTRAN unit number. It is
used by subroutines FOPEN and READIF during automatic assignment of unit numbers to
input and output files.
Subroutine NODAL
• Purpose:
To calculate and assemble all nodewise and cellwise terms in the matrix equation.
• Called by:
SUTRA
• Calls to:
UNSAT
• Description:
NODAL undertakes a loop through all nodes in the mesh and calculates values of all cellwise
terms. For each node, time derivatives and a fluid source are added to the fluid mass balance
matrix equation. The time derivative as well as terms due to fluid sources, production, and
boundary fluxes of U are prepared and added to the solute mass/energy balance matrix
equation. Subroutine UNSAT is called for unsaturated flow parameters. The terms added by
NODAL may be described as the nonintegral terms of (4.96) and (4.132) (except for the
specified pressure terms.)
Subroutine OUTBCOF
• Purpose:
To print specifications and results at fluid source/sink nodes to the “.bcof” file.
• Called by:
SUTRA
• Uses:
EXPINT, SCHDEF
• Description:
OUTBCOF writes information that pertains to fluid sources/sink nodes to the “.bcof” output
file. For each time step on which output is requested, OUTBCOF writes the following for
each fluid source/sink node: the node number, where the fluid source/sink was defined (the
138
“.inp” file, subroutine BCTIME, or the optional “.bcs” files), the fluid source/sink value, the
concentration or temperature of the fluid source/sink, and the resultant source/sink of solute
mass or energy.
Subroutine OUTBCOP
• Purpose:
To print specifications and results at specified pressure nodes to the “.bcop” file.
• Called by:
SUTRA
• Uses:
EXPINT, SCHDEF
• Description:
OUTBCOP writes information that pertains to specified pressure nodes to the “.bcop” output
file. For each time step on which output is requested, OUTBCOP writes the following for
each specified pressure node: the node number, where the pressure specification was defined
(the “.inp” file, subroutine BCTIME, or the optional “.bcs” files), the resultant source/sink of
fluid mass, the concentration or temperature of the resultant fluid source/sink, the resultant
source/sink of solute mass or energy, the computed pressure, and the specified pressure.
Subroutine OUTBCOS
• Purpose:
To print specifications and results at specified pressure nodes to the “.bcos” file.
• Called by:
SUTRA
• Uses:
EXPINT, SCHDEF
• Description:
OUTBCOS writes information that pertains to solute or energy source/sink nodes to the
“.bcos” output file. For each time step on which output is requested, OUTBCOS writes the
following for each solute or energy source/sink node: the node number, where the solute or
energy source/sink was defined (the “.inp” file, subroutine BCTIME, or the optional “.bcs”
files), and the solute or energy source/sink value.
139
Subroutine OUTBCOU
• Purpose:
To print specifications and results at specified pressure nodes to the “.bcou” file.
• Called by:
SUTRA
• Uses:
EXPINT, SCHDEF
• Description:
OUTBCOU writes information that pertains to specified concentration or temperature nodes
to the “.bcou” output file. For each time step on which output is requested, OUTBCOU
writes the following for each specified concentration or temperature node: the node number,
where the concentration or temperature specification was defined (the “.inp” file, subroutine
BCTIME, or the optional “.bcs” files), the resultant source/sink of solute mass or energy, the
computed concentration or temperature, and the specified concentration or temperature.
Subroutine OUTELE
• Purpose:
To print elementwise output, organized in columns, to the “.ele” file.
• Called by:
SUTRA
• Uses:
EXPINT, SCHDEF
• Description:
OUTELE writes element numbers, element centroid coordinates, and elementwise solution
data (components of velocity in global coordinates) in a columnwise format that facilitates
importing SUTRA output into post-processing software. The content of each column is
specified in the “.inp” input file, giving the user some control over the format of the output.
140
Subroutine OUTLST2
• Purpose:
To output the following to the “.lst” file for 2D simulations:
Initial conditions
Pressure solutions
Saturation values
Concentration or temperature solutions
Steady-state pressure solution
Fluid velocities (magnitude and direction)
• Called by:
SUTRA
• Description:
For 2D simulations, OUTLST2 is the main output routine for writing to the “.lst” file and is
used for printing solutions.
Subroutine OUTLST3
• Purpose:
To output the following to the “.lst” file for 3D simulations:
Initial conditions
Pressure solutions
Saturation values
Concentration or temperature solutions
Steady-state pressure solution
Fluid velocities (magnitude and direction)
• Called by:
SUTRA
• Description:
For 3D simulations, OUTLST3 is the main output routine for writing to the “.lst” file and is
used for printing solutions.
Subroutine OUTNOD
• Purpose:
To print nodewise output, organized in columns, to the “.nod” file.
• Called by:
SUTRA
141
• Uses:
EXPINT, SCHDEF
• Description:
OUTNOD writes node numbers, node coordinates, and nodewise solution data (pressures,
concentrations or temperatures, and saturations) in a columnwise format that facilitates
importing SUTRA output into postprocessing software. The content of each column is
specified in the “.inp” input file, giving the user some control over the format of the output.
Subroutine OUTOBC
• Purpose:
To print observation data to “.obc” files.
• Called by:
SUTRA
• Calls to:
DP3STR, PUSWF
• Uses:
ALLARR, EXPINT, LLDEF, SCHDEF
• Description:
OUTOBC writes pressures, concentrations or temperatures, and saturations at observation
points to “.obc” files. All observations assigned the OBC output format and the same output
schedule are written to the same “.obc” file.
Subroutine OUTOBS
• Purpose:
To print observation data to “.obs” files.
• Called by:
SUTRA
• Calls to:
DP3STR, LODOBS, PUSWF
• Uses:
ALLARR, EXPINT, LLDEF, SCHDEF
142
• Description:
OUTOBS writes pressures, concentrations or temperatures, and saturations at observation
points to “.obs” files. All observations assigned the OBS format and the same output
schedule are written to the same “.obs” file.
Subroutine OUTRST
• Purpose:
To store p and U results as well as other parameters in the “.rst” file in a format ready for use
as a “.ics” initial conditions file. This file can also act as a backup for restart in case a
simulation is unexpectedly terminated before completion.
• Called by:
SUTRA
• Description:
OUTRST is called upon completion of each ISTORE time steps of a simulation, where the
value of ISTORE is set by the user. OUTRST writes the most recent solution for p and U at
the nodes to the “.rst” file, in a format exactly equivalent to that of the “.ics” input data file.
Information is also written which is used in a warm start (restart) of the simulation. The
results of only the most recent time step are stored in the “.rst” file, as OUTRST rewinds the
file each time before writing.
Subroutine PRSWDS
• Purpose:
To parse character strings into words.
• Called by:
Main program, SUTERR
• Description:
PRSWDS parses the character variable STRING into an array, WORDS, that contains the
individual words that make up STRING. Words are groups of characters separated by one or
more of the single-character delimiter DELIM and/or blanks.
Module PTRDEF
• Purpose:
To define pointers and arrays needed to construct the IA and JA arrays used by the SLAP
solvers.
• Used by:
Main program, PTRSET
143
• Description:
PTRDEF defines two derived types and declares general-purpose linked lists and arrays
HLIST and LLIST, which are used by subroutine PTRSET in constructing the IA and JA
arrays used by the SLAP solvers.
Subroutine PTRSET
• Purpose:
To set up pointer arrays needed to specify the matrix structure used by the iterative solvers.
• Called by:
Main program
• Uses:
ALLARR, PTRDEF
• Description:
PTRSET sets up several pointer arrays that are used to define the “column” matrix structure
used by the SLAP iterative solvers. The information is first stored in linked lists, then
transferred to arrays IA and JA.
Subroutine PU
• Purpose:
To evaluate p and U at given local coordinates within a 2D or 3D element.
• Called by:
PUSWF
• Description:
PU computes p and U by evaluating the basis functions at the specified local coordinates
within the element. The calculations are a subset of those performed by subroutines BASIS2
and BASIS3.
Function PUSWF
• Purpose:
To interpolate p, U, and Sw in time between the beginning and end of a time step.
• Called by:
OUTOBC, OUTOBS
144
• Calls to:
PU, UNSAT
• Description:
PUSWF interpolates p and U linearly between the beginning and the end of a time step. For
unsaturated conditions, it evaluates Sw from the interpolated p value using subroutine
UNSAT.
Subroutine READIF
• Purpose:
1. To read a line from an input file into the character variable INTFIL.
2. To handle opening and closing of inserted files as necessary.
• Called by:
Main program, BCSTEP, BOUND, BOUND1, CONNEC, INDAT0, INDAT1, INDAT2,
SOURCE, SOURCE1
• Calls to:
NAFU, SUTERR
• Uses:
SCHDEF
• Description:
READIF reads a line from an input file into the character variable INTFIL, which is used by
various SUTRA subroutines as a Fortran “internal file” from which input data are read. This
allows list-directed SUTRA input files to be read and processed strictly line-by-line, which
simplifies the identification of errors in the input data. Comment lines and blank lines are
skipped, and inserted files are automatically opened and closed as needed.
Subroutine ROTATE
• Purpose:
To transform a 3D vector by applying a rotation matrix.
• Called by:
DISPR3
• Description:
ROTATE transforms a 3D vector {x} to {xp} by applying the rotation matrix [G].
145
Subroutine ROTMAT
• Purpose:
To compute the transformation matrix that converts a vector from one Cartesian coordinate
system to another.
• Called by:
DISPR3, INDAT1
• Description:
ROTMAT computes the transformation matrix [G] that converts vector {v} from coordinate
system (x, y, z) to coordinate system (x’, y’, z’) according to {v’}=[G]{v}. The overall
transformation is the result of three rotations applied consecutively: A1 = angle of rotation in
the x,y-plane, counterclockwise looking down the +z-axis toward the origin; A2 = angle of
rotation from the x,y-plane, counterclockwise looking away from the origin, up the axis that,
prior to the first rotation, was aligned with the +y-axis; A3 = angle of rotation about the x’-
axis (the axis that, prior to any rotations, was aligned with the x-axis), counterclockwise
looking down the +x’-axis toward the origin.
Module SCHDEF
• Purpose:
To define derived types and declare pointers and arrays associated with schedules and
observation output.
• Used by:
Main program, FOPEN, FRCSTP, INDAT0, INDAT1, LODOBS, NAFU, OUTELE,
OUTNOD, OUTOBC, OUTOBS, READIF, SUTRA, TERSEQ, TIMETS
• Uses:
LLDEF
• Description:
SCHDEF defines derived types and declares pointers and arrays that hold information about
schedules. Array SCHDLS holds basic information about each schedule. Arrays OFP,
IUNIO, FNAMO, and ONCK78 are specific to observation schedules and output.
Subroutine SOLVEB
• Purpose:
To directly solve a matrix equation with a nonsymmetric banded matrix.
• Called by:
SOLVER
146
• Description:
SOLVEB expects the matrix band as a vertical rectangular block with the main diagonal in
the center column, and minor diagonals in the other columns. The upper left-hand corner and
lower right-hand corner of the matrix are blank.
The first section of the routine carries out an LU decomposition of the matrix, which is saved
within the original matrix space. The second section of the routine prepares the right-hand-
side for solution and carries out back-substitution with a given right-hand-side vector.
Subroutine SOLVER
• Purpose:
To call the matrix solver routine specified by the user.
• Called by:
SUTRA
• Calls to:
SOLWRP, SOLVEB
• Description:
SOLVER calls the direct (Gaussian elimination) solver SOLVEB or, by way of SOLWRP,
an iterative solver.
Subroutine SOLWRP
• Purpose:
1. To set up parameters and arrays prior to calling an iterative solver.
2. To call a solver routine from the iterative solver package.
• Called by:
SOLVER
• Calls to:
DSICCG, DSLUGM, DSLUOM
• Description:
SOLWRP is a “wrapper” for the iterative solver package. It sets up the right-hand-side vector
and the solution vector (which contains the initial guess on input to the iterative solver), and
calls an individual solver routine. Subroutines DSICCG, DSLUGM, and DSLUOM are
called to run the CG, GMRES, and ORTHOMIN solvers, respectively.
147
Subroutine SOURCE
• Purpose:
1. To read source node numbers and source values for fluid mass sources and boundary
fluxes and for diffusive and productive U sources, as well as fluxes of U at boundaries; to
check the data; and to print information.
2. To set up pointer arrays that track the source nodes for the simulation.
• Called by:
Main program
• Calls to:
READIF, SUTERR
• Description:
SOURCE reads and organizes, checks and prints information on source nodes for fluid mass,
and for sources of solute mass or energy. The fluid mass source information read is node
number, mass source rate, and U value of any inflowing fluid at this node. If there are NSOP
fluid source nodes, the node numbers become the first NSOP values in vector IQSOP. The
rates are entered in the element corresponding to the nodes at which they are defined in
vectors QIN and UIN, which are of length NN. The source information for U read is node
number and solute mass or energy source rate. If there are NSOU source nodes for U, the
node numbers become the first NSOU values in IQSOU. Vector QUIN is of length NN and
contains the source rates in numerical order by node. Counts are made of each type of source
and are checked against NSOP and NSOU for correctness. A blank (zero) node number ends
the data set for QIN and then for QUIN. One blank element is left at the end of IQSOP and
IQSOU so that a dimension of one is obtained even when no source nodes exist. These arrays
are used primarily in NODAL and BUDGET.
Subroutine SOURCE1
• Purpose:
1. To read time-dependent source node numbers and source values for fluid mass sources
solute/energy sources from the “.bcs” (time-dependent sources and boundary conditions)
input files.
2. To set up pointer arrays that track the source nodes for the current time step.
• Called by:
BCSTEP
• Calls to:
READIF, SUTERR
148
• Description:
SOURCE1 reads and organizes information on time-dependent source nodes for fluid mass
and for solute mass or energy listed in the optional “.bcs” input files. This information is
stored in arrays in a manner that is analogous to that used by subroutine SOURCE, except
that the arrays populated by SOURCE1 include only the time-dependent specifications that
pertain to the current time step.
Subroutine SUTERR
• Purpose:
To handle SUTRA, iterative solver, and Fortran READ errors.
• Called by:
Main program, BCSTEP, BOUND, BOUND1, CONNEC, ELEMN2, ELEMN3, FOPEN,
INDAT0, INDAT1, INDAT2, NAFU, READIF, SOURCE, SOURCE1, SUTRA
• Calls to:
PRSWDS, TERSEQ
• Description:
SUTERR acts as the clearinghouse for errors that occur during a SUTRA run. When an
input data error, nonconvergence of iterations to resolve nonlinearities, an iterative solver
error, or a Fortran READ error occurs, SUTERR is called. SUTERR reports the error, along
with a concise description, and calls subroutine TERSEQ to initiate the termination sequence.
Subroutine SUTRA
• Purpose:
1. To act as primary control on SUTRA simulation, cycling both iterations and time steps.
2. To sequence program operations by calling subroutines for output and most program
calculations.
• Called by:
Main program
• Calls to:
ADSORB, BC, BCSTEP, BCTIME, BUDGET, ELEMN2, ELEMN3, NODAL, OUTBCOF,
OUTBCOP, OUTBCOS, OUTBCOU, OUTLST2, OUTLST3, OUTNOD, OUTELE,
OUTOBC, OUTOBS, OUTRST, SOLVER, SUTERR, ZERO
149
• Uses:
ALLARR, EXPINT, LLDEF, SCHDEF
• Description:
Subroutine SUTRA initializes certain constants and calls OUTLST2 (for 2D) or OUTLST3
(for 3D) to print the initial conditions to the “.lst” file.
The subroutine decides on cycling parameters if steady state pressures will be calculated, and
calls ZERO to initialize arrays. For transient pressure solution steps, time-step cycling
parameters are set and a decision is made as to which (or both) of p and U will be solved for
on this time step. The decision depends on NPCYC and NUCYC, and subroutine SUTRA
sets the switch, ML, as follows:
The switch for steady state flow is ISSFLO, which is set as follows:
Note that time step number, IT, is set to zero for the steady p solution, and increments to one
for the first transport time step.
Subroutine SUTRA increments the simulation clock, TSEC, to the time at the end of the new
time step, and shifts new vectors to previous level vectors, which begins the time step.
BCTIME is called to set user-programmed, time-dependent sources and boundary conditions
if such exist. BCSTEP is called to set time-dependent sources and boundary conditions
specified in the optional “.bcs” files. ADSORB is called if sorption is required. The element-
by-element calculations required to construct the matrix equations are carried out by a call to
ELEMN2 (for 3D) or ELEMN3 (for 3D). NODAL is called to carry out nodewise and
cellwise calculations for the global matrices. BC is called to modify the matrix equations for
boundary conditions.
SOLVE is called for p and or U solution (depending on the value of ML), and if iterations to
resolve nonlinearities are underway, convergence is checked. If iterations are continued,
control switches back to the step, which shifts new to old vectors, and the sequence of calls is
repeated. If no more iterations are required, SUTRA may call OUTLST2 (for 2D) or
OUTLST3 (for 3D) to print results to the “.lst” file if these are requested on the present time
step. BUDGET is called if budget output is requested to the “.lst” file on this time step.
OUTNOD, OUTELE, OUTOBC, OUTOBS, OUTBCOF, OUTBCOS, OUTBCOP, and
OUTBCOU are called to print nodewise results to the “.nod” file, elementwise results to the
“.ele” file, observation data to “.obc” and “.obs” files, and source and boundary condition
node specifications and results to the “.bcof”, “.bcos”, “.bcop”, and “.bcou” files,
respectively, if these are requested on the present time step.
150
If more time steps are to be undertaken, control switches back to the step that initializes
arrays, and continues down from that point. If the simulation is complete, OUTRST is called
if the store option has been selected to set up a “.rst” restart file. At this point, control returns
to the main program.
Subroutine TENSYM
• Purpose:
To transform a symmetric tensor between two Cartesian coordinates systems.
• Called by:
DISPR3, INDAT1
• Description:
TENSYM performs the transformation [P]=[G][T], where [P] and [T] are matrices that
represent a symmetric tensor in two different Cartesian coordinate systems, and [G] is the
rotation matrix that transforms the input coordinate system to the output coordinate system.
[T] is a diagonal matrix. The rotation is defined in term of three angles, ANGLE1, ANGLE2,
and ANGLE3, which correspond to the angles A1, A2, and A3 defined in the description of
subroutine ROTMAT.
Subroutine TERSEQ
• Purpose:
To gracefully terminate a SUTRA run by deallocating the main allocatable arrays and closing
all files.
• Called by:
Main program, SUTERR
• Uses:
ALLARR, SCHDEF
• Description:
TERSEQ is called to execute the termination sequence either by the main program at the
successful completion of a simulation or by SUTERR in the event of an error. It deallocates
the main allocatable arrays, closes all files, and stops the run.
Subroutine UNSAT
• Purpose:
A user-programmed routine in which unsaturated flow functions are specified.
151
• Called by:
BASIS2, BASIS3, BUDGET, INDAT2, NODAL, PUSWF
• Description:
UNSAT is called by INDAT2 to calculate initial saturations at nodes, by BASIS2 (for 2D) or
BASIS3 (for 3D) at each Gauss point in each element during numerical integration, by
NODAL for each cell, by BUDGET for each cell, and by PUSWF at observation points. It
allows the user to specify the functional dependence of relative permeability on saturation or
pressure, and the dependence of saturation on pressure. UNSAT is divided into three
sections. The first section requires the user to specify the saturation-pressure (or capillary
pressure) function. The second section requires the user to specify the derivative or saturation
with respect to pressure. The third section requires the user to specify the relative
permeability dependence on saturation or capillary pressure. INDAT2 and PUSWF require
only values of saturation, BASIS2 and BASIS3 require only values of saturation and relative
permeability, and NODAL and BUDGET require values of saturation and its pressure
derivative. These calculations are controlled in UNSAT by the parameter IUNSAT which
INDAT2 and PUSWF set to a value of three, BASIS2 and BASIS3 set to a value of two, and
NODAL and BUDGET set to one. For simulation of purely saturated flow, IUNSAT is set to
zero by INDAT1, and UNSAT is never called. The user may program these functions in any
convenient way, for example, through data statements, calls to other programs, logical
structures, “read” or “write” statements, or other preferred methods. More information may
be found in section 7.5, “User-Supplied Programming.” Nodes and elements may be grouped
by the user into REGIONS. For each REGION, a different set of unsaturated flow functions
may be specified in UNSAT.
Function TIMETS
• Purpose:
To return the time associated with a given time step.
• Called by:
INDAT0
• Uses:
LLDEF, SCHDEF
• Description:
TIMETS uses the “TIME_STEPS” schedule, which controls time stepping, to determine the
time that corresponds to the end of a given time step.
Subroutine ZERO
• Purpose:
To fill a real array with a constant value.
152
• Called by:
Main program, INDAT2, SUTRA
• Description:
ZERO fills an entire array with a specified value.
SLAP (Sparse Linear Algebra Package; Seager (1989)) is a package of Fortran subroutines
designed to implement a variety of iterative matrix solvers. The package included in SUTRA is a
subset of SLAP version 2.0.2, which in turn is part of the SLATEC Common Mathematical
Library (Vandevender and Haskell, 1982) version 4.1. The SLAP subroutines provided with
SUTRA include only the double-precision versions of the CG, GMRES, and ORTHOMIN
solvers and supporting subroutines. SLAP was not developed by the U.S. Geological Survey;
disclaimers and programming credits appear in the code as comments. The code has undergone
some minor modifications by the authors of SUTRA; such changes are commented in the code.
General documentation for the double-precision SLAP routines appears in the listing of
subroutine DLPDOC. In addition, each SLAP subroutine contains comments describing its
purpose, usage, and arguments.
SUTRA accesses the SLAP package by calling the SLAP subroutines DSICCG (for CG),
DSLUGM (for GMRES), and DSLUOM (for ORTHOMIN) from SUTRA subroutine SOLWRP.
In preparation for calling the SLAP solvers, SUTRA stores the coefficient matrices in SLAP
“column” format. If A is an array that contains the nonzeros of a coefficient matrix, then the
pointer arrays IA and JA define the matrix structure by giving, respectively, the row index of
each entry in A, and the index offsets into the IA and A arrays for the beginning of each column.
For each column, the diagonal entry is listed first, followed by the remaining non-zero entries in
order down the column. The coefficient matrices for the flow (p) and transport (U) problems
have the same structure (the same pattern of nonzeros), so one pair of pointer arrays IA and JA is
used for both matrices.
153
SUTRA SIMULATION EXAMPLES
Chapter 6: Simulation Examples
This chapter outlines a number of example simulations that serve to demonstrate some of the
capabilities of SUTRA modeling. Some of the examples show results that are compared with
analytical solutions or numerical solutions available in the literature. These results serve to verify
the accuracy of SUTRA algorithms for a broad range of flow and transport problems. The other
examples demonstrate physical processes that SUTRA may simulate in systems where no other
solutions are available.
6.1 Pressure Solution for Radial Flow to a Well (Theis Analytical Solution)
Physical Setup:
A confined, infinite aquifer contains a fully penetrating withdrawal well. Fluid is pumped out at
a rate of QTOT.
Objective:
To simulate transient drawdown in this system, which should match the Theis solution. In terms
of variables used in SUTRA, the Theis solution (Lohman, 1979) is given by:
Q TOT μ
s∗ = W(u ) (6.1a)
4 π ρ 2 Δz k g
r 2 μ S op
u= (6.1b)
4kt
157
where r is the radial distance from the well to an observation point and t is the elapsed time since
start of pumping.
Simulation Setup:
The mesh contains one row of elements with element width expanding by a constant factor,
1.2915, with increasing distance from the well; other mesh dimensions are Δrmin=2.5 [m],
Δrmax=25.0 [m], rmax=500.0 [m], Δz=1. [m]. Mesh thickness at node i, is given by Bi=2πri, which
provides a radial coordinate system. The number of nodes and elements in the mesh are: NN=54,
NE=26, respectively. See Figure 6.1.
The initial time step is, Δto=l. [s], with time steps increasing by a factor of 1.5 on each
subsequent step. One pressure solution is obtained per time step and solutions for concentration
are ignored; the cycling parameters are NPCYC=1 and NUCYC=9999.
Parameters:
| g | = 9.81 [m/s2]
Boundary Conditions:
No flow occurs across any boundary except where hydrostatic pressure is specified at rmax. At the
top outside corner of the mesh, rmax, pressure is held at zero. A sink is specified at r=0 to
represent the well.
Initial Conditions:
Hydrostatic pressure with p=0.0 at the top of the aquifer is set initially.
Results:
SUTRA results are plotted for two locations in the mesh representing observation wells at
r=15.2852 [m] and r=301.0867 [m]. Both locations should plot on the same Theis curve. The
match of SUTRA results between 1 and 6000 minutes with the Theis analytical solution shown
in Figure 6.2 is good.
158
Figure 6.2. Match of Theis analytical solution (solid line) with SUTRA solution (+). Radial position, r,
and drawdown, s*, are in meters; time, t, is in minutes.
Physical Setup:
A confined infinite aquifer contains a fully penetrating injection well. Fluid is injected at a rate
of QTOT, with a solute concentration of C*. The aquifer initially contains fluid with solute
concentration Co. The fluid density does not vary with concentration.
Objective:
To use 2D SUTRA to simulate the transient propagation of the solute front as it moves radially
away from the well. The concentrations should match the approximate analytical solutions of
Hoopes and Harleman (1967) and Gelhar and Collins (1971).
⎧ ⎫
⎪ ⎪
r 2 − (r * )
2
⎛ C − Co ⎞ 1 ⎪ ⎪
⎜⎜ ∗ ⎟⎟ = erfc ⎨ 1 ⎬
(6.2)
⎝ C − Co ⎠ 2 ⎪ ⎡⎛ 4 ⎞ * 4⎤2 ⎪
⎪ 2 ⎢⎜ α L ⎟(r ) + ⎜ ⎟(r ) ⎥ ⎪
⎞ * 3 ⎛ Dm
⎩ ⎣⎝ 3 ⎠ ⎝ A ⎠ ⎦ ⎭
159
where
r * = (2At ) 2
1
(6.3a)
⎛ Q ⎞
A = ⎜⎜ TOT ⎟⎟ (6.3b)
⎝ 2 π ε bρ ⎠
The Hoopes and Harleman (1967) solution is obtained by replacing r* in the denominator of (6.2)
with r.
Simulation Setup:
The mesh consists of one row of elements with element width expanding from Δrmin=2.5 [m] by
a factor, 1.06, to r=395.0 [m], and then maintaining constant element width of Δr=24.2 [m] to
rmax=1000.0 [m]. Element height, b, is 10. [m]. Mesh thickness is set for radial coordinates,
Bi=2πri, with the number of nodes and elements given by NN=132 and NE=65, respectively. See
Figure 6.3.
The time step is constant at Δt=4021.0 [s] and outputs are obtained for times steps numbered
225, 450, 900, 1800. One pressure solution is carried out to obtain a steady state, (ISSFLO=1),
and one concentration solution is done per time step (NUCYC=1).
Figure 6.3. Radial finite-element mesh for constant-density solute- and energy-transport examples.
Parameters:
160
Boundary Conditions:
No flow occurs across any boundary except where hydrostatic pressure is specified at rmax. At
the top outside corner of the mesh, rmax, pressure is held at zero. A source is specified at r = 0.0
to represent the injection well.
Initial Conditions:
Initially hydrostatic pressure is set with p = 0.0 at the aquifer top. Initial concentration, Co, is set
to zero.
Results:
SUTRA results after 225, 450, 900 and 1800 time steps are compared with the approximate
analytical solutions of Gelhar and Collins (1971) and Hoopes and Harleman (1967) in Figure 6.4.
The analytical solutions are approximate, and they bound the SUTRA solution at the top and
bottom of the solute front. All solutions compare well with each other, and the SUTRA solution
may be considered more accurate than either approximate analytic solution because it makes no
simplifying assumptions to solve the governing equations and is based on a very fine spatial and
temporal discretization of the governing equation.
Figure 6.4. Match of analytical solutions for radial solute transport of Hoopes and Harleman (1967)
(dashed), Gelhar and Collins (1971), (solid), and SUTRA solution (dash-dot). Number of elapsed
time steps is n.
161
6.3 Radial Flow with Energy Transport (Analytical Solution)
Physical Setup:
A confined aquifer contains a fully penetrating injection well. Fluid is injected at a rate of QTOT,
with a temperature of T*, into the aquifer initially at a temperature of To. For this problem,
density, ρ, and viscosity, μ, are kept approximately constant by injecting fluid that only slightly
differs in temperature from the ambient fluid; i.e., (T*-To) is small.
Objective:
To use 2D SUTRA to simulate the transient propagation of the temperature front as it radially
moves away from the well. The solution should match an approximate analytical solution of
Gelhar and Collins (1971) modified for energy transport. The Gelhar and Collins (1971)
solution, as modified for energy transport is:
⎧ ⎫
⎪ ⎪
⎪⎪ r 2 − (r * ) ⎪⎪
2
⎛ T − To ⎞ 1
⎜⎜ ∗ ⎟⎟ = erfc ⎨ 1 ⎬
(6.4)
⎝ T − To ⎠ 2 ⎪ ⎡⎛ 4 ⎞ * 3 ⎛ λ TOT ⎞ * 4 ⎪⎤
⎪ 2 ⎢⎜ α L ⎟(r ) + ⎜⎜ ⎟⎟(r ) ⎥ ⎪
2
⎪⎩ ⎣⎝ 3 ⎠ ⎝ AT ⎠ ⎦ ⎪⎭
Q TOT
A= (6.5)
2 π ε bρ
⎛ ερc w ⎞
A T = ⎜⎜ ⎟⎟ A (6.6)
⎝ c TOT ⎠
λ TOT = ελ w + (1 − ε ) λ s (6.8)
r * = (2 A T t ) 2
1
(6.9)
The energy solution above may be obtained from the solute solution by retarding the velocity of
transport to represent movement of an isotherm rather than a parcel of solute. This is done by
accounting for energy storage in the solid grains of the aquifer material in the storage term of the
analytical solution.
Simulation Setup:
The mesh used for this example is the same as for the radial solute-transport example (section
6.2). Time steps and frequency of SUTRA outputs are the same as for the radial solute-transport
example. Further, cycling of the SUTRA solution is the same as for the radial solute-transport
example.
162
Parameters:
∂ρ
= 0.0 αL = 10. [m]
∂T
T* = 1.0 [°C]
Figure 6.5. Match of analytical solution for radial energy transport modified from Gelhar and Collins
(1971) (solid line) with SUTRA solution (dashed line). Number of elapsed time steps is n.
163
Boundary Conditions:
No flow occurs across any boundary except where hydrostatic pressure is specified at rmax. At the
top outside corner of the mesh, pressure is held at zero. A source is specified at r = 0.0 to
represent the injection well. Further, the system is thermally insulated along the top and bottom
of the mesh.
Initial Conditions:
Initially, hydrostatic pressure is set with p = 0.0 at the top of the aquifer. The initial temperature
is To = 0.0 [°C].
Results:
SUTRA results after 225, 450, 900 and 1800 time steps are compared with the approximate
(modified) analytical solution of Gelhar and Collins (1971) in Figure 6.5. The analytical solution
has the same relation to the SUTRA solution as it does in Figure 6.4 for solute transport. Thus,
the match is good, and again the SUTRA result may be more accurate than the approximate
analytic result.
164
6.4 Areal Constant-Density Solute Transport (Example at Rocky Mountain Arsenal)
Physical Setup:
This example involves a simple representation of ground-water flow and solute transport at the
Rocky Mountain Arsenal, Denver, Colorado, which is based on the detailed model of the system
by Konikow (1977). The simplified representation consists of an areal model of a rectangular
alluvial aquifer with a constant transmissivity and two impermeable bedrock outcrops which
influence groundwater flow. (See Figure 6.6.)
Figure 6.6. Idealized representation for example at Rocky Mountain Arsenal, and finite-element
mesh. Upper shaded square is the pond, shaded rectangles are impermeable zones, and three
circles are wells.
165
Regional flow is generally from the southeast to the northwest where some discharge occurs at
the South Platte River. This is idealized as flow originating in a constant head region at the top of
the rectangle in Figure 6.6, and discharging to the river at the bottom of the rectangle, which also
acts as a specified head region. Three wells pump from the aquifer (at a rate of QOUT each), and
contamination enters the system through a leaking waste isolation pond (at a rate of QIN, with
concentration, C*). The natural background concentration of the contaminant is Co.
Objectives:
Simulation Setup:
The rectangular mesh consists of 16 by 20 elements each of dimension 1000.0 [ft] by 1000.0 [ft],
as shown in Figure 6.6. (NN=357, NE=320). Mesh thickness, B, is the actual aquifer thickness,
assumed constant for the idealized model.
One steady-state pressure solution is obtained (ISSFLO=1), and one concentration solution is
obtained. The concentration solution is obtained after a single time step of 1000. years, which,
for all practical purposes, brings the concentration distribution to a steady state.
The leaky pond is simulated as an injection of fluid (QIN, C*) at a single node. Where the
impermeable bedrock outcrop occurs, elements are assigned a conductivity value one millionth
of the aquifer values. A single value of constant head is specified along a portion of the top
boundary, and a series of head values is specified along the bottom (river) boundary to represent
changing elevation of the river.
To obtain results in terms of hydraulic head and [ppm], the following must be specified: ρ=1.0,
∂ρ/∂c =0.0, g =0.0, μ=1.0. Hydraulic conductivities are entered in the permeability input data set.
Head values in [ft] are entered in data sets for pressure. Concentrations in [ppm] are entered in
data sets for mass fraction concentration. Sources and sinks are entered in units of volume per
time.
166
Figure 6.7. Nearly steady-state conservative solute plume as simulated for the Rocky Mountain
Arsenal example by SUTRA.
Figure 6.8. Nearly steady-state solute plume (with solute half life ~ 20. years) as simulated for the
Rocky Mountain Arsenal example by SUTRA.
167
Parameters:
B = 40. ft
Boundary Conditions:
No flow occurs across any boundary except where constant head is specified at 250.0 [ft] at the
top of the mesh and where constant head is specified as changing linearly between 17.5 [ft] at the
bottom left corner, and 57.5 [ft] at the bottom right corner of the mesh. Inflow at the top of the
mesh is at background concentration, Co=10.0 [ppm]. A source is specified at the leaky pond
node, and a sink is specified at each well node.
Initial Conditions:
Initial pressures are arbitrary for steady-state simulation of pressure. Initial concentration is
Co=10.0 [ppm].
Results:
A nearly steady-state solute plume for a conservative solute is obtained after a 1000 year time
step shown in Figure 6.7. For a solute which undergoes first order decay with decay coefficient,
–9 –1
γ=l.lx10 [s ] (approximately a 20 year half life), the nearly steady plume is shown in Figure
6.8. Just upstream of the plume envelope is a region in which concentration dips slightly below
background levels. This is due to a numerical problem of insufficient spatial discretization in a
region where the concentration must change sharply from fresh upstream values to contaminated
plume values. Lower dispersivity values would exacerbate the problem in the upstream region,
but minor upstream oscillations do not affect concentration values within the plume.
Results of three simulations using SUTRA in 3D with the areal problem formulated in the (x,y),
(x,z) and (y,z) coordinates, respectively, and extruded into the third dimension are each
equivalent to those obtained using SUTRA in 2D .
168
6.5 Density-Dependent Flow and Solute Transport (Henry (1964) Solution for Seawater
Intrusion)
Physical Setup:
This problem involves seawater intrusion into a confined aquifer studied in cross section under
steady conditions. Freshwater recharge inland flows over saltwater in the section and discharges
at a vertical sea boundary.
The intrusion problem is nonlinear and may be solved by approaching the steady state gradually
with a series of time steps. Initially there is no saltwater in the aquifer, and at time zero, saltwater
begins to intrude the freshwater system by moving under the freshwater from the sea boundary.
The intrusion is caused by the greater density of the saltwater.
Dimensions of the problem are selected to make for simple comparison with the steady-state
dimensionless solution of Henry (1964), and with a number of other published simulation
models. A total simulation time of t=100.0 [min], is selected, which is sufficient time for the
problem to essentially reach steady state at the scale simulated.
Objective:
1) To compare SUTRA results with the solution of Henry (1964), and with other published
simulation results. 2) To test the ability of SUTRA to give the same results in 3D when the 2D
problem is “extruded” into the third dimension, i.e., when the problem is formulated so that the
solution varies in any two of the three coordinate directions, but not in the third direction.
Figure 6.9. Boundary conditions and finite-element mesh for Henry (1964) solution.
169
Simulation Setup:
The mesh consists of twenty by ten elements, each of size 0.1 [m] by 0.1 [m], (NN=231,
NE=200). Mesh thickness, B, is 1.0 [m]. See Figure 6.9. Time steps are of length 1.0 [min], and
100 time steps are taken in the simulation. Both pressure and concentration are solved for on
each time step (NUCYC=NPCYC=1).
A source of freshwater is implemented by employing source nodes at the left vertical boundary,
which inject freshwater at a rate of QIN, and concentration of CIN. The right vertical boundary is
held at hydrostatic pressure of seawater through the use of specified pressure nodes. Any water
that enters the section through these nodes has the concentration of seawater (CBC = Csea).
Parameters:
–9
ε = 0.35 k = 1.020408x10 [m2]
–2
(based on K=1.0x10 [m/s])
⎡ kg(dissolved solids) ⎤
Csea = 0.0357 ⎢ ⎥ B = 1.0 [m]
⎣ kg(seawater) ⎦
∂ρ ⎡ kg(seawater) 2 ⎤ 2
= 700. ⎢ 3⎥
| g | = 9.8 [m/s ]
∂C ⎣ kg(dissolved solids) m ⎦
–2 ⎡ kg(dissolved solids) ⎤
QIN = 6.6x10 [kg/s] CIN = 0.0 ⎢ ⎥
⎣ kg(water) ⎦
(divided among 11 nodes at left boundary)
Boundary Conditions:
No flow occurs across the top and bottom boundaries. A freshwater source is set along the left
vertical boundary. Specified pressure is set at hydrostatic seawater pressure with (ρsea=1024.99
[kg/m3]) along the right vertical boundary. Any inflowing fluid at this boundary has the
concentration, Csea=0.0357 [kg(dissolved solids)/kg(seawater)], of seawater.
Initial Conditions:
Natural steady pressures are set everywhere in the aquifer based on the freshwater inflow, zero
concentration everywhere, and the specified pressures at the sea boundary. These initial
conditions are obtained through a preliminary simulation that calculates steady pressures under
these conditions.
170
Results:
Henry’s results are given for his nondimensional parameters ξ = 2.0, b = 0.1, a ≅ 0.264 (page
C80—Figure 34 in Henry (1964)). To match the Henry parameters using simulation parameters
as listed above, values of D = 6.6x10–6 [m2/s] and Dm = 18.8571x10–6 [m2/s] are required. Some
authors, however, have apparently used a value equivalent to Dm = 6.6x10–6 [m2/s] and
D = 2.31x10–6 [m2/s], which differs from the Henry parameters by a factor equal to the porosity.
In the previous model solutions compared here, only Huyakorn and Taylor (1976) have
employed the higher value of diffusivity, which should match Henry’s solution. A comparison of
SUTRA results using the higher diffusivity value with those of Huyakorn and Taylor (1976)
along the bottom of the section at t=100. [min] is shown in Figure 6.10. Huyakorn and Taylor’s
results are for a number of simulation models based on significantly different numerical
methods. SUTRA results are also shown for the lower diffusivity value. The results of
simulations using the higher diffusivity value compare favorably. Results using the higher value
have also been obtained with the INTERA (1979) finite-difference code at t=100. [min] (with
centered-in-space and centered-in-time approximations). These are compared with SUTRA and
the Henry solution for the 0.5 isochlor in Figure 6.11. The models match well but do not
compare favorably with the analytical solution, which is approximate and may not be as accurate
as the numerical solutions.
Figure 6.10. Match of isochlors along bottom of aquifer for numerical results of Huyakorn and Taylor
(1976) and SUTRA.
171
For the lower value of diffusivity, Dm = 6.6x10–6 [m2/s], (which should not compare with the
Henry result), the SUTRA solution at t=100. [min] is compared in Figure 6.12 with that of
Pinder and Cooper (1970) (method of characteristics), Segol et. al. (1975) (finite elements),
Desai and Contractor (1977) (finite elements–coarse mesh), and Frind (1982) (finite elements).
The match of the numerical 0.5-isochlor solutions is remarkably good; however, it should be
noted that none of these match the analytical solution.
Results obtained using SUTRA in 3D with the problem formulated in the (x,y), (x,z) and (y,z)
coordinates, respectively, and extruded in the third dimension are each equivalent to those
obtained using SUTRA in 2D .
Figure 6.11. Match of isochlor contours for Henry analytical solution (for 0.50 isochlor) (long dashes),
INTERA code solution (short dashes), SUTRA solution (solid line).
Figure 6.12. Match of 0.50 isochlor contours for Henry problem with simulated results for Dm = 6.6 x
10–9 [m2/s] of Pinder and Cooper (1970), (short dashes), Segol, et. al. (1975) (dotted line), Frind
(1982) (long and short dashes), Desai and Contractor (1977) (long dashes). SUTRA results at
isochlors (0.25, 0.50, 0.75) (solid line). Henry (1964) solution for Dm = 18.8571 x 10–9 [m2/s], (0.50
isochlor, dash-dot).
172
6.6 Density-Dependent Radial Flow and Energy Transport (Aquifer Thermal Energy
Storage Example)
Physical Setup:
This is an example of aquifer thermal energy storage. Hot water is injected into an aquifer for
storage and later withdrawn and used as an energy source. The fully penetrating injection wells
are emplaced in a well field in a hexagonal packing pattern. The wells are at the vertices of
contiguous equilateral triangles with sides of 500.0 [m]. This gives approximately radial
symmetry to physical processes surrounding an interior well.
Objective:
Simulation Setup:
The mesh is 30.0 [m] high with a vertical spacing between nodes of 3.0 [m]. The first column of
elements has width Δrmin = 1.0 [m], and element width increases with each column by a factor,
1.1593, to a final column of width, Δrmax = 35.0 [m]. The outside boundary of the mesh is at
rmax = 246.0 [m]. See Figure 6.13. Mesh thickness, B, at any node i, is Bi = 2πri, giving
cylindrical symmetry. The number of nodes and elements in the mesh is given by NN=286 and
NE=250, respectively.
Figure 6.13. Radial two-dimensional finite-element mesh for aquifer thermal energy storage example.
173
The time step is constant at Δt = 3.0 [days]. One pressure solution and one temperature solution
is obtained at each time step (NPCYC=NUCYC=1). The storage coefficient is assumed
negligible, resulting in a steady flow field at any time step. Subroutine BCTIME is programmed
to control the well rate, which changes after 90 days from fluid injection to fluid withdrawal.
This may also be accomplished by stopping the simulation after 90 days and restarting with fluid
withdrawal, using the restart (“.rst”) file as the initial conditions (“.ics”) file.
A time-dependent fluid source is specified at the left vertical boundary (center axis), which
injects 60. [°C] water for 90 days and then withdraws ambient water for 90 days. The right
vertical boundary is held at hydrostatic pressure for water at 20. [°C]. Any inflow at this
boundary has a temperature of 20. [°C]. Thermally insulated and impermeable conditions are
held at the top and bottom of the mesh.
Parameters:
∂ρ
= –0.375 [kg/m3 °C] μ = μ(T) (relation (2.5))
∂T
Boundary Conditions:
Conditions of no flow and thermal insulation are held at all boundaries except where hydrostatic
pressure at T = 20.0 [°C] is specified at rmax. At the top outside corner of the mesh the pressure
is held at zero. A time-dependent source is specified at r = 0.0 to represent the injection-
withdrawal well.
Initial Conditions:
Hydrostatic pressure is specified initially, with p = 0.0 at the top of the aquifer. The initial
temperature is set to To = 20.0 [°C].
174
Results:
SUTRA results during injection after 30 days and 90 days are shown in Figure 6.14 and Figure
6.15. Simulated results during withdrawal are shown in Figure 6.16, Figure 6.17, and Figure 6.18
after 30 days, 60 days, and 90 days of withdrawal. The thermal transition zone (between hot and
cold water) widens throughout the injection-production cycle, due to both dispersion and heat
conduction. The top of the transition zone tips away from the well during the entire cycle, due to
the buoyancy of the hotter water. These two effects combine to cause cooler water to reach the
bottom of the withdrawal well much earlier than if no density differences or dispersion existed.
In addition, although the same quantity of water has been removed as injected, energy is lost to
the aquifer during the cycle as seen at the end of simulation.
175
Figure 6.16. SUTRA results after 30 days of pumping (120 days total elapsed time).
Figure 6.17. SUTRA results after 60 days of pumping (150 days total elapsed time).
Figure 6.18. SUTRA results after 90 days of pumping (180 days total elapsed time).
176
6.7 Constant-Density Unsaturated Flow and Solute Transport (Example from Warrick,
Biggar and Nielsen (1971))
Physical Setup:
Water containing solute infiltrates an initially unsaturated solute-free soil for about two hours.
Solute-free water continues to infiltrate the soil after the initial two hours. The moisture front and
a slug of solute move downward through the soil column under conservative, nonreactive,
constant-density transport conditions, as described in a field experiment by Warrick, Biggar, and
Nielsen (1971).
Objective:
To simulate the transient propagation of the moisture front and solute slug as they move
downwards through the soil column, under a simulation setup equivalent to that used by Van
Genuchten (1982) to represent the field experiment. The solutions should match the best fine
grid, fine time step simulation results of Van Genuchten (1982), which were obtained with a
number of different finite difference and finite element numerical methodologies.
Simulation Setup:
The mesh consists of a single 2.0 [m] long and 0.01 [m] wide vertical column of 100 elements
oriented in the direction of gravity. The number of nodes and elements is NN = 202 and NE =
100, respectively. Each element is 0.01 [m] wide and 0.02 [m] high. Mesh thickness is 1.0 [m].
The vertical coordinate, x, is measured downward from the top of the column.
The time step is constant at Δt = 30.0 [s], and because of the small time step, only one iteration is
done per step. The simulation is carried out for nine hours of infiltration.
Outputs are obtained once each hour, but are only compared at two hours and nine hours. There
is one pressure solution and one concentration solution each time step.
Parameters:
177
μ = 1.0 x 10–3 [kg/m s] αT = 0.0 [m]
| g | = 9.81 [m/s2]
Boundary Conditions:
The top boundary, which represents an infiltration pond, is held fully saturated, Sw = 1.0 (water
content εSw = 0.38) during the simulation by specification of pressure at
p = -1421.96 [kg/(m s2)]. The bottom boundary is held at a specified saturation of
Sw = 0.526316, (water content εSw = 0.20) by specification of pressure, p = –15616.5
[kg/(m s2)]. No flow occurs across either side boundary, but flow enters the top boundary due to
the pressure specification. The concentration of inflowing fluid at the top is held at
C = 209.0 [meq/liter] until time t = 168.0 [min], at which time the concentration of the inflow
drops to C = 0.0 [meq/liter]. Note that the concentration units are arbitrary (need not be mass
fractions) because this is a constant-density simulation.
Initial Conditions:
Initially, pressures are set to obtain the following initial distribution of saturation, shown in
Figure 6.19:
Results:
SUTRA results after two hours and nine hours of infiltration are shown with the finely
discretized solutions of Van Genuchten (1982) for saturation in Figure 6.19, and for
concentration in Figure 6.20. The results coincide almost exactly for both early and late time, so
only one curve can be shown for each time. Although the SUTRA results are obtained with a
noniterative solution and small time steps, similar results may be obtained with longer time steps
and a few iterations per step. The concentration front lags behind the moisture front, as the
volume between the concentration front and top boundary represents the water that has
infiltrated. The volume of water between the moisture front and concentration front represents
the initial water in the medium that has been displaced by the infiltrating water.
178
Figure 6.19. Propagation of moisture front for unsaturated flow and solute-transport example.
Results of Van Genuchten (1982) and SUTRA shown in same solid line. The lowest curve is the
initial condition.
Figure 6.20. Propagation of solute slug for unsaturated flow and solute-transport example. Results of
Van Genuchten (1982) and SUTRA shown in same solid line.
179
6.8 Variable-Density Saturated-Unsaturated Flow and Solute Transport (Comparison of
2D-Radial and Fully 3D SUTRA Solutions)
Physical Setup:
A circular island in the sea undergoes a prolonged drought, during which the water table declines
to sea level, and all ground water beneath the island becomes saline. Then, renewed freshwater
recharge finally restores the island’s freshwater lens. This example concerns simulation of the
post-drought recharge and restoration of the lens.
Following the drought, the water table is at sea level and both the saturated aquifer below sea
level and the unsaturated zone above sea level contain only seawater. Fresh rainwater recharge to
the surface of the island begins and continues at a constant rate, raising the water table on the
island, flushing out seawater, and eventually establishing a stable freshwater lens and a diffuse
saltwater-freshwater interface. The aquifer on the island is unconfined with both unsaturated and
saturated zones and the material properties are generally homogeneous but permeability is
anisotropic.
Objective:
The problem is simulated twice, using both a 2D radial mesh and a fully 3D, vertically aligned
mesh that is irregular in the two “horizontal” node numbering directions and layered in the
vertical direction. The 3D steady-state solution is compared with the 2D solution to verify that
3D simulation gives results equivalent to those obtained using the well-established 2D SUTRA
code. Although the solution is radially symmetric, the 3D simulation must arrive at this result
using rectangular (x, y, z) (not radial) coordinates and a finite-element mesh that does not
inherently favor a radially symmetric solution. To reduce the size of the simulation, the 3D mesh
represents only one fourth of the entire island, taking some advantage of radial symmetry of the
3D solution.
Simulation Setup:
The 2D mesh has 60 elements in the radial direction and 25 elements vertically, giving
NN=1,586 and NE=1,500. See Figure 6.21. Elements are 20 m wide and 5 m high, except within
5 m of the top surface, where they are 1 m high, and within 100 m of the coast, where they are
(200 m)/30 ≈ 6.7 m wide. Vertical discretization in the unsaturated zone is relatively coarse
because, in this problem, the intent is to approximately locate the water table and the details of
the saturation distribution are of less interest. Mesh thickness at node i is given by Bi=2πri,
thereby providing a radial coordinate system.
The 3D mesh is discretized vertically into 25 layers of elements, with 1,567 elements in each
layer, giving NN=42,432 and NE=39,175. See Figures 6.22 and 6.23. Symmetry is invoked to
reduce the size of the problem while maintaining a fully 3D mesh; only one quadrant of the
island is simulated. The outer boundary approximates a circle of radius 800 m and is sufficiently
distant from the island that it does not significantly influence the results.
The runs are transient in both pressure and concentration. The time step size is Δt = 6311520. s
(0.2 yr). Because only the long-time (steady-state) behavior of the system is of interest, a single
iteration for resolving nonlinearities is used per time step. The system essentially achieves a new
steady state after 100 time steps (20 yr).
180
Figure 6.21. Boundary conditions and finite-element mesh for the 2D island model. Vertical
exaggeration = 4x.
Figure 6.22. Top view of the 3D finite-element mesh for the island model.
181
Figure 6.23. Oblique view of the 3D finite-element mesh for the island model. Vertical
exaggeration = 4x.
For 2D, the direct solver is used. For 3D, the CG solver is used for p solutions, and the
ORTHOMIN solver is used for C solutions, both with a convergence tolerance of 1 x 10-13. Each
3D p solution requires from 5 to 29 solver iterations, and each 3D C solution requires from 5 to
17 iterations.
Parameters:
α = 1.0 x 10-8 [m·s2/kg] β = 4.47 x 10-10 [m·s2/kg]
(The α and β values imply that Sop = 9.0447 x 10-9 [m·s2/kg].)
kH = 5.0 x 10-12 [m2] ε = 0.1
kV = 5.0 x 10-13 [m2] μ = 1.0 x 10-3 [kg/m·s]
|g| = 9.81 [m/s2] σw = 1.0 x 10-9 [m2/s]
ρ0 = 1000. [kg/m3] ⎡ (kg dissolved solids) ⎤
3
Csea = 0.0357 ⎢ ⎥
ρsea = 1024.99 [kg/m ] ⎣ (kg seawater) ⎦
∂ρ ⎡ (kg seawater)/m 3 ⎤ ⎧ 10. for horizontal flow
= 700. ⎢ ⎥ αL = ⎨ [m]
∂C ⎣ (kg dissolved solids) ⎦ ⎩ 2.5 for vertical flow
Dm = 1.0 x 10-9 [m2/s] αT = 0.1 [m]
182
QIN = 2.3766x10-5 [kg/(m2 of horizontally projected land surface area)·s] on land
(equivalent to 75. [cm/yr] of recharge)
Boundary Conditions:
In the 2D cylindrical model (see Figure 5.1), no flow crosses the inner boundary (the axis of
radial symmetry, r = 0) and the bottom boundary (z = -100 m). Specified pressure is set at
hydrostatic seawater pressure along the vertical outer boundary (r = 800 m). Along the top
boundary, nodes at or above sea level (r ≤ 500 [m]) receive freshwater recharge (equivalent to
75.0 cm/yr) totaling 18.665773 kg/s of recharge for the entire circular island. The amount of
recharge at each node is determined by the surface area of its cell on the top surface of the
cylindrical 2D model; the concentric ring-shaped cells have areas that increase as 2πr. In the
region where the island surface slopes down towards the coast, 400 m ≤ r ≤ 500 m, the surface
area used for calculating recharge is the horizontal projection of this sloping area (area reduced
by cosine of the dip angle). At nodes below sea level, the pressure is specified to be hydrostatic
seawater pressure. Any fluid that enters at points of specified pressure has the concentration of
seawater. The value for the specified pressure boundary condition factor, GNUP, in 2D is
1.0x10+5.
In the 3D model, no flow crosses the planes of symmetry (x = 0 and y = 0). All other 3D
boundary conditions are directly analogous to those in the 2D formulation. The value for the
specified pressure boundary condition factor, GNUP, in 3D is 100.0. If 2D and 3D simulations
are set up using the graphical preprocessor, SutraGUI (Winston and Voss, 2003), small
discrepancies may be expected between these models in some parameters, such as recharge to
the top surface. However, despite the obvious differences in spatial discretization, according to
the fluid budgets output by SUTRA, the total recharge to the top surface of the entire island in
2D and 3D representations matches to five significant figures: 18.665773 kg/s in 2D and
18.665651 kg/s in 3D. Note that the 3D value is for the entire island; because of symmetry, only
one-quarter of the island is simulated.
Initial Conditions:
Seawater concentration and natural steady-state pressures are initially set everywhere in the
aquifer. The natural initial pressure values are obtained through an extra initial simulation that
calculates steady pressures for the conditions of seawater concentration throughout, zero
recharge at the surface of the island, and specified hydrostatic pressures along the sea bottom and
the outer boundary.
183
Figure 6.24. Comparison of results from the 2D and 3D models of the island problem; solute
concentrations at t = 20 yr. Solid lines indicate 2D results. Dashed lines indicate 3D results, which
are shown within the vertical 3D plane y = 0 m. Concentration is expressed as the fraction of
seawater concentration. The 3D mesh is shown at y = 0 m. Vertical exaggeration = 4x.
Figure 6.25. Comparison of water saturation, Sw, results from the 2D and 3D models of the island
problem at t = 20 yr. Thick solid line indicates 2D result. Thick dashed line indicates 3D result, which
is shown within the vertical 3D plane y = 0 m. Thin dashed line indicates sea level. Water saturations
of one plotted along zero pressure contours from 2D and 3D models.The 3D mesh is shown at y = 0
m. Vertical exaggeration = 40x.
184
Results:
Results are reported 20 years after recharge begins, by which time the system has nearly reached
a new steady state. (Note that more-exact steady-state solutions may be obtained by running
longer simulations, e.g. 40 years or more.) To verify that results from the 2D and 3D models are
consistent, solute concentrations, saturations and the water table location along a cross section of
the 3D model at y=0 are compared with those obtained using the 2D model. See Figures 6.24 and
6.25. In both figures, contoured results from the 2D and 3D models are practically identical and
are difficult to distinguish. Further, to verify that the 3D results are radially symmetric,
concentrations at 35 m below sea level are plotted in Figure 6.26. This example demonstrates
that (even for relatively coarse meshes) 2D SUTRA simulation and 3D SUTRA simulation
provide consistent saturated-unsaturated, variable-density fluid flow and solute transport results.
Figure 6.26. Areal view of results from the 3D model of the island problem; solute concentrations at
35 m below sea level at t = 20 yr. Concentration is expressed as the fraction of seawater
concentration. Dashed line indicates the coastline, which is circular.
185
SUTRA SIMULATION SETUP
187
Chapter 7: Simulation Setup
The following is a complete list of data required to setup a simulation with SUTRA. (1) The
information included in the list is the parameter name used in this report (if it has been
mentioned), (2) the parameter units, (3) the parameter name in the input data list, and (4) a short
explanation of the parameter.
mesh structure:
“2D IRREGULAR”
“2D REGULAR”
MSHSTR “2D BLOCKWISE”
“3D IRREGULAR”
“3D LAYERED”
“3D REGULAR”
“3D BLOCKWISE”
189
IIN(1-8) nodal incidence list in each element (for 2D,
only IIN(1-4) are used)
Flow parameters
190
εi [1] POR(I) volumetric porosity of solid matrix at each
node
191
Transport parameters
192
Reaction and production parameters
Production
193
Boundary conditions and source data
The input data listed immediately below pertain to dataset 19 of the “.inp” file.
Analogous input data are defined for dataset 5 of the “.bcs” (time-dependent sources and
boundary conditions) files. Input datasets are described in Appendix B.
The input data listed immediately below pertain to dataset 17 of the “.inp” file.
Analogous input data are defined for dataset 3 of the “.bcs” (time-dependent sources and
boundary conditions) files. Input datasets are described in Appendix B.
Q IN i [M/s] QINC, QIN(I) fluid source rate at source node IQCP (for
all nodes)
194
Energy or Solute Data—
Specified Temperatures or Concentrations
The input data listed immediately below pertain to dataset 20 of the “.inp” file.
Analogous input data are defined for dataset 6 of the “.bcs” (time-dependent sources and
boundary conditions) files. Input datasets are described in Appendix B.
The input data listed immediately below pertain to dataset 18 of the “.inp” file.
Analogous input data are defined for dataset 4 of the “.bcs” (time-dependent sources and
boundary conditions) files. Input datasets are described in Appendix B.
195
Initial conditions
pi(t=to) [M/(L s2)] PVEC(II) initial pressure at all nodes in mesh (for
UNIFORM, a single value; for
NONUNIFORM, a list of values)
196
schedule type:
“TIME LIST”
SCHTYP “TIME CYCLE”
“STEP LIST”
“STEP CYCLE”
197
ISLIST list of time steps (STEP LIST schedules
only)
198
ITRMXU maximum number of solver iterations during
U solution
Observation Option
199
XOBS X coordinate of observation point
Budget Option
= “Y” (output fluid mass and energy or
CBUDG solute mass budgets to “.lst” file)
= “N” (no budgets)
Output Controls
200
NCOLPR results are output to “.nod” file every
NCOLPR time steps
201
7.2 Discretization Rules of Thumb
Proper discretization in space and time is the vital factor in obtaining accurate simulation of the
physics of flow and transport with a numerical model such as SUTRA. Adequate discretization is
vital for two reasons: 1) the ability of a model to represent the variations in system parameters
and to simulate complex processes depends on the fineness of discretization, and, 2) the accuracy
and stability of the numerical methods used to represent system processes, in particular,
transport, depends on the spatial and temporal discretization. This section describes some general
guidelines for designing adequate discretization for simulation with SUTRA.
A “sufficiently good” discretization allows for accurate simulation of the processes and
parameter variations at the scale of interest, and thus the goodness of a discretization is a relative
rather than absolute factor. A better discretization is always obtained by making existing
discretization finer, but the finer the discretizations are, the more computationally expensive the
simulations become.
Relative to a certain adequate level of fineness, even finer discretizations do not practically
improve the accuracy of simulation. In contrast, discretization that is too coarse may completely
obscure parameter variations and processes of interest in a simulation, and give highly inaccurate
results. Unfortunately, simulation results based on inadequate discretization may appear to be a
reasonably good representation of flow and transport physics in a particular system. The only
way to explicitly check for inadequate discretization of a system is to simulate with a
discretization that is assumed to be adequate and then with a significantly finer discretization and
compare results. If there are no telling differences in the results, then the coarser simulation
indeed has been adequately discretized.
Some general guidelines for obtaining adequate discretization, both for parameter representation
and for accuracy and stability of numerical methods are given below.
1) Nodes are required where boundary conditions and sources are specified. Should accurate
simulation of processes near these specified points be required, then a finer mesh is needed in
these areas.
2) A finer mesh is required where parameters vary faster in space. This is often the case near
sources or boundary conditions specifying inflows of fluid, solute or energy. The fineness
required is that which makes the nodewise, cellwise, or elementwise discretization of the
parameter values a good representation of the actual distributions. When a parameter distribution
is known a priori, then this discretization is straightforward. However, when the parameter
distribution depends on the simulation results then judgment must be exercised in discretization,
and the result may be tested by experiment with various discretizations.
It is important to recognize that each node or element does not alone represent a physical entity
in an aquifer system. This is demonstrated in the following example, which shows that one layer
of elements is not a good representation in cross section of a semiconfining layer or aquifer unit.
Although permeability is specified elementwise and the permeability of two aquifer units
separated by confining layer, viewed in cross section, is clearly represented visually by three
layers of elements, the numerical model does not “see” three distinct layers of permeability. Each
202
node at the boundary of these layers experiences some average of the two permeabilities rather
than either one. Thus, no node in the system experiences the assigned low permeability of
confining layer, and the three-layer discretization is inadequate. More layers of elements are
required in each unit to obtain adequate discretization although the model always experiences an
average permeability in the elements making up the boundaries of the units. Further refinement
of discretization would be required to represent the pressure distribution should accurate
simulation of sharply varying pressures across the confining layer be required.
3) The spatial stability of the numerical approximation of the unified transport equation (2.52)
depends on the value of a mesh Peclet number, Pem, given by:
εS w v ΔL L
Pe m = (7.1)
[εS (σ
w w + α L v ) + (1 − ε )σ s ]
where ΔLL is the local distance between element sides along a streamline of flow. Spatial
instability appears as one or more oscillations in concentration or temperature. Stability is
guaranteed in all cases when Pem ≤ 2, which gives a criterion for choosing a maximum
allowable element dimension, ΔLL, along the local flow direction. This criterion significantly
affects discretization. Spatial stability is usually obtained with SUTRA when
Pe m ≤ 4 (7.2)
which gives a less-stringent criterion. Mesh design according to the criterion is critical when
concentrations or temperatures change significantly along streamlines, such as when a front is
propagated in the direction of flow. When concentrations or temperatures exhibit small changes
along streamlines, then the criterion (7.2) may safely be violated, even by a few orders of
magnitude, without inducing spatial instability. An example of this may be cross sectional
simulation of an aquifer containing freshwater and saltwater. In such a case, flow often is
directed parallel to the front between freshwater and saltwater, allowing use of discretization
with large mesh Peclet numbers.
In the typical case of solute or energy transport with longitudinal dispersion primarily due to
longitudinal mixing, the mesh Peclet number becomes:
⎛ ΔL L ⎞
Pe m ≈ ⎜⎜ ⎟⎟ (7.3)
⎝ αL ⎠
203
A discretization rule of thumb for simulation with SUTRA that guarantees spatial stability in
most cases is:
ΔL L ≤ 4α L (7.4)
While (7.4) deals with adequate discretization for numerical stability, it may be interpreted from
another point of view. Taken in combination with the considerations of guideline (2) requiring at
least five elements across a front, (7.4) implies that a minimum front width which may be
simulated when the mesh is designed according to ΔLL ~ 4αL is 20αL. Thus for early times
following onset of localized energy or solute source, the sharp front that should result may be
simulated inaccurately, as its width is less than 20αL.
4) Discretization for transverse dispersion also may be related to dispersivity. Although an exact
guideline is not given, the object of transverse discretization is to make the local element
dimension perpendicular to a streamline small relative to the total transverse dispersivity:
1
ΔLT < α T + [εSw σ w + (1 − ε )σ s ] (7.5)
v
where ΔLT is the local element dimension transverse to the flow direction. In the case where the
transverse mixing rather than diffusion dominates the transverse dispersion, an adequate but
stringent rule of thumb may be ΔLT < 10αT, although simulation results should be compared for
various transverse discretizations.
5) Radial/cylindrical meshes with a well require very fine discretization near the center axis to
accommodate the sharply curving pressure distribution. The radial element dimensions may
increase outward and become constant at, for example, a size of 4αL.
6) Unsaturated flow simulation requires at least as fine discretization as does transport. Spatial
instability appears as an oscillation in saturation values. Unsaturated flow parameters may vary
sharply in space, especially during wetting events. A rule of thumb is to design the mesh to have
at least five elements across a saturation front.
7) Discretization in time is done by choosing the size of time steps. Actual time step sizes may
be as large as possible while providing adequate discretization of parameter changes in time. As
with spatial discretization, the adequacy of a temporal discretization may be tested only by
comparing results of simulations carried out with different time step sizes.
For saturated flow simulation, temporal discretization begins with fine time steps, which may
become significantly larger as the system response slows. The time-step multiplier feature is
provided in SUTRA input data to allow this type of temporal discretization.
For unsaturated flow simulation with SUTRA, temporal discretization must be fine enough to
keep saturation changes at each node to be small over any time step. A rule of thumb is that over
a time step, the maximum saturation change is about 0.1.
For transport simulation, temporal changes in concentration or temperature at a point in space are
often due to the movement of fronts with the fluid flow. Therefore, adequate discretization of
204
these parameters in time is often related to both fluid velocity and spatia1 gradients in the
parameters. The higher the longitudinal spatial gradient and fluid velocity, the smaller the time
step required for adequate temporal discretization. A general guideline is that relatively sharp
fronts require time discretization, which allows them to move only a fraction of an element per
time step. Broad fronts with low gradient in concentration or temperature have adequate
temporal discretization when time steps are chosen to move the front one or more elements per
step.
Usually a constant time step size is chosen for transport simulation when flow velocities remain
relatively constant during a simulation. For saturated flow and transport, if adequate temporal
pressure discretization would allow larger time steps than the temporal transport discretization,
then a pressure solution may be done only every n time steps for transport. For example, if the
adequate pressure time step is ten times that of transport, then SUTRA input data requires the
specification: NPCYC = 10, NUCYC = 1.
205
7.3 Program Dimensions
The main program computes the dimensions of the various arrays used in the SUTRA code.
These arrays are dynamically allocated in the main program. The table below lists the maximum
total storage required by SUTRA Version 2.2 for dynamically allocated arrays of real numbers,
integers, character variables, and pointers, depending on the dimensionality of the problem and
the type of solver(s) used:
*
NI1BCS represents the contribution from arrays of type INTEGER(1), which require only 1 byte per array
element.
**
For the present purpose, the effective dimension of a character array is defined as the array dimension
multiplied by the length of the character variable. For example, an array of dimension 100 and type
CHARACTER*40 has an effective dimension of 100*40=4,000.
206
The quantities in the table above are defined as follows:
NN = number of nodes
NE = number of elements
NBI = full bandwidth of matrix (NBI is equal to one plus twice the maximum
difference in node numbers in the element containing the largest node
number difference in the mesh. See Figure 7.1)
NSOP = number of fluid source nodes
NSOU = number of solute or energy source nodes
NPBC = number of specified pressure nodes
NUBC = number of specified U nodes
NBCN = NPBC + NUBC + 1
NOBS = number of observation points
NSCH = number of schedules
Figure 7.1. Minimization of bandwidth by careful numbering of nodes. In this 2D example, the same
mesh has been numbered two different ways. In the first numbering scheme, the largest difference
between node numbers in a single element is 15, giving a bandwidth of 1+2(15)=31. In the second
numbering scheme, the largest difference between node numbers in a single element is 5, giving a
bandwidth of 1+2(5)=11. The same principle applies to 3D meshes; the bandwidth equals one plus
the maximum difference between nodes numbers in the element that contains the largest node
number difference in the mesh.
207
= length of matrix storage arrays for iterative solvers
NELT = 9*NN - 6*NN1 - 2 in 2D
= 27*NN - 6*NN1*(3*NN2 + 1) - 2 in 3D
= length of floating-point workspace array for iterative solvers
= NL + 5*NN + 1 for CG solver
NWF = NELT + 16*NN + 132 for GMRES solver
= NELT + 39*NN + 11 for ORTHOMIN solver
(if two different iterative solvers are used, the larger value applies)
= length of integer workspace array for iterative solvers
= 2*NL + 11 for CG solver
NWI = 2*NELT + 31 for GMRES solver
= 2*NELT + 11 for ORTHOMIN solver
(if two different iterative solvers are used, the larger value applies)
NL = (NELT + NN)/2 (defined for CG solver only)
= 3*NN + 4*NBCN if optional “.bcs” input files are defined in
NRBCS SUTRA.FIL
= 7 otherwise
= 2*NBCN + NSOP + NSOU if optional “.bcs” input files are defined in
NI1BCS SUTRA.FIL
= 4 otherwise
= total number of times dataset 2 appears in all “.bcs” files,
NCIDB if any
= 1 otherwise
ITMAX = number of time steps for which the simulation is scheduled
Please see the main program listing in the SUTRA source code for the memory requirements of
the most recent version of SUTRA. The memory requirements are calculated by SUTRA and
reported in the “.lst” output file. Note that the expressions given in the table above include only
the maximum memory used by dynamically allocated arrays and pointers, though these account
for the vast majority of the memory usage. SUTRA uses a small amount of additional memory
for the storage of various program variables.
SUTRA reads information from three input files and writes information to as many as eleven
types of output files. One of the input files, permanently assigned the name “SUTRA.FIL”,
contains the file name (and, optionally, the Fortran unit number assignments) for the remaining
input and output files. (See section 7.7 for details regarding the input format for the
“SUTRA.FIL” file.) Two other input files and one of the output files must always be assigned
by the user. For one of the input files and all of the remaining output files, assignment is either
entirely optional or required only if certain simulation and output options are desired. In the list
below, “filename” is a user-specified prefix for the input and output files to be used in a specific
simulation. The boldface suffixes (such as .inp) are the recommended file type extensions for
the input and output files.
208
INPUT FILES:
SUTRA.FIL
UNIT-K0
The UNIT-K0 file, “SUTRA.FIL”, is a permanently assigned file that contains
user determined file names and (optionally) unit number assignments for units K1
– K8 in each simulation. SUTRA sets K0 = 10.
filename.inp
UNIT-K1
A file must be assigned as fortran-unit-K1. This “.inp” file contains all of the
input data necessary for simulation except initial conditions and time-dependent
sources and boundary conditions.
filename.bcs
UNIT-K9
Optional input files can be assigned as fortran-unit-K9. These “.bcs” files contain
specifications for time-dependent sources and boundary conditions.
filename.ics
UNIT-K2
A file must be assigned as fortran-unit-K2. This “.ics” file contains initial
conditions of pressure and concentration or temperature for the simulation to be
done.
OUTPUT FILES:
SUTRA.SMY or filename.smy
UNIT-K00
A file can be assigned as fortran-unit-K00. (If not assigned by the user, it defaults
to file name “SUTRA.SMY”.) This “.smy” file summarizes simulation progress,
captures errors and convergence information.
filename.lst
UNIT-K3
A file must be assigned as fortran-unit-K3, in which the primary output of the
simulation will be placed. This is the “.lst” file.
filename.rst
UNIT-K4
An optional output file must be assigned as fortran-unit-K4 if the option to save
the solution of the most recently completed time step for later restart is chosen in
UNIT-K1 (when ISTORE ≥ 1). Data will be placed in this “.rst” file in a format
equivalent to UNIT-K2 data so that this file may later be used as UNIT-K2 (“.ics”)
initial conditions.
filename.nod
UNIT-K5
An optional output file must be assigned as fortran-unit-K5 to save nodewise
simulation results in a columnwise format at a time step interval specified by the
user. This is the “.nod” file.
209
filename.ele
UNIT-K6
An optional output file must be assigned as fortran-unit-K6 to save elementwise
simulation results in a columnwise format at a time step interval specified by the
user. This is the “.ele” file.
filename.obs
UNIT-K7
An optional output file must be assigned to save simulation results at observation
points in a format that writes results time step by time step, with observation
points listed across the page. This is the “.obs” file. All observation results for
which the OBS format and the same output schedule have been specified are
written to the same “.obs” file. SUTRA automatically opens the required number
of “.obs” files. The “.obs” file currently being written to is assigned to fortran-
unit-K7.
filename.obc
UNIT-K8
An optional output file must be assigned to save simulation results at observation
points in a format that writes results time step by time step, with observation
points listed down the page. This is the “.obc” file. All observation results for
which the OBC format and the same output schedule have been specified are
written to the same “.obc” file. SUTRA automatically opens the required number
of “.obc” files. The “.obc” file currently being written to is assigned to fortran-
unit-K8.
filename.bcof
UNIT-K10
An optional output file must be assigned as fortran-unit-K10 to save
specifications and computed results pertaining to fluid-source/sink nodes. This is
the “.bcof” file.
filename.bcos
UNIT-K11
An optional output file must be assigned as fortran-unit-K11 to save
specifications and computed results pertaining to solute/energy-source/sink nodes.
This is the “.bcos” file.
filename.bcop
UNIT-K12
An optional output file must be assigned as fortran-unit-K12 to save
specifications and computed results pertaining to specified-pressure nodes. This is
the “.bcop” file.
filename.bcou
UNIT-K13
An optional output file must be assigned as fortran-unit-K13 to save
specifications and computed results pertaining to specified-
concentration/temperature nodes. This is the “.bcou” file.
The data lists and formats for the input files are given in Appendix B, “SUTRA Input Data List.”
210
7.5 User-Supplied Programming
When SUTRA is used for simulation of systems with unsaturated flow, the user must code the
desired unsaturated flow functions in subroutine UNSAT. As an alternative or supplement to
specifying time-dependent sources and boundary conditions in “.bcs” files, the user can program
temporal variations in subroutine BCTIME. Specifications made in “.bcs” files take precedence
over those made in the “.inp” file and subroutine BCTIME.
Subroutine UNSAT
The general operation of this subroutine is described in section 5.10, “Program Structure.” Given
a single value of pressure, UNSAT must provide values of Sw, ( ∂ Sw/ ∂ p), and kr. UNSAT
consists of three sections. The user must supply code in each of these sections. An example using
the unsaturated flow functions (2.8), (2.11), and (2.21a) and (2.21b) is given in subroutine
UNSAT itself.
The first section requires specification of saturation, Sw, as a function of pressure, p. The second
section requires specification of the derivative of saturation with respect to pressure, p, or
saturation, Sw. The third section requires specification of the relative permeability, kr, as a
function of saturation, Sw, or pressure, p. The pressure value that is passed to UNSAT is the
projected value, the most recent iterate, or the newly obtained solution. The values are either at
Gauss points or at nodes.
Any convenient programming algorithm may be used to implement these functions in UNSAT.
Some possibilities are use of explicit expressions, as in the example; use of data statements; use
of logical statements to give piecewise continuous functions; or use of READ statements to input
new data to the functions from either the “.inp” input file or a new data file. In some cases
involving entry pressure or residual saturation, logical statements may be used to apply different
functions for different ranges of Sw or p.
Subroutine BCTIME
The general operation of this subroutine is described in section 5.10, “Program Structure and
Program Unit Descriptions.” At the beginning of each time step, BCTIME can be used to
provide time-dependent sources and boundary conditions in addition to those specified in
optional “.bcs” files: specified pressure values and temperature or concentration values of fluid
inflow at these nodes; values of specified temperature or concentration; values of specified fluid
sources (or sinks) and temperatures or concentrations of these flows if they are inflows; and
values of energy or solute mass sources (or sinks). Specifications made in “.bcs” files take
precedence over those made in the “.inp” file and subroutine BCTIME.
BCTIME consists of four sections, each dealing with one of the above types of specification. For
time-dependent sources and boundary conditions set using BCTIME, the user must supply code
in the corresponding section (or sections) of the subroutine.
The first section is used for specifying either time variation of pressure, or time variation of the
temperature or concentration of any fluid that enters the system at a point of specified pressure,
or both. The coding must be entered within a loop that checks all NPBC specified pressure nodes
for the time-variability flag. This flag is a negative node number in the list of specified pressure
211
nodes IPBC(IP). The counter for the list is IP. When the loop finds that the IPth node number,
IPBC(IP), is negative, then the actual node number is given by I = -IPBC(IP). In this case, the
user must supply code that specifies a value appropriate for the current time step, for both
PBC(IP), which is the specified pressure for the IPth specified pressure node (node I), and for
UBC(IP), which is the specified temperature or concentration of any inflow at the IPth specified
pressure node (node I). The loop skips over node numbers in the list IPBC(IP) that are positive.
The second section is used for specifying time variation of temperature or concentration. The
coding must be entered within a loop that checks all NUBC specified temperature or
concentration (U) nodes for the time-variability flag. This flag is a negative node number in the
list of specified U nodes, IUBC(IU). The list begins in the (NPBC + l)th element of IUBC as
shown in the description of subroutine BOUND in section 5.10, “Program Structure and Program
Unit Descriptions.” The first NPBC elements of IUBC are blank. The counter for the list is IU. If
the loop finds that the IUth node number, IUBC(NPBC + IU), is negative, then the actual node
number is given by I = -IUBC(NPBC + IU). In this case, the user must supply code that specifies
a value, appropriate for the current time step, for UBC(NPBC + IU), which is the specified
temperature or concentration for the IUth specified U node (node I). The loop skips over node
numbers in the list IUBC(NPBC + IU) that are positive.
The third section is used for specifying time variation of either fluid sources (or sinks),
temperature or concentration of inflowing fluid at sources, or both. The coding must be entered
within a loop that checks all NSOP fluid source nodes for the time-variability flag. This flag is a
negative node number in the list of fluid source nodes, IQSOP(IQP). The counter for the list is
IQP. If the loop finds that the IQPth node number IQSOP(IQP), is negative, then the actual node
number is given by I = - IQSOP(IQP). In this case, the user must supply code that specifies a
value appropriate for the current time step, for both QIN(I), which is the specified fluid source
for node I (the IQPth specified fluid source node), and for UIN(I), which is the temperature or
concentration of inflowing fluid at node I. The loop skips over node numbers in the list
IQSOP(IQP) that are positive.
The fourth section is used for specifying time variation of energy or solute mass sources. The
coding must be entered within a loop that checks all NSOU specified energy or solute mass
source nodes for the time-variability flag. This flag is a negative node number in the list of
specified energy or solute mass source nodes, IQSOU(IQU). The counter for the list is IQU. If
the loop finds that the IQUth node number, IQSOU(IQU), is negative, then the actual node
number is given by I = -IQSOU(IQU). In this case, the user must supply code that specifies a
value appropriate for the current time step, for QUIN(I), which is the specified energy or solute
mass source for node I (the IQUth specified energy or solute mass source node). The loop skips
over node numbers in the list IQSOU(IQU) that are positive.
The current time at the end of the present time step in seconds, TSEC, and in other time units is
available for use in specifying time variations. Any convenient programming algorithm may be
used to implement the time-variations in BCTIME. Some possibilities are use of expressions as
explicit functions of time such as, for example, a sine function to represent tidal pressure
variations; use of data statements and new arrays explicitly dimensioned in BCTIME; use of
logical statements to give stepped or piecewise continuous functions; or use of READ statements
to input the time-varying values directly from the “.inp” input file or a new data file. If different
functions or values are to be specified at various nodes, then the user must also supply code to
distinguish which functions apply to which specified node numbers.
212
7.6 Modes and Options
Simulation modes
SUTRA may simulate flow and transport in three temporal modes for either energy or solute
transport: (1) transient flow and transport, (2) steady flow with transient transport, and (3) steady
flow and steady transport. Mode (1) is the most computationally expensive, and mode (3) is the
least expensive. Modes (2) and (3) are not applicable to all problems. The classes of problems
amenable to solution by each mode are given below.
Allows for simulation of any physical problem that SUTRA deals with: either saturated
or unsaturated flow or both; variable fluid density and viscosity; any sorption isotherm;
energy or solute transport.
Allows for simulation of a restricted class of SUTRA problems: saturated flow only;
constant fluid density and viscosity; any sorption isotherm; energy transport with only
small variations in temperature, or solute transport.
Allows for simulation of the most restricted class of SUTRA problems: saturated flow
only; constant fluid density and viscosity; linear sorption isotherm only; energy transport
with only small variations in temperature, or solute transport.
These modes are specified in the “.inp” input data file by the values of CSSFLO, CSSTRA, and
SIMULA.
To help the user interpret SUTRA simulation results, four options are available for output to the
“.lst” file:
An output of the pressure and saturation computed at each node is available. This option
is controlled by the “.inp” input file parameter CPANDS. The user can also choose to
report pressures and saturations in the optional “.nod” file. Saturation output occurs only
for unsaturated flow simulations (CUNSAT=’UNSATURATED’ in “.inp” dataset 4).
213
(3) Velocity Output
An output of fluid velocity is available that may be used to plot velocity vectors with
computer graphics software supplied by the user, or using SutraPlot (in 2D or 3D; Souza
(1999)), SutraGUI (in 2D; Winston and Voss (2003)), or ModelViewer (in 2D or 3D;
Hsieh and Winston, 2002). These velocities are calculated and output on each time step
that a pressure solution is output. One velocity is calculated in each finite element, at the
location of the element centroid, as described in section 5.7, “Velocity Calculation for
Output.” Velocity output occurs in groups of values: first, the magnitude of the velocity
vector at each element centroid; then, each of the angles that describe the orientation of
the velocity vector. In 2D, only one angle is reported; the angle measured
counterclockwise from the +x-axis to the velocity vector. In 3D, an additional angle is
reported; the angle measured vertically from the x,y-plane to the velocity vector. Velocity
values are lagged one time step if a noniterative solution is used. (In this case, they are
calculated not with the new pressure solution, but with the solution of the previous time
step and with fluid density values of the step before that. This keeps the velocity
calculations consistent in time.) This option is controlled by the “.inp” input file
parameter CVEL. The user can choose to report the x-, y-, and z-components of
velocities at element centroids in the optional “.ele” file.
A fluid mass and energy or solute mass budget output is available as an aid in tracking
the simulated behavior of a system. When the direct solver is used, the budget is not a
rigorous check on numerical accuracy of the model, as the calculations involved in
determining the budget are less accurate than the calculations used to carry out the
SUTRA simulation. However, when the iterative solvers are used, the budget imbalances
may be used to judge convergence of the iterative matrix equation solution. The budget is
output on each time step with printed output to the “.lst” file, and tallies total system
changes in fluid mass, and energy or solute mass for the time step. In addition to these
totals of these quantities for the entire simulated region, the budget lists time step total
gains and losses in these quantities at each specified pressure node, fluid source node, and
energy or solute mass source node in the mesh. More information about the budget
calculations is given in section 5.8, “Budget Calculations.” This option is controlled by
the “.inp” input file parameter CBUDG. The user may also choose to report input
specifications and simulation results (including inflows/outflows of fluid mass and solute
mass or energy) at source and boundary condition nodes in the optional “.bcof”, “.bcos”,
“.bcop”, and “.bcou” files.
214
References
215
Pinder, G.F., and Gray, W.G., 1977, Finite Element Simulation in Surface and Subsurface
Hydrology: Academic Press, New York, 295 p.
Provost, A.M., 2002, SutraPrep, a pre-processor for SUTRA, a model for ground-water flow
with solute or energy transport: U.S. Geological Survey Open-File Report 02-376, 43 p.
http://water.usgs.gov/nrp/gwsoftware/sutra.html
Seager, M.K., 1989, A SLAP for the Masses: in Parallel Supercomputing: Methods, Algorithms
and Applications, Carey, G. F. (editor): Wiley, p.135-155.
Segol, G., Pinder, G.F., Gray, W.G., 1975, A Galerkin-finite element technique for calculating
the transient position of the saltwater front: Water Resources Research, v. 11, no. 2, p.
343-346.
Souza, W.R., 1999, SutraPlot, a graphical post-processor for SUTRA, a model for ground-water
flow with solute or energy transport: U.S. Geological Survey Open-File Report 99-220,
30 p. http://water.usgs.gov/nrp/gwsoftware/sutra.html
Vandevender, W.H., and Haskell, K.H., 1982, The SLATEC mathematical subroutine library:
SIGNUM Newsletter, v. 17, no. 3, p. 16-21.
Van Genuchten, M.Th., 1980, A closed-form equation for predicting the hydraulic conductivity
of unsaturated soils: Soil Science Society of America Journal, v. 44, no. 5, p. 892-898.
Van Genuchten, M.Th., 1982, A comparison of numerical solutions of the one-dimensional
unsaturated-saturated flow and mass transport equations: Advances in Water Resources,
v. 5, no. 1, p. 47-55.
Voss, C.I., 1984, SUTRA – A finite-element simulation model for saturated-unsaturated, fluid-
density-dependent ground-water flow with energy transport or chemically-reactive
single-species solute transport: U.S. Geological Survey Water-Resources Investigations
Report 84-4369, 409 p. http://water.usgs.gov/nrp/gwsoftware/sutra.html
Voss, C.I., 1999, USGS SUTRA code – History, practical use, and application in Hawaii: in
Seawater Intrusion in Coastal Aquifers – Concepts, Methods and Practices, Bear, J.,
Cheng, A. H.-D., Sorek, S., Ouazar, D., and Herrera, I. (editors), Kluwer Academic
Publishers, Boston, p. 249-313.
Voss, C.I., and Souza, W.R., 1987, Variable density flow and solute transport simulation of
regional aquifers containing a narrow freshwater-saltwater transition zone: Water
Resources Research, v. 23-10, p. 1851-1866.
Winston, R.B. and Voss, C.I., 2003, SutraGUI, a graphical-user interface for SUTRA, a model
for ground-water flow with solute or energy transport: U.S. Geological Survey Open-File
Report 03-285, 114 p. http://water.usgs.gov/nrp/gwsoftware/sutra.html
Wang, H.F., and Anderson, M.P., 1982, Introduction to Groundwater Modeling: Freeman and
Co., San Francisco, 237 p.
Warrick, A.W., Biggar, J.W., and Nielsen, D.R., 1971, Simultaneous solute and water transfer
for an unsaturated soil: Water Resources Research, v. 7, no. 5, p. 1216-1225.
216
APPENDICES
Appendix A: List of Symbols
Generic Units
[1] dimensionless
Units
[cm] centimeters
[d] days
[h] hours
[kg] kilograms
[m] meters
[min] minutes
[mo] months
[s] seconds
219
Special Notation
∂Ψ dΨ
or time derivative of Ψ
∂t dt
ΨL value of Ψ in element L
220
vz component of a vector v in the z
direction
ΨL value of Ψ in element L
∑ψ = ψ
i =1
1 + ψ 2 + ψ 3 + L + ψ NN summation
Greek Lowercase
221
αLmin(x,y[,z]) (2.43a,b) [L] Longitudinal dispersivity in the
(2.45a,b) minimum permeability direction
222
θ(x,y) defined [°] Angle from +x-coordinate axis to
after (2.20b) direction of maximum permeability
in 2D
223
ν pi (4.93) [L•s] Conductance for specified pressure
in cell i
224
ψ BCi (4.143) [E/s] or Source of energy or solute mass at
[Ms/M•s] specified temperature or
concentration node
ψ INi (4.144) [E/s] or Source of energy or solute mass at
and defined [Ms/M•s] node i
after (4.122)
Greek Uppercase
225
Ξ+ (4.2),(4.26) [1] One-dimensional basis function in ξ
direction
Roman Lowercase
226
dT1(x,y,z,t) (2.41d-g) [L2/s] First transverse dispersion
coefficient in 3D
227
p BC
i
(4.83) [M/(L•s2)] Specified pressure value at node i
q IN
i
defined [M/s] Fluid mass flux in across boundary at
after (4.89) node i
q OUT
i
(4.89) [M/s] Fluid mass flux out across boundary
at node i
x [L] x coordinate
y [L] y coordinate
z [L] z coordinate in 3D
228
Roman Uppercase
229
Dij (2.39c) [L2/s] Element of dispersion tensor
(2.41c)
230
NSOP §7.1 Number of specified fluid source
nodes in mesh
231
Q BC
i
(3.38) [L3/s] Fluid volumetric source due to a
specified head in the example
problem
Q BC
i
(4.111) [M/s] Fluid mass source due to a specified
pressure node
Q IN
i
(3.20) [L3/s] Fluid volume efflux at boundary for
example problem
232
U* (2.47a) [°C] or U value of fluid source
[Ms/M]
233
Appendix B: SUTRA Input Data List
______________________________________________________________________________
List of Input Data for the File Assignment Input File (SUTRA.FIL)
______________________________________________________________________________
The file “SUTRA.FIL” contains file assignments (one line for each assignment) in the
following format:
FTYPE Character File type (within single quotes ‘ ‘ as shown below). Valid
values are as follows:
‘INP’ = “.inp” input file (main input)
‘BCS’ = “.bcs” input file (time-dependent sources and
boundary conditions)
‘ICS’ = “.ics” input file (initial conditions)
‘LST’ = “.lst” output file (main output listing)
‘RST’ = “.rst” output file (restart conditions)
‘NOD’ = “.nod” output file (nodewise results)
‘ELE’ = “.ele” output file (elementwise results)
‘OBS’ = “.obs” output file (observations)
‘OBC’ = “.obc” output file (observations)
‘BCOF’ = “.bcof” output file (specifications and results
at fluid-source/sink nodes)
‘BCOS’ = “.bcos” output file (specifications and results
at solute/energy-source/sink nodes)
‘BCOP’ = “.bcop” output file (specifications and results
at specified-pressure nodes)
‘BCOU’ = “.bcou” output file (specifications and results
at specified-concentration/temperature nodes)
‘SMY’ = “.smy” output file (simulation summary)
FNAME Character Full name of the file (within single quotes ‘ ‘ as shown
below).
235
Notes:
Assignments for the “.bcs”, “.nod”, “.ele”, and “.obs”, “.obc”, “.bcof”, “.bcos”, “.bcop”,
and “.bcou” files are optional. If any of these assignments are omitted, the corresponding
output files will not be created by SUTRA. Assignment for the “.smy” file is also
optional – if not assigned, it will receive the file name “SUTRA.SMY” and an
automatically generated unit number, by default. Assignment for the “.rst” file is
required if ISTORE ≠ 0 in dataset 4. Assignments for the “.inp”, “.ics”, and “.lst” files
are always required. Assignments may be listed in any order. Assignment of unit
numbers is performed by SUTRA in the order in which the files are listed, except for the
“.obs” and “.obc” files. The latter are always assigned last by SUTRA.
For the observation output files (“.obs” and “.obc”) FNAME is a base filename from
which the actual filenames are automatically derived by SUTRA. SUTRA generates one
observation output file for each combination of schedule and output format that appears
in the observation specifications in dataset 8D of the main input (“.inp”) file. For an
example of this, see the description of dataset 8D.
Multiple “.bcs” files may be assigned. At the beginning of each time step, SUTRA
checks each “.bcs” file and reads in any boundary condition specifications that pertain to
that time step. The “.bcs” files are checked in the order in which they are listed in
“SUTRA.FIL”. If the “.bcs” files contain multiple specifications of the same kind, at
the same node, on the same time step, the specification read in last overrides any previous
specifications.
Example:
‘INP’ 50 ‘project.inp’
‘BCS’ 52 ‘project.bcs’
‘ICS’ 55 ‘project.ics’
‘LST’ 60 ‘project.lst’
‘RST’ 66 ‘project.rst’
‘NOD’ 70 ‘project.nod’
‘ELE’ 75 ‘project.ele’
‘OBS’ 80 ‘project.obs’
‘OBC’ 85 ‘project.obc’
‘BCOF’ 91 ‘project.bcof’
‘BCOS’ 93 ‘project.bcos’
‘BCOP’ 92 ‘project.bcop’
‘BCOU’ 94 ‘project.bcou’
‘SMY’ 98 ‘project.smy’
______________________________________________________________________________
236
General Format of the “.inp”, “.bcs”, and “.ics” Input Files
SUTRA reads the “.inp” , “.bcs”, and “.ics” input files in a list-directed fashion (except for
dataset 1 of the “.inp” file):
o As a rule, any data that are not optional must be given values in the input file (blanks are
not sufficient) and must appear within the first 1,000 characters of a line. SUTRA reads
only the first 1,000 characters of each line; subsequent characters are ignored. The
exception to this rule is dataset 8D, in which lists of times or time steps may extend
beyond the 1,000-character limit.
o Enclose input variables of “character” type in single quotation marks (unless specified
otherwise) to provide maximum compatibility across computing platforms.
o Comment lines may be placed within the “.inp”, “.bcs”, and “.ics” files, subject to the
following restrictions:
o Comment lines must either
be empty (i.e., contain only a carriage return), or
have a pound sign, #, in the first column.
o Comment lines can be placed before or after any dataset.
o Comment lines can be placed within any dataset except those in which a single
line of data can be optionally broken up over multiple lines, namely, time or time
step lists in dataset 6 of the main input (“.inp”) file, datasets 2 and 3 of the initial
conditions (“.ics”) file, and the “restart” information that follows dataset 3 in a
“.rst” (restart) file being used as a “.ics” (initial conditions) file.
o Comments (or any text) can be appended to the end of any line of input data, provided all
the required parameters have first been entered on that line. (In the case of a line of input
that is optionally continued over multiple lines, only the last line would meet this
requirement.) Be sure to leave at least one space or tab between the last required
parameter and the beginning of the comment.
o Data contained in separate files can be “inserted” into the main (“.inp”), time-dependent
sources and boundary conditions (“.bcs”), and initial conditions (“.ics”) input files using
the “@INSERT” command.
@INSERT 52 ‘project.inp7’
in the “.inp” file causes SUTRA to open file ”project.inp7” on FORTRAN unit 52
(or the next available unit number, according to the convention for files listed in
“SUTRA.FIL”) and begin reading input data from it as though it were reading
from the “.inp” file. When the end of the inserted file is reached, SUTRA closes
it and resumes reading from the “.inp” file.
237
o “Inserts” can be nested, i.e., a file that contains an “@INSERT” statement can
itself be “inserted” into another file. Nesting can be up to twenty levels deep.
o Like comment lines, “inserts” can be placed within any dataset except time or
time step lists in dataset 8D of the main input (“.inp”) file, dataset 2 or 3 of the
initial conditions (“.ics”) file, or the “restart” information that follows dataset 3 in
a “.rst” (restart) file being used as a “.ics” (initial conditions) file.
238
______________________________________________________________________________
TITLE1 Character First line of heading for the input data set.
TITLE2 Character Second line of heading for the input data set.
SIMULA Character Four* words. The first word must be “SUTRA”. The
second and third words indicate the SUTRA version
number and must be either “VERSION 2.2”, “VERSION
2.1”, “VERSION 2.0”, or “VERSION 2D3D.1”. The
fourth word indicates the type of transport, and must be
either “ENERGY” or “SOLUTE”. Any additional words
are ignored by SUTRA.
Examples:
239
DATASET 2B: Mesh Structure (four lines)
This information is input for convenience of post-processing only. Except for the difference
between 2D and 3D, calculations in the SUTRA code itself are not influenced by the mesh
structure. Calculations in SUTRA for all mesh structures are handled as though the mesh were
fully irregular.
Line 1:
MSHSTR Character Two words. The first word indicates the dimensionality of
the mesh, and must be either “2D” or “3D”. The second
word indicates the regularity of the mesh, and must be
either “REGULAR”, “BLOCKWISE”, “LAYERED”, or
“IRREGULAR”. Any additional words are ignored by
SUTRA. By definition, a LAYERED mesh must be 3D.
(See note at the end of this dataset for descriptions of the
four types of mesh.)
NN3 Integer For a 3D mesh, the number of nodes in the third numbering
direction. Must have NN3≥2. May be omitted if the mesh
is 2D.
240
LAYSTR Character One word. Must be either ’ACROSS‘ or ’WITHIN‘.
Indicates whether node numbering proceeds first across
layers or within a layer.
Line 2:
LDIV1 Integer A list of the number of elements into which to divide each
of the NBLK1 blocks along the first numbering direction.
Line 3:
LDIV2 Integer A list of the number of elements into which to divide each
of the NBLK2 blocks along the second numbering
direction.
Line 4:
LDIV3 Integer A list of the number of elements into which to divide each
of the NBLK3 blocks along the third numbering direction.
Notes:
241
A LAYERED mesh is a 3D mesh that can be thought of as being formed from a vertical
stack of 2D meshes. Each 2D mesh in the stack has the same connectivity, though that
connectivity need not be logically rectangular. Node numbering starts at a node that lies
in either the top or the bottom layer of the stack and proceeds in either of two ways:
across the layers, i.e., along the vertical string of nodes until the opposite (bottom or
top) layer is reached, or
within a layer, i.e., along nodes in the same layer as the starting node.
Once numbering within a vertical string or layer is complete, it continues with another
string or the next layer above or below. The order in which nodes are numbered within
each string or layer is analogous to that in the first string or layer.
If the structure of the mesh is not known or is not of interest for postprocessing, the user
may simply specify the mesh to be IRREGULAR, regardless of the actual structure. This
will affect neither the way in which SUTRA solves the numerical problem nor the
solution that is obtained.
Examples:
For a 3D, regular (logically rectangular), 10x20x30-node mesh, one may write the
following:
For a layered mesh with 10 layers of nodes, each containing 2560 nodes and 2210
elements, and with node numbering proceeding first across the layers, one may write:
In these examples, the word “MESH” is ignored by SUTRA but is included to make the
input more readable.
242
DATASET 3: Simulation Control Numbers (one line)
Note:
The order in which NPBC, NUBC, NSOP, and NSOU are listed above is different from
the order in which the corresponding datasets (19, 20, 17, and 18) appear in the “.inp”
file.
243
DATASET 4: Simulation Mode Options (one line)
244
completed time step stored in the “.rst” file. When
ISTORE > 0, results are always stored in the “.rst” file
after the last time step of a simulation regardless of whether
the step is an even multiple of ISTORE. For this option to
be used, the “.rst” file must be listed in file “SUTRA.FIL”.
Example:
In this example, the words “FLOW”, “TRANSPORT”, and “START” are ignored by
SUTRA but may be included to make the input more readable.
245
DATASET 5: Numerical Control Parameters (one line)
246
DATASET 6: Temporal Control and Solution Cycling Data (one line, followed by one* line for
for each schedule, plus one line)
(* Lists of times or time steps may be continued over multiple lines in TIME LIST and
STEP LIST schedules.)
Line 1:
Lines 2 to NSCH+1:
247
SCHTYP Character One or two words. Schedule type. (See note at the end of
this dataset for descriptions of the various schedule types.)
Valid values are:
‘TIME LIST’ = a list of times
‘TIME CYCLE’ = a sequence of times generated at
specified intervals
‘STEP LIST’ = a list of time steps
‘STEP CYCLE’ = a sequence of time steps generated at
specified intervals
CREFT Character One word. To define the schedule in terms of absolute time
(simulation clock time), specify ’ABSOLUTE‘. To define
the schedule in terms of elapsed time (time relative to the
simulation starting time), specify ’ELAPSED’.
SCALT Real Scale factor to be applied to each time value in the list.
TLIST Real The list of times. (May be continued over multiple lines of
input.)
CREFT Character One word. To define the schedule in terms of absolute time
(simulation clock time), specify ’ABSOLUTE‘. To define
the schedule in terms of elapsed time (time relative to the
simulation starting time), specify ’ELAPSED’.
SCALT Real Scale factor to be applied to each time value in the list.
248
TIMEI Real Initial time. Cycling begins at time = TIMEI.
ISLIST Integer The list of (integer) time steps. (May be continued over
multiple lines of input.)
NSMAX Integer Maximum number of time step cycles allowed, i.e., the
maximum number of time steps allowed in the schedule,
not including the initial time step.
ISTEPI Integer Initial time step. Cycling begins at time step = ISTEPI.
ISTEPL Integer Limiting time step. Cycling continues until time step ≥
ISTEPL.
Last line:
Character A single dash, ‘-‘, must be placed on the line below the last
schedule.
249
Notes:
The schedules defined in this dataset determine the sequence of time steps (via schedule
“TIME_STEPS”) and control the timing of observation output (see also dataset 8D).
Time or time step values may not be repeated, i.e., each value must be unique, within a
given schedule.
For a time-based schedule (TIME LIST or TIME CYCLE), the scale factor SCALT is
applied to all numeric time values in the schedule definition. This feature is useful for
converting time units. For example, in the definition of a TIME LIST, the list of times
TLIST could be input in terms of days and converted to seconds by setting
SCALT=86400.
The method of defining a TIME CYCLE is similar to that used to specify time stepping
in the SUTRA Version 2.1 (2D3D.1) input format. After the scale factor SCALT has
been applied, NTMAX, TIMEL, TIMEC, NTCYC, TCMULT, and TCMAX are
analogous to ITMAX, TMAX, DELT, ITCYC, DTMULT, and DTMAX, respectively.
However, there are two important differences. First, in a TIME CYCLE, the user
specifies the initial time TIMEI; in the former method, it is assumed to be TICS (formerly
called TSTART). Second, in a TIME CYCLE, a new time increment size is begun when
the cycle number minus one is an integer multiple of NTCYC; the former method begins
a new time step size when the time step number is an integer multiple of ITCYC. This
second difference is illustrated in the following example, in which DELT=TIMEC=1.,
DTMULT=TCMULT=2., and ITCYC=NTCYC=5:
250
SUTRA automatically defines three schedules that can be useful for specifying steady-
state and time-dependent sources and boundary conditions using optional “.bcs” files:
• “STEP_0”, which consists only of time step 0,
• “STEP_1”, which consists only of time step 1, and
• “STEPS_1&UP”, which consists of all time steps after time step 0.
Examples:
The following examples assume that time is ultimately specified in seconds. The scale
factor 3.15576e+7 is used to convert from years to seconds.
To define a schedule named “A” that consists of five absolute times, 10., 25., 30., 40.,
and 75. years, one may write the following:
'A' 'TIME LIST' ‘ABSOLUTE’ 3.15576e+7 5 10. 25. 30. 40. 75.
To define a schedule named “B” that consists of four time steps, 5, 10, 90, and 95, one
may write the following:
To define a schedule named “C” that begins at time step 40 and includes every 2nd time
step up to and including time step 80, one may write the following:
251
DATASET 7A: Iteration Controls for Resolving Nonlinearities (one line)
DATASET 7B: Matrix Equation Solver Controls for Pressure Solution (one line)
252
DATASET 7C: Matrix Equation Solver Controls for Transport Solution (one line)
253
DATASET 8A: Output Controls and Options for “.lst” (Main Output) File and Screen Output
(one line)
NPRINT Integer NPRINT is the main output cycle for transient simulation.
Output is produced in the “.lst” file on time steps numbered
n│NPRINT│(where n is a positive integer). Also for
transient solutions, output is produced for initial conditions
and on the first and last time steps. To cancel printed output
for the first time step of a transient simulation, set NPRINT
to a negative number (i.e., place a minus sign before the
desired output cycle). For steady-state solutions, output is
produced irrespective of the value of NPRINT.
CNODAL Character A value of ‘N’ cancels output of node coordinates,
nodewise element thicknesses, and nodewise porosities. Set
to ‘Y’ for full printout.
CELMNT Character A value of ‘N’ cancels output of elementwise
permeabilities and elementwise dispersivities. Set to ‘Y’
for full output.
CINCID Character A value of ‘N’ cancels output of node incidences in
elements. Set to ‘Y’ for full output.
CPANDS Character A value of ‘N’ cancels output of pressures and saturations
computed at nodes. Set to ‘Y’ for full output.
CVEL Character Set to a value of ‘Y’ to calculate and output fluid velocities
at element centroids each time output is produced. Note
that for transient flow, velocities are based on results and
pressures of the previous time step or iteration and not on
the newest values. Set to ‘N’ to cancel option.
CCORT Character A value of ‘N’ cancels output of concentrations or
temperatures computed at nodes. Set to ‘Y’ for full output.
CBUDG Character Set to a value of ‘Y’ to calculate and output a fluid mass
budget and energy or solute mass budget each time output
is produced. A value of ‘N’ cancels the option.
CSCRN Character Set to a value of ‘Y’ to write a summary of simulation
progress to the screen during the simulation. A value of ‘N’
suppresses all output to the screen except for certain error
messages.
CPAUSE Character Set to a value of ‘Y’ to have SUTRA pause for a user
response at the end of the run so that simulation progress
can be reviewed on the screen. A value of ‘N’ cancels the
option except for certain error messages. Affects output
only if CSCRN=’Y’.
254
Note:
255
DATASET 8B: Output Controls and Options for “.nod” File
(Nodewise Results Listed in Columns) (one line)
Example:
To output the 3D node coordinates, pressure, and solute concentration in columns in the
“.nod” file every 5 time steps, but not on the first time step, write the following:
256
DATASET 8C: Output Controls and Options for “.ele” File
(Velocities at Element Centroids Listed in Columns)
(one line)
Note:
Reported velocities for time step 1 are based on initial or steady-state pressures. Reported
velocities for subsequent time steps are based on pressures from the previous time step.
Velocities used to formulate the transport equation within SUTRA are based on pressures
from the previous nonlinearity iteration; thus, the updated velocities used internally may
be different from the values reported for each time step in the “.ele” file.
Example:
257
DATASET 8D: Output Controls and Options for “.obs” and “.obc” Files
(Observation Point Results Listed in Columns)
(one line for each observation point, plus one line)
Line 1:
Lines 2 to NOBS+1:
OBSSCH Character Name of the schedule that controls output for this
observation point. (Schedules are defined in dataset 6.)
OBSFMT Character Output format. Must be either ’OBS‘ or ’OBC‘. See the
note below for details.
258
Last line:
Character A single dash, ‘-‘, must be placed on the line below the last
observation point.
Notes:
The OBS and OBC output formats correspond to the “.obs” and “.obc” output files,
respectively. Both formats present the same information.
The number of distinct “.obs” and “.obc” files generated by SUTRA depends on the
combinations of output schedule and output format that appear in the list of observation
points. All observations that are assigned the same schedule and format are written to the
same file. The filename is generated by SUTRA using the corresponding base filename
specified by the user in “SUTRA.FIL” and the output schedule.
Example:
2
‘well_27’ 1007. 1294. -133. ‘A’ ‘OBS’
‘well_29’ 1165. 980. -142. ‘A’ ‘OBS’
‘well_30’ 1102. 981. -126. ‘A’ ‘OBS’
‘well_198’ 2662. 703. -289. ‘B’ ‘OBS’
‘well_344’ 155. 49. -90. ‘A’ ‘OBC’
‘-‘
Assume the base filenames specified in “SUTRA.FIL” for “.obs” and “.obc” files are
”project.obs” and “project.obc”. Then observation data for the first three points listed
above are written to the same file, “project_A.obs”, in OBS format. Observation data for
the fourth point listed are written to file “project_B.obs” in OBS format. In each “.obs”
file, output is wrapped to the next line after the first two observations are written.
Observation data for the last point listed are written to file “project_A.obc” in OBC
format.
259
DATASET 8E: Output Controls and Options for “.bcof”, “.bcos”, “.bcop”, and “.bcou” Files
(Source and Boundary Condition Specifications and
Results Listed in Columns) (one line)
NBCFPR Integer Fluid source node output cycle for transient simulation.
Output is produced in the “.bcof” file on time steps
numbered n│NBCFPR│ (where n is a positive integer).
NBCSPR Integer Solute or energy source node output cycle for transient
simulation. Output is produced in the “.bcos” file on time
steps numbered n│NBCSPR│ (where n is a positive
integer).
CINACT Character Set to a value of ‘Y’ to list all sources and boundary
conditions, including those that have been rendered inactive
(using negative node numbers in a “.bcs” file; see the
description of “.bcs” datasets 3 - 6). Set to ‘N’ to suppress
output for inactive sources and boundary conditions.
Notes:
For transient simulations, output is also produced on the first and last time steps. For
steady-state simulations, output is produced irrespective of the values of the output
control variables.
The information that is output to the “.bcof”, “.bcos”, “.bcop”, and “.bcou” files is
described in section 5.9.
Example:
To output source and boundary condition information to the “.bcof”, “.bcos”, “.bcop”,
and “.bcou” files every 10 time steps, suppressing output for inactive sources and
boundary conditions, write the following:
10 10 10 10 ‘N’
260
DATASET 9: Fluid Properties (one line)
VISCØ Real For solute transport: fluid viscosity, μ, [M/L s]. For energy
transport, this value is a scale factor. It multiplies the
viscosity, which is calculated internally in units of
[kg/m s]. VISCØ may be used for energy transport to
convert units of [kg/m s] to desired units of viscosity.
261
DATASET 10: Solid Matrix Properties (one line)
262
DATASET 12: Production of Energy or Solute Mass (one line)
PRODF1 Real First-order rate of solute mass production in the fluid, γ1w .
[s-1]. Set to any arbitrary number (e.g., zero) for energy-
transport simulation.
263
DATASET 14A: Scale Factor for Nodewise Data (one line)
264
DATASET 14B: Nodewise Data (one line for each of NN nodes)
Z(II) Real For 3D problems, scaled z-coordinate of node II, zi. [L]
Note:
When the DIRECT solver is used, the order in which the nodes are numbered affects the
bandwidth of the global banded matrix, NBI, which in turn affects computational and
storage efficiency. In this case, the user should take care to number the nodes to
minimize NBI. SUTRA sets NBI equal to one plus twice the maximum difference in
node numbers in the element containing the largest node number difference in the mesh.
See Figure 7.1 for an example. When an iterative solver is used, it is still advantageous to
minimize NBI, although not as critical as in the case of the DIRECT solver.
265
DATASET 15A: Scale Factors for Elementwise Data (one line)
266
ATMAXF Real The scaled transverse dispersivities ATMAX in dataset
15B are multiplied by ATMAXF in SUTRA. May be used
to convert units or to aid in assignment of dispersivity.
267
ALMAX(L) Real Scaled longitudinal dispersivity value of element L that
controls longitudinal dispersion along the maximum
permeability direction when the flow direction is in the
maximum permeability direction, αLmax(L). [L]
ALMID(L) Real Scaled longitudinal dispersivity value of element L that
controls longitudinal dispersion along the middle
permeability direction when the flow direction is in the
middle permeability direction, αLmid(L). [L]
Omit for 2D problems.
ALMIN(L) Real Scaled longitudinal dispersivity value of element L that
controls longitudinal dispersion along the minimum
permeability direction when the flow direction is in the
minimum permeability direction, αLmin(L). [L]
ATMAX(L) Real Scaled transverse dispersivity value of element L that
controls transverse dispersion in the maximum permeability
direction when the flow direction is perpendicular to the
maximum permeability direction, αTmax(L). [L]
ATMID(L) Real Scaled transverse dispersivity value of element L that
controls transverse dispersion in the middle permeability
direction when the flow direction is perpendicular to the
middle permeability direction, αTmid(L). [L]
Omit for 2D problems.
ATMIN(L) Real Scaled transverse dispersivity value of element L that
controls transverse dispersion in the minimum permeability
direction when the flow direction is perpendicular to the
minimum permeability direction, αTmin(L). [L]
Notes:
Permeability
The “permeability ellipse” and “permeability ellipsoid” that form the basis of the SUTRA
permeability model in 2D and 3D, respectively, are described in section 2.2 and pictured
in Figure 2.2.
In 3D, the principal axes of the permeability ellipsoid are, by definition, mutually
perpendicular and aligned with the directions of maximum, middle, and minimum
permeability. SUTRA requires that the orientation of this ellipsoid relative to the x-, y-,
and z-coordinate axes be defined for each element in the mesh by specifying three
parameters -- ANGLE1, ANGLE2, and ANGLE3 – in each element. These three angles
268
may be thought of, in aeronautical terms, as the “yaw,” “pitch,” and “roll” of the
permeability ellipsoid with respect to a reference orientation, which is described below.
In defining ANGLE1, ANGLE2, and ANGLE3, we make the following assumptions and
definitions:
• The Cartesian (x, y, z) coordinate system is right-handed: it can be viewed such that
the +x-axis points forward, the +y-axis points to the left, and the +z-axis points
upward.
• The maximum, middle, and minimum permeability axes are the principal axes of the
permeability ellipsoid. Initially, before the three rotations defined by ANGLE1,
ANGLE2, and ANGLE3 have been performed, let these three principal axes be
aligned with the x-, y-, and z-coordinate axes, respectively; this is the reference
orientation. After the three rotations are completed, the maximum, middle, and
minimum permeability axes will be aligned with the directions of maximum, middle,
and minimum permeability, respectively.
• The positive maximum, middle, and minimum permeability axes (which will be
called the “+max,” “+mid,” and “+min” axes below) are the semi-axes that are
initially aligned with the +x-, +y-, and +z-axes, respectively.
The rotations and corresponding angles are then defined as follows:
• The first rotation of the permeability ellipse is about the z-axis. After this rotation has
been performed, ANGLE1 is the angle between the +max axis and the +x-axis. It is
measured within the x,y-plane, with a positive angle denoting counterclockwise
rotation when viewed from positive z, looking toward the origin. It represents the
azimuth of the +max axis.
• The second rotation of the permeability ellipse is upward or downward from the x,y-
plane. After this rotation has been performed, ANGLE2 is the angle between the
+max axis and the x,y-plane. It is measured perpendicularly from the x,y-plane, with
a positive angle denoting upward rotation (toward the +z-axis). It represents the
angular elevation or declination of the +max axis.
• The third rotation of the permeability ellipse is about the +max axis. After this
rotation has been performed, ANGLE3 is the angle between the +mid axis and the
x,y-plane. It is measured within the plane perpendicular to the +max axis, with a
positive angle denoting clockwise rotation when viewed from the origin, looking
along the +max axis.
269
Dispersivity
The convention for determining the 2D transverse dispersivity, αT, differs from the
one used in versions of SUTRA (Voss, 1984) prior to version 2.0 (2D3D.1), as
described in section 2.5.
The dispersivities ALMAX(L), ALMID(L), and ALMIN(L) represent the squared radii of
the longitudinal dispersivity ellipsoid in the maximum, middle, and minimum
permeability directions, respectively, for element L. Thus, ALMAX, ALMID, and
ALMIN are the effective longitudinal dispersivities for flow in the maximum, middle,
and minimum permeability directions, respectively. Note that “MAX,” “MID,” and
“MIN” do not refer to the relative magnitudes of the dispersivities, but rather to the
direction in which they apply.
Use of different longitudinal dispersivities for various flow directions may be justified in
a few ways. Differences in longitudinal dispersivity in various flow directions may either
be due to a local anisotropy in porous medium or aquifer structure, or to the different
sizes of heterogeneities experienced by flows along vertical and horizontal transport
reaches in an aquifer system. Regional horizontal flows typically encounter much larger
heterogeneities than flows occurring vertically through an aquifer, causing higher
longitudinal dispersion for horizontal flows than for vertical flows.
The effective transverse dispersivities in 3D may be computed as the squares of two radii
of a “transverse dispersivity ellipsoid” (pictured in Figure 2.4c) measured perpendicular
to the direction of ground-water flow, as described in section 2.5. For simplicity, the
principal axes of this ellipsoid are also assumed to be aligned with the directions of
maximum, middle, and minimum permeability.
The dispersivities ATMAX(L), ATMID(L), and ATMIN(L) represent the squared radii of
the transverse dispersivity ellipsoid in the maximum, middle, and minimum permeability
directions, respectively, for element L. Note that:
• For all flow directions within the (MAX,MID)-plane, ATMIN is the effective
dispersivity that controls transverse dispersion in the MIN direction.
• For all flow directions within the (MAX,MIN)-plane, ATMID is the effective
dispersivity that controls transverse dispersion in the MID direction.
• For all flow directions within the (MID,MIN)-plane, ATMAX is the effective
dispersivity that controls transverse dispersion in the MAX direction.
270
It follows that when the flow direction coincides with one of the principal permeability
directions, the effective transverse dispersivities are those corresponding to the remaining
two principal permeability directions:
• For flow in the MAX permeability direction, the effective transverse dispersivities are
ATMID and ATMIN.
• For flow in the MID permeability direction, the effective transverse dispersivities are
ATMAX and ATMIN.
• For flow in the MIN permeability direction, the effective transverse dispersivities are
ATMAX and ATMID.
For any given flow direction in 3D, there are two transverse dispersivities. Thus, for flow
in the maximum, middle, and minimum permeability directions, there would be a
maximum of six different transverse dispersivity values (two for each of the three
directions, assuming that flow in exactly opposite directions have the same transverse
dispersivities). However, the SUTRA model assumes that transverse dispersivity in a
given direction is the same irrespective of in which perpendicular direction the flow
occurs, and thus allows only three different values to be specified for each element:
ATMAX, ATMID, and ATMIN. The user must decide, based on the description of the
dispersion model in section 2.5 and the information outlined above, which values best
describe the behavior of the system being simulated.
Use of different transverse dispersivities for various flow directions is not as easily
justified as flow-direction-dependent longitudinal dispersivities. Normally, the flow-
direction-dependent transverse dispersivities should be set to the same value (unless the
user has a specific dispersion behavior in mind). This results in the same effective
transverse dispersion in all directions for all flow directions just as given by the classical
model.
271
DATASET 16: no longer used
DATASET 17: Constant Values for Fluid Sources and Sinks (one line for each of NSOP fluid
source nodes as specified in dataset 3, plus one line)
Specifications made in this dataset are constant values that are used by SUTRA unless/until
they are superseded by time-dependent specifications in dataset 3 of an optional “.bcs” file.
Lines 1 to NSOP:
QINC Real Fluid source (or sink) which is a specified constant value at
node IQCP, QIN. [M/s].
A positive value is a source of fluid to the aquifer. May be
omitted if this value is specified as time-dependent in
subroutine BCTIME (IQCP<0).
Last line:
272
Figure B.1. Allocation of sources and boundary fluxes in equal-sized elements. The top four panels
pertain to 2D areal and 3D meshes. The bottom four panels pertain to 2D cross-sectional meshes.
Though sources are always specified at nodes, a variety of spatial source distributions may be
obtained by appropriate specification of nodal source values.
273
DATASET 18: Constant Values for Energy or Solute Mass Sources and Sinks
(one line for each NSOU energy or solute source nodes as
specified in dataset 3, plus one line)
Specifications made in this dataset are constant values that are used by SUTRA unless/until
they are superseded by time-dependent specifications in dataset 4 of an optional “.bcs” file.
Lines 1 to NSOU:
QUINC Real Source (or sink) that is a specified constant value at node
IQCU, ψIN. [E/s] for energy transport, [Ms/s] for solute
transport.
A positive value is a source to the aquifer. May be omitted
if this value is specified as time-dependent in subroutine
BCTIME (IQCU <0).
Last line:
274
DATASET 19: Constant Values for Specified Pressure Nodes (one line for each of NPBC
specified pressure nodes as indicated in dataset 3, plus one
line)
Specifications made in this dataset are constant values that are used by SUTRA unless/until
they are superseded by time-dependent specifications in dataset 5 of an optional “.bcs” file.
Lines 1 to NPBC:
Last line:
275
DATASET 20: Constant Values for Specified Concentration or Temperature Nodes
(one line for each of NUBC specified concentration or
temperature nodes indicated in dataset 3, plus one line)
Specifications made in this dataset are constant values that are used by SUTRA unless/until
they are superseded by time-dependent specifications in dataset 6 of an optional “.bcs” file.
Lines 1 to NUBC:
Last line:
276
DATASET 21: no longer used
DATASET 22: Element Incidence Data (one line, plus one line for each of NE elements)
Line 1:
Lines 2 to NE+1:
IIN Integer Node incidence list; list of corner node numbers in element
LL, beginning at any node. For 2D problems, the four
nodes are listed in an order counterclockwise about the
element. For 3D problems, the eight nodes are listed as
follows. Approach the element from any of its six sides.
On the face farthest away (the “back” face, viewed looking
through the element), list the four nodes in an order
counterclockwise about the face. Then, on the closest face
(the “front” face), again list the four nodes
counterclockwise, starting with the node directly in front of
the node that was listed first. (This convention assumes a
right-handed coordinate system.)
______________________________________________________________________________
277
______________________________________________________________________________
Optional “.bcs” input files provide a way to specify time-dependent sources and boundary
conditions without programming subroutine BCTIME. They may be omitted if there are no
time-dependent sources or boundary conditions other than those specified in subroutine
BCTIME.
In addition to changing the values of the input variables associated with sources and boundary
conditions, “.bcs” files allow any source or boundary condition to be inactivated (“turned off”)
and reactivated (“turned on”) during a simulation. For specified-pressure and specified-
concentration or temperature conditions, this capability is unique to “.bcs” files; it cannot be
accomplished via the “.inp” input file or subroutine BCTIME. (Sources and sinks can be
effectively turned off by setting their associated rates to zero in the “.inp” file, subroutine
BCTIME, or a “.bcs” file.)
The user may assign as many “.bcs” files as desired, which allows considerable flexibility in
organizing time-dependent sources and boundary conditions. At the beginning of each time step,
SUTRA checks all of the “.bcs” files (in the order in which they are listed in the “SUTRA.FIL”
file) and reads in any source and boundary condition specifications that pertain to that time step.
General rules
The general rules for specifying sources and boundary conditions using “.bcs” files are as
follows:
• Any node at which a “.bcs” specification is made must also be listed in datasets 17 – 20 of
the “.inp” file. (For example, a node that is specified as a fluid source node on any time step
of any “.bcs” file must also be listed in dataset 17 of the “.inp” file.) Doing so “registers”
the node as a source or boundary condition node and provides “default” values that remain in
force unless/until overridden by a “.bcs” specification.
• Datasets 3, 4, 5, and 6 of a “.bcs” file correspond to datasets 17, 18, 19, and 20, respectively,
of the “.inp” file. (For example, “.bcs” dataset 5 and “.inp” dataset 19 both define
specified-pressure nodes.) The formats of these four “.bcs” datasets parallel those of the
corresponding “.inp” datasets.
• Specifications made in “.bcs” files take precedence over those made in the “.inp” file and
(on the same or earlier time step) in subroutine BCTIME, and they are persistent – they
remain in force until overridden by a subsequent specification in a “.bcs” file or subroutine
BCTIME.
• Multiple “.bcs” specifications of the same kind at the same node on the same time step are
resolved in favor of the specification that is read in last. On each time step, the “.bcs” files
are processed in the order in which they are listed in the “SUTRA.FIL” file.
278
• Each “.bcs” file may contain specifications for a series of time steps. The time steps on
which the specifications are applied are determined by a schedule. Each “.bcs” file may be
controlled by a different schedule if desired.
• The “.bcs” files need contain only those specifications that change on each time step – it is
not necessary to provide a “.bcs” specification for every source and boundary condition node
on every time step.
Although “.bcs” files are intended primarily for time-dependent sources and boundary
conditions, they can also be used in steady-state simulations (in which case they override
corresponding specifications made in the “.inp” file and subroutine BCTIME):
• For steady-state flow, flow-related sources and boundary conditions (“.bcs” datasets 3 and 5)
may be specified on time step 0. This is consistent with the SUTRA convention of solving
for steady-state flow on time step 0. Flow-related specifications made after time step 0 will
not affect the solution.
• For transient flow, flow-related sources and boundary conditions (“.bcs” datasets 3 and 5)
may be specified beginning with time step 1. Flow-related specifications made on time step
0 will not affect the solution.
• For steady-state transport, transport-related sources and boundary conditions (“.bcs” datasets
4 and 6) may be specified on time step 1. This is consistent with the SUTRA convention of
solving for steady-state transport on time step 1. Transport-related specifications made after
time step 1 will not affect the solution. Transport-related specifications are never needed,
and are therefore not permitted, on time step 0.
• For transient transport, transport-related sources and boundary conditions (“.bcs” datasets 4
and 6) may be specified beginning with time step 1. Transport-related specifications are
never needed, and are therefore not permitted, on time step 0.
It is usually simplest to specify steady-state sources and boundary conditions in datasets 17 – 20
of the “.inp” file. However, “.bcs” files can be convenient for inactivating (“turning off”)
selected steady-state specifications, which would otherwise have to be deleted or commented out
of the “.inp” file, or for efficiently implementing alternative sets of steady-state specifications
simply by swapping out the names of “.bcs” files in “SUTRA.FIL”.
SUTRA requires that a flow solution and/or a transport solution be generated on time steps on
which the relevant sources or boundary conditions change. For time-dependent sources and
boundary conditions programmed in subroutine BCTIME, the user is responsible for ensuring
that flow and transport solutions are generated on the appropriate time steps (by setting NPCYC
and NUCYC to appropriate values in dataset 6 of the “.inp” file). However, SUTRA
automatically ensures that flow and/or transport solutions are generated whenever relevant
sources or boundary conditions are specified in a “.bcs” file.
Example
An example of a simple “.bcs” file is provided after the description of dataset 6 below.
279
Each “.bcs” file consists of dataset 1, which specifies a schedule of time steps, followed by
one repetition of datasets 2 – 6 for each time step in the schedule.
BCSSCH Character Name of the schedule that controls input of sources and
boundary conditions in the “.bcs” file.
Notes:
This dataset specifies the schedule that controls input of sources and boundary conditions in the
“.bcs” file. Each “.bcs” file may be controlled by a different schedule. (Schedules are defined
in dataset 6 of the “.inp” file.)
The “.bcs” file must include a set of source and/or boundary condition specifications (datasets 2
- 6) for every time step listed in the schedule. The first set of specifications encountered is
applied to the first time step listed in the schedule, the second set of specifications encountered is
applied to the second time step listed, etc. If the schedule includes time step 0, then a set of
specifications must be given for time step 0, even if it does not affect the solution (as is the case
in a transient-flow, transient-transport simulation).
When transport is steady-state, user-defined schedules are disabled, and the only schedules
available are “STEP_0”, “STEP_1”, “STEPS_1&UP” (which then consists only of time step 1),
and “TIME_STEPS” (which SUTRA automatically defines as consisting only of time steps 0
and 1).
280
DATASET 2: Identifier and Time-Dependent Source and Boundary Condition Counts (one line)
Required for each time step on which there is a source or boundary condition specification
in the “.bcs” file (i.e., for each time step in the controlling schedule specified in dataset 1).
BCSID Character Name that identifies the set of sources and/or boundary
conditions that follows in datasets 3 - 6. May be up to 40
characters long and may include spaces.
Note:
The source and boundary condition counts NSOP1, NSOU1, NPBC1, and NUBC1
correspond to “.bcs” datasets 3, 4, 5, and 6, respectively, and must be listed in that order.
The counts refer to specifications made on the current time step in the current “.bcs” file;
specifications made on other time steps and/or in other files are not included in the
counts.
Specifications need be included in “.bcs” files only when they are changing on a given
time step. Specifications are persistent – once set, they remain in force unless/until
superseded by another specification.
If the controlling schedule includes time steps for which no “.bcs” specification is
desired, one can simply set NSOP1=NSOU1=NPBC1=NUBC1=0 on those time steps.
To assist the user in keeping track of where various boundary conditions are set, SUTRA
includes the identifier BCSID with each source or boundary condition listed in the
“.bcof”, “.bcos”, “.bcop”, and “.bcou” output files.
281
DATASET 3: Time-Dependent Fluid Sources and Sinks (one line for each of NSOP1 fluid
source nodes as specified in “.bcs” dataset 2, plus one line)
O M I T when there are no fluid sources/sinks to be specified for the current time step
(NSOP1=0 in dataset 2).
Specifications made in this dataset take precedence over those made in “.inp” dataset 17
(and subroutine BCTIME). A specification remains in force unless/until superseded by a
corresponding specification on a later time step (or in another “.bcs” file read later on the
same time step).
Lines 1 to NSOP1:
QINC1 Real Fluid source (or sink) at node IQCP1, QIN. [M/s].
A positive value is a source of fluid to the aquifer. May be
omitted if the source node is inactive (IQCP1<0).
Last line:
282
Note:
It is not sufficient to specify only the input variable that is changing on the current time
step. For example, if QINC1 is changing but UINC1 is not, one must still provide a value
for UINC1 as well as QINC1.
283
DATASET 4: Time-Dependent Energy or Solute Mass Sources and Sinks
(one line for each NSOU1 energy or solute source nodes as
specified in “.bcs” dataset 2, plus one line)
O M I T when there are no energy or solute sources/sinks to be specified for the current
time step (NSOU1=0 in dataset 2).
Specifications made in this dataset take precedence over those made in “.inp” dataset 18
(and subroutine BCTIME). A specification remains in force unless/until superseded by a
corresponding specification on a later time step (or in another “.bcs” file read later on the
same time step).
Lines 1 to NSOU1:
QUINC1 Real Source (or sink) of solute or energy at node IQCU1, ψIN.
[E/s] for energy transport, [Ms/s] for solute transport.
A positive value is a source to the aquifer. May be omitted
if the source node is inactive (IQCU1<0).
Last line:
284
DATASET 5: Time-Dependent Specified Pressures (one line for each of NPBC1 specified
pressure nodes as indicated in “.bcs” dataset 2, plus one
line)
O M I T when there are no pressures to be specified for the current time step (NPBC1=0 in
dataset 2).
Specifications made in this dataset take precedence over those made in “.inp” dataset 19
(and subroutine BCTIME). A specification remains in force unless/until superseded by a
corresponding specification on a later time step (or in another “.bcs” file read later on the
same time step).
Lines 1 to NPBC1:
Last line:
Note:
It is not sufficient to specify only the input variable that is changing on the current time
step. For example, if PBC1 is changing but UBC1 is not, one must still provide a value
for UBC1 as well as PBC1.
285
DATASET 6: Time-Dependent Specified Concentrations or Temperatures
(one line for each of NUBC1 specified concentration or
temperature nodes indicated in “.bcs” dataset 2, plus one
line)
Specifications made in this dataset take precedence over those made in “.inp” dataset 20
(and subroutine BCTIME). A specification remains in force unless/until superseded by a
corresponding specification on a later time step (or in another “.bcs” file read later on the
same time step).
Lines 1 to NUBC1:
Last line:
Example:
is given for node 100 in dataset 17 (fluid sources and sinks) of the “.inp” file and that the
specification
286
# IUBC UBC
500 0.
is given for node 500 in dataset 20 (specified concentrations) of the “.inp” file. Thus,
node 100 is a fluid source/sink node initially set to inject 0.1 [M/s] of fresh water, and
node 500 is a specified-concentration node initially set to a concentration of 0. [Ms/M].
The following “.bcs” file modifies the specifications at nodes 100 and/or 500 according
to schedule “STEPS_2&4”, which consists of time steps 2 and 4 and is assumed to have
been defined in “.inp” dataset 6:
# Schedule name
‘STEPS_2&4’
#
# TIME STEP 2
# Dataset 2: identifier and counts
# BCSID NSOP1 NSOU1 NPBC1 NUBC1
‘ts02’ 1 0 0 1
# Dataset 3: fluid sources/sinks
# IQCP1 QINC1 UINC1
100 -0.3
0
# Dataset 6: specified concentrations
# IUBC1 UBC1
500 0.02
0
#
# TIME STEP 4
# Dataset 2: identifier and counts
# BCSID NSOP1 NSOU1 NPBC1 NUBC1
‘ts04’ 0 0 0 1
# Dataset 6: specified concentrations
# IUBC1 UBC1
-500
0
Note that specifications are given for each of the two time steps in the controlling
schedule. At a minimum, “.bcs” dataset 2 must be provided for each time step in the
controlling schedule. If there are no specifications to be made for a given time step in the
controlling schedule, one should set NSOP1=NSOU1=NPBC1=NUBC1=0 for that time
step.
287
If flow and transport are transient and there are no other specifications for nodes 100 and
500 other than those described above, then those two nodes will exhibit the following
time dependence over the first five time steps of the simulation:
By virtue of the specification in “.inp” dataset 17, node 100 starts out as a fluid source of
0.1 [M/s]. The “.bcs” specification on time step 2 (dataset 3) then changes node 100 to a
fluid sink of 0.3 [M/s], which it remains thereafter. (UINC is not applicable when the
node is a fluid sink because fluid leaves the model at whatever concentration is computed
at node 100).
By virtue of the specification in “.inp” dataset 20, node 500 starts out at a specified
concentration of 0. [Ms/M]. The “.bcs” specification on time step 2 (dataset 6) then
changes the specified concentration to 0.02 [Ms/M], where it remains until the
specification is rendered inactive through the use of a negative node number on time step
4.
_____________________________________________________________________________
288
______________________________________________________________________________
The data in the “.ics” file need be created by the user only for the very first time step of a given
simulation or series of restarted simulations. Thereafter, if the user has chosen to optionally store
the final results of the simulation in a “.rst” file, this “.rst” file may be used directly as the “.ics”
file for later restarts. The restart options are controlled by CREAD and ISTORE in dataset 4 of
the “.inp” file.
TICS Real Time (in seconds) to which the initial conditions specified
in the “.ics” file correspond. [s].
Example:
If the initial conditions correpsond to time 1990 years on the simulation clock, set
TICS=(1990 yrs)(3.15576x107 s/yr)= 6.2799624x1010 s as follows:
6.2799624d+10
See the description of “.inp” dataset 6 for conversion factors between various time units.
289
DATASET 2: Initial Pressure Values at Nodes (two lines; second line can be broken up over
multiple lines)
Line 1:
Line 2:
290
DATASET 3: Initial Temperature or Concentration Values at Nodes (two lines; second line can
be broken up over
multiple lines)
Line 1:
Line 2:
______________________________________________________________________________
291