Phast PDF
Phast PDF
Phast PDF
CHLORIDE, IN CALCIUM, IN
MILLIGRAMS PER LITER MILLIGRAMS PER LITER
pH ARSENIC, IN
MICROGRAMS PER LITER
Suggested citation:
Parkhurst, D.L., Kipp, K.L., Engesgaard, Peter, and Charlton, S.R., 2004, PHAST—A program for simulating
ground-water flow, solute transport, and multicomponent geochemical reactions: U.S. Geological Survey
Techniques and Methods 6–A8, 154 p.
Contents
Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Chapter 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1. Applicability. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Simulator Capabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3. Simulator Results. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4. Numerical Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5. Computer Resources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.6. Purpose and Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.7. Acknowledgments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Chapter 2. Running the Simulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.1. Input Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2. Output Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3. Program Execution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Chapter 3. Thermodynamic Database and Chemistry Data Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1. Thermodynamic Database File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2. Chemistry Data File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2.1. Chemical Initial and Boundary Conditions for Reactive Transport . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2.2. Output of Chemical Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Chapter 4. Flow and Transport Data File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.1. Organization of the Flow and Transport Data File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2. Spatial Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2.1. Zones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2.1.1. Use of Zones for Defining Porous-Media Properties. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.1.2. Use of Zones for Defining Initial- and Boundary-Condition Properties. . . . . . . . . . . . . . . 21
4.2.1.3. Property Definitions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2.2. Rivers and Wells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.3. Transient Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.4. Description of Keyword Data Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
CHEMISTRY_IC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Example Problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
END. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Example Problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
FLUX_BC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Example Problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
FREE_SURFACE_BC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
iii
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
Example Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
GRID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
Example Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36
HEAD_IC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
Example 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
Explanation 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
Example 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Explanation 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
Example Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
LEAKY_BC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
Example Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
MEDIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
Example Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
PRINT_FREQUENCY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
Example Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
PRINT_INITIAL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
Example Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
PRINT_LOCATIONS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
Example Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
RIVER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
Example Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
SOLUTE_TRANSPORT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
iv
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Example Problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
SOLUTION_METHOD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Example 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Explanation 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Notes 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Example 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Explanation 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Notes 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Example Problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
SPECIFIED_HEAD_BC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Example Problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
STEADY_FLOW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Example Problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
TIME_CONTROL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Example Problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
TITLE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Example Problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
UNITS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Example Problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
WELL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Explanation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Notes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Example Problems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Chapter 5. Output Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.1. Content of Output Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.2. Selection of Data for Chemical Output Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.3. Output Files for Post-Processing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
5.4. Diagnostic Output Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
v
Chapter 6. Examples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
6.1. Verification Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
6.2. Example 1: Pulse Source of Chemical Constituent that Undergoes Sorption and Decay . . . . . . . . . . .85
6.3. Example 2: Chain of Four Kinetically Decaying Reactants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
6.4. Example 3: Aerobic Consumption of a Substrate with Biomass Growth . . . . . . . . . . . . . . . . . . . . . . . . . . .96
6.5. Example 4: Simulation of Regional-Scale Transport and Reactions in the
Central Oklahoma Aquifer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103
6.5.1. Initial Conditions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
6.5.2. Chemistry Data File. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
6.5.3. Flow and Transport Data File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
6.5.4. Results. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
Chapter 7. Notation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115
7.1. Roman Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115
7.2. Greek Characters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117
7.3. Mathematical Operators and Special Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118
References Cited. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .119
Appendix A. Three-Dimensional Visualization of PHAST Simulation Results. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123
Appendix B. Using PHASTHDF to Extract Data from the HDF Output File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125
Appendix C. Parallel-Processing Version of PHAST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127
C.1. Parallelization of PHAST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127
C.2. Running the Parallel Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129
Appendix D. Theory and Numerical Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
D.1. Flow and Transport Equations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
D.1.1. Components. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133
D.1.2. Spatial Discretization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .133
D.1.3. Temporal Discretization. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .135
D.1.4. Automatic Time-Step Algorithm for Steady-State Flow Simulation. . . . . . . . . . . . . . . . . . . . . . . .136
D.2. Chemical-Reaction Equations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
D.2.1. Equilibrium Reactions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
D.2.2. Component Mole Balance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
D.2.3. Kinetic Reactions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
D.3. Property Functions and Transport Coefficients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .138
D.4. Well-Source Conditions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .139
D.5. Boundary Conditions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
D.5.1. Specified-Head Boundary with Associated Solution Composition. . . . . . . . . . . . . . . . . . . . . . . .140
D.5.2. Specified-Head Boundary with Specified Solution Composition. . . . . . . . . . . . . . . . . . . . . . . . . .141
D.5.3. Specified-Flux Boundary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141
D.5.4. Leakage Boundary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142
D.5.5. River-Leakage Boundary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143
D.5.6. Free-Surface Boundary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .145
D.5.7. Boundary-Condition Compatibility. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146
D.6. Initial Conditions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147
D.7. Method of Solution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148
D.7.1. Operator Splitting and Sequential Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149
D.7.2. Linear-Equation Solvers for Flow and Transport Finite-Difference Equations. . . . . . . . . . . . . .151
D.7.3. Solving Equilibrium and Kinetic Chemical Equations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151
vi
D.8. Accuracy from Spatial and Temporal Discretization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152
D.9. Global Mass-Balance Calculations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152
D.10. Nodal Velocity Calculation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153
Figures
2.1. Figure showing the relation between input and output files and the execution of the two
programs PHASTINPUT and PHAST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .9
4.1.–4.6. Figures showing:
4.1. The grid region, boundary nodes, and one shaded element. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.2. The grid region, boundary of the active grid region, boundary nodes, cell boundaries,
and one shaded cell. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.3. Rectangular zone used to select elements from a two-dimensional grid, and the
elements selected by the zone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.4. The parts of eight elements contained within a cell and the parts of four elements
located within each cell face . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.5. Rectangular zone used to select nodes from a two-dimensional grid, and the
nodes and cells selected by the zone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.6. Discretization of river segments for a river and its tributary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.1.–6.3. Figures showing:
6.1. Example 1: Analytical solution for concentration at 120 seconds of a pulse of solute
that undergoes linear sorption and linear decay compared to numerical solutions . . . . . . . . . . 91
6.2. Example 2: Analytical solution compared to simulation results for
concentrations of a chain of decay products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.3. Example 3: Concentrations of substrate, biomass, and dissolved oxygen at 37 days . . . . . . . . . 103
6.4. Map showing locations in the Central Oklahoma aquifer with arsenic concentrations
greater than 50 micrograms per liter and PHAST model area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
6.5.–6.6. Figures showing:
6.5. Example 4: Locations of boundary conditions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.6. Example 4: Distribution of: chloride concentrations, calcium concentrations, pH, and
arsenic concentrations after 100,000-year simulation of the evolution of water in the
Central Oklahoma aquifer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
B.1.–B.3. PHASTHDF input screens:
B.1. For selection of HDF output file from which data are to be extracted . . . . . . . . . . . . . . . . . . . . . . . . 125
B.2. Associated with the first and fourth of five tabs that allow selection of model nodes
and chemical data to be extracted from the HDF output file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
B.3. Used to specify the file name for the export file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
C.1. Flow-control diagram for parallel-processing version of PHAST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
D.1.–D.4. Figures showing:
D.1. Grid of node points that covers the simulation region . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
D.2. Types of boundary-condition cells in a two-dimensional grid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
D.3. Schematic section showing geometry for a river-leakage boundary. . . . . . . . . . . . . . . . . . . . . . . . 143
D.4. Steps by which river subpolygons and river subpolygon properties are determined. . . . . . . . . 144
vii
Tables
2.1. List of output files that may be generated by a PHAST simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.1. Keyword data blocks commonly used in the thermodynamic database file . . . . . . . . . . . . . . . . . . . . . . . . 11
3.2. Elements and element valence states included in default thermodynamic database phast.dat,
including PHAST notation and default formula for gram formula weight. . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.3. Keyword data blocks commonly used in the chemistry data file. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.1. Keyword data blocks for the flow and transport data file. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
5.1. Format of the boundary-condition index number for each type of boundary condition . . . . . . . . . . . . . . 83
6.1. Chemical and physical parameters for example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.2. Chemistry data file for example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3. Flow and transport data file for example 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
6.4. Chemical and physical parameters for example 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.5. Chemistry data file for example 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
6.6. Flow and transport data file for example 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
6.7. Chemical and physical parameters for example 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.8. Chemistry data file for example 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.9. Flow and transport data file for example 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.10. Chemistry data file for example 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
6.11. Flow and transport data file for example 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
D.1. Compatibility among boundary conditions and wells for a cell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Abbreviations
atmosphere atm
cubic meter m3
day d
equivalent eq
gram g
Joule J
kilogram kg
kilogram of water kgw
liter L
meter m
mole mol
milliequivalent meq
milligram mg
millimole mmol
microgram µg
micromole µmol
parts per million ppm
second s
square meter m2
year yr
viii
PHAST—A Program for Simulating Ground-Water Flow,
Solute Transport, and Multicomponent Geochemical
Reactions
By David L. Parkhurst1, Kenneth L. Kipp1, Peter Engesgaard2, and Scott R. Charlton1
Abstract
The computer program PHAST simulates multi-component, reactive solute transport in three-dimensional saturated
ground-water flow systems. PHAST is a versatile ground-water flow and solute-transport simulator with capabilities to model a
wide range of equilibrium and kinetic geochemical reactions. The flow and transport calculations are based on a modified version
of HST3D that is restricted to constant fluid density and constant temperature. The geochemical reactions are simulated with the
geochemical model PHREEQC, which is embedded in PHAST.
PHAST is applicable to the study of natural and contaminated ground-water systems at a variety of scales ranging from
laboratory experiments to local and regional field scales. PHAST can be used in studies of migration of nutrients, inorganic and
organic contaminants, and radionuclides; in projects such as aquifer storage and recovery or engineered remediation; and in
investigations of the natural rock-water interactions in aquifers. PHAST is not appropriate for unsaturated-zone flow, multiphase
flow, density-dependent flow, or waters with high ionic strengths.
A variety of boundary conditions are available in PHAST to simulate flow and transport, including specified-head, flux, and
leaky conditions, as well as the special cases of rivers and wells. Chemical reactions in PHAST include (1) homogeneous equilibria
using an ion-association thermodynamic model; (2) heterogeneous equilibria between the aqueous solution and minerals, gases,
surface complexation sites, ion exchange sites, and solid solutions; and (3) kinetic reactions with rates that are a function of
solution composition. The aqueous model (elements, chemical reactions, and equilibrium constants), minerals, gases, exchangers,
surfaces, and rate expressions may be defined or modified by the user.
A number of options are available to save results of simulations to output files. The data may be saved in three formats: a
format suitable for viewing with a text editor; a format suitable for exporting to spreadsheets and post-processing programs; or in
Hierarchical Data Format (HDF), which is a compressed binary format. Data in the HDF file can be visualized on Windows
computers with the program Model Viewer and extracted with the utility program PHASTHDF; both programs are distributed with
PHAST.
Operator splitting of the flow, transport, and geochemical equations is used to separate the three processes into three
sequential calculations. No iterations between transport and reaction calculations are implemented. A three-dimensional Cartesian
coordinate system and finite-difference techniques are used for the spatial and temporal discretization of the flow and transport
equations. The non-linear chemical equilibrium equations are solved by a Newton-Raphson method, and the kinetic reaction
equations are solved by a Runge-Kutta or an implicit method for integrating ordinary differential equations.
The PHAST simulator may require large amounts of memory and long Central Processing Unit (CPU) times. To reduce the
long CPU times, a parallel version of PHAST has been developed that runs on a multiprocessor computer or on a collection of
computers that are networked. The parallel version requires Message Passing Interface, which is currently (2004) freely available.
The parallel version is effective in reducing simulation times.
This report documents the use of the PHAST simulator, including running the simulator, preparing the input files, selecting
the output files, and visualizing the results. It also presents four examples that verify the numerical method and demonstrate the
capabilities of the simulator. PHAST requires three input files. Only the flow and transport file is described in detail in this report.
The other two files, the chemistry data file and the database file, are identical to PHREEQC files and the detailed description of
these files is found in the PHREEQC documentation.
Abstract 1
2 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
Chapter 1. Introduction
The computer program PHAST (PHREEQC And HST3D) simulates multi-component, reactive solute transport in
three-dimensional saturated ground-water flow systems. PHAST is a versatile ground-water flow and transport simulator with
capabilities to model a wide range of equilibrium and kinetic geochemical reactions. The flow and transport calculations are based
on a modified version of HST3D (Kipp, 1987; 1997) that is restricted to constant fluid density and constant temperature. The
geochemical reactions are simulated with the geochemical model PHREEQC (Parkhurst, 1995; Parkhurst and Appelo, 1999), which
is embedded in PHAST. The combined flow, transport, and geochemical processes are simulated by three sequential calculations
for each time step: first, flow velocities are calculated; then, the chemical components are transported; and finally geochemical
reactions are calculated. This sequence is repeated for successive time steps until the end of the simulation.
Reactive-transport simulations with PHAST require three input files: a flow and transport data file, a chemistry data file, and
a thermodynamic database file. All input data files are built with modular keyword data blocks. Each keyword data block defines
a specific kind of information—for example, grid locations, porous media properties, boundary-condition information, or initial
chemical composition in a zone. All spatial data are defined by zones, which are rectangular volumes. Simulation results can be
saved in a variety of file formats, including Hierarchical Data Format (HDF, http://hdf.ncsa.uiuc.edu). Two utility programs are
distributed with PHAST: (1) Model Viewer (Windows only), which is used to produce three-dimensional visualizations of problem
definition and simulation results; and (2) PHASTHDF, which is used to extract subsets of the data stored in the HDF file.
The PHAST simulator can be run on most computer systems, including computers with Windows, Linux, and Unix operating
systems. Coupled reactive-transport simulations are computer intensive, which can result in long run times on a single processor
computer. A parallel (multiprocessor) version of PHAST, implemented with the Message Passing Interface (MPI), is available to
be used on multiprocessor computers and on networked computer clusters (Windows, Unix, or Linux). Using the parallel version
of PHAST can greatly reduce run times.
1.1. Applicability
PHAST is applicable to the study of natural and contaminated ground-water systems at a variety of scales ranging from
laboratory experiments to local and regional field scales. Representative examples of PHAST applications include simulation of
effluent arsenic concentrations in laboratory column experiments, migration of dissolved organic compounds from a landfill,
migration of nutrients in a sewage plume in a sandy aquifer, storage of fresh water in a slightly saline aquifer, and examination of
natural mineral and exchange reactions in a regional aquifer.
PHAST is not suitable for some types of reactive-transport modeling. In particular PHAST is not appropriate for
unsaturated-zone flow and does not account for flow and transport of a gas phase or a non-aqueous liquid phase. PHAST is restricted
to constant temperature and constant density and does not account for density-dependent flow caused by concentration gradients
or temperature variations. The aqueous model for PHAST is an ion-association model that is applicable to ionic strengths to 1
molal. Thus, PHAST is not an appropriate simulator for many systems and processes, including transport of volatile organic
compounds in a soil zone, hydrothermal systems, most high ionic-strength brines, or heat storage and recovery in aquifers.
Chapter 1. Introduction 3
through an aquitard, with associated solution composition;(5) rivers with associated solution composition; (6) injection of specified
solution compositions or pumpage by wells; and (7) free-surface boundary condition (unconfined flow). A PHAST simulation is
composed of a series of simulation periods. Heads and compositions of solutions for boundary conditions are constant over each
period, but time series of values may be defined for heads, solution compositions, and pumping rates to simulate transient boundary
conditions.
A wide range of chemical reactions can be coupled to the transport calculations. Heterogeneous equilibrium reactions may
be simulated, including equilibrium among the aqueous solution and minerals, surface complexation sites, ion exchange sites, solid
solutions, and a gas phase. The most complex simulations include kinetic reactions, which require mathematical expressions that
define the rates of reactions as a function of solution composition, time, or other chemical factors. In addition, geochemical
simulations, which include all of the above types of reactions plus additional reaction capabilities, may be used to define chemical
initial and boundary conditions for the reactive-transport simulations. Any modeling capability available in PHREEQC (including
one-dimensional transport simulations) may be used to establish initial and boundary conditions for the reactive-transport
simulation of PHAST. The aqueous model, equilibrium conditions, and kinetic rate expressions are defined through a data base file
that can be modified by the user.
4 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
algorithm is used for controlling errors in the integration of the kinetic reaction rates and the equilibrium equations are solved at
each intermediate step of the integration.
A three-dimensional Cartesian coordinate system is used to define the region for reactive-transport simulations. Although
flow and transport calculations are always three dimensional, the symmetry of conceptually one- and two-dimensional regions can
be used to reduce the computational workload of the geochemical calculations. For these cases, the geochemical calculations are
performed on a line or plane of nodes and then copied to the corresponding symmetric parts of the simulation region.
1.7. Acknowledgments
The contributions of Flemming Christiansen, who helped with program development and testing while at the Technical
University of Denmark, and Scott McFarlane of the U.S. Geological Survey, who built and maintained the Beowulf parallel
computer cluster, are gratefully acknowledged.
Chapter 1. Introduction 5
6 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
Chapter 2. Running the Simulator
This chapter contains information needed to run the PHAST simulator as well as some background information on program
organization and flow of execution. Specific information on preparation of input data files is contained in chapters 3, 4, and the
PHREEQC documentation (Parkhurst and Appelo, 1999).
prefix.h5 Grid and boundary-condition information, potentiometric head field, velocity field, and selected chemical
concentration data
prefix.head.dat Potentiometric heads at the final time step of the simulation in a form that can be read as initial head
conditions in subsequent simulations
prefix.log Copies of the prefix.trans.dat and prefix.chem.dat input data files, solver statistics, and all error or warning
messages
prefix.O.bal Fluid and chemical component regional mass balances, total balances, and balances listed by
boundary-condition type
prefix.O.bcf Boundary-condition fluid and solute flow rates for cells listed by boundary-condition type
prefix.O.chem Solution concentrations, distribution of aqueous species, saturation indices, and compositions of exchangers,
gas phases, kinetic reactants, phase assemblages, solid solutions, and surfaces from the internal PHREEQC
calculation at the beginning of a PHAST run. Data are normally not written to this file during flow, transport,
and reaction calculations.
prefix.O.comps Initial and transient total dissolved concentrations for chemical elements (components)
prefix.O.kd Static fluid conductances and transient solute dispersive conductances at cell faces for X-, Y-, and
Z-coordinate directions
prefix.O.probdef Flow and transport problem definition as specified by the input files, including array sizes, grid definition,
media properties, initial conditions, static and transient boundary-condition information
prefix.O.vel Interstitial velocities for X-, Y-, and Z-coordinate directions across cell faces and interstitial velocities in the
X-, Y-, and Z-coordinate directions at nodes
prefix.O.wel Static and transient well information, including well location and identification number, fluid and solute flow
rates, cumulative fluid and solute flow amounts, and solute concentrations
prefix.xyz.comps Initial-condition and transient cell concentrations for each chemical element (component)
selected_output Rarely used. Selected chemical data from the initial call to PHREEQC to process the chemistry data file
(Following the initial call to PHREEQC, selected output for initial and transient conditions are written to
prefix.xyz.chem.)
8 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
Input Files prefix.trans.dat prefix.chem.dat phast.dat
Simulator PHAST
Figure 2.1.—The relation between input and output files and the execution of the two programs PHASTINPUT and
PHAST.
Table 3.1.—Keyword data blocks commonly used in the thermodynamic database file
12 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
3.2. Chemistry Data File
The chemistry data file defines the solutions, gas phases, and pure-phase, exchange, and surface assemblages and
geochemical calculations that are used in initial and boundary conditions of the reactive-transport simulation. Also defined in the
chemistry data file is the set of chemical data to be written to the prefix.h5 and prefix.xyz.chem output data files. The keyword data
blocks most commonly used in the chemistry data file to define initial and boundary conditions are listed in table 3.3. For details
on the formats and options for these and all other data blocks that can be included in the chemistry data file (and thermodynamic
database file), it is necessary to refer to the PHREEQC manual (Parkhurst and Appelo, 1999).
Initial conditions for the reactive-transport simulation are defined with SOLUTION, EXCHANGE, KINETICS,
SURFACE, EQUILIBRIUM_PHASES, SOLID_SOLUTIONS, and GAS_PHASE data blocks. Solution compositions and
speciation calculations are defined with the SOLUTION data block. The composition of an exchange assemblage is defined with
the EXCHANGE data block; sets of kinetic reactions are defined with the KINETICS data block, and rate expressions for the
kinetic reactions are defined with the RATES data block; the composition of a surface assemblage is defined with the SURFACE
data block; and the identity and amount of each phase in a pure-phase assemblage is defined with the EQUILIBRIUM_PHASES
data block. The composition of a fixed-total-pressure or fixed-volume multicomponent gas phase is defined with the GAS_PHASE
data block. (The gas phase feature is rarely used; gases are usually defined as fixed partial pressure phases in
EQUILIBRIUM_PHASES data blocks.) Index numbers are defined for each solution, equilibrium-phase assemblage, exchange
assemblage, gas phase, kinetic-reactant set, solid-solution assemblage, and surface assemblage. These index numbers are used in
the flow and transport data file to specify initial and boundary conditions by zones. For example, solutions defined by different
index numbers can be applied to a series of zones to define the spatially varying initial composition of water within an aquifer.
The units for input in the SOLUTION data block are concentration units, which are converted to molality for all chemical
calculations. The units for input in the data blocks EXCHANGE, KINETICS, SURFACE, EQUILIBRIUM_PHASES,
SOLID_SOLUTIONS are extensive (moles). For each cell in PHAST, the representative porous-medium volume for chemistry
contains one kilogram of water, when saturated. Thus, when defining amounts of solid-phase reactants, the appropriate number of
moles is numerically equal to the concentration of the reactant (moles per kilogram water, mol/kgw), assuming a saturated porous
medium. Note that the concentration of the solid reactants varies spatially as porosity varies, so that if porosity is defined to vary
spatially, then logically, the concentrations of solid-phase reactants also should be defined to vary spatially.
For unconfined flow (free-surface) calculations, the volume of water in a cell may vary. Thus, it is important to define the rate
expressions for kinetic reactions to account for the changing volume of solution. Rate expressions for kinetic reactions introduce
moles of reactants; thus, if a known rate expression has units of moles per kilogram water, it is necessary to multiply by the mass
of water present [TOT(“water”) is the Basic-language function for mass of water] to calculate the proper number of moles of
reaction to add to solution (see KINETICS data block in Parkhurst and Appelo, 1999).
Reaction calculations specified in the chemistry data file may be used to define initial or boundary conditions. These reaction
calculations are processed during the initial call to the PHREEQC module. Reactions are defined by allowing a solution or mixture
of solutions to come to equilibrium with one or more of the following reactants: an exchange assemblage, a surface assemblage,
a pure-phase assemblage, a solid-solution assemblage, or a multicomponent gas phase. In addition, irreversible reactions, kinetic
reactions, and reaction temperature can be specified for reaction calculations. (Although temperature does not affect flow, it does
affect chemical reactions. See section D.6. Initial Conditions.) Previously defined reactants can be used in reaction calculations by
USE data blocks. The composition of the solution, exchange assemblage, surface assemblage, pure-phase assemblage, or gas
phase can be saved after a reaction calculation with the SAVE keyword for subsequent use in reaction calculation or for initial and
boundary conditions. The SAVE keyword assigns an index number to the specified composition. These index numbers are used in
the flow and transport file to define initial and boundary conditions for specified zones within the simulation region.
[—, index number is not used in flow and transport data file]
GAS_PHASE index Defines a gas phase. This option is rarely used because CHEMISTRY_IC
gas transport is not simulated. More commonly, gases
are treated with fixed partial pressures in
EQUILIBRIUM_PHASES.
SAVE solution index Saves solution composition that is the result of a CHEMISTRY_IC,
reaction simulation FLUX_BC, LEAKY_BC,
SPECIFIED_HEAD_BC,
RIVER, WELL
SAVE exchange index Saves reaction simulation results to define new CHEMISTRY_IC
SAVE equilibrium_phases index compositions of ion exchangers, equilibrium phases,
SAVE gas_phase index gas phase, kinetic reactants, solid solutions, and
SAVE kinetics index surfaces
SAVE solid_solution index
SAVE surface index
14 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
Some keyword data blocks from PHREEQC that are less commonly used have been omitted from tables 3.1 and 3.3, but all of
the functionality of PHREEQC is available in the initial reaction calculations by the PHREEQC module, including all reaction and
one-dimensional transport and advection capabilities. Thus, it is possible to use a reaction calculation to define a water composition
that is produced by equilibrating pure water with calcite and dolomite, which can then be used as the initial water composition for
an aquifer. It also is possible, for example, to simulate the percolation of a contaminant through a one-dimensional column that
represents a confining layer, and save the water compositions of the column effluent to be used as time-varying input through a
flux boundary condition.
PHAST simulations produce a huge amount of chemical data—including, but not limited to, the molality and activity of every
aqueous species, exchange species, and surface species; the moles of every reactive mineral; the saturation index for each of a large
number of minerals; and the mole transfer of every kinetic reactant—for every cell for every time step. The
SELECTED_OUTPUT and USER_PUNCH data blocks are used to select a subset of the chemical results to be written to the
prefix.h5 and prefix.xyz.chem output data files. The SELECTED_OUTPUT data block allows selection of certain types of
chemical data to be written to these two output files, including pH; pe; total molalities of specified elements; molalities and
activities of specified aqueous, exchange, and surface species; saturation indices and partial pressures of specified minerals and
gases; amounts and mole-transfers of equilibrium phases and kinetic reactants; and moles of gas components in the gas phase.
The USER_PUNCH data block provides another more versatile method to select data for the two output files. The
USER_PUNCH data block uses an embedded Basic-language interpreter to allow calculation of chemical quantities that can then
be written to the output files. The Basic-language interpreter has a full range of programming capabilities, including variables,
mathematical functions, FOR loops, and subroutines, which allows calculation of almost any chemical quantity that is needed in
the output files. During the reaction calculation for a cell at any given time step in the reactive-transport simulation, virtually all
of the information related to the chemical calculation for the cell is available through Basic-language functions that can be used
in calculations—molalities, activities, ionic strength, equilibrium constants, moles of minerals, among others. The results of these
calculations can be written to the output file with a Basic-language command (PUNCH). Thus, for example, it is possible to
calculate the number of grams of calcite in a cell from the number of moles of calcite, and write the mass to the two output files
(prefix.h5 and prefix.xyz.chem). Another example is to calculate the sodium sorption ratio (SAR) from the concentrations of the
major cations, and write the result to the output files.
The selected_output file also may contain data as defined by SELECTED_OUTPUT and USER_PUNCH. However, the
file only will contain results related to the first call to PHREEQC, which precedes all steady-flow, active-grid initialization, and
reactive-transport calculations. Frequently, a spreadsheet file of this preliminary calculation is not useful, and the
SELECTED_OUTPUT data block is located at the end of the prefix.chem.dat file, following an END keyword, which results in
no data being written to the selected_output file.
If necessary, the chemistry data file can be used to modify or augment the thermodynamic database file. If new elements,
aqueous species, exchange species, surface species, or phases need to be included in addition to those defined in the
thermodynamic database file, or if the stoichiometry, equilibrium constant, or activity coefficient information from the
thermodynamic database file needs to be modified for a simulation, then the keyword data blocks listed in table 3.1 can be included
in the chemistry data file. The data read for these data blocks in the chemistry input file will augment or supersede the data read
from the thermodynamic database file. In most cases, the aqueous model and thermodynamic data for phases defined in the
thermodynamic database file will not be modified, and the keywords listed in table 3.1 will not be used in the chemistry data file.
18 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
Z
Figure 4.1.—The grid region, boundary nodes (dots), and one shaded element.
The “natural” order of elements and cells begins in the left, front, bottom corner of the grid region. Element and cell numbers
increase by cycling through X, then Y, and then Z coordinates. This natural order is required whenever node-by-node input is used
to define properties for a simulation.
4.2.1. Zones
Zones are rectangular prisms that are used to distribute property values within the grid region. A zone is defined by two sets
of coordinates, the location of the left, front, lower corner (minimum X, minimum Y, and minimum Z values) and the location of
the right, back, upper corner (maximum X, maximum Y, and maximum Z values) of a rectangular prism.
As spatial data are entered for nodes or elements, it is permissible to use overlapping zones. For example, the initial-condition
head for a given node could be defined by multiple zones, possibly in multiple HEAD_IC data blocks. The initial head that is used
for the given node in the flow simulation will be the head from the last zone in the flow and transport data file that contains that
node and defines the initial head property. The same logic applies to all properties, including boundary-condition type; the last
property value defined for a node will be the one used in the simulation.
It is possible to apply properties to a subset of nodes or elements within a zone by using a mask. A mask associates a 0 (or
any nonpositive number) or a 1 (or any positive number) with each node in the zone. Properties are applied only to those nodes or
elements with positive values of the mask. Using a mask may simplify the definition of properties that are associated with
non-rectangular sets of nodes, for example a circular feature. Defining a single zone with a mask that limits the property to the
nodes or elements in the circular feature may be easier than defining a large number of rectangular zones to approximate the
circular feature. Masks have the disadvantage that they are grid dependent; if the grid is changed so that the number of nodes in a
zone changes, then the sequence of 0s and 1s in the mask also must be changed, which is not a trivial task.
figure 4.3. The properties defined for the zone will be applied to each of
the elements that is selected.
Porous-media properties for a cell are defined by aggregating the
properties of the active elements that are contained in the cell (fig. 4.4). A
cell contains parts of one to eight active elements, thus a cell property may
be derived from as many as eight different values. Porosity and specific
storage are averaged in proportion to the volume of each active element
that is contained in the cell to arrive at the porous-media property for the
cell. Hydraulic conductivity and dispersivity are calculated for each of the
six faces of a cell (for an internal cell) by averaging the properties of the SELECTED ELEMENTS
active elements that contain the cell face. The averages are calculated by B.
weighting the element properties in proportion to the area of the cell face
that is within each element. A cell face is located within one to four active
elements; thus cell face conductances are a weighted average derived
from properties from as many as four different elements (fig. 4.4).
Frequently, it is convenient to define a uniform value for a
Figure 4.3.—(A) Rectangular zone used to select
porous-media property by using a zone that contains the entire grid
elements from a two-dimensional grid, and (B) the
region. It is permissible to use a zone that is larger than the grid region.
elements selected by the zone. Lines represent
Additional zones may then be defined that overlay different property
element boundaries.
values in different parts of the grid region to obtain a complete definition
of the spatial distribution of the property. Zones may be used to define
elements within the grid region to be inactive.
20 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
EXPLANATION
ELEMENT EDGE
CELL EDGE
ELEMENT FACE INTERSECTION
WITH CELL FACE
NODE
Figure 4.4.—The parts of eight elements contained within a cell and the parts of four elements
located within each cell face.
22 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
zone). Items in brackets ([]) are optional input fields (for example, in the identifier -u[niform], everything in the brackets is
optional). Mutually exclusive input fields are separated by the word “or” (for example, [True or False]). In general, the optional
fields must be entered in the specified order.
For clarity, commas are used to delimit input fields in the explanations of data input; however, commas are not used in the
flow and transport data file. All line numbers associated with example input for the flow and transport data files in the
documentation are for identification purposes only. (Input data files for PHAST do not contain any commas or line numbering
except in Basic language programs within the chemistry data file.) If multiple lines of the same type are present in an example, an
additional letter is included to give the line a unique identification.
The following definitions are used in the flow and transport file:
Keywords—Input data blocks are identified with an initial keyword. This word must be spelled exactly. Several of the
keywords have synonyms. For example SPECIFIED_BC is a synonym for SPECIFIED_HEAD_BC.
Identifiers—Identifiers denote the type of data within a keyword data block. Identifiers have two forms: (1) they are spelled
completely and exactly or (2) they start with a hyphen followed by enough characters to define the identifier uniquely. The form
with the hyphen is always acceptable. Usually, the form without the hyphen is acceptable, but in some cases the hyphen is needed
to indicate the word is an identifier rather than an identical keyword. In this documentation, the hyphen is used in the flow and
transport data file in all explanations and examples. Note that the hyphen in an identifier never indicates negativity.
Units—In this documentation, the units are identified by the abbreviations “L”, length and “T”, time. In nearly all cases, the
actual units of input for the flow and transport data file are defined by specifications in the UNITS data block. The PHAST simulator
accepts SI and most U.S. customary units for input. However, PHAST uses SI units internally and all output is in SI units, with the
exception of time units. The time unit used for output-file results is selected by the user.
Comments—The number symbol (#) is used to delimit the beginning of a comment in an input file. All characters in the line
that follow this character are ignored. The “#” is useful for adding comments explaining the source of various data or describing
the problem set up. In addition, it is useful for temporarily removing lines from an input file. If the entire line is a comment, the
line is not echoed to the log file (prefix.log). If the comment follows input data on a line, the entire line, including the comment, is
echoed to the log file.
Logical line separator—A semicolon (;) is interpreted as a logical end-of-line character. This allows multiple logical lines
to be entered on the same physical line. Thus, the semicolon should not be used in character fields, such as the title or other
comment or description fields.
Logical line continuation—A backslash (\) followed by white space and an end-of-line [carriage return and (or) line feed]
causes the input processor to ignore the end-of-line. By ignoring the end-of-line, a single logical line can be written to two physical
lines. Note that only white space (tabs or spaces) can follow the backslash; if non-white space follows the backslash, the following
line will not be treated as a continuation of the current line.
Repeat counter—An asterisk (*) can be used in node-by-node and element-by-element lists for property definitions to
indicate repetitions of the same values. Thus, “3*0.14” is equivalent to “0.14 0.14 0.14” when a property is defined by a list of
numbers.
The description of each keyword data block follows in alphabetical order. Each description includes examples of the use of
the keyword and all of its identifiers, which are followed by an explanation of the data required for each identifier. Additional
information is presented in notes to further explain the use of the identifiers, the interaction among identifiers, or to aid in the
selection of property values. Finally, a list of the example problems that use the keyword is included at the end of the description
of each keyword data block.
CHEMISTRY_IC
This keyword data block is used to define the initial conditions in the grid region, including: initial solution, and, optionally,
kinetic reactions; initial phase-, exchange-, and surface-assemblage compositions; and, rarely, initial gas-phase composition
(usually gases are defined as fixed partial pressures in EQUILIBRIUM_PHASES). The compositions are defined by index
numbers that correspond to compositions defined with SOLUTION, EQUILIBRIUM_PHASES, EXCHANGE, KINETICS,
SOLID_SOLUTIONS, SURFACE, and GAS_PHASE data blocks or through initial geochemical calculations defined in the
chemistry data file that are subsequently saved with a SAVE data block. Chemistry initial conditions also can be defined as
specified mixtures of chemical compositions on a node-by-node basis. The CHEMISTRY_IC data block is mandatory for all
reactive-transport simulations.
Example
Line 0: CHEMISTRY_IC
Line 1: -zone 0 0 0 10 10 10
Line 2: -solution 1
Line 3: -equilibrium_phases by_node
Line 4: < 1 2 1 3 1 1 3 4*2 >
Line 5: -surface file surface.fil
Line 6: -exchange X 1 0.0 5 10.0
Line 7: -gas_phase mixture 2 4
Line 8: < 6*1.0 0.8 0.6 0.4 0.2 0.0 >
Line 9: -solid_solutions 5
Line 10: -kinetics 2
Line 11: -mask file mask.file
Explanation
Line 0: CHEMISTRY_IC
CHEMISTRY_IC is the keyword for the data block; no other data are included on this line.
Line 1: -zone x1, y1, z1, x2, y2, z2
-zone—The zone selects a set of cells for which initial chemical conditions will be defined. Optionally, zone or
-z[one].
x1, y1, z1—X, Y, and Z coordinate for the left (X), front (Y), lower (Z) corner of the rectangular zone.
x2, y2, z2—X, Y, and Z coordinate for the right (X), back (Y), upper (Z) corner of the rectangular zone. Units, L, are
defined with the -horizontal_grid (X and Y coordinates) and -vertical_grid (Z coordinate) identifiers in the
UNITS data block.
Line 2: -solution property
-solution—This identifier is used to specify index numbers that define solution compositions that initially are
present in the cells in the zone. For solute transport modeling, all cells in the active grid region must have a
solution composition defined. Optionally, solution or -s[olution].
property—Index numbers are specified that correspond to solution compositions defined in the chemistry data file.
Solutions or mixtures of solutions can be entered for the zone with any of five methods for defining a
spatially distributed property: (1) a single index, the composition represented by the index is applied to the
entire zone, (2) by_node followed by an index for each node (active or inactive) in the zone in natural order
(list of values may extend over multiple lines); the list of values must be enclosed in angle brackets “< >”, (3)
file followed by a file name; an index for each node (active or inactive) in the zone is read from the file in
natural order (list of values may extend over multiple lines), (4) X, Y, or Z, index1, distance1, index2,
distance2, a composition is linearly interpolated from the end-member compositions defined by indices
index1 and index2 for each node in the zone; interpolation is proportional to the fractional distance of the
node location between distance1 and distance2 along the specified coordinate direction; for locations outside
the range of distance1 to distance2, the composition at the nearest point (distance1 or distance2) is used, or
24 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
CHEMISTRY_IC
(5) mixture index1, index2 followed by a list of mixing fractions (f1) for each node (active or inactive) in the
zone in natural order (list of values may extend over multiple lines); the list of mixing fractions must be
enclosed in angle brackets “< >”; the composition associated with a node is a mixture of the two
compositions—f1 is the mixing fraction applied to composition index1; f 2 = 1 – f 1 is the mixing fraction
applied to composition index2. Line 2 illustrates method 1.
Line 3: -equilibrium_phases property
-equilibrium_phases—This identifier is used to specify index numbers that define pure-phase assemblages that
initially are present in the cells of the zone. A negative index number indicates that there are no equilibrium
phases in the zone. Optionally, equilibrium_phases, -eq[uilibrium_phases], pure_phases,
-p[ure_phases], phases, or -p[hases].
property—Index numbers are specified that correspond to pure-phase-assemblage compositions defined in the
chemistry data file. Pure-phase assemblages or mixtures of pure-phase assemblages can be entered for the
zone with any of the five methods for defining a spatially distributed property: (1) a single index, the
composition represented by the index is applied to the entire zone, (2) by_node followed by an index for
each node (active or inactive) in the zone in natural order (list of values may extend over multiple lines); the
list of values must be enclosed in angle brackets “< >”, (3) file followed by a file name; an index for each
node (active or inactive) in the zone is read from the file in natural order (list of values may extend over
multiple lines), (4) X, Y, or Z, index1, distance1, index2, distance2, a composition is linearly interpolated
from the end-member compositions defined by indices index1 and index2 for each node in the zone;
interpolation is proportional to the fractional distance of the node location between distance1 and distance2
along the specified coordinate direction; for locations outside the range of distance1 to distance2, the
composition at the nearest point (distance1 or distance2) is used, or (5) mixture index1, index2 followed by a
list of mixing fractions (f1) for each node (active or inactive) in the zone in natural order (list of values may
extend over multiple lines); the list of mixing fractions must be enclosed in angle brackets “< >”; the
composition associated with a node is a mixture of the two compositions—f1 is the mixing fraction applied to
composition index1; f 2 = 1 – f 1 is the mixing fraction applied to composition index2. Lines 3 and 4 use
method 2.
Line 4: property continued
property continued—Continuation of property definition.
Note use of a repeat factor and asterisk to enter 4 values of 2.
Line 5: -surface property
-surface—This identifier is used to specify index numbers that define surface-assemblage compositions that
initially are present in the cells of the zone. A negative index number indicates that there are no surfaces in
the zone. Optionally, surface or -su[rface].
property—Index numbers are specified that correspond to surface-assemblage compositions defined in the
chemistry data file. Surface assemblages or mixtures of surface assemblages can be entered for the zone with
any of the five methods for defining a spatially distributed property: (1) a single index, the composition
represented by the index is applied to the entire zone, (2) by_node followed by an index for each node
(active or inactive) in the zone in natural order (list of values may extend over multiple lines); the list of
values must be enclosed in angle brackets “< >”, (3) file followed by a file name; an index for each node
(active or inactive) in the zone is read from the file in natural order (list of values may extend over multiple
lines), (4) X, Y, or Z, index1, distance1, index2, distance2, a composition is linearly interpolated from the
end-member compositions defined by indices index1 and index2 for each node in the zone; interpolation is
proportional to the fractional distance of the node location between distance1 and distance2 along the
specified coordinate direction; for locations outside the range of distance1 to distance2, the composition at
the nearest point (distance1 or distance2) is used, or (5) mixture index1, index2 followed by a list of mixing
fractions (f1) for each node (active or inactive) in the zone in natural order (list of values may extend over
multiple lines); the list of mixing fractions must be enclosed in angle brackets “< >”; the composition
associated with a node is a mixture of the two compositions—f1 is the mixing fraction applied to composition
index1; f 2 = 1 – f 1 is the mixing fraction applied to composition index2. Line 5 illustrates method 3.
Line 6: -exchange property
-exchange—This identifier is used to specify index numbers that define exchange-assemblage compositions that
initially are present in the cells of the zone. A negative index number indicates that there are no exchangers in
the zone.Optionally, exchange or -ex[change].
property—Index numbers are specified that correspond to exchange-assemblage compositions defined in the
chemistry data file. Exchange assemblages or mixtures of exchange assemblages can be entered for the zone
with any of the five methods for defining a spatially distributed property: (1) a single index, the composition
represented by the index is applied to the entire zone, (2) by_node followed by an index for each node (active
or inactive) in the zone in natural order (list of values may extend over multiple lines); the list of values must
be enclosed in angle brackets “< >”, (3) file followed by a file name; an index for each node (active or
inactive) in the zone is read from the file in natural order (list of values may extend over multiple lines), (4)
X, Y, or Z, index1, distance1, index2, distance2, a composition is linearly interpolated from the end-member
compositions defined by indices index1 and index2 for each node in the zone; interpolation is proportional to
the fractional distance of the node location between distance1 and distance2 along the specified coordinate
direction; for locations outside the range of distance1 to distance2, the composition at the nearest point
(distance1 or distance2) is used, or (5) mixture index1, index2 followed by a list of mixing fractions (f1) for
each node (active or inactive) in the zone in natural order (list of values may extend over multiple lines); the
list of mixing fractions must be enclosed in angle brackets “< >”; the composition associated with a node is a
mixture of the two compositions—f1 is the mixing fraction applied to composition index1; f 2 = 1 – f 1 is
the mixing fraction applied to composition index2. Line 6 illustrates method 4.
Line 7: -gas_phase property
-gas_phase—This identifier is used to specify index numbers that define gas-phase compositions that initially are
present in the cells of the zone. A negative index number indicates that there are no gas phases in the zone.
Optionally, gas_phase or -g[as_phase].
property—Index numbers are specified that correspond to gas-phase compositions defined in the chemistry data file.
Gas phases or mixtures of gas phases can be entered for the zone with any of the five methods for defining a
spatially distributed property: (1) a single index, the composition represented by the index is applied to the
entire zone, (2) by_node followed by an index for each node (active or inactive) in the zone in natural order
(list of values may extend over multiple lines); the list of values must be enclosed in angle brackets “< >”, (3)
file followed by a file name; an index for each node (active or inactive) in the zone is read from the file in
natural order (list of values may extend over multiple lines), (4) X, Y, or Z, index1, distance1, index2,
distance2, a composition is linearly interpolated from the end-member compositions defined by indices
index1 and index2 for each node in the zone; interpolation is proportional to the fractional distance of the
node location between distance1 and distance2 along the specified coordinate direction; for locations outside
the range of distance1 to distance2, the composition at the nearest point (distance1 or distance2) is used, or
(5) mixture index1, index2 followed by a list of mixing fractions (f1) for each node (active or inactive) in the
zone in natural order (list of values may extend over multiple lines); the list of mixing fractions must be
enclosed in angle brackets “< >”; the composition associated with a node is a mixture of the two
compositions—f1 is the mixing fraction applied to composition index1; f 2 = 1 – f 1 is the mixing fraction
applied to composition index2. Lines 7 and 8 illustrate method 5.
Line 8: property continued
property continued—Continuation of property definition.
Note use of a repeat factor and asterisk to enter 6 values of 1.0.
Line 9: -solid_solutions property
-solid_solutions—This identifier is used to specify index numbers that define solid-solution assemblages that
initially are present in the cells of the zone. A negative index number indicates that there are no solid
solutions in the zone. Optionally, solid_solution, solid_solutions or -soli[d_solutions].
26 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
CHEMISTRY_IC
property—Index numbers are specified that correspond to solid-solution-assemblage compositions defined in the
chemistry data file. Solid-solution assemblages or mixtures of solid-solution assemblages can be entered for
the zone with any of the five methods for defining a spatially distributed property: (1) a single index, the
composition represented by the index is applied to the entire zone, (2) by_node followed by an index for
each node (active or inactive) in the zone in natural order (list of values may extend over multiple lines); the
list of values must be enclosed in angle brackets “< >”, (3) file followed by a file name; an index for each
node (active or inactive) in the zone is read from the file in natural order (list of values may extend over
multiple lines), (4) X, Y, or Z, index1, distance1, index2, distance2, a composition is linearly interpolated
from the end-member compositions defined by indices index1 and index2 for each node in the zone;
interpolation is proportional to the fractional distance of the node location between distance1 and distance2
along the specified coordinate direction; for locations outside the range of distance1 to distance2, the
composition at the nearest point (distance1 or distance2) is used, or (5) mixture index1, index2 followed by a
list of mixing fractions (f1) for each node (active or inactive) in the zone in natural order (list of values may
extend over multiple lines); the list of mixing fractions must be enclosed in angle brackets “< >”; the
composition associated with a node is a mixture of the two compositions—f1 is the mixing fraction applied to
composition index1; f 2 = 1 – f 1 is the mixing fraction applied to composition index2. Line 9 illustrates
method 1.
Line 10: -kinetics property
-kinetics—This identifier is used to specify index numbers that define sets of kinetic reactants that initially are
present in the cells of the zone. A negative index number indicates that there are no kinetic reactants in the
zone. Optionally, kinetics or -k[inetics].
property—Index numbers are specified that correspond to sets of kinetic reactants defined in the chemistry data file.
Kinetic-reaction sets or mixtures of kinetic-reaction sets can be entered for the zone with any of the five
methods for defining a spatially distributed property: (1) a single index, the composition represented by the
index is applied to the entire zone, (2) by_node followed by an index for each node (active or inactive) in the
zone in natural order (list of values may extend over multiple lines); the list of values must be enclosed in
angle brackets “< >”, (3) file followed by a file name; an index for each node (active or inactive) in the zone
is read from the file in natural order (list of values may extend over multiple lines), (4) X, Y, or Z, index1,
distance1, index2, distance2, a composition is linearly interpolated from the end-member compositions
defined by indices index1 and index2 for each node in the zone; interpolation is proportional to the fractional
distance of the node location between distance1 and distance2 along the specified coordinate direction; for
locations outside the range of distance1 to distance2, the composition at the nearest point (distance1 or
distance2) is used, or (5) mixture index1, index2 followed by a list of mixing fractions (f1) for each node
(active or inactive) in the zone in natural order (list of values may extend over multiple lines); the list of
mixing fractions must be enclosed in angle brackets “< >”; the composition associated with a node is a
mixture of the two compositions—f1 is the mixing fraction applied to composition index1; f 2 = 1 – f 1 is
the mixing fraction applied to composition index2. Line 10 illustrates method 1.
Line 11: -mask property
Use of this identifier is rare.
-mask—An array is used to include and exclude nodes from the zone definition. Optionally, mask or -m[ask].
property—An array of 1s (or any positive number) and 0s (or any nonpositive number) is used to include and
exclude nodes from the zone definition. The array can be defined by any of four methods for defining a
spatially distributed property; however, methods 1 and 4 are usually not useful: (1) a single number, 1 or 0, is
used to include or exclude all of the nodes of the zone definition, (2) by_node followed by a 1 or 0 for each
node (active or inactive) in the zone in natural order (list of values may extend over multiple lines); the list of
values must be enclosed in angle brackets “< >”, (3) file followed by a file name—a 1 or 0 for each node
(active or inactive) in the zone is read from the file in natural order (list of values may extend over multiple
lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated from value1 and
value2 for each node in the zone; interpolation is proportional to the fractional distance of the node location
between distance1 and distance2 along the specified coordinate direction; for locations outside the range of
distance1 to distance2, the value at the nearest point (distance1 or distance2) is used; if the interpolated value
is less than or equal to 0 for a node, the node is excluded from the zone definition; if the interpolated value is
greater than 0, the node is included in the zone definition. Line 11 illustrates method 3.
Notes
CHEMISTRY_IC defines initial conditions and must be defined for a solute-transport simulation. All non-negative index
numbers must correspond to index numbers for solutions, sets of kinetic reactants, equilibrium-phase assemblages, exchange
assemblages, solid-solution assemblages, surface assemblages, and gas phases that are defined in the chemistry data file. Negative
index numbers indicate that the given chemical entity is not present in the zone defined. (For solute transport modeling, it is an
error if a solution composition is not defined for a node.) Initial solution definitions are mandatory for all nodes in the active grid
region. Sets of kinetic reactants, gas phases, equilibrium phases, and exchange, solid-solution, and surface assemblages are
optional. By default, all entities (solution, set of kinetic reactants, assemblages, and gas phase) are absent from all cells. Multiple
overlapping zones can be used within the CHEMISTRY_IC data block to define the initial conditions for the grid region. The
index number for a property for a single node may be defined multiple times as part of different zone definitions. The index number
used in the reactive-transport simulation for that entity for that node is the last index number defined for it in the flow and transport
data file.
If property input method 4 (spatial interpolation) is used to define compositions for cells, the composition of each cell is
determined by linear interpolation of the end-member compositions represented by two index numbers. The fractions applied to
the end members are determined by the location of the node relative to the locations specified for the end members along the
specified coordinate axis. For each type of initial condition the following are linearly interpolated: for solutions, moles of each
element and temperature; for sets of kinetic reactants, the moles of each reactant; for equilibrium-phase assemblages, moles of
each mineral phase; for exchange assemblages, moles of exchange sites and moles of exchanged ions; for solid-solution
assemblages, moles of each component of each solid solution; for surface assemblages, moles of each type of surface site, surface
area for each surface, and moles of sorbed elements; and for gas phases, moles of each gas component.
Note that the Basic-language programs defined in RATES data blocks in the chemistry data file and the thermodynamic data
file must be written to use seconds as the unit of the time step (the TIME variable). PHAST converts time steps from the user input
units for flow and transport calculations to seconds for kinetic calculations within the chemistry calculations.
Example Problems
The CHEMISTRY_IC data block is used in the example problems 1, 2, 3, and 4.
28 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
END
END
This keyword has no associated data. It is used optionally to designate the end the data input for a simulation. No input lines
are processed after encountering the END keyword in the flow and transport data file.
Example Problems
The END keyword is used in the example problems 1, 2, 3, and 4.
FLUX_BC
This keyword data block is used to define the specified-flux boundary conditions. For flow-only simulations, only the fluid
flux for each cell with a specified-flux boundary condition is required. For reactive-transport simulations, the index number of an
associated solution also is required. The flux and index number of the associated solution may vary independently over the course
of the simulation. This keyword data block is optional and only is needed if specified-flux boundaries are to be included in the
simulation.
Example
Line 0: FLUX_BC
Line 1: -zone 0 10 10 10 10 10
Line 2: -flux
Line 3: 0 -3.5e-3
Line 3a: 100 -2.0e-3
Line 4: -associated_solution
Line 5 0 X 5 0 6 10
Line 6: -face Z
Line 7: -mask file mask.file
Explanation
Line 0: FLUX_BC
FLUX_BC is the keyword for the data block; no other data are included on this line.
Line 1: -zone x1, y1, z1, x2, y2, z2
-zone—The zone selects a set of cells for which specified-flux boundary conditions will be defined. For
specified-flux boundary conditions, a zone can include a single node, a linear set of nodes, or a planar set of
nodes; three-dimensional sets of nodes are not allowed. Optionally, zone or -z[one].
x1, y1, z1—X, Y, and Z coordinate for the left (X), front (Y), lower (Z) corner of the rectangular zone.
x2, y2, z2—X, Y, and Z coordinate for the right (X), back (Y), upper (Z) corner of the rectangular zone. Units, L, are
defined by -horizontal_grid (X and Y coordinates) and -vertical_grid (Z coordinate) identifiers in the
UNITS data block.
Line 2: -flux
-flux—This identifier is used to specify a time series of volumetric fluxes for the nodes in the zone. Volumetric
fluxes are applied only to cells associated with active nodes and only to the cell faces on the active grid
boundary that are normal to the coordinate direction of the flux (-face). The flux is defined by the property
definition on line 3. A time series of flux properties may be defined by using multiple line 3s. The first time in
the series must be zero. Optionally, flux or -fl[ux].
Line 3: time [units] property
time—Simulation time (T) at which the flux property definition (property) will take effect. Units are defined
explicitly with units; default units are defined by -time identifier in UNITS data block.
units—Units for time can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these
units.
property—The volumetric flux for the nodes selected by the zone can be entered with any of four methods for
defining a spatially distributed property: (1) a single value for the zone, (2) by_node followed by a value for
each node (active or inactive) in the zone in natural order (list of values may extend over multiple lines); the
list of values must be enclosed in angle brackets “< >”, (3) file followed by a file name; a value for each node
(active or inactive) in the zone is read from the file in natural order (list of values may extend over multiple
lines), or (4) X, Y, or Z, value1, distance1, value2, distance2; a value is linearly interpolated from value1 and
value2 for each node in the zone; interpolation is proportional to the fractional distance of the node location
between distance1 and distance2 along the specified coordinate direction; for locations outside the range of
distance1 to distance2, the value at the nearest point (distance1 or distance2) is used. Lines 3 and 3a illustrate
30 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
FLUX_BC
method 1. The flux is a signed quantity that indicates whether the flux is in the positive coordinate direction
or the negative coordinate direction. Units, L/T, are defined by -flux identifier in the UNITS data block.
Line 4: -associated_solution
-associated_solution—This identifier is used to specify a time series of index numbers that define the solution
composition for the flux of water into the active grid region through the specified-flux boundary. The
composition of water flowing into the active grid is defined by the property definition of line 5. A time series
of solution properties may be defined by using multiple line 5s. The first time in the series must be zero.
Optionally, associated_solution, -a[ssociated_solution], solution, or -s[olution].
Line 5:time [units] property
time—Simulation time (T) at which the solution-composition property definition (property) will take effect. Units
are defined explicitly with units; default units are defined by -time identifier in UNITS data block.
units—Units for time can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these
units.
property—Index numbers are specified that correspond to solution compositions defined in the chemistry data file.
Solutions or mixtures of solutions can be entered for the zone with any of the five methods for defining a
spatially distributed property: (1) a single index, the composition represented by the index is applied to the
entire zone, (2) by_node followed by an index for each node (active or inactive) in the zone in natural order
(list of values may extend over multiple lines); the list of values must be enclosed in angle brackets “< >”, (3)
file followed by a file name; an index for each node (active or inactive) in the zone is read from the file in
natural order (list of values may extend over multiple lines), (4) X, Y, or Z, index1, distance1, index2,
distance2; a composition is linearly interpolated from the end-member compositions defined by indices
index1 and index2 for each node in the zone; interpolation is proportional to the fractional distance of the
node location between distance1 and distance2 along the specified coordinate direction; for locations outside
the range of distance1 to distance2, the composition at the nearest point (distance1 or distance2) is used, or
(5) mixture index1, index2 followed by a list of mixing fractions (f1) for each node (active or inactive) in the
zone in natural order (list of values may extend over multiple lines); the list of mixing fractions must be
enclosed in angle brackets “< >”; the composition associated with a node is a mixture of the two
compositions—f1 is the mixing fraction applied to composition index1; f 2 = 1 – f 1 is the mixing fraction
applied to composition index2. Line 5 illustrates method 4.
Line 6: -face (X, Y, or Z)
-face—This identifier is used to specify the coordinate direction of the specified flux. If the set of nodes selected by
the zone is zero or one dimensional, the coordinate direction of the flux must be specified. Optionally, face or
-fa[ce].
X, Y, or Z—The coordinate direction of the flux.
Line 7: -mask property
Use of this identifier is rare.
-mask—An array is used to include and exclude nodes from the zone definition. Optionally, mask or -m[ask].
property—An array of 1s (or any positive number) and 0s (or any nonpositive number) is used to include and
exclude nodes from the zone definition. The array can be defined by any of four methods for defining a
spatially distributed property; however, methods 1 and 4 are usually not useful: (1) a single number, 1 or 0, is
used to include or exclude all of the nodes of the zone definition, (2) by_node followed by a 1 or 0 for each
node (active or inactive) in the zone in natural order (list of values may extend over multiple lines); the list of
values must be enclosed in angle brackets “< >”, (3) file followed by a file name—a 1 or 0 for each node
(active or inactive) in the zone is read from the file in natural order (list of values may extend over multiple
lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated from value1 and
value2 for each node in the zone; interpolation is proportional to the fractional distance of the node location
between distance1 and distance2 along the specified coordinate direction; for locations outside the range of
distance1 to distance2, the value at the nearest point (distance1 or distance2) is used; if the interpolated value
is less than or equal to 0 for a node, the node is excluded from the zone definition; if the interpolated value is
greater than 0, the node is included in the zone definition. Line 7 illustrates method 3.
Notes
For specified-flux boundary conditions, the set of nodes selected by zones must be zero, one, or two dimensional.
Three-dimensional sets of nodes are not allowed because fluxes are normally applied only to the cells that bound the active grid
region, although it is possible to apply a flux to internal cells. For two-dimensional sets of nodes, the coordinate direction of the
flux can be determined from the zone definition, and the -face identifier is not required. For zero- and one-dimensional sets of
nodes, the coordinate direction of the flux is ambiguous, and the -face identifier must be used to identify the coordinate direction
of the flux. The sign of the flux quantity indicates whether the flux is in the positive or negative coordinate direction. Note that the
hyphen in -flux does not indicate a negative quantity; it only indicates that the word is an identifier.
Multiple zones may be used within any FLUX_BC data block to define flux boundary conditions for selected cell faces within
the grid region. Different boundary conditions for a single cell and its cell faces may be defined multiple times as part of different
zone definitions and different keyword data blocks. The boundary condition that is used for a cell face is taken from the last zone
definition in the flow and transport data file that defines a boundary condition for that cell face, subject to restrictions on the
combinations of boundary conditions that are allowed. A cell can have (1) a specified-head condition only, or (2) a combination of
flux, leaky, and river boundary conditions. Flux, leaky, and river boundary conditions for a cell must comply with the following
restrictions: (1) a given boundary condition can be applied to only one of the cell faces, (2) rivers always apply to the positive Z
cell face, (3) both leaky and river conditions cannot be applied to the positive Z cell face, and (4) both leaky and flux conditions
cannot be applied to the same cell face. Both a flux and a river condition may be defined for the positive Z face of a boundary cell.
See section D.5.7. Boundary-Condition Compatibility for more details.
Example Problems
The FLUX_BC data block is used in the example problem 4.
32 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
FREE_SURFACE_BC
FREE_SURFACE_BC
This keyword data block is used to define the presence of a free surface for unconfined flow simulations. If the
FREE_SURFACE_BC data block is not included, confined flow is simulated.
Example
Line 0: FREE_SURFACE_BC true
Explanation
Line 0: FREE_SURFACE_BC [True or False]
FREE_SURFACE_BC—This keyword data block is used to include or exclude a free-surface boundary condition
in the simulation, which implies unconfined or confined flow, respectively. By default, confined flow is
simulated. Optionally, FREE_SURFACE.
[True or False]—A value of true indicates that unconfined flow is simulated. A value of false indicates that
confined flow is simulated. If neither true nor false is entered on the line, true is assumed. Optionally, t[rue]
or f[alse].
Notes
This option is used to simulate confined (FREE_SURFACE_BC false) or unconfined (FREE_SURFACE_BC true) flow.
If unconfined flow is simulated, the specific storage in each cell is automatically set to zero, which is equivalent to setting the fluid
and matrix compressibilities to zero. A free-surface boundary condition is required for simulation of river boundary conditions.
See section D.5.7. Boundary-Condition Compatibility for more details.
Example Problems
The FREE_SURFACE_BC data block is used in the example problems 1, 2, 3, and 4.
GRID
This keyword data block is used to define the finite-difference node locations for the simulation grid. This data block is
mandatory for all simulations. The GRID data block contains only static data.
Example
Line 0: GRID
Line 1: -uniform X 0. 1000. 6
Line 2: -nonuniform Y 0. 100.
Line 3: 400. 800. 1000.
Line 1a: -uniform Z 0. 10. 2
Line 4: -overlay_uniform Z 0.0 1.0 11
Line 5: -overlay_nonuniform Z 8.2 8.4 8.5 8.6 8.8
Line 6: -snap Z 0.05
Line 7: -chemistry_dimensions XY
Line 8: -print_orientation XY
Explanation
Line 0: GRID
GRID is the keyword for the data block; no other data are included on this line.
Line 1: -uniform (X, Y, or Z) minimum, maximum, number of nodes
-uniform—This identifier is used to specify uniformly spaced nodes for the coordinate direction. -Nonuniform and
-uniform are mutually exclusive for a coordinate direction. Optionally, uniform or -u[niform].
X, Y, or Z—Coordinate direction with uniformly spaced nodes.
minimum—Minimum node coordinate in the specified coordinate direction. Units, L, are defined by
-horizontal_grid (X and Y coordinates) and -vertical_grid (Z coordinate) identifiers in the UNITS data
block.
maximum—Maximum node coordinate in the specified coordinate direction. Units, L, are defined by
-horizontal_grid (X and Y coordinates) and -vertical_grid (Z coordinate) identifiers in the UNITS data
block.
number of nodes—Number of nodes in the specified coordinate direction. The number of cells in this direction is
equal to the number of nodes. The number of elements in this direction is one less than the number of nodes.
The minimum number of nodes is two.
Line 2: -nonuniform (X, Y, or Z) list of node coordinates
-nonuniform—This identifier is used to specify nonuniform node spacing for the coordinate direction.
-Nonuniform and -uniform are mutually exclusive for a coordinate direction. Optionally, nonuniform or
-n[onuniform].
X, Y, or Z—Coordinate direction with nonuniform node spacing.
list of node coordinates—List of node coordinates in the specified coordinate direction. List of node coordinates
must be in ascending order. Although only one coordinate is required for -nonuniform input, altogether, at
least two nodes must be defined for a coordinate direction by -nonuniform, -overlay_uniform, and
-overlay_nonuniform identifiers. Units, L, are defined by -horizontal_grid (X and Y coordinates) and
-vertical_grid (Z coordinate) identifiers in the UNITS data block. List of node coordinates may continue on
successive lines as shown in line 3.
Line 3: list of node coordinates
list of node coordinates—Continuation of list of node coordinates. This line must be preceded by the -nonuniform
identifier or another continuation line for the list.
Line 4: -overlay_uniform (X, Y, or Z) minimum, maximum, number of nodes
-overlay_uniform—This identifier is used to specify additional uniformly spaced nodes for the specified coordinate
direction. Either -nonuniform or -uniform is required for each coordinate direction; optional
-overlay_uniform and -overlay_nonuniform identifiers may be defined for each coordinate direction.
Multiple overlays may define the same node or nodes that are close together; nodes closer than the
34 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
GRID
snap_distance for the coordinate (Line 6) will be merged into a single node. Optionally, overlay_uniform or
-o[verlay_uniform].
X, Y, or Z—Coordinate direction with additional uniformly spaced nodes.
minimum—Minimum node coordinate for additional uniformly spaced nodes in the specified coordinate direction.
Units, L, are defined by -horizontal_grid (X and Y coordinates) and -vertical_grid (Z coordinate)
identifiers in the UNITS data block.
maximum—Maximum node coordinate for the additional uniformly spaced nodes in the specified coordinate
direction. Units, L, are defined by -horizontal_grid (X and Y coordinates) and -vertical_grid (Z coordinate)
identifiers in the UNITS data block.
number of nodes—Number of additional nodes for the specified coordinate direction.
Line 4 indicates that beginning with a node at 0.0 and ending with a node at 1.0, 11 equally spaced nodes will be
added to the grid in the Z direction.
Line 5: -overlay_nonuniform (X, Y, or Z) list of node coordinates
-overlay_nonuniform—This identifier is used to specify additional nonuniformly spaced nodes in the specified
coordinate direction. Either -nonuniform or -uniform is required for each coordinate direction; optional
-overlay_uniform and -overlay_nonuniform identifiers may be defined for each coordinate direction.
Multiple overlays may define the same node or nodes that are close together; nodes closer than the
snap_distance for the coordinate (Line 6) will be merged into a single node. Optionally,
overlay_nonuniform or -overlay_n[onuniform].
X, Y, or Z—Coordinate direction with additional nonuniformly spaced nodes.
list of node coordinates—List of one or more node coordinates in the specified coordinate direction. List of node
coordinates must be in ascending order. Units, L, are defined by -horizontal_grid (X and Y coordinates) and
-vertical_grid (Z coordinate) identifiers in the UNITS data block. List of node coordinates may continue on
successive lines.
Line 5 indicates that additional nodes are placed at 8.2, 8.4, 8.5, 8.6, and 8.8 in the Z direction.
Line 6: -snap (X, Y, or Z) snap_distance
-snap—This identifier is used to specify the minimum distance between nodes in the coordinate direction.
Optionally, snap or -s[nap].
X, Y, or Z—Coordinate direction for which snap_distance is defined.
snap_distance—Minimum distance between nodes in the specified coordinate direction. After coordinate lists are
combined and sorted for a coordinate direction, the nodes are processed in sort order. Nodes closer than
snap_distance to a previous node will be eliminated. Default is 0.001 of specified units. Units, L, are defined
by -horizontal_grid (X and Y coordinates) and -vertical_grid (Z coordinate) identifiers in the UNITS data
block.
Line 7: -chemistry_dimensions [X] [Y] [Z]
-chemistry_dimensions—This identifier is used to specify coordinate directions for which chemical calculations
are performed. If, conceptually, the transport calculation is one or two dimensional, the geochemical
calculations can be performed for a single line or plane of nodes and the resulting chemical compositions can
be copied to the remaining symmetric lines or plane of nodes. Omitting chemical calculations in one or two
coordinate directions saves substantial amounts of computation time. By default, geochemical calculations
are performed on all active nodes of the three-dimensional grid region. Optionally, chemistry_dimensions,
transport_dimensions, -c[hemistry_dimensions], or -t[ransport_dimensions].
[X] [Y] [Z]—The coordinate directions for which chemical calculations are performed. For example, “Z” indicates
that chemical calculations are performed for one line of nodes in the Z direction, “YZ” indicates chemical
calculation are performed on the set of active nodes in one Y–Z plane, and “XYZ” indicates chemical
calculations are performed on all active nodes. Warning: initial and boundary conditions must be consistent
with the symmetry assumed for one- or two-dimensional calculations or erroneous chemical results will be
produced.
Line 8: -print_orientation (XY or XZ)
-print_orientation—This identifier is used to specify the orientation of the planes of data to be written to files with
names that begin with prefix.O. The prefix.O files contain spatial data written as a series of planes. By
default, writing is by X–Y planes. Optionally, print_orientation or -p[rint_orientation].
(XY or XZ)—Only two orientation options are allowed, either XY, indicating X–Y planes are printed or XZ
indicating X–Z planes are printed.
Notes
Node coordinates must be defined for all three coordinate directions for all simulations. Each coordinate direction must be
defined with -uniform or -nonuniform, which are mutually exclusive identifiers for each coordinate direction. The grid may be
refined by adding additional nodes with the identifiers -overlay_uniform and -overlay_nonuniform. All of the nodes defined are
merged into a single list and sorted; nodes within the distance defined by -snap of a previous node in the list are eliminated.
Flow and transport calculations always involve the entire active grid region and are thus three dimensional. The minimum
number of cells (nodes) in any coordinate direction is two. The identifier -chemistry_dimensions is used to save computation time
for one- and two-dimensional problems. If the calculation represents a one- or two-dimensional flow system and initial and
boundary conditions are appropriate for one- or two-dimensional transport, the symmetry of the transport simulation can be used
to reduce the number of geochemical calculations. The geochemical calculations can be performed on a single line or plane of
nodes and the results copied to the other lines or plane of nodes. If the -chemistry_dimensions identifier is not included,
geochemical calculations are performed for all active nodes. For one- and two-dimensional geochemical calculations, one or two
coordinate directions are listed for the -chemistry_dimensions identifier; the number of nodes for the coordinate directions not
listed must be exactly two.
The use of -chemistry_dimensions can lead to erroneous results if the initial and boundary conditions do not allow a truly
one- or two-dimensional transport simulation. For example, an X–Y simulation would not have zero flow in the Z direction if a
free-surface boundary condition were used, which violates the two-dimensional flow assumption. Also, one- or two-dimensional
flow is not sufficient to ensure the same symmetry for transport. For example, for steady one-dimensional flow in the X direction,
there are four cells in each Y–Z plane. If a contaminant is introduced into only one cell in a Y–Z plane, concentrations are not equal
in each of the cells of the Y–Z plane and the transport system is not one dimensional. Thus, boundary and initial conditions must
be chosen carefully to ensure one- or two-dimensional transport. The program does not check for conceptual errors in the boundary
conditions. Operationally, a one- or two-dimensional simulation can be tested by removing the -chemistry_dimensions identifier
and checking that the results are the same as the one- or two-dimensional simulation.
No set of discretization rules exists that will guarantee an accurate numerical solution with a minimum number of nodes and
time steps, even for the case of uniform coefficients in the differential equations. However, the following guidelines should be
considered. See Appendix D for more details.
1. If using the backward-in-space or backward-in-time differencing (SOLUTION_METHOD data block), verify that the
grid-spacing and time-step selection do not introduce excessive numerical dispersion.
2. If using centered-in-space and centered-in-time differencing, examine the results for spatial and temporal oscillations that
are caused by the time or space discretization being too coarse.
3. With reactive transport, it is important to assess the effects of spatial and temporal discretization error on the reaction
chemistry that takes place by refining the spatial and temporal discretization.
4. The global-balance summary table (prefix.O.bal file) may indicate that the time step is too long by exhibiting large errors
for conservative constituents, particularly if the operator-splitting error is large.
Example Problems
The GRID data block is used in the example problems 1, 2, 3, and 4.
36 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
HEAD_IC
HEAD_IC
This keyword data block is used to define the initial head conditions in the grid region. This data block is mandatory for all
simulations.
Example 1
Line 0: HEAD_IC
Line 1: -zone 0 0 0 10 10 10
Line 2: -head 150
Line 1a: -zone 5 5 5 10 10 10
Line 2a: -head 200
Line 3: -mask file mask.file
Explanation 1
Line 0: HEAD_IC
HEAD_IC is the keyword for the data block; no other data are included on this line.
Line 1: -zone x1, y1, z1, x2, y2, z2
-zone—The zone selects a set of nodes for which initial head conditions will be defined. Optionally, zone or
-z[one].
x1, y1, z1—X, Y, and Z coordinate for the left (X), front (Y), lower (Z) corner of the rectangular zone.
x2, y2, z2—X, Y, and Z coordinate for the right (X), back (Y), upper (Z) corner of the rectangular zone. Units, L, are
defined by -horizontal_grid (X and Y coordinates) and -vertical_grid (Z coordinate) identifiers in the
UNITS data block.
Line 2: -head property
-head—This identifier is used to specify initial heads for the zone. Optionally, head or -h[ead].
property—Heads for the zone can be entered with any of four methods for defining a spatially distributed property:
(1) a single value for the zone, (2) by_node followed by a value for each node (active or inactive) in the zone
in natural order (list of values may extend over multiple lines); the list of values must be enclosed in angle
brackets “< >”, (3) file followed by a file name, a value for each node (active or inactive) in the zone is read
from the file in natural order (list of values may extend over multiple lines), or (4) X, Y, or Z, value1,
distance1, value2, distance2, a value is linearly interpolated from value1 and value2 for each node in the zone;
interpolation is proportional to the fractional distance of the node location between distance1 and distance2
along the specified coordinate direction; for locations outside the range of distance1 to distance2, the value at
the nearest point (distance1 or distance2) is used. Line 2 illustrates method 1. Units, L, are defined by -head
identifier in the UNITS data block.
Line 3: -mask property
Use of this identifier is rare.
-mask—An array is used to include and exclude nodes from the zone definition. Optionally, mask or -m[ask].
property—An array of 1s (or any positive number) and 0s (or any nonpositive number) is used to include and
exclude nodes from the zone definition. The array can be defined by any of four methods for defining a
spatially distributed property; however, methods 1 and 4 are usually not useful: (1) a single number, 1 or 0, is
used to include or exclude all of the nodes of the zone definition, (2) by_node followed by a 1 or 0 for each
node (active or inactive) in the zone in natural order (list of values may extend over multiple lines); the list of
values must be enclosed in angle brackets “< >”, (3) file followed by a file name—a 1 or 0 for each node
(active or inactive) in the zone is read from the file in natural order (list of values may extend over multiple
lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated from value1 and
value2 for each node in the zone; interpolation is proportional to the fractional distance of the node location
between distance1 and distance2 along the specified coordinate direction; for locations outside the range of
distance1 to distance2, the value at the nearest point (distance1 or distance2) is used; if the interpolated value
is less than or equal to 0 for a node, the node is excluded from the zone definition; if the interpolated value is
greater than 0, the node is included in the zone definition. Line 3 illustrates method 3.
Example 2
Line 0: HEAD_IC
Line 1: -water_table by_node
Line 2: < 150.0 150.5 151.0 151.5 20*152.0 >
Explanation 2
Line 0: HEAD_IC
HEAD_IC is the keyword for the data block; no other data are included on this line.
Line 1: -water_table property
-water_table—This identifier is used to specify hydrostatic heads for the active grid region. Hydrostatic heads are
specified by an array of heads, one for each node in the X–Y plane. Optionally, water_table or
-w[ater_table].
property—Heads for the entire X–Y plane can be entered with either of two methods for defining a spatially
distributed property: (1) by_node followed by a value for each node (active or inactive) in the X–Y plane in
natural order (list of values may extend over multiple lines); the list of values must be enclosed in angle
brackets “< >”, or (2) file followed by a file name, a value for each node (active or inactive) in the X–Y plane
is read from the file in natural order (list of values may extend over multiple lines). Line 2 illustrates method
1. Units, L, are defined by -head identifier in the UNITS data block.
Notes
The HEAD_IC data block defines the initial head conditions. The initial head condition applies only at the beginning of the
simulation, and it is not possible to redefine a head condition later in the simulation. Initial heads are mandatory for all nodes in
the active grid region.
When using zones to define the initial head, multiple zones may be used within the HEAD_IC data block to define the initial
conditions for the entire grid region. Heads for a single node may be defined multiple times as part of different zone definitions.
The initial head used in the flow or reactive-transport simulation for that node is the last head defined for the node in the flow and
transport data file.
When using the -water_table identifier, it is not permissible to define any initial head conditions with zones. The water-table
heads are defined only for the uppermost X–Y plane of nodes. For each vertical stack of nodes in the grid region, the initial
water-table head of the uppermost node is assigned to all nodes in the stack.
Example Problems
The HEAD_IC data block is used in the example problems 1, 2, 3, and 4.
38 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
LEAKY_BC
LEAKY_BC
This keyword data block is used to define leaky boundary conditions. Conceptually, a leaky boundary layer is located outside
of the active grid region and flow through the layer is determined by the thickness of the layer, the hydraulic conductivity of the
layer, and the difference in head between the specified head at the exterior side of the layer and the head at the boundary of the
active grid region. For flow-only simulations, only the parameters related to flow are required. For reactive-transport simulation,
the index number of an associated solution also is required. The head at the exterior side of the layer and the index number of the
associated solution may vary independently over the course of the simulation. This keyword data block is optional and is needed
only if leaky boundary conditions are included in the simulation.
Example
Line 0: LEAKY_BC
Line 1: -zone 0 10 0 10 10 10
Line 2: -head
Line 3: 0 100
Line 4: -associated_solution
Line 5: 0 mixture 5 6
Line 6: < 0.0 0.2 0.4 0.6 0.8 1.0 >
Line 5a: 100 mixture 10 11
Line 6a: < 1.0 0.8 0.6 0.4 0.2 0.0 >
Line 7: -thickness X 100 0 50 10
Line 8: -hydraulic_conductivity file leaky_k.fil
Line 9: -face Y
Line 10: -mask file mask.file
Explanation
Line 0: LEAKY_BC
LEAKY_BC is the keyword for the data block; no other data are included on this line.
Line 1: -zone x1, y1, z1, x2, y2, z2
-zone—The zone selects a set of cells for which leaky boundary conditions will be defined. For leaky boundary
conditions, a zone can include a single node, a linear set of nodes, or a planar set of nodes; three-dimensional
sets of nodes are not allowed. Optionally, zone or -z[one].
x1, y1, z1—X, Y, and Z coordinate for the left (X), front (Y), lower (Z) corner of the rectangular zone.
x2, y2, z2—X, Y, and Z coordinate for the right (X), back (Y), upper (Z) corner of the rectangular zone. Units, L, are
defined by -horizontal_grid (X and Y coordinates) and -vertical_grid (Z coordinate) identifiers in the
UNITS data block.
Line 2: -head
-head—This identifier is used to specify a time series of head on the exterior side of the leaky boundary layer. The
head is defined by the property definition on line 3. A time series of head properties may be defined by using
multiple line 3s. The first time in the series must be zero. Optionally, head or -he[ad].
Line 3: time [units] property
time—Simulation time (T) at which the flux property definition (property) will take effect. Units are defined
explicitly with units; default units are defined by -time identifier in UNITS data block.
units—Units for time can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these
units.
property—The head on the exterior side of the leaky boundary layer can be entered for the zone with any of four
methods for defining a spatially distributed property: (1) a single value for the zone, (2) by_node followed
by a value for each node (active or inactive) in the zone in natural order (list of values may extend over
multiple lines); the list of values must be enclosed in angle brackets “< >”, (3) file followed by a file name, a
value for each node (active or inactive) in the zone is read from the file in natural order (list of values may
extend over multiple lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly
interpolated from value1 and value2 for each node in the zone; interpolation is proportional to the fractional
distance of the node location between distance1 and distance2 along the specified coordinate direction; for
locations outside the range of distance1 to distance2, the value at the nearest point (distance1 or distance2) is
used. Line 3 illustrates method 1. Units, L, are defined by the -head identifier in the UNITS data block.
Line 4: -associated_solution
-associated_solution—This identifier is used to specify a time series of solution index numbers that associate a
solution composition with any water that flows into the active grid region through the leaky boundary. The
solution composition is defined by the property definition on line 5. A time series of solution properties may
be defined by using multiple line 5s. The first time in the series must be zero. Optionally,
associated_solution, -a[ssociated_solution], solution, or -s[olution].
Line 5: time [units] property
time—Simulation time (T) at which the flux property definition (property) will take effect. Units are defined
explicitly with units; default units are defined by -time identifier in UNITS data block.
units—Units for time can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these
units.
property—Index numbers are specified that correspond to solution compositions defined in the chemistry data file.
Solutions or mixtures of solutions can be entered for the zone with any of the five methods for defining a
spatially distributed property: (1) a single index, the composition represented by the index is applied to the
entire zone, (2) by_node followed by an index for each node (active or inactive) in the zone in natural order
(list of values may extend over multiple lines); the list of values must be enclosed in angle brackets “< >”, (3)
file followed by a file name; an index for each node (active or inactive) in the zone is read from the file in
natural order (list of values may extend over multiple lines), (4) X, Y, or Z, index1, distance1, index2,
distance2; a composition is linearly interpolated from the end-member compositions defined by indices
index1 and index2 for each node in the zone; interpolation is proportional to the fractional distance of the
node location between distance1 and distance2 along the specified coordinate direction; for locations outside
the range of distance1 to distance2, the composition at the nearest point (distance1 or distance2) is used, or
(5) mixture index1, index2 followed by a list of mixing fractions (f1) for each node (active or inactive) in the
zone in natural order (list of values may extend over multiple lines); the list of mixing fractions must be
enclosed in angle brackets “< >”; the composition associated with a node is a mixture of the two
compositions—f1 is the mixing fraction applied to composition index1; f 2 = 1 – f 1 is the mixing fraction
applied to composition index2. Lines 5, 6, 5a, and 6a illustrate method 5.
Line 6: Property continued.
Line 7: -thickness property
-thickness—This identifier is used to specify the thickness of the leaky boundary layer. Optionally, thickness or
-t[hickness].
property—The thickness of the leaky boundary layer can be entered for the zone with any of four methods for
defining a spatially distributed property: (1) a single value for the zone, (2) by_node followed by a value for
each node (active or inactive) in the zone in natural order (list of values may extend over multiple lines); the
list of values must be enclosed in angle brackets “< >”, (3) file followed by a file name, a value for each node
(active or inactive) in the zone is read from the file in natural order (list of values may extend over multiple
lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated from value1 and
value2 for each node in the zone; interpolation is proportional to the fractional distance of the node location
between distance1 and distance2 along the specified coordinate direction; for locations outside the range of
distance1 to distance2, the value at the nearest point (distance1 or distance2) is used. Line 7 illustrates method
4. Units, L, are defined by the -leaky_thickness identifier in the UNITS data block.
Line 8: -hydraulic_conductivity property
-hydraulic_conductivity—This identifier is used to specify the hydraulic conductivity of the leaky boundary layer.
Optionally, hydraulic_conductivity, -hy[draulic_conductivity], k, or -k.
property—The hydraulic conductivity of the leaky boundary layer can be entered for the zone with any of four
methods for defining a spatially distributed property: (1) a single value for the zone, (2) by_node followed by
a value for each node (active or inactive) in the zone in natural order (list of values may extend over multiple
40 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
LEAKY_BC
lines); the list of values must be enclosed in angle brackets “< >”, (3) file followed by a file name; a value for
each node (active or inactive) in the zone is read from the file in natural order (list of values may extend over
multiple lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated from
value1 and value2 for each node in the zone; interpolation is proportional to the fractional distance of the
node location between distance1 and distance2 along the specified coordinate direction; for locations outside
the range of distance1 to distance2, the value at the nearest point (distance1 or distance2) is used. Line 8
illustrates method 3. Units, L/T, are defined by the -leaky_hydraulic_conductivity identifier in the UNITS
data block.
Line 9: -face (X, Y, or Z)
-face—This identifier is used to specify the coordinate direction of the leakage. If the set of nodes selected by the
zone is zero or one dimensional, the coordinate direction for the leakage must be specified. Optionally, face
or -fa[ce].
X, Y, or Z—The coordinate direction of the leakage.
Line 10: -mask property
Use of this identifier is rare.
-mask—An array is used to include and exclude nodes from the zone definition. Optionally, mask or -m[ask].
property—An array of 1s (or any positive number) and 0s (or any nonpositive number) is used to include and
exclude nodes from the zone definition. The array can be defined by any of four methods for defining a
spatially distributed property; however, methods 1 and 4 are usually not useful: (1) a single number, 1 or 0, is
used to include or exclude all of the nodes of the zone definition, (2) by_node followed by a 1 or 0 for each
node (active or inactive) in the zone in natural order (list of values may extend over multiple lines); the list of
values must be enclosed in angle brackets “< >”, (3) file followed by a file name—a 1 or 0 for each node
(active or inactive) in the zone is read from the file in natural order (list of values may extend over multiple
lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated from value1 and
value2 for each node in the zone; interpolation is proportional to the fractional distance of the node location
between distance1 and distance2 along the specified coordinate direction; for locations outside the range of
distance1 to distance2, the value at the nearest point (distance1 or distance2) is used; if the interpolated value
is less than or equal to 0 for a node, the node is excluded from the zone definition; if the interpolated value is
greater than 0, the node is included in the zone definition. Line 10 illustrates method 3.
Notes
The zones for leaky boundary conditions must be zero, one, or two dimensional. For leaky boundary conditions with
two-dimensional zones, the coordinate direction for the leakage can be determined from the zone definition and the -face identifier
is not necessary. For zero- and one-dimensional zones the coordinate direction for the leakage is not known from the zone
definition, and the -face identifier must be used to identify the coordinate direction of the leakage.
Multiple zones may be used within the LEAKY_BC data block to define leaky boundary conditions for selected cell faces
within the grid region. Different boundary conditions for a single cell and its cell faces may be defined multiple times as part of
different zone definitions and different keyword data blocks. The boundary condition that is used for a cell face is taken from the
last zone definition in the flow and transport data file that defines a boundary condition for that cell face, subject to restrictions on
the combinations of boundary conditions that are allowed. A cell can have (1) a specified-head condition only, or (2) a combination
of flux, leaky, and river boundary conditions. Flux, leaky, and river boundary conditions for a cell must comply with the following
restrictions: (1) a given boundary condition can be applied to only one of the cell faces, (2) rivers always apply to the positive Z
cell face, (3) both leaky and river conditions cannot be applied to the positive Z cell face, and (4) both leaky and flux conditions
cannot be applied to the same cell face. If a leaky and a river boundary condition are applied to the positive Z cell face, the river
boundary condition is ignored. See section D.5.7. Boundary-Condition Compatibility for more details.
Example Problems
The LEAKY_BC data block is used in the example problem 4.
MEDIA
This keyword data block is used to define media properties, including hydraulic conductivities, porosities, specific storages,
and dispersivities. These spatial properties are applied to elements, not cells (see sections 4.2. Spatial Data and D.1.2. Spatial
Discretization). The MEDIA data block contains only static data.
Example
Line 0: MEDIA
Line 1: -zone 0 0 0 10 10 10
Line 2: -Kx file kx.fil
Line 3: -Ky file ky.fil
Line 1a: -zone 0 0 0 10 10 10
Line 4: -Kz file kz.fil
Line 5: -porosity X 0.2 0 0.3 10
Line 6: -specific_storage 0
Line 7: -longitudinal_dispersivity 2
Line 8: -horizontal_dispersivity by_element
Line 9: < 10*2.0 10*4.0 >
Line 10: -vertical_dispersivity 0.2
Line 1b: -zone 4 0 0 5 0 0
Line 11: -active 0
Line 12: -mask file mask.file
Explanation
Line 0: MEDIA
MEDIA is the keyword for the data block; no other data are included on this line.
Line 1: -zone x1, y1, z1, x2, y2, z2
-zone—The zone selects a set of elements for which media properties will be defined. Optionally, zone or -z[one].
x1, y1, z1—X, Y, and Z coordinate for the left (X), front (Y), lower (Z) corner of the rectangular zone.
x2, y2, z2—X, Y, and Z coordinate for the right (X), back (Y), upper (Z) corner of the rectangular zone. Units, L, are
defined by -horizontal_grid (X and Y coordinates) and -vertical_grid (Z coordinate) identifiers in the
UNITS data block.
Line 2: -Kx property
-Kx—This identifier is used to specify the hydraulic conductivity in the X direction for the elements in the zone.
Optionally, Kx, Kxx, or -Kx[x].
property—The hydraulic conductivity in the X direction can be entered for the zone with any of four methods for
defining a spatially distributed property: (1) a single value for the zone, (2) by_element followed by a value
for each element in the zone (active or inactive) in natural order (list of values may extend over multiple
lines); the list of values must be enclosed in angle brackets “< >”, (3) file followed by a file name; a value for
each element in the zone (active or inactive) is read from the file in natural order (list of values may extend
over multiple lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated
from value1 and value2 for each element centroid in the zone; interpolation is proportional to the fractional
distance of the element centroid between distance1 and distance2 along the specified coordinate direction; for
centroids outside the range of distance1 to distance2, the value at the nearest point (distance1 or distance2) is
used. Line 2 illustrates method 3. Units, L/T, are defined by the -hydraulic_conductivity identifier in the
UNITS data block.
Line 3: -Ky property
-Ky—This identifier is used to specify the hydraulic conductivity in the Y direction for the elements in the zone.
Optionally, Ky, Kyy, or -Ky[y].
property—The hydraulic conductivity in the Y direction can be entered for the zone with any of four methods for
defining a spatially distributed property: (1) a single value for the zone, (2) by_element followed by a value
for each element in the zone (active or inactive) in natural order (list of values may extend over multiple
42 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
MEDIA
lines); the list of values must be enclosed in angle brackets “< >”, (3) file followed by a file name; a value for
each element in the zone (active or inactive) is read from the file in natural order (list of values may extend
over multiple lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated
from value1 and value2 for each element centroid in the zone; interpolation is proportional to the fractional
distance of the element centroid between distance1 and distance2 along the specified coordinate direction;
for centroids outside the range of distance1 to distance2, the value at the nearest point (distance1 or
distance2) is used. Line 3 illustrates method 3. Units, L/T, are defined by the -hydraulic_conductivity
identifier in the UNITS data block.
Line 4: -Kz property
-Kz—This identifier is used to specify the hydraulic conductivity in the Z direction for the elements in the zone.
Optionally, Kz, Kzz, or -Kz[z].
property—The hydraulic conductivity in the Z direction can be entered for the zone with any of four methods for
defining a spatially distributed property: (1) a single value for the zone, (2) by_element followed by a value
for each element in the zone (active or inactive) in natural order (list of values may extend over multiple
lines); the list of values must be enclosed in angle brackets “< >”, (3) file followed by a file name; a value for
each element in the zone (active or inactive) is read from the file in natural order (list of values may extend
over multiple lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated
from value1 and value2 for each element centroid in the zone; interpolation is proportional to the fractional
distance of the element centroid between distance1 and distance2 along the specified coordinate direction;
for centroids outside the range of distance1 to distance2, the value at the nearest point (distance1 or
distance2) is used. Line 4 illustrates method 3. Units, L/T, are defined by the -hydraulic_conductivity
identifier in the UNITS data block.
Line 5: -porosity property
-porosity—This identifier is used to specify the porosity for the elements in the zone. Optionally, porosity or
-p[orosity].
property—The porosity can be entered for the zone with any of four methods for defining a spatially distributed
property: (1) a single value for the zone, (2) by_element followed by a value for each element in the zone
(active or inactive) in natural order (list of values may extend over multiple lines); the list of values must be
enclosed in angle brackets “< >”, (3) file followed by a file name; a value for each element in the zone (active
or inactive) is read from the file in natural order (list of values may extend over multiple lines), or (4) X, Y, or
Z, value1, distance1, value2, distance2, a value is linearly interpolated from value1 and value2 for each
element centroid in the zone; interpolation is proportional to the fractional distance of the element centroid
between distance1 and distance2 along the specified coordinate direction; for centroids outside the range of
distance1 to distance2, the value at the nearest point (distance1 or distance2) is used. Line 5 illustrates
method 4. Porosity is dimensionless.
Line 6: -specific_storage property
-specific_storage—This identifier is used to specify the specific storage for the elements in the zone. Optionally,
specific_storage, storage, -s[pecific_storage], or -s[torage].
property—The specific storage can be entered for the zone with any of four methods for defining a spatially
distributed property: (1) a single value for the zone, (2) by_element followed by a value for each element in
the zone (active or inactive) in natural order (list of values may extend over multiple lines); the list of values
must be enclosed in angle brackets “< >”, (3) file followed by a file name; a value for each element in the
zone (active or inactive) is read from the file in natural order (list of values may extend over multiple lines),
or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated from value1 and value2
for each element centroid in the zone; interpolation is proportional to the fractional distance of the element
centroid between distance1 and distance2 along the specified coordinate direction; for centroids outside the
range of distance1 to distance2, the value at the nearest point (distance1 or distance2) is used. Line 6
illustrates method 1. Units, 1/L, are defined by the -specific_storage identifier in the UNITS data block.
Line 7: -longitudinal_dispersivity property
-longitudinal_dispersivity—This identifier is used to specify the dispersivity in the direction of the flow-velocity
vector for the elements in the zone. Optionally, longitudinal_dispersivity, dispersivity_longitudinal,
long_dispersivity, or -l[ongitudinal_dispersivity], -d[ispersivity_longitudinal], -l[ong_dispersivity].
property—Dispersivity in the direction of the flow-velocity vector can be entered for the zone with any of four
methods for defining a spatially distributed property: (1) a single value for the zone, (2) by_element followed
by a value for each element in the zone (active or inactive) in natural order (list of values may extend over
multiple lines); the list of values must be enclosed in angle brackets “< >”, (3) file followed by a file name; a
value for each element in the zone (active or inactive) is read from the file in natural order (list of values may
extend over multiple lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly
interpolated from value1 and value2 for each element centroid in the zone; interpolation is proportional to the
fractional distance of the element centroid between distance1 and distance2 along the specified coordinate
direction; for centroids outside the range of distance1 to distance2, the value at the nearest point (distance1 or
distance2) is used. Line 7 illustrates method 1. Units, L, are defined by the -dispersivity identifier in the
UNITS data block.
Line 8: -horizontal_dispersivity property
-horizontal_dispersivity—This identifier is used to specify the horizontal transverse dispersivity for the elements
in the zone. Optionally, horizontal_dispersivity, dispersivity_horizontal, -h[orizontal_dispersivity], or
-dispersivity_h[orizontal].
property—The horizontal transverse dispersivity can be entered for the zone with any of four methods for defining a
spatially distributed property: (1) a single value for the zone, (2) by_element followed by a value for each
element in the zone (active or inactive) in natural order (list of values may extend over multiple lines); the list
of values must be enclosed in angle brackets “< >”, (3) file followed by a file name; a value for each element
in the zone (active or inactive) is read from the file in natural order (list of values may extend over multiple
lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated from value1 and
value2 for each element centroid in the zone; interpolation is proportional to the fractional distance of the
element centroid between distance1 and distance2 along the specified coordinate direction; for centroids
outside the range of distance1 to distance2, the value at the nearest point (distance1 or distance2) is used. Line
8 illustrates method 2. Units, L, are defined by the -dispersivity identifier in the UNITS data block.
Line 9: property continued
property continued—Continuation of property definition.
Note use of repeat factors and asterisks to enter 10 values of 2.0 and 10 values of 4.0.
Line 10: -vertical_dispersivity property
-vertical_dispersivity—This identifier is used to specify the vertical transverse dispersivity for the elements in the
zone. Optionally, vertical_dispersivity, dispersivity_vertical, -v[ertical_dispersivity], or
-dispersivity_v[ertical].
property—The vertical transverse dispersivity can be entered for the zone with any of four methods for defining a
spatially distributed property: (1) a single value for the zone, (2) by_element followed by a value for each
element in the zone (active or inactive) in natural order (list of values may extend over multiple lines); the list
of values must be enclosed in angle brackets “< >”, (3) file followed by a file name; a value for each element
in the zone (active or inactive) is read from the file in natural order (list of values may extend over multiple
lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated from value1 and
value2 for each element centroid in the zone; interpolation is proportional to the fractional distance of the
element centroid between distance1 and distance2 along the specified coordinate direction; for centroids
outside the range of distance1 to distance2, the value at the nearest point (distance1 or distance2) is used. Line
10 illustrates method 1. Units, L, are defined by the -dispersivity identifier in the UNITS data block.
Line 11: -active property
-active—This identifier is used to specify elements within the zone to be active or inactive. Optionally, active or
-a[ctive].
property—Active and inactive elements are defined with values of 1 or positive numbers (active) and 0 or
nonpositive numbers (inactive). The active and inactive elements can be defined for the zone by any of four
methods for defining a spatially distributed property: (1) a single value for the zone, (2) by_element followed
by a value for each element in the zone in natural order (list of values may extend over multiple lines); the list
44 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
MEDIA
of values must be enclosed in angle brackets “< >”, (3) file followed by a file name; a value for each element
in the zone is read from the file in natural order (list of values may extend over multiple lines), or (4) X, Y, or
Z, value1, distance1, value2, distance2, a value is linearly interpolated from value1 and value2 for each
element centroid in the zone; interpolation is proportional to the fractional distance of the centroid location
between distance1 and distance2 along the specified coordinate direction; for locations outside the range of
distance1 to distance2, the value at the nearest point (distance1 or distance2) is used; if the interpolated value
is less than or equal to 0 for a centroid, the element is inactive; if the interpolated value is greater than 0 for a
centroid, the element is active. Line 11 illustrates method 1.
Line 12: -mask property
Use of this identifier is rare.
-mask—An array is used to include and exclude elements from the zone definition. Optionally, mask or -m[ask].
property—An array of 1s (or any positive number) and 0s (or any nonpositive number) is used to include and
exclude elements from the zone definition. The array can be defined for the zone by any of four methods for
defining a spatially distributed property; however, methods 1 and 4 are usually not useful: (1) a single
number, 1 or 0, is used to include or exclude all of the elements of the zone definition, (2) by_element
followed by a 1 or 0 for each element (active or inactive) in the zone in natural order (list of values may
extend over multiple lines); the list of values must be enclosed in angle brackets “< >”, (3) file followed by a
file name—a 1 or 0 for each element (active or inactive) in the zone is read from the file in natural order (list
of values may extend over multiple lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is
linearly interpolated from value1 and value2 for each element centroid in the zone; interpolation is
proportional to the fractional distance of the centroid location between distance1 and distance2 along the
specified coordinate direction; for locations outside the range of distance1 to distance2, the value at the
nearest point (distance1 or distance2) is used; if the interpolated value is less than or equal to 0 for an
element, the element is excluded from the zone definition; if the interpolated value is greater than 0, the
element is included in the zone definition. Line 12 illustrates method 3.
Notes
Media properties are defined by element, not by cell. The number of elements is one fewer in each coordinate direction than
the number of nodes. The number of elements listed using property input methods 2 and 3 must match exactly the number of
elements with centroids that are within the zone definition. When using method 3 or 4 to define a porous media property, a value
must be supplied for each element in the zone, even if an element has been specified to be inactive. However, porous media
properties assigned to inactive elements will have no effect on the simulation.
Multiple zones may be used within the MEDIA data block to media properties within the grid region. Different media
properties for a single element may be defined multiple times as part of different, overlapping zone definitions. An individual
media property that is used for an element is the last zone definition that defines that media property for that element.
By definition of active and inactive zones, it is possible to model a configuration other than the entire grid region defined by
the GRID data block. Zones specified to be inactive are logically removed from the grid region. The degree to which the active
grid region conforms to a desired three-dimensional shape is limited by the spatial discretization of the grid and the effort necessary
to define a sufficient number of zones to describe the shape accurately. Elements are specified to be inactive by the use of the
-active identifier in the MEDIA data block. The parts of cells that are contained in inactive elements are not included in the active
grid region. If all elements that join at a node are inactive, then that node is inactive and is removed from the simulation.
To allow for the definition of an active grid region with a regional topography of land surface, inactive elements are allowed
above active elements. That is, the potentially saturated region of an unconfined flow simulation does not have to possess a flat
upper surface. Inactive elements may not be defined for one-dimensional simulations (-chemistry_dimensions in GRID data
block). If unconfined flow is simulated (FREE_SURFACE_BC data block), the specific storage is reset to zero regardless of the
value entered in the MEDIA data block.
Dispersivity is a mixing parameter with a magnitude that is dependent on the scale of observation distance over which solutes
are transported in the flow system. A review of field data by Gelhar and others (1992) shows that the longitudinal dispersivity
(-longitidinal_dispersivity) is on the order of 10 percent of the longitudinal transport distance, whereas horizontal transverse
dispersivity (-horizontal_dispersivity) is on the order of 1 percent of the longitudinal transport distance, and vertical transverse
dispersivity (-vertical_dispersivity) is on the order of 0.001 to 0.1 percent of the longitudinal transport distance.
Example Problems
The MEDIA data block is used in the example problems 1, 2, 3, and 4.
PRINT_FREQUENCY
This keyword data block is used to select the results to be written to output files and the frequencies at which the results are
written. This data block and all identifiers are optional. The data for time “0 days” in the example below indicates the default
settings. The effect of the default settings is to write data at the end of each simulation period for all identifiers with “end” or
nonzero values, and to not write data for identifiers with values of zero or “false”. Explicit definition of an identifier in this data
block will override the default setting. The times specified in this data block indicate times during the simulation when print
frequencies will be changed. Only print frequencies explicitly specified following a time specification are changed. A print
frequency, default or explicitly specified, remains in effect during a simulation until a specified time when the frequency for the
identifier is explicitly changed.
Example
Line 0: PRINT_FREQUENCY
Line 1: 0 days
Line 2: -bc_flow_rates 0 days
Line 3: -boundary_conditions False
Line 4: -components 0 days
Line 5: -conductances 0 yr
Line 6: -flow_balance 1 step
Line 7: -force_chemistry_print 0 step
Line 8: -HDF_chemistry 1 yr
Line 9: -HDF_heads 1 yr
Line 10: -HDF_velocities 1 yr
Line 11: -heads end
Line 12: -progress_statistics 1 step
Line 13: -save_final_heads False
Line 14: -velocities 0 yr
Line 15: -wells end
Line 16: -xyz_chemistry 0 days
Line 17: -xyz_components 0 yr
Line 18: -xyz_heads 0 yr
Line 19: -xyz_velocities 0 yr
Line 20: -xyz_wells 0 step
Line 1a: 1 yr
Line 16a: -xyz_chemistry 0.1 yr
Explanation
Line 0: PRINT_FREQUENCY
PRINT_FREQUENCY is the keyword for the data block; no other data are included on this line.
Line 1: time, [units]
time—Simulation time at which to change print frequencies. Any print frequencies defined in lines following this
time specification, and preceding the next time specification, or the end of the data block, will become
effective at this time during the simulation. If any identifiers are included, this time will mark the beginning
of a simulation period.
units—Units can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these units.
Default units are defined by -time identifier in UNITS data block.
Line 2: -bc_flow_rates frequency, [time unit or step]
-bc_flow_rates—This identifier is used to control writing flow rates for all boundary-condition cells to the file
prefix.O.bcf. By the default setting, no flow rates are written to the file prefix.O.bcf. Optionally,
bc_flow_rates or -bc_[flow_rates].
46 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
PRINT_FREQUENCY
frequency—Frequency at which flow rates are written. Frequency can be an interval of time or a number of time
steps between writing results to the file, or the string “end”, which will cause writing at the end of the
simulation period. If frequency is zero, no transient data will be written to the file prefix.O.bcf.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 3: -boundary_conditions [True or False]
-boundary_conditions—This identifier is used to control writing heads, component concentrations, fluxes, and
other boundary-condition information to the file prefix.O.probdef. These data are written at most once per
simulation period. By the default setting, no boundary-condition data are written to the file
prefix.O.probdef. Optionally, boundary_conditions, boundary, bc, -b[c], or -b[oundary_conditions].
True or False—True causes writing of boundary-condition information to the file prefix.O.probdef; false
suppresses writing. If neither true nor false is entered on the line, true is assumed. Optionally, t[rue] or
f[alse].
Line 4: -components frequency, [time unit or step]
-components—This identifier is used to control writing total chemical element (component) data for each cell to
the file prefix.O.comps. By the default setting, no component data are written to the file prefix.O.comps.
Optionally, component, components, or -com[ponents].
frequency—Frequency at which component concentration data are written. Frequency can be an interval of time or
a number of time steps between writing results to the file, or the string “end”, which will cause writing at the
end of the simulation period. If frequency is zero, no transient data will be written to the file prefix.O.comps.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 5: -conductances frequency, [time unit or step]
-conductances—This identifier is used to specify the frequency for writing static fluid and transient solute
dispersive conductances for each cell face to the file prefix.O.kd. By the default setting, no static or transient
conductances are written to the file prefix.O.kd. Optionally, conductances, conductance, or
-cond[uctances].
frequency—Frequency at which conductances are written. Frequency can be an interval of time or a number of time
steps between writing results to the file, or the string “end”, which will cause writing at the end of the
simulation period. If frequency is zero, no transient data will be written to the file prefix.O.kd.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 6: -flow_balance frequency, [time unit or step]
-flow_balance—This identifier is used to specify the frequency for writing flow-balance information to the file
prefix.O.bal. By the default setting, flow-balance information is written to the file prefix.O.bal at the end of
each simulation period. Optionally, flow_balance or -f[low_balance].
frequency—Frequency at which flow-balance data are written. Frequency can be an interval of time or a number of
time steps between writing results to the file, or the string “end”, which will cause writing at the end of the
simulation period. If frequency is zero, no transient data will be written to the file prefix.O.bal.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 7: -force_chemistry_print frequency, [time unit or step]
-force_chemistry_print—This identifier is used to specify the frequency for writing detailed chemical descriptions
of the composition of the solution and all reactants for each cell to the file prefix.O.chem. Warning: this file
could exceed file-size limits of the operating system because a long description of the chemistry in each cell
is written for each selected time step. Writing this information may be useful for debugging, for small
problems, or if the PRINT_LOCATIONS data block is used to limit the set of cells for which data are
written. Data written to the file prefix.O.chem also can be limited by the options of the PRINT data block of
the chemistry data file. By the default setting, no detailed chemical descriptions are written to the file
prefix.O.chem. Optionally, force_chemistry, force_chemistry_print, or -fo[rce_chemistry_print].
frequency—Frequency at which chemistry data are written. Frequency can be an interval of time or a number of
time steps between writing results to the file, or the string “end”, which will cause writing at the end of the
simulation period. If frequency is zero, no transient data will be written to the file prefix.O.chem.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 8: -HDF_chemistry frequency, [time unit or step]
-HDF_chemistry—This identifier is used to specify the frequency for writing chemistry data to the file prefix.h5.
Chemistry data to be written to the file prefix.h5 are defined in the SELECTED_OUTPUT and
USER_PUNCH data blocks of the chemistry data file. By the default setting, chemistry data are written to
the file prefix.h5 at the end of each simulation period. Optionally, hdf_chemistry, hdf_concentration,
hdf_concentrations, -hdf_c[oncentrations], or -hdf_c[hemistry].
frequency—Frequency at which chemistry data are written to the HDF file. Frequency can be an interval of time or a
number of time steps between writing results to the file, or the string “end”, which will cause writing at the
end of the simulation period. If frequency is zero, no chemistry data will be written to the file prefix.h5.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 9: -HDF_heads frequency, [time unit or step]
-HDF_heads—This identifier is used to specify the frequency for writing heads to the file prefix.h5. By the default
setting, heads are written to the file prefix.h5 at the end of each simulation period. Optionally, hdf_head,
hdf_heads, or -hdf_h[eads].
frequency—Frequency at which head data are written to the HDF file. Frequency can be an interval of time or a
number of time steps between writing results to the file, or the string “end”, which will cause writing at the
end of the simulation period. If frequency is zero, no head data will be written to the file prefix.h5.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 10: -HDF_velocities frequency, [time unit or step]
-HDF_velocities—This identifier is used to specify the frequency for writing X, Y, and Z velocities to the file
prefix.h5. By the default setting, velocities are written to the file prefix.h5 at the end of each simulation
period. Optionally, hdf_velocity, hdf_velocities, -hdf_v[elocities], or -hdf_v[elocity].
frequency—Frequency at which velocities at nodes are written to the HDF file. Frequency can be an interval of time
or a number of time steps between writing results to the file, or the string “end”, which will cause writing at
the end of the simulation period. If frequency is zero, no velocity data will be written to the file prefix.h5.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 11: -heads frequency, [time unit or step]
-heads—This identifier is used to specify the frequency for writing potentiometric heads to the file prefix.O.head.
By the default setting, heads are written to the file prefix.O.head at the end of each simulation
period.Optionally, head, heads, or -h[eads].
frequency—Frequency at which head data are written. Frequency can be an interval of time or a number of time
steps between writing results to the file, or the string “end”, which will cause writing at the end of the
simulation period. If frequency is zero, no transient head data will be written to the file prefix.O.head.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 12: -progress_statistics frequency, [time unit or step]
-progress_statistics—This identifier is used to specify the frequency for writing solver statistics, including
solution-method information, number of iterations, and maximum changes in head and component
concentrations (due to transport), to the file prefix.log and to the screen. By the default setting, solver
statistics are written to the file prefix.log and screen at the end of each simulation period. Optionally,
progress_statistics, -pr[ogress_statistics], solver_statistics or -solv[er_statistics].
48 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
PRINT_FREQUENCY
frequency—Frequency at which solver statistics are written. Frequency can be an interval of time or a number of
time steps between writing results to the file, or the string “end”, which will cause writing at the end of the
simulation period. If frequency is zero, no data on solver iterations will be written to the file prefix.log or to
the screen.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 13: -save_final_heads [True or False]
-save_final_heads—This identifier is used to control writing heads to the file prefix.head.dat at the end of the
simulation. The file prefix.head.dat is an ASCII file than can be used for initial head conditions in
subsequent simulations. Initial heads can be read from the file by using a zone that includes the entire grid
region and “-head file prefix.head.dat” in HEAD_IC data block. By the default setting, no head data are
written to the file prefix.head.dat. Optionally, save_head, save_heads, save_final_heads, -sa[ve_heads], or
-sa[ve_final_heads].
True or False—True writes heads at the end of the simulation to the file prefix.head.dat; false suppresses writing.
If neither true nor false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 14: -velocities frequency, [time unit or step]
-velocities—This identifier is used to specify the frequency for writing interstitial velocities at cell boundaries and
interpolated velocities at nodes to the file prefix.O.vel. By the default setting, no velocities are written to the
file prefix.O.vel. Optionally, velocities, velocity -v[elocities], or -v[elocity].
frequency—Frequency at which velocities are written. Frequency can be an interval of time or a number of time
steps between writing results to the file, or the string “end”, which will cause writing at the end of the
simulation period. If frequency is zero, no transient data will be written to the file prefix.O.vel.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 15: -wells frequency, [time unit or step]
-wells—This identifier is used to specify the frequency for writing transient well information, including fluid and
solute flow rates, cumulative fluid and solute flow amounts, and solute concentrations, to the file
prefix.O.wel. Data are written in the order of the well sequence numbers. By the default setting, well
information is written to the file prefix.O.wel at the end of each simulation period. Optionally, wells or
-w[ells].
frequency—Frequency at which transient well information is written. Frequency can be an interval of time or a
number of time steps between writing results to the file, or the string “end”, which will cause writing at the
end of the simulation period. If frequency is zero, no transient data will be written to the file prefix.O.wel.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 16: -xyz_chemistry frequency, [time unit or step]
-xyz_chemistry—This identifier is used to specify the frequency for writing selected chemical data to the file
prefix.xyz.chem. The SELECTED_OUTPUT and USER_PUNCH data blocks of the chemistry data file
are used to select data that are written to the file prefix.xyz.chem. Cells for which results are to be written can
be restricted with the PRINT_LOCATIONS data block. By the default setting, no data are written to the file
prefix.xyz.chem. Optionally, concentrations, selected_output, selected_outputs, xyz_chemistry,
-c[oncentrations], -se[lected_outputs], or -xyz_ch[emistry].
frequency—Frequency at which transient concentration data are written. Frequency can be an interval of time or a
number of time steps between writing results to the file, or the string “end”, which will cause writing at the
end of the simulation period. If frequency is zero, no transient data will be written to the file prefix.xyz.chem.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 17: -xyz_components frequency, [time unit or step]
-xyz_components—This identifier is used to specify the frequency for writing component (chemical element)
concentrations to the file prefix.xyz.comps. By the default setting, no component concentrations are written
to the file prefix.xyz.comps. Optionally, xyz_component, xyz_components, or -xyz_c[omponents].
frequency—Frequency at which component data are written. Frequency can be an interval of time or a number of
time steps between writing results to the file, or the string “end”, which will cause writing at the end of the
simulation period. If frequency is zero, no transient data will be written to the file prefix.xyz.comps.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 18: -xyz_heads frequency, [time unit or step]
-xyz_heads—This identifier is used to specify the frequency for writing heads to the file prefix.xyz.head. By the
default setting, no heads are written to the file prefix.xyz.head. Optionally, xyz_head, map_head,
-xyz_h[ead], or -map_h[ead].
frequency—Frequency at which head data are written. Frequency can be an interval of time or a number of time
steps between writing results to the file, or the string “end”, which will cause writing at the end of the
simulation period. If frequency is zero, no transient head data will be written to the file prefix.xyz.head.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 19: -xyz_velocities frequency, [time unit or step]
-xyz_velocities—This identifier is used to specify the frequency for writing interpolated velocities at cell nodes to
the file prefix.xyz.vel. By the default setting, no velocities are written to the file prefix.xyz.vel. Optionally,
xyz_velocity, map_velocity, -xyz_v[elocity], or -map_v[elocity].
frequency—Frequency at which velocities at cell nodes are written. Frequency can be an interval of time or a
number of time steps between writing results to the file, or the string “end”, which will cause writing at the
end of the simulation period. If frequency is zero, no transient data will be written to the file prefix.xyz.vel.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Line 20: -xyz_wells frequency, [time unit or step]
-xyz_wells—This identifier is used to specify the frequency for writing a time-series of concentrations for each well
to the file prefix.xyz.wel. By the default setting, no concentrations are written to the file prefix.xyz.wel.
Optionally, xyz_well, xyz_wells, well_time_series, -xyz_w[ells], -well_[time_series], wells_time_series,
or -wells_[time_series].
frequency—Frequency at which concentrations are written. Frequency can be an interval of time or a number of
time steps between writing results to the file, or the string “end”, which will cause writing at the end of the
simulation period. If frequency is zero, no transient data will be written to the file prefix.xyz.wel.
time unit or step—Time unit can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units. Alternatively, if step is entered, results are written every frequency time steps in the simulation.
Default units are defined by -time identifier in UNITS data block.
Notes
The PRINT_FREQUENCY data block controls writing of data during the simulation (times greater than zero), but it does
not control printing data at the beginning of the simulation (time zero). The PRINT_INITIAL data block is used to control writing
of time-zero information to output files, including initial conditions and media properties. Print frequencies may be changed at any
time in the simulation by specifying the time at which the frequencies are to change (time), followed by the identifiers and
frequencies that are to change. A new simulation period is begun for every time (time) that is specified.
User-specified units for the various print frequencies need not be the same. One PRINT_FREQUENCY data block may
contain multiple time units and (or) the step unit. If time units are used for a print frequency, and the simulation time does not fall
on an even multiple of the print frequency, then when the simulation time is within one time step of an even multiple of the print
frequency, the time step will be decreased to reach the target simulation time at which printing is to occur. The time step will revert
to the original time step until a smaller time step is needed to reach another target time for printing or the end of a simulation period.
50 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
PRINT_FREQUENCY
A value of 0 (zero) for frequency suppresses writing of the specified data. By the default settings, print frequencies are set to
“end” so that writing will occur at the end of each simulation period, except for frequencies defined by -components,
-conductances, -force_chemistry_print, -xyz_components, -xyz_heads, -xyz_velocities, -wells, and -xyz_wells, which are set
to 0 to suppress writing. Once set by default, or explicitly following a specified time, a print frequency remains in effect until the
next time for which the print frequency is explicitly defined.
When using steps for a print frequency, writing to the files is determined by the number of time steps since the beginning of
the simulation, not from the beginning of the current simulation period. For example, if a print frequency is specified to be every
2 steps beginning at time 0, every 3 steps beginning at time 5, and time step (TIME_CONTROL) is 1, the printing will occur at
time steps 2 and 4 (evenly divisible by 2), 5 (last time step of the first simulation period), 6 and 9 (evenly divisible by 3), and 10
(last time step of the second simulation period). Similarly, when a frequency is specified in time units, printing will occur when
the total time from the beginning of the simulation is evenly divisible by the specified frequency and at the end of each simulation
period.
When steady-state flow is simulated (STEADY_FLOW true), nonzero print frequencies for the identifiers -head
(prefix.O.head), -flow_balance (prefix.O.bal), -velocity (prefix.O.vel), -hdf_heads (prefix.h5), -hdf_velocities (prefix.hdf.vel),
-xyz_heads (prefix.xyz.head), and -xyz_velocities (prefix.xyz.vel) are treated in a special way. During the iterations to achieve
steady-state flow, heads are written to the prefix.O.head file for every steady-state iteration; no data are written to this file during
the transient part of the simulation. During the iterations to achieve steady-state flow, balances are written to the prefix.O.bal file
for every steady-state iteration; during the transient part of the simulation, the print frequency defined by -flow_balance is used
to determine when data are written to the prefix.O.bal file. For steady-flow simulations, velocities are written to the prefix.O.vel,
prefix.h5, and prefix.xyz.vel files only once if the frequency for the identifier corresponding to the file is nonzero for any simulation
period within the flow and transport data file. Similarly, heads are written to their respective files only once. Printing of steady-flow
heads and velocities also can be requested in the PRINT_INITIAL data block.
The files with names beginning with prefix.O are data formatted to be printed or viewed on a screen. The orientation of the
printout of the spatially distributed properties in the prefix.O files, either X–Y or X–Z planes, is controlled by the
-print_orientation identifier in the GRID data block. The files prefix.xyz.chem, prefix.xyz.comps, prefix.xyz.head,
prefix.xyz.vel, and prefix.xyz.wel are written in tab-separated columns to facilitate importing into spreadsheets and
post-processing programs for graphical display.
Example Problems
The PRINT_FREQUENCY data block is used in the example problems 1, 2, 3, and 4.
PRINT_INITIAL
This keyword data block is used to print the initial and static flow and transport data to various output files. The output
controlled by this data block is useful for verifying that media properties, and initial and boundary conditions have been defined
correctly. The example below indicates the default settings for each of the identifiers. The effect of the default setting is to not write
data for identifiers with values of “false” and to write data for identifiers with values of “true” in the example. Options in this data
block apply only to initial conditions and have no effect on printing data during a simulation (simulation time greater than zero).
Example
Line 0: PRINT_INITIAL
Line 1: -boundary_conditions false
Line 2: -components false
Line 3: -conductances false
Line 4: -echo_input true
Line 5: -fluid_properties true
Line 6: -force_chemistry_print false
Line 7: -HDF_chemistry true
Line 8: -HDF_heads true
Line 9: -HDF_steady_flow_velocities true
Line 10: -heads true
Line 11: -media_properties false
Line 12: -solution_method true
Line 13: -steady_flow_velocities false
Line 14: -wells true
Line 15: -xyz_chemistry false
Line 16: -xyz_components false
Line 17: -xyz_heads false
Line 18: -xyz_steady_flow_velocities false
Line 19: -xyz_wells false
Explanation
Line 0: PRINT_INITIAL
PRINT_INITIAL is the keyword for the data block; no other data are included on this line.
Line 1: -boundary_conditions [True or False]
-boundary_conditions—This identifier is used to control writing initial boundary-condition information to the file
prefix.O.probdef, including data for specified-head, specified-flux, and leaky boundary conditions and the
concentrations of all components in solutions related to boundary conditions. By the default setting, no initial
boundary-condition information is written to the file prefix.O.probdef. Optionally, boundary_conditions,
boundary, bc, -b[oundary_conditions], or -b[c].
True or False—True writes static boundary-condition data to the file prefix.O.probdef; false suppresses writing. If
neither true nor false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 2: -components [True or False]
-components—This identifier is used to control writing initial indices and mixing fractions for solutions,
equilibrium phases, exchangers, surfaces, gas phases, solid solutions, and kinetic reactions that define initial
conditions for the simulation and initial component concentrations to the file prefix.O.comps. By the default
setting, no initial indices, mixing fractions, and component concentrations are written to the file
prefix.O.comps. Optionally, component, components, or -c[omponents].
True or False—True writes initial component concentrations and indices and mixing fractions to the file
prefix.O.comps; false suppresses writing. If neither true nor false is entered on the line, true is assumed.
Optionally, t[rue] or f[alse].
Line 3: -conductances [True or False]
52 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
PRINT_INITIAL
-conductances—This identifier is used to control writing static fluid-conductance factors and initial-condition
conductances to the file prefix.O.kd. By the default setting, no conductance factors or initial-condition
conductances are written to the file prefix.O.kd. Optionally, conductance, conductances, or
-con[ductances].
True or False—True writes conductance data to the file prefix.O.kd; false suppresses writing. If neither true nor
false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 4: -echo_input [True or False]
-echo_input—This identifier is used to control writing of lines from the flow and transport data file to the file
prefix.log as they are processed. The option takes effect as soon as it is encountered in the flow and transport
data file. (Writing lines from the chemistry data file to the file prefix.log is controlled by -echo_input in the
PRINT data block of the chemistry data file.) By the default setting, lines from the flow and transport data
file are written to the file prefix.log. Optionally, echo_input or -e[cho_input].
True or False—True writes lines from the flow and transport data file to the file prefix.log as they are processed;
false suppresses writing. If neither true nor false is entered on the line, true is assumed. Optionally, t[rue] or
f[alse].
Line 5: -fluid_properties [True or False]
-fluid_properties—This identifier is used to control writing fluid property data to the file prefix.O.probdef,
including compressibility, molecular diffusivity, viscosity, and density. By the default setting, fluid properties
are written to the file prefix.O.probdef. Optionally, fluid_properties, fluid, or -f[luid_properties].
True or False—True writes input fluid properties to the file prefix.O.probdef; false suppresses writing. If neither
true nor false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 6: -force_chemistry_print frequency, (time unit or step)
-force_chemistry_print—This identifier is used to control writing detailed chemical descriptions of the
composition of the solution and all reactants for each cell to the file prefix.O.chem. Warning: this file could
be huge because it will produce a long description of the chemistry for each cell. Writing this information
may be useful for debugging, for small problems, or if the cells for which writing results are restricted by cell
selections made in the PRINT_LOCATIONS data block. Data written to the file can be restricted by options
within the PRINT data block of the chemistry data file. By the default setting, no chemical descriptions of
solution and reactant compositions are written to the file prefix.O.chem. Optionally, force_chemistry,
force_chemistry_print, or -fo[rce_chemistry_print].
True or False—True writes detailed chemical description of each cell to the file prefix.O.chem; false suppresses
writing. If neither true nor false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 7: -HDF_chemistry [True or False]
-HDF_chemistry—This identifier is used to control writing chemistry data at time zero to the file prefix.h5. Data to
be written are defined in SELECTED_OUTPUT and USER_PUNCH data blocks of the chemistry data
file. By the default setting, chemistry data at time zero are written to the file prefix.h5. Optionally,
hdf_chemistry, hdf_concentration, hdf_concentrations, -hdf_c[hemistry], or -hdf_c[oncentrations].
True or False—True writes initial chemistry data to the file prefix.h5; false suppresses writing. If neither true nor
false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 8: -HDF_heads [True or False]
-HDF_heads—This identifier is used to control writing initial heads to the file prefix.h5. By the default setting,
initial heads are written to the file prefix.h5. Optionally, hdf_head, hdf_heads, or -hdf_h[eads].
True or False—True writes initial heads to the file prefix.h5; false suppresses writing. If neither true nor false is
entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 9: -HDF_steady_flow_velocities [True or False]
-HDF_steady_flow_velocities—This identifier is used to control writing steady-flow velocities to the file
prefix.h5. This option has meaning only if steady-state flow is specified in the STEADY_FLOW data block.
By the default setting, steady-flow velocities are written to the file prefix.h5. Optionally,
hdf_steady_flow_velocity, hdf_steady_flow_velocities, -hdf_s[teady_flow_velocity],
-hdf_s[teady_flow_velocities], hdf_ss_velocity, hdf_ss_velocities, -hdf_s[s_velocity], or
-hdf_s[s_velocities].
True or False—True writes steady-flow velocities to the file prefix.h5; false suppresses writing. If neither true nor
false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 10: -heads [True or False]
-heads—This identifier is used to control writing initial heads to the file prefix.O.head. By the default setting,
initial heads are written to the file prefix.O.head. Optionally, head, heads, or -h[eads].
True or False—True writes initial heads to the file prefix.O.head; false suppresses writing. If neither true nor false
is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 11: -media_properties [True or False]
-media_properties—This identifier is used to control writing problem definition data for all the media properties
for porous media zones, including element zone definitions, porosities, hydraulic conductivities, specific
storages, and dispersivities to the file prefix.O.probdef. By the default setting, no problem definition data are
written to the file prefix.O.probdef. Optionally, media_properties, media, medium, -m[edia_properties],
or -m[edium].
True or False—True writes input media properties to the file prefix.O.probdef; false suppresses writing. If neither
true nor false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 12: -solution_method [True or False]
-solution_method—This identifier is used to control writing input data related to the solution method for flow and
transport equations to the file prefix.O.probdef, including type of solver used and relevant solver parameters.
By the default setting solution-method data are written to the file prefix.O.probdef. Optionally,
solution_method, method, -s[olution_method], or -met[hod].
True or False—True writes data for the solution method to the file prefix.O.probdef; false suppresses writing. If
neither true nor false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 13: -steady_flow_velocities [True or False]
-steady_flow_velocities—This identifier is used to control writing steady-flow velocities to the file prefix.O.vel.
This option has meaning only if steady-state flow is specified in the STEADY_FLOW data block. By the
default setting, no steady-flow velocities are written to the file prefix.O.vel. Optionally,
steady_flow_velocity, steady_flow_velocities, -st[eady_flow_velocity], -st[eady_flow_velocities],
ss_velocity, ss_velocities, -ss[_velocity], or -ss[_velocities].
True or False—True writes steady-flow velocities to the file prefix.O.vel; false suppresses writing. If neither true
nor false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 14: -wells [True or False]
-wells—This identifier is used to control writing static well information, including location, diameter, screened
intervals, and well indices to the file prefix.O.wel. By the default setting, static well information is written to
the file prefix.O.wel. Optionally, wells, or -w[ells].
True or False—True writes static well information to the file prefix.O.wel; false suppresses writing. If neither true
nor false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 15: -xyz_chemistry [True or False]
-xyz_chemistry—This identifier is used to control writing initial chemistry data to the file prefix.xyz.chem. The
SELECTED_OUTPUT and USER_PUNCH data blocks of the chemistry data file are used to select data
that are written to the file prefix.xyz.chem. Cells for which results are to be written can be restricted with the
PRINT_LOCATIONS data block. By the default setting, no initial chemistry data are written to the file
prefix.xyz.chem. Optionally, xyz_chemistry or -xyz_ch[emistry].
True or False—True writes initial chemistry data to the file prefix.xyz.chem; false suppresses writing. If neither
true nor false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 16: -xyz_components [True or False]
-xyz_components—This identifier is used to control writing initial component concentrations to the file
prefix.xyz.comps. By the default setting, no initial component concentrations are written to the file
prefix.xyz.comps. Optionally, xyz_component, xyz_components, or -xyz_c[omponents].
True or False—True writes initial component concentrations to the file prefix.xyz.comps; false suppresses writing.
If neither true nor false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 17: -xyz_heads [True or False]
-xyz_heads—This identifier is used to control writing initial heads to the file prefix.xyz.head. By the default
setting, no initial heads are written to the file prefix.xyz.head. Optionally, xyz_head, xyz_heads, or
-xyz_h[eads].
True or False—True writes initial heads to the file prefix.xyz.head; false suppresses writing. If neither true nor
false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 18: -xyz_steady_flow_velocities [True or False]
54 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
PRINT_INITIAL
-xyz_steady_flow_velocities—This identifier is used to control writing velocities from the steady-flow calculation
to the file prefix.xyz.vel. This option has meaning only if steady-state flow is specified in the
STEADY_FLOW data block. By the default setting, no steady-flow velocities are written to the file
prefix.xyz.vel. Optionally, xyz_steady_flow_velocity, xyz_steady_flow_velocities,
-xyz_s[teady_flow_velocity], -xyz_s[teady_flow_velocities], xyz_ss_velocity, xyz_ss_velocities,
-xyz_s[s_velocity], or -xyz_s[s_velocities].
True or False—True writes steady-flow velocities to the file prefix.xyz.vel; false suppresses writing. If neither
true nor false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 19: -xyz_wells [True or False]
-xyz_wells—This identifier is used to control writing initial concentrations at wells to the file prefix.xyz.wel. By the
default setting, no initial concentrations at wells are written to the file prefix.xyz.wel. Optionally, xyz_well,
xyz_wells, or -xyz_w[ells].
True or False—True writes initial concentrations to the file prefix.xyz.wel; false suppresses writing. If neither true
nor false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Notes
Default settings at the beginning of a simulation are true for -echo_input, -fluid_properties, -HDF_chemistry,
-HDF_heads, -HDF_steady_flow_velocities, -heads, -solution_method, and -wells; default settings at the beginning of a
simulation are false for all other identifiers. The PRINT_INITIAL options are used only once, prior to any transient calculations.
The files with names beginning with prefix.O are data formatted to be printed or viewed on a screen. The orientation of the printout
of the spatially distributed properties in the prefix.O files, either X–Y or X–Z planes, is controlled by the -print_orientation
identifier in the GRID data block. The files prefix.xyz.chem, prefix.xyz.comps, prefix.xyz.head, prefix.xyz.vel, and
prefix.xyz.wel are written in tab-separated columns to facilitate importing into spreadsheets and post-processing programs for
graphical display.
Example Problems
The PRINT_INITIAL data block is used in the example problems 3 and 4.
PRINT_LOCATIONS
This keyword data block is used to limit printing of results to the chemistry output file (prefix.O.chem) and (or) the
spreadsheet file prefix.xyz.chem to a subset of cells within the grid region. In the absence of this data block, results are printed for
all active nodes, if printing is enabled. The PRINT data block of the chemistry data file specifies the data to be written to the file
prefix.O.chem. The SELECTED_OUTPUT and USER_PUNCH data blocks in the chemistry data file are used to specify the
data to be included in the file prefix.xyz.chem. The PRINT_LOCATIONS data block contains only static data.
Example
Line 0: PRINT_LOCATIONS
Line 1: -chemistry
Line 2: -zone 0 0 0 10 10 10
Line 3: -print 0
Line 2a: -zone 10 0 10 10 10 10
Line 3a: -print 1
Line 4: -xyz_chemistry
Line 5: -sample X 2
Line 5a: -sample Y 2
Line 2b: -zone 0 0 0 10 10 10
Line 3b: -print 1
Line 6: -mask file mask.file
Explanation
Line 0: PRINT_LOCATIONS
PRINT_LOCATIONS is the keyword for the data block; no other data are included on this line. Optionally,
PRINT_LOCATION.
Line 1: -chemistry
-chemistry—Zone definitions following this identifier are used to select nodes for which results are written to the
file prefix.O.chem. Optionally, chemistry or -c[hemistry].
Line 2: -zone x1, y1, z1, x2, y2, z2
-zone—The zone selects a set of nodes for which printing will be turned on or off. Optionally, zone or -z[one].
x1, y1, z1—X, Y, and Z coordinate for the left (X), front (Y), lower (Z) corner of the rectangular zone.
x2, y2, z2—X, Y, and Z coordinate for the right (X), back (Y), upper (Z) corner of the rectangular zone. Units, L, are
defined by -horizontal_grid (X and Y coordinates) and -vertical_grid (Z coordinate) identifiers in the
UNITS data block.
Line 3: -print property
-print—This identifier is used to control writing results for cells selected by the zone to the file prefix.O.chem
(when -print follows -chemistry) or the file prefix.xyz.chem (when -print follows -xyz_chemistry).
Optionally, print or -p[rint].
property—A value of 1 or positive number indicates results will be written to the specified file for nodes selected by
the zone; a value of 0 or nonpositive number indicates results will not be written. Values for -print can be
entered with any of four methods for defining a spatially distributed property: (1) a single value for the zone,
(2) by_node followed by a value for each node within the zone in natural order (list of values may extend
over multiple lines); the list of values must be enclosed in angle brackets “< >”, (3) file followed by a file
name; a value for each node in the zone is read from the file in natural order (list of values may extend over
multiple lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated from
value1 and value2 for each node in the zone; interpolation is proportional to the fractional distance of the
node location between distance1 and distance2 along the specified coordinate direction; for locations outside
the range of distance1 to distance2, the value at the nearest point (distance1 or distance2) is used; if the
interpolated value is less than or equal to 0 for a node, results will not be printed for the node; if the
56 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
PRINT_LOCATIONS
interpolated value is greater than 0, results will be printed for the node. Lines 3, 3a, and 3b illustrate method
1.
Line 4: -xyz_chemistry
-xyz_chemistry—Zone definitions following this identifier are used to select nodes for which results are written to
the file prefix.xyz.chem. Optionally, xyz_chemistry or -x[yz_hemistry].
Line 5: -sample (X, Y, or Z) sample frequency
-sample—This identifier is used to specify a subgrid for writing results to the file prefix.O.chem (when -sample
follows -chemistry) or the file prefix.xyz.chem (when -sample follows -xyz_chemistry). Optionally,
sample, sample_grid, thin, thin_grid, -s[ample_grid] or -t[hin_grid].
X, Y, or Z—The coordinate direction for which a subset of grid nodes will be selected.
sample frequency—Writing to the specified file will occur for the first and last nodes in the coordinate direction
(provided these nodes are active); between the first and last nodes, results will be printed at node intervals of
sample frequency. If sample frequency is 2, then data will be written for every other node. To preserve the
edges of the grid region, the nodes are selected by working to the interior of the grid region from each end of
the grid in the specified coordinate direction.
Line 6: -mask property
-mask—An array is used to include and exclude nodes from the zone definition. Optionally, mask or -m[ask].
property—An array of 1s (or any positive number) and 0s (or any nonpositive number) is used to include and
exclude nodes from the zone definition. The array can be defined by any of four methods for defining a
spatially distributed property; however, methods 1 and 4 are usually not useful: (1) a single number, 1 or 0, is
used to include or exclude all of the nodes of the zone definition, (2) by_node followed by a 1 or 0 for each
node (active or inactive) in the zone in natural order (list of values may extend over multiple lines); the list of
values must be enclosed in angle brackets “< >”, (3) file followed by a file name—a 1 or 0 for each node
(active or inactive) in the zone is read from the file in natural order (list of values may extend over multiple
lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated from value1 and
value2 for each node in the zone; interpolation is proportional to the fractional distance of the node location
between distance1 and distance2 along the specified coordinate direction; for locations outside the range of
distance1 to distance2, the value at the nearest point (distance1 or distance2) is used; if the interpolated value
is less than or equal to 0 for a node, the node is excluded from the zone definition; if the interpolated value is
greater than 0, the node is included in the zone definition. Line 6 illustrates method 3.
Notes
Frequency of printing to the files prefix.O.chem and prefix.xyz.chem is controlled by the respective identifiers -chemistry
and -xyz_chemistry in the PRINT_FREQUENCY data block. By default, when printing to one of these files is enabled, printing
will occur for all active nodes (MEDIA data block, identifier -active) for the dimensions for which chemistry is calculated (GRID
data block, identifier -chemistry_dimensions). The PRINT_LOCATIONS data block may be used to limit the nodes selected
for printing by specifying -print 0 for some nodes. It may be convenient to define -print 0 for all nodes in the grid region, and
then define -print 1 for selected nodes. The number of nodes selected for writing chemical data to the file prefix.O.chem should
be kept to a minimum to avoid generating an output that could exceed file-size limits of the computer operating system.
If both -sample_grid and -print identifiers are defined, the -print definitions supersede the -sample_grid definitions. If a
node is included in more than one zone, the value specified for -print in the last definition will apply.
Example Problems
The PRINT_LOCATIONS data block is used in the example problem 4.
RIVER
This keyword data block is used to define boundary conditions that describe a single river. This data block is optional and only
is needed if river boundary conditions are included in the simulation. A river is defined by a series of X–Y coordinate points, which
define line segments that locate the centerline of the river across the land surface. For each river point, the river width, head, and
river-bed-leakance parameters must be defined, either by explicit definitions or by interpolation from other river points. Leakage
into and out of the aquifer through the riverbed is calculated from these parameters. Head and solution composition may vary over
the course of the simulation. For a vertical stack of cells, any river leakage enters or leaves the cell that contains the water table.
Multiple RIVER data blocks are used to define multiple rivers in the grid region.
Example
Line 0: RIVER 1 Rubicon River
Line 1: -point 155.0 3633. # X, Y location of 1st river point
Line 2: -head
Line 3: 0 day 275.
Line 3a: 1.5 day 276.
Line 4: -solution
Line 5: 0 4
Line 5a: 1.8 5
Line 6: -width 125.
Line 7: -bed_hydraulic_conductivity 1.5e-2
Line 8: -bed_thickness 1.6
Line 9: -depth 3.5
Line 1a: -point 165.0 3663. # X, Y location of 2nd river point
Line 1b: -point 175.0 3603. # X, Y location of 3rd river point
Line 2a: -head
Line 3b: 0 274.
Line 3c: 2.1 274.5.
Line 4a: -solution
Line 5b: 0 4
Line 6a: -width 150.
Line 7a: -bed_hydraulic_conductivity 1.5e-2
Line 8a: -bed_thickness 2.
Line 10: -bottom 271.5
Explanation
Line 0: RIVER number, [description]
RIVER is the keyword for the data block.
number—positive number to designate this river. Default is 1.
description—optional character field that identifies the river.
Line 1: -point X, Y
-point—The X–Y coordinate location of a river point is defined. Line 1 may be repeated as many times as needed to
define the entire length of the river. At least two points must be defined. The series of points in sequence
define the river by a series of line segments. Optionally, point, -p[oint], node, or -n[ode].
X—X coordinate location of a river point. Units, L, are defined by the -horizontal_grid identifier in the UNITS
data block.
Y—Y coordinate location of a river point. Units, L, are defined by the -horizontal_grid identifier in the UNITS data
block.
Line 2: -head
-head—This identifier is used to specify the head at the X–Y river-point location. Units, L, are defined by the -head
identifier in the UNITS data block. The head is defined on line 3. A time series of heads may be defined by
using multiple line 3s. The first time in the series must be zero. Optionally, head, or -he[ad].
58 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
RIVER
Notes
River points can be defined in upstream or downstream order. Multiple rivers are defined by using multiple RIVER data
blocks, where each river is uniquely identified by the integer following the RIVER keyword. A sequential set of two points within
a RIVER data block define a line segment. The head, width, and river-bed elevation, hydraulic conductivity, and thickness at each
point are used to quantify river leakage to or from the aquifer. The elevation of the river bottom can be defined in two ways: it can
be defined explicitly with -river_bottom identifier, or it can be defined by a river depth (-depth) that will be subtracted from the
head (-head) that applies at time zero. For reactive-transport simulation, a solution composition is associated with each point that
defines the composition of water leaking from the river into the aquifer.
Parameters may be defined explicitly for a river point, or they may be interpolated from other river points. The head, width,
and river-bed elevation or depth, hydraulic conductivity, thickness, and solution (for reactive transport simulations) must be defined
for the first and last points of the river. For a point between the first and last points, a parameter can be defined explicitly with its
identifier (-head, for example), or it can be interpolated from the nearest river points upstream and downstream where the
parameter has been explicitly defined. Linear interpolation is performed by the ratio of the distance of the interpolation point from
one of the explicitly defined points and the total distance along the river line segments that lie between the two explicitly defined
points. Solution compositions at river points are determined by explicit definition (-solution identifier) or by mixing explicitly
defined solutions at other river points by mixing fractions determined by linear interpolation.
Figure 4.6 shows an example of points that define a river and
its tributary and the initial set of polygons that are processed to
RIV
define the river in each cell that the polygons intersect (see ER
section D.5.5. River-Leakage Boundary for details). The line 1
TR
segment (fig. 4.6, line segment 1–2) joining two sequential river IBU
TA
RY
points forms the centerline of a trapezoid. At each of the two river
3
points, the width of the river is defined by a line segment 2
Complete explicit or implicit definition of all properties for C' B' RIVER CENTERLINE
all river points is required for time zero. Implicit definition is by D' RIVER WIDTH
3
interpolation. A time-sequence of values can be defined for the B 2 RIVER POINT
C
head (-head) and the solution composition (-solution) for a river D
point. All interpolation is repeated at each time that head or
Figure 4.6.—Discretization of river segments for a river and
solution change at any river point. At the beginning of each
its tributary. Initial river-bed areas are shown before fill-in of
simulation period, terms that incorporate both the transient head
gaps and removal of overlapping areas.
and solution composition and the static area and river-bed
definition for each cell are incorporated into the flow and
transport equations.
A river boundary condition always applies to the positive Z face of a cell. Both a river and a flux boundary condition may be
defined for the positive Z face of a cell; however, a river and a leaky boundary condition cannot both be defined for the positive Z
face of a cell. If both a river and a specified-head boundary condition are defined for a cell, the cell is a specified-head boundary
cell and the river boundary condition has no effect. Rivers cannot be used in confined flow simulations. See section D.5.7.
Boundary-Condition Compatibility for more details.
Example Problems
The RIVER data block is used in the example problem 4.
60 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
SOLUTE_TRANSPORT
SOLUTE_TRANSPORT
This keyword data block is a switch used to toggle transport and reaction calculations on or off. If the
SOLUTE_TRANSPORT data block is not included, the simulation is assumed to be a reactive-transport simulation. If
SOLUTE_TRANSPORT is set to false, any keyword data blocks or identifiers related to transport or chemistry in the flow and
transport data file are ignored. Molecular diffusivity is the only parameter that can be defined in this data block and the diffusivity
only is pertinent to transport calculations. The diffusivity is a scalar value that is uniform over the entire grid region; it is not
spatially variable. The SOLUTE_TRANSPORT data block contains only static data.
Example
Line 0: SOLUTE_TRANSPORT true
Line 1: -diffusivity 1e-9 # m^2/s
Explanation
Line 0: SOLUTE_TRANSPORT [True or False]
SOLUTE_TRANSPORT—This keyword is used to switch the program from a reactive-transport simulation to a
flow-only simulation. By default, a simulation includes flow, transport, and reaction calculations.
[True or False]—A value of true indicates that transport and reaction calculations are made. A value of false
indicates that only flow is simulated and no transport or reaction calculations are to be done. If neither true
nor false is entered on the line, true is assumed. Optionally, t[rue] or f[alse].
Line 1: -diffusivity diffusivity
-diffusivity—This identifier is used to specify molecular diffusivity of all chemical solutes. The diffusivity only
applies when SOLUTE_TRANSPORT is defined to be true. Default is 10-9 square meter per second
(m2/s). Optionally, diffusivity or -d[iffusivity].
diffusivity—Molecular diffusivity, m2/s.
Notes
The diffusivity is used in simulations only if the transport equations are solved, that is, when SOLUTE_TRANSPORT is
true. The units for diffusivity are square meters per second (m2/s); no option for alternative units is available.
Example Problems
The SOLUTE_TRANSPORT data block is used in the example problems 1, 2, 3, and 4.
SOLUTION_METHOD
This keyword data block is used to select the linear equation solver that is used to solve the finite-difference flow and transport
equations and to set parameters related to the solver and the formulation of the finite-difference equations. The two solvers
available are a D4 Gaussian elimination direct solver and a restarted generalized conjugate-gradient (ORTHOMIN) iterative solver
(section D.7.2. Linear-Equation Solvers for Flow and Transport Finite-Difference Equations). If this data block is not included, the
iterative solver with default parameter values is used. The SOLUTION_METHOD data block contains only static data.
The choice of equation solver depends on consideration of the memory storage requirement and computational workload.
Both factors are related to the size of the problem being simulated and to the rate of convergence of the iterative method. The
importance of each factor depends on the computer system used. Thus, it is difficult to give a definitive formula for the selection
of the solver. Small problems of a few hundred nodes are most efficiently solved with the direct solver. The iterative solver usually
is more efficient for simulations with several thousand nodes or more. The PHAST simulator writes out the storage requirements
for the solver selected into the prefix.log file.
Example 1
Line 0: SOLUTION_METHOD
Line 1: -iterative_solver true
Line 2: -tolerance 1e-10
Line 3: -save_directions 10
Line 4: -maximum_iterations 500
Line 5: -space_differencing 0.0
Line 6: -time_differencing 1.0
Line 7: -cross_dispersion false
Explanation 1
Line 0: SOLUTION_METHOD
SOLUTION_METHOD is the keyword for the data block; no other data are included on this line.
Line 1: -iterative_solver [True or False]
-iterative_solver—This identifier is used to specify whether the iterative solver will be used for the flow and
transport equations. By default, the program will use the iterative solver. Optionally, iterative_solver,
iterative, or -iterativ[e_solver].
True or False—True, use the iterative solver; false, use the direct solver. If neither true nor false is entered on the
line, true is assumed. Optionally, t[rue] or f[alse].
Line 2: -tolerance tolerance
-tolerance—This identifier is used to specify a tolerance for the iterative solver. The iterative solver has converged
to a numerical solution when the scaled residual is smaller than the tolerance. Default is 1x10-10 (-).
Optionally, tolerance, or -to[lerance].
tolerance—Convergence criterion for the iterative solver.
Line 3: -save_directions number
-save_directions—This identifier is used to specify the number of search directions that are saved between restarts
of the iterative solver. Default is 10. Optionally, save_directions, save, or -sa[ve_directions].
number—Number of saved search directions.
Line 4: -maximum_iterations number
-maximum_iterations—This identifier is used to specify the maximum number of iterations that are allowed for
the iterative solver. Default is 500. Optionally, maximum_iterations, maximum, iterations,
-m[aximum_iterations], or -iterati[ons].
number—Maximum number of iterations for the iterative solver.
Line 5: -space_differencing weight
-space_differencing—This identifier is used to specify the weighting used in spatial differencing for the advective
term in the transport equation. Default is upstream weighting. Optionally, space_differencing, space, or
-sp[ace_differencing].
62 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
SOLUTION_METHOD
weight—The weighting can range from 0.0 (upstream-in-space differencing) to 0.5 (centered-in-space
differencing).
Line 6: -time_differencing weight
-time_differencing—This identifier is used to specify the time differencing for the flow and transport equations
during transient calculations. [This weighting factor does not apply to steady-state flow equations where
fully implicit weighting (weight = 1.0) is used.] Default is fully implicit (1.0). Optionally,
time_differencing, time, or -ti[me_differencing].
weight—Value can range from 0.5 (centered-in-time differencing) to 1.0 (fully implicit or backwards-in-time
differencing).
Line 7: -cross_dispersion [True or False]
-cross_dispersion—This identifier is used to include cross-dispersion terms in the transport equations. By default,
cross-dispersion terms are not included. Optionally, cross_dispersion, or -c[ross_dispersion].
True or False—True, include cross-dispersion terms in transport equations; false, do not include cross-dispersion
terms in transport equations. If neither true nor false is entered on the line, true is assumed. Optionally,
t[rue] or f[alse].
Notes 1
By default, the iterative solver is used, which is a restarted ORTHOMIN method that solves the Schur complement, reduced
matrix, which is preconditioned by triangular factorization. See section D.7.2. Linear-Equation Solvers for Flow and Transport
Finite-Difference Equations for details on the implementation of the iterative solver. The identifiers, -tolerance, -save_directions,
and -maximum_iterations apply only to the iterative solver. Tolerance is the convergence criterion for the iterative solver; if the
Euclidean norm of the relative residual vector is less than tolerance, the iterative solution to the linear equations has converged. It
is not feasible to determine this tolerance parameter on the basis of the problem specifications and the desired accuracy of the
solution. A value for tolerance can be determined empirically by examining the magnitude of the changes in heads and
concentrations with successively smaller values of tolerance. Experience with test problems has shown that a tolerance of 10-6 to
10-12 is necessary to obtain 3 or 4 digit agreement with the direct solver.
The solver does not seem to be very sensitive to the number of search directions (-save_directions) that are retained between
restarts of the ORTHOMIN solver. The default value of 10 seems to work satisfactorily for most problems. If solver convergence
requires more than about 100 iterations, the number of retained search directions should be increased to 15 or greater. However,
the number of search directions should not be set to a very large number because, as the number of search directions is increased,
the amount of memory needed to save the vectors of the search directions increases.
The limit on the number of iterations (-maximum_iterations) prevents runaway conditions when the convergence rate
becomes very slow. Iteration counts are written to the prefix.log file as controlled by -progress_statistics of the
PRINT_FREQUENCY data block. For some simulations, the user may need to double or triple the default maximum of 500
iterations. However, more than a few hundred iterations indicates that adjustments probably need to be made in the spatial or
temporal discretization or that there is an incompatibility in the problem formulation.
Default weighting is upstream-in-space (-space_differencing 0.0) and backward-in-time (fully implicit, -time_differencing
1.0). For steady-flow simulations, the time differencing scheme for the flow equation is always fully implicit. For transient-flow
simulations with reactive transport, the same time weighting (-time_differencing) is used for both the flow and the transport
equations. The flow equation does not have an advective term and thus does not use a spatial differencing factor. For additional
information on the effects of weighting in time and space on oscillations and numerical dispersion, see sections D.1.2. Spatial
Discretization, D.1.3. Temporal Discretization, and D.8. Accuracy from Spatial and Temporal Discretization.
If cross-dispersion terms (see section D.3. Property Functions and Transport Coefficients) are used (-cross_dispersion true),
the solution to the transport equations may result in negative concentrations, which will be set to zero in the chemical calculations.
Setting negative concentrations to zero will increase the mass of a solute in the system and increase global mass-balance errors.
Example 2
Line 0: SOLUTION_METHOD
Line 1: -direct_solver true
Line 2: -space_differencing 0.5
Line 3: -time_differencing 0.5
Line 4: -cross_dispersion False
Explanation 2
Line 0: SOLUTION_METHOD
SOLUTION_METHOD is the keyword for the data block; no other data are included on this line.
Line 1: -direct_solver [True or False]
-direct_solver—This identifier is used to specify whether the direct solver will be used to solve the flow and
transport equations. By default, the program will use the iterative solver. Optionally, direct_solver, direct, or
-d[irect_solver].
True or False—True, use the direct solver; false, use the iterative solver. If neither true nor false is entered on the
line, true is assumed. Optionally, t[rue] or f[alse].
Line 2: -space_differencing weight
Same as example 1, line 5.
Line 3: -time_differencing weight
Same as example 1, line 6.
Line 4: -cross_dispersion [True or False]
Same as example 1, line 7.
Notes 2
By default, the iterative solver is used, but the direct solver is faster for small problems (as many as 1000 nodes). The direct
solver does not have the iteration-termination (convergence-tolerance) errors of the iterative solver and, unlike the iterative solver,
the direct solver has no additional parameters that need to be defined.
Example Problems
The SOLUTION_METHOD data block is used in the example problems 1, 2, 3, and 4.
64 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
SPECIFIED_HEAD_BC
SPECIFIED_HEAD_BC
This keyword data block is used to define specified-head boundary conditions. For flow-only simulations, only the heads are
required for each specified-head boundary-condition node. For reactive-transport simulations, the index number of a fixed solution
composition or an associated solution composition also is required for each specified-head boundary-condition node. The head
and solution index number of the associated solution may vary independently over the course of the simulation. This keyword data
block is optional and only is needed if specified-head boundary conditions are included in the simulation.
Example
Line 0: SPECIFIED_HEAD_BC
Line 1: -zone 0 10 10 10 10 10
Line 2: -head
Line 3: 0 100
Line 3a: 10 101.5
Line 4: -associated_solution
Line 5: 0 6
Line 5a: 5 7
Line 1a: -zone 0 0 10 10 0 10
Line 2a: -head
Line 3b: 0 102
Line 6: -fixed_solution
Line 7: 0 6
Line 8: -mask file mask.file
Explanation
Line 0: SPECIFIED_HEAD_BC
SPECIFIED_HEAD_BC is the keyword for the data block; no other data are included on this line.
Line 1: -zone x1, y1, z1, x2, y2, z2
-zone—The zone selects a set of cells for which specified-head boundary conditions will be defined. Optionally,
zone or -z[one].
x1, y1, z1—X, Y, and Z coordinate for the left (X), front (Y), lower (Z) corner of the rectangular zone.
x2, y2, z2—X, Y, and Z coordinate for the right (X), back (Y), upper (Z) corner of the rectangular zone. Units, L, are
defined by -horizontal_grid (X and Y coordinates) and -vertical_grid (Z coordinate) identifiers in the
UNITS data block.
Line 2: -head
-head—This identifier is used to specify the head at the specified-head boundary. The head is defined by the
property definition on line 3. A time series of head properties may be defined by using multiple line 3s. The
first time in the series must be zero. Optionally, head or -he[ad].
Line 3: time [units] property
time—Simulation time (T) at which the head property definition (property) will take effect. Units are defined
explicitly with units; default units are defined by -time identifier in UNITS data block.
units—Units for time can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these
units.
property—The head at the boundary can be entered with any of four methods for defining a spatially distributed
property: (1) a single value for the zone, (2) by_node followed by a value for each node in the zone in natural
order (list of values may extend over multiple lines); the list of values must be enclosed in angle brackets “<
>”, (3) file followed by a file name, a value for each node in the zone is read from the file in natural order (list
of values may extend over multiple lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is
linearly interpolated from value1 and value2 for each node in the zone; interpolation is proportional to the
fractional distance of the node location between distance1 and distance2 along the specified coordinate
direction; for locations outside the range of distance1 to distance2, the value at the nearest point (distance1 or
distance2) is used. Units, L, are defined by the -head identifier in the UNITS data block. Lines 3, 3a, and 3b
illustrate method 1.
Line 4: -associated_solution
-associated_solution—This identifier is used to specify a time series of index numbers that define the solution
composition for the flux of water into the active grid region through the specified-head boundary. The
composition of water flowing into the active grid is defined by the property definition of line 5. A time series
of solution properties may be defined by using multiple line 5s. The first time in the series must be zero.
Optionally, associated_solution, associated, or -a[ssociated_solution].
Line 5:time [units] property
time—Simulation time (T) at which the solution-composition property definition (property) will take effect. Units
are defined explicitly with units; default units are defined by -time identifier in UNITS data block.
units—Units for time can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these
units.
property—Index numbers are specified that correspond to solution compositions defined in the chemistry data file.
Solutions or mixtures of solutions can be entered for the zone with any of the five methods for defining a
spatially distributed property: (1) a single index, the composition represented by the index is applied to the
entire zone, (2) by_node followed by an index for each node in the zone in natural order; an index is
explicitly defined for each node in the zone (list of values may extend over multiple lines); the list of values
must be enclosed in angle brackets “< >”, (3) file followed by a file name; an index for each node in the zone
is read from the file in natural order (list of values may extend over multiple lines), (4) X, Y, or Z, index1,
distance1, index2, distance2, a composition is linearly interpolated from the end-member compositions
defined by indices index1 and index2 for each node in the zone; interpolation is proportional to the fractional
distance of the node location between distance1 and distance2 along the specified coordinate direction; for
locations outside the range of distance1 to distance2, the composition at the nearest point (distance1 or
distance2) is used, or (5) mixture index1, index2 followed by a list of mixing fractions (f1) for each node
(active or inactive) in the zone in natural order (list of values may extend over multiple lines); the list of
mixing fractions must be enclosed in angle brackets “< >”; the composition associated with a node is a
mixture of the two compositions—f1 is the mixing fraction applied to composition index1; f 2 = 1 – f 1 is
the mixing fraction applied to composition index2. Lines 5 and 5a illustrate method 1.
Line 6: -fixed_solution
-fixed_solution—This identifier is used to specify a time series of index numbers that define fixed solution
compositions for the specified-head boundary. When this identifier is used, the concentrations at the
specified-head boundary cells do not vary with the flux of water in or out of the boundary cells. The
composition of water at the specified-head boundary cells is defined by the property definition of line 7. A
time series of solution properties may be defined by using multiple line 7s. The first time in the series must be
zero. Optionally, fixed_solution, fixed, or -f[ixed_solution].
Line 7: time [units] property
time—Simulation time (T) at which the solution-composition property definition (property) will take effect. Units
are defined explicitly with units; default units are defined by -time identifier in UNITS data block.
units—Units for time can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these
units.
property—Index numbers are specified that correspond to solution compositions defined in the chemistry data file.
Solutions or mixtures of solutions can be entered for the zone with any of the five methods for defining a
spatially distributed property: (1) a single index, the composition represented by the index is applied to the
entire zone, (2) by_node followed by an index for each node in the zone in natural order; an index is
explicitly defined for each node in the zone (list of values may extend over multiple lines); the list of values
must be enclosed in angle brackets “< >”, (3) file followed by a file name; an index for each node in the zone
is read from the file in natural order (list of values may extend over multiple lines), (4) X, Y, or Z, index1,
distance1, index2, distance2, a composition is linearly interpolated from the end-member compositions
defined by indices index1 and index2 for each node in the zone; interpolation is proportional to the fractional
distance of the node location between distance1 and distance2 along the specified coordinate direction; for
66 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
SPECIFIED_HEAD_BC
locations outside the range of distance1 to distance2, the composition at the nearest point (distance1 or
distance2) is used, or (5) mixture index1, index2 followed by a list of mixing fractions (f1) for each node
(active or inactive) in the zone in natural order (list of values may extend over multiple lines); the list of
mixing fractions must be enclosed in angle brackets “< >”; the composition associated with a node is a
mixture of the two compositions—f1 is the mixing fraction applied to composition index1; f 2 = 1 – f 1 is
the mixing fraction applied to composition index2. Line 7 illustrates method 1.
Line 8: -mask property
Use of this identifier is rare.
-mask—An array is used to include and exclude nodes from the zone definition. Optionally, mask or -m[ask].
property—An array of 1s (or any positive number) and 0s (or any nonpositive number) is used to include and
exclude nodes from the zone definition. The array can be defined by any of four methods for defining a
spatially distributed property; however, methods 1 and 4 are usually not useful: (1) a single number, 1 or 0, is
used to include or exclude all of the nodes of the zone definition, (2) by_node followed by a 1 or 0 for each
node (active or inactive) in the zone in natural order (list of values may extend over multiple lines); the list of
values must be enclosed in angle brackets “< >”, (3) file followed by a file name—a 1 or 0 for each node
(active or inactive) in the zone is read from the file in natural order (list of values may extend over multiple
lines), or (4) X, Y, or Z, value1, distance1, value2, distance2, a value is linearly interpolated from value1 and
value2 for each node in the zone; interpolation is proportional to the fractional distance of the node location
between distance1 and distance2 along the specified coordinate direction; for locations outside the range of
distance1 to distance2, the value at the nearest point (distance1 or distance2) is used; if the interpolated value
is less than or equal to 0 for a node, the node is excluded from the zone definition; if the interpolated value is
greater than 0, the node is included in the zone definition. Line 8 illustrates method 3.
Notes
A choice between two identifiers, -fixed_solution and -associated_solution, is used to define boundary conditions for the
concentrations of chemical components at specified-head boundaries. With the -fixed_solution identifier, the concentrations of
components in the boundary cell are equal to the concentrations in the solution with the specified index number or the mixture of
solutions as defined with method 4 of the property definition, regardless of reactions or flow into or out of the cell. With the
-associated_solution identifier, the concentrations of the components in the boundary cell may vary as determined by reaction and
transport. If flow is out of the active grid region through the specified-head boundary cell during a time step, the concentrations in
the water that exits the active grid region are equal to the concentrations in the boundary cell. If flow enters the active grid region
through the boundary of the active grid during a time step, the concentrations in the water that enters the cell are equal to the
concentrations in the associated solution with the specified index number or the mixture of solutions as defined with method 4 of
the property definition.
Multiple zones may be used within SPECIFIED_HEAD_BC data blocks to define boundary conditions within the grid
region. Different boundary conditions for a single cell (node) may be defined multiple times as part of different zone definitions
in different keyword data blocks. The boundary condition that is used for a cell is the last zone definition that defines a boundary
condition for that cell. No other boundary conditions can be applied at a specified-head cell, including leaky, flux, and river
boundary conditions. See section D.5.7. Boundary-Condition Compatibility for more details.
Example Problems
The SPECIFIED_HEAD_BC data block is used in the example problems 1, 2, 3, and 4.
STEADY_FLOW
This keyword data block is used to specify whether flow conditions are steady state and to define criteria for the determination
that a steady-state flow condition is attained. If the simulation is defined to have steady-state flow, then an initial flow-only
calculation is performed to determine the steady-state velocities, and these velocities are used in the transport equations throughout
the simulation. Steady-flow is calculated by time stepping with the finite-difference flow equations until (1) heads are constant and
(2) flow-in equals flow-out within specified tolerances. The data in this data block apply only to the initial calculation to obtain
steady-state flow.
Example
Line 0: STEADY_FLOW true
Line 1: -head_tolerance 1e-5
Line 2: -flow_balance_tolerance 0.001
Line 3: -minimum_time_step 1 s
Line 4: -maximum_time_step 1000 day
Line 5: -head_change_target 100.
Line 6: -iterations 500
Explanation
Line 0: STEADY_FLOW [True or False]
STEADY_FLOW—This keyword is used to specify whether flow conditions for the simulation are steady state. If
the simulation is a reactive-transport simulation (SOLUTE_TRANSPORT true), then the steady-state
velocities will be used for all transport calculations. By default, the simulation is assumed to be transient
flow.
True or False—True, an initial calculation will be performed to calculate steady-state velocities; false, transient
velocities will be calculated at each time step of the simulation. If neither true nor false is entered on the line,
true is assumed. Optionally, t[rue] or f[alse].
Line 1: -head_tolerance tolerance
-head_tolerance—This identifier is used to specify a head tolerance for determining when flow is at steady state.
Head changes for a time step must be less than this tolerance for the flow system to be at steady state. Default
is 10-5 (units are specified with -head identifier in the UNITS data block). Optionally, head_tolerance,
head_tol, or -h[ead_tolerance].
tolerance—Tolerance for head changes. Units, L, are defined by -head identifier in the UNITS data block.
Line 2: -flow_balance_tolerance tolerance
-flow_balance_tolerance—This identifier is used to specify a relative flow-balance tolerance for determining when
flow is at steady state. The fractional flow balance must be less than this tolerance for the flow system to be at
steady state. The fractional flow balance is the difference between the inflow and outflow rates divided by the
average of the inflow and outflow rates for the current time step. Default, 0.001 (-). Optionally, flow_tol,
flow_tolerance, flow_balance_tol, flow_balance_tolerance, f[low_tolerance], or
-f[low_balance_tolerance].
tolerance—Fractional flow-balance tolerance. Units are dimensionless.
Line 3: -minimum_time_step time_step, [units]
-minimum_time_step—This identifier is used to specify the initial time step used in calculating steady-state flow
and also is the minimum time step allowed for automatic time stepping in the steady-state flow calculation.
Default is the value for -time_step defined in TIME_CONTROL divided by 1,000. Optionally, minimum,
minimum_time, minimum_time_step, or mi[nimum_time_step].
time_step—Initial and minimum time step for steady-flow calculation. Units, T, are defined explicitly with units;
default units are defined by -time identifier in UNITS data block.
units—Units for time step can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units.
Line 4: -maximum_time_step time_step, [units]
68 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
STEADY_FLOW
-maximum_time_step—This identifier is used to specify the maximum time step used in the steady-state flow
calculation. Default is the value for -time_step defined in TIME_CONTROL times 1,000. Optionally,
maximum, maximum_time, maximum_time_step, or ma[ximum_time_step].
time_step—Maximum time step for steady-state flow calculation. Units, T, are defined explicitly with units; default
units are defined by -time identifier in UNITS data block.
units—Units for time step can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units.
Line 5: -head_change_target target
-head_change_target—This identifier is used to specify the target head change for a single time step in the
steady-flow calculation. The time step will be decreased or increased during the steady-flow calculation to
try to achieve head changes of target over each time step. Default is 0.3 times the thickness of the grid
region. Optionally, head_change, head_change_target, head_target, -head_c[hange_target], or
-head_ta[rget].
target—Target head change. Units, L, are defined by -head identifier in the UNITS data block.
Line 6: -iterations maximum_iterations
-iterations—This identifier is used to specify the maximum number of iterations (time steps) that will be used in
attempting to attain a steady-flow conditions. Default is 100 iterations. Optionally, iterations or
-i[terations].
maximum_iterations—Maximum number of iterations (time steps) used in attempting to attain a steady-flow
condition.
Notes
STEADY_FLOW can be specified with or without transport calculations (SOLUTE_TRANSPORT). If STEADY_FLOW
is true, an additional flow-only calculation is performed at the beginning of the PHAST simulation to determine the steady-state
head field and associated steady-state velocity field. The calculation ensures that heads are constant within the tolerance specified
by -head_tolerance and global flow balance is satisfied within a relative tolerance specified by -flow_balance_tolerance. See
section D.1.4. Automatic Time-Step Algorithm for Steady-State Flow Simulation for details. The steady-state velocity field is used
in all transport calculations for the simulation. The STEADY_FLOW true option saves CPU time by eliminating the solution of
the ground-water flow equation and recalculation of the same velocity field at each time step.
The difference equations for unconfined flow (FREE_SURFACE_BC true) contain explicit terms, which are calculated on
the basis of conditions from the previous time step: for example, fraction of cell saturated, fraction of well screen receiving water,
and the vertical location of the cell receiving river flux. These explicit terms may cause instability (for example, oscillations) in
the numerical method, such that the method does not converge to a steady-state flow condition. The only remedy available is to
use smaller time steps so that the explicit terms change slowly. To ensure a sufficiently small time step, it may be necessary to start
with a very small time step (-minimum_time_step) and limit the maximum time step (-maximum_time_step). If time steps are
small, it also may be necessary to increase the number of iterations (-iterations) to allow the method to slowly approach the
steady-state solution.
The automatic time-step algorithm will fail if the maximum change in head after the second steady-state time step exceeds
the target change in head (-head_change_target target). For the first two steady-state time steps the minimum time step
(-minimum_time_step time_step) is used. Therefore, the simulator fails because it cannot reduce the time step to less than the
minimum, but the head changes are still too large. The remedy to this problem is to increase the maximum acceptable change in
head (-head_change_target target), reduce the minimum allowable time step (-minimum_time_step time_step), or adjust the
initial head conditions to be closer to the head boundary conditions.
Example Problems
The STEADY_FLOW data block is used in the example problems 1 and 4.
TIME_CONTROL
This keyword data block is used to define the time steps for the simulation and times at which simulation periods end. The
time step that applies at time zero must be defined, but a new time step may be defined to apply beginning at any time in the
simulation. Times at which to end simulation periods may be explicitly defined in this data block; however, the number of
simulation periods also depends on the time series definitions in FLUX_BC, LEAKY_BC, PRINT_FREQUENCY, RIVER,
SPECIFIED_HEAD_BC, and WELL data blocks. The last time defines the end of the simulation. The time specified for the end
of each simulation period is measured from the beginning of the simulation. This keyword data block is mandatory for all
simulations.
Example
Line 0: TIME_CONTROL
Line 1: -time_step
Line 2: 0 1 day
Line 2a: 10 day 5 day
Line 3: -time_end
Line 4: 1 yr
Line 4a: 2 yr
Explanation
Line 0: TIME_CONTROL
TIME_CONTROL is the keyword for the data block; no other data are included on this line.
Line 1: -time_step
-time_step—This identifier is used to specify that time-step data will be entered. Optionally, step, time_step, delta,
delta_time, -s[tep], -time_s[tep], or -d[elta_time].
Line 2: time, [units], time_step, [units]
time—Simulation time (T) at which the new time step will be used. The first time in a series of line 2s must be zero.
Line 2 may be appended to line 1 or other line 2s. Units are defined explicitly with units; default units are
defined by -time identifier in UNITS data block.
units—Units for time can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these
units.
time_step—Time-step length (T), units are defined explicitly with units; default units are defined by -time identifier
in UNITS data block.
units—Units for time_step can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of
these units.
Line 3: -time_end
-time_end—This identifier is used to specify a series of times at which simulation periods end. The last time in the
series marks the end of the simulation. All times are elapsed time from the beginning of the simulation. The
number of simulation periods also depends on the time series definitions in FLUX_BC, LEAKY_BC,
PRINT_FREQUENCY, RIVER, SPECIFIED_HEAD_BC, and WELL data blocks. Optionally,
time_change, change_time, end, end_time, time_end, -time_c[hange], -c[hange_time],-e[nd_time], or
-time_e[nd].
Line 4: time_end, [units]
time_end—Time at which a simulation period ends. The last line 4 indicates the time of the end of the simulation.
Time (T) units are defined explicitly with units; default units are defined by -time identifier in UNITS data
block.
units—Units for time can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these
units.
70 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
TIME_CONTROL
Notes
A TIME_CONTROL data block, including both identifiers, is mandatory. If a time unit is specified for a time variable (time,
time_step, or time_end), then the specified unit overrides the default unit (-time, UNITS keyword data block). The units specified
for each variable need not be the same. The first time in the -time_step series must be zero. Every time_end marks the end of a
simulation period; the final time_end marks the end of the simulation. Every time less than the final time_end that is included in a
time series for time_step or in any time series in FLUX_BC, LEAKY_BC, PRINT_FREQUENCY, RIVER,
SPECIFIED_HEAD_BC, and WELL data blocks will mark the end of one simulation period and the beginning of another.
The time step, in addition to grid discretization, is critical for obtaining a sufficiently accurate numerical solution to the flow
and transport equations. Criteria for estimating appropriate time steps for different finite-difference weightings are discussed in
section D.1.3. Temporal Discretization.
The difference equations for unconfined flow (FREE_SURFACE_BC true) contain explicit terms, which are calculated on
the basis of conditions from the previous time step: for example, fraction of cell saturated, fraction of well screen receiving water,
and the vertical location of the cell receiving river flux. These explicit terms may cause instability (for example, oscillations) in
the numerical method. The only remedy available is to use smaller time steps (time_step) so that the explicit terms change slowly.
Example Problems
The TIME_CONTROL data block is used in the example problems 1, 2, 3, and 4.
TITLE
This keyword data block is used to define two title lines that are written to each of the output files, except the prefix.xyz and
prefix.h5 files.
Example
Line 0: TITLE
Line 1: line 1
Line 1a: line 2
Explanation
Line 0: TITLE
TITLE is the keyword for the data block.
Line 1: title
title—The title may continue on as many lines as desired; however, only the first two lines are written to output files.
Lines are read and saved as part of the title until a keyword begins a line or until the end of the file.
Notes
The TITLE data block is used to identify the simulation in the output files, except the prefix.xyz and prefix.h5 files. Be careful
not to begin a line of the title with a keyword because that marks the end of the TITLE data block. If more than one title keyword
data block is included, only the lines from the last TITLE data block will appear in the output files.
Example Problems
The TITLE data block is used in the example problems 1, 2, 3, and 4.
72 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
UNITS
UNITS
This keyword data block is used to specify the units of measure for the input data. Internal to PHAST, all flow and transport
calculations use SI units. The UNITS data block provides the information necessary to convert the input data to SI units. Output
units are always SI except for time, which is output in the unit defined by the -time identifier of this keyword data block. The
UNITS data block contains only static data.
Example
Line 0: UNITS
Line 1: -time years
Line 2: -horizontal_grid km
Line 3: -vertical_grid ft
Line 4: -head ft
Line 5: -hydraulic_conductivity m/d
Line 6: -specific_storage 1/ft
Line 7: -dispersivity m
Line 8: -flux m/s
Line 9: -leaky_hydraulic_conductivity m/s
Line 10: -leaky_thickness km
Line 11: -well_diameter in
Line 12: -well_flow_rate gpm
Line 13: -river_bed_hydraulic_conductivity m/s
Line 14: -river_bed_thickness m
Explanation
Line 0: UNITS
UNITS is the keyword for the data block; no other data are included on this line.
Line 1: -time time_units
-time—This identifier is used to specify the default unit of time for input and output data.
time_units—Units for time (T). Time units can be “seconds”, “minutes”, “hours”, “days”, or “years” or an
abbreviation of one of these units. Optionally, time or -t[ime].
Line 2: -horizontal_grid units
-horizontal_grid—This identifier is used to specify the units of distance for input data related to the X and Y
coordinate directions, which include distances in the GRID data block and all -zone definitions. Optionally,
horizontal_grid, horizontal, or -ho[rizontal_grid].
units—Input units of measure for horizontal distance in the X and Y coordinate directions (L). Distance units can be
U.S. customary (“inches”, “feet”, or “miles”), metric (“millimeters”, “centimeters”, “meters”, or
“kilometers”), or an abbreviation of one of these units.
Line 3: -vertical_grid units
-vertical_grid—This identifier is used to specify the units of distance for input data related to the Z coordinate
direction, which include vertical distances in the GRID data block and all -zone definitions. Optionally,
vertical_grid, vertical, or -v[ertical_grid].
units—Input units for vertical distance (L). Units of distance can be U.S. customary (“inches”, “feet”, or “miles”),
metric (“millimeters”, “centimeters”, “meters”, or “kilometers”), or an abbreviation of one of these units.
Line 4: -head units
-head—This identifier is used to specify the units of head for input data in all keyword data blocks. Optionally,
head or -he[ad].
units—Input units for head (L). Head units can be U.S. customary (“inches”, “feet”, or “miles”), metric
(“millimeters”, “centimeters”, “meters”, or “kilometers”), or an abbreviation of one of these units.
Line 5: -hydraulic_conductivity units
-hydraulic_conductivity—This identifier is used to specify the units of hydraulic conductivity for input data in the
MEDIA data block. Optionally, hydraulic_conductivity, K, -hy[draulic_conductivity], or -K.
units—Input units for hydraulic conductivity (L/T). Length (L) can be U.S. customary (“inches”, “feet”, or
“miles”), metric (“millimeters”, “centimeters”, “meters”, or “kilometers”), or an abbreviation of one of these
units. Time (T) can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these
units. Units must include the divide symbol, “/”, and must contain no spaces.
Line 6: -specific_storage units
-specific_storage—This identifier is used to specify the units of specific storage for input data in the MEDIA data
block. Optionally, specific_storage, storage, -s[pecific_storage], or -s[torage].
units—Input units for specific storage (1/L). Length (L) can be U.S. customary (“inches”, “feet”, or “miles”), metric
(“millimeters”, “centimeters”, “meters”, or “kilometers”), or an abbreviation of one of these units. Units must
include the “1/”, and must contain no spaces.
Line 7: -dispersivity units
-dispersivity—This identifier is used to specify the units of dispersivity for input data in the MEDIA data block.
Optionally, dispersivity, alpha, -d[ispersivity], or -a[lpha].
units—Input units for dispersivity (L). Dispersivity units can be U.S. customary (“inches”, “feet”, or “miles”),
metric (“millimeters”, “centimeters”, “meters”, or “kilometers”), or an abbreviation of one of these units.
Line 8: -flux units
-flux—This identifier is used to specify the units of fluid flux for input data in FLUX_BC data blocks. Optionally,
flux or -f[lux].
units—Input units for fluid flux (L/T). Length (L) can be U.S. customary (“inches”, “feet”, or “miles”), metric
(“millimeters”, “centimeters”, “meters”, or “kilometers”), or an abbreviation of one of these units. Time (T)
can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these units. Units must
include the divide symbol, “/”, and must contain no spaces.
Line 9: -leaky_hydraulic_conductivity units
-leaky_hydraulic_conductivity—This identifier is used to specify the units of hydraulic conductivity for input data
in LEAKY_BC data blocks. Optionally, leaky_hydraulic_conductivity, leaky_K,
-leaky_h[ydraulic_conductivity], or -leaky_K.
units—Input units for hydraulic conductivity (L/T) for LEAKY_BC data blocks. Length (L) can be U.S. customary
(“inches”, “feet”, or “miles”), metric (“millimeters”, “centimeters”, “meters”, or “kilometers”), or an
abbreviation of one of these units. Time (T) can be “seconds”, “minutes”, “hours”, “days”, or “years” or an
abbreviation of one of these units. Units must include the divide symbol, “/”, and must contain no spaces.
Line 10: -leaky_thickness units
-leaky_thickness—This identifier is used to specify the units of thickness for the leaky boundary for input data in
LEAKY_BC data blocks. Optionally, leaky_thickness, thickness, -leaky_t[hickness], or -t[hickness].
units—Input units for thickness of the leaky boundary (L). Thickness units can be U.S. customary (“inches”, “feet”,
or “miles”), metric (“millimeters”, “centimeters”, “meters”, or “kilometers”), or an abbreviation of one of
these units.
Line 11: -well_diameter units
-well_diameter—This identifier is used to specify the units of the diameter or radius of wells for input data in
WELL data blocks. Optionally, well_diameter or -well_d[iameter].
units—Input units for well diameter or radius, L. The diameter or radius units can be U.S. customary (for example
“inches” or “feet”), metric (for example “millimeters”, “centimeters”, or “meters”), or an abbreviation of one
of these units.
Line 12: -well_flow_rate units
-well_flow_rate—This identifier is used to specify the units of flow rates for input data in WELL data blocks.
Optionally, well_flow_rate, well_pumpage, -well_f[low_rate], or -well_p[umpage].
units—Input units for flow rate (L3/T). Flow-rate units can be U.S. customary (for example, “gal/min”, “gpm”,
“ft^3/sec”, or “ft3/sec”), metric (for example, “Liter/minute”, “meters^3/day”, or “meters3/day”), or an
abbreviation of one of these units.
Line 13: -river_bed_hydraulic_conductivity units
-river_bed_hydraulic_conductivity—This identifier is used to specify the units of hydraulic conductivity for input
data in RIVER data blocks. Optionally, river_bed_hydraulic_conductivity, river_bed_k, river_k,
-river_bed_h[ydraulic_conductivity], -river_bed_k, or -river_k.
74 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
UNITS
units—Input units for hydraulic conductivity (L/T) of riverbeds. Length (L) can be U.S. customary (“inches”,
“feet”, or “miles”), metric (“millimeters”, “centimeters”, “meters”, or “kilometers”), or an abbreviation of
one of these units. Time (T) can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of
one of these units. Units must include the divide symbol, “/”, and must contain no spaces.
Line 14: -river_bed_thickness units
-river_bed_thickness—This identifier is used to specify the units of thickness of the riverbed for input data in
RIVER data blocks. Optionally, river_bed_thickness, river_thickness, -river_bed_t[hickness], or
-river_t[hickness].
units—Input units for thickness of the riverbed (L). Units of thickness for the riverbed can be U.S. customary (for
example, “inches”, “feet”, or “miles”), metric (for example, “millimeters”, “centimeters”, “meters”, or
“kilometers”), or an abbreviation of one of these units.
Notes
The UNITS data block must be defined for all flow and transport simulations. The definitions in this data block specify the
units for input data for all keyword data blocks in the flow and transport data file. Note that all definitions apply to the input data.
All output data are in SI units, except time. The unit of time defined with the -time identifier is used for both input and output data.
Example Problems
The UNITS data block is used in the example problems 1, 2, 3, and 4.
WELL
This keyword data block is used to define an injection or pumping well. The location, diameter, open intervals, pumping or
injection rate, and solution composition must be defined for the well. The pumping or injection rate and the chemical composition
of injected water may vary over the course of a simulation. This data block is optional and only is needed if a well boundary
condition is included in the simulation. Multiple WELL data blocks are used to define all of the wells in the grid region.
Example
Line 0: WELL 122 Metropolis Injection Well 122
Line 1: 1766. 2356.
Line 2: -injection_rate
Line 3: 0 0.0
Line 3a: 1 yr 4.5
Line 4: -solution
Line 5: 0 16
Line 5a: 0.5 yr 17
Line 6: -diameter 12
Line 7: -elevation 101. 107.
Line 7a: -elevation 143. 153.
Line 7b: -elevation 175. 183.
Line 0a: WELL 165 Metropolis Supply Well 165
Line 1a: 1833. 2320.
Line 8: -pumping_rate
Line 9: 0 4.5
Line 9a: 2 3.5
Line 10: -land_surface_datum 292.
Line 11: -radius 12
Line 12: -depth 42. 47.
Line 12a: -depth 99. 103.
Line 13: -allocate_by_head_and_mobility true
Explanation
Line 0: WELL number, [description]
WELL is the keyword for the data block.
number—positive number that identifies this well. Default is 1.
description—optional character field that identifies the well.
Line 1: X, Y
X—X location of the well. Units, L, are defined by the -horizontal_grid identifier in the UNITS data block.
Y—Y location of the well. Units, L, are defined by the -horizontal_grid identifier in the UNITS data block.
Line 2: -injection_rate
-injection_rate—This identifier is used to specify the rate of fluid injection into the well. The injection rate is
defined on line 3. A time series of injection rates may be defined by using multiple line 3s. The first time in
the series must be zero. Optionally, injection_rate, injection, or -i[njection_rate].
Line 3: time [units] injection_rate
time—Simulation time (T) at which the injection rate will take effect. Units are defined explicitly with units; default
units are defined by -time identifier in UNITS data block.
units—Units for time can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these
units.
injection_rate—Rate of fluid injection into the well starting at time. Units, L3/T, are defined by the -well_flow_rate
identifier in the UNITS data block.
Line 4: -solution
76 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
WELL
-solution—This identifier is used to specify a solution index number that defines the composition of water injected
into the well. The identifier is required for each injection well. Solution index numbers correspond to
solution compositions defined in the chemistry data file. The composition of injected water is defined on line
5. A time series of solution indices may be defined by using multiple line 5s. The first time in the series must
be zero. Optionally, solution, associated_solution, -s[olution], or -a[ssociated_solution].
Line 5: time [units] solution
time—Simulation time (T) at which the solution composition will take effect. Units are defined explicitly with
units; default units are defined by -time identifier in UNITS data block.
units—Units for time can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these
units.
solution—Solution index number for injected water composition starting at time.
Line 6: -diameter diameter
-diameter—This identifier is used to specify the diameter of the well. Optionally, diameter, or -di[ameter].
diameter—Diameter of the well. Units, L, are defined by the -well_diameter identifier in the UNITS data block.
Line 7: -elevation elevation1, elevation2
-elevation—This identifier is used to specify the top and bottom elevations of an open interval in the well. The top
and bottom elevations may be entered in either order. Multiple -elevation identifiers are used to define all
open intervals for the well. Optionally, elevation, elevations, or -e[levations].
elevation1—Elevation of start of open interval in the well. Units, L, are defined by the -vertical_grid identifier in
the UNITS data block.
elevation2—Elevation of end of open interval in the well. Units, L, are defined by the -vertical_grid identifier in the
UNITS data block.
Line 8: -pumping_rate
-pumping_rate—This identifier is used to specify the pumping rate for the well. The pumping rate is defined on
line 9. A time series of pumping rates may be defined by using multiple line 9s. Optionally, pumping_rate,
pumping, pumpage, -pu[mping_rate], or -pu[mpage].
Line 9: time [units] pumping_rate
time—Simulation time (T) at which the pumping rate will take effect. Units are defined explicitly with units; default
units are defined by -time identifier in UNITS data block.
units—Units for time can be “seconds”, “minutes”, “hours”, “days”, or “years” or an abbreviation of one of these
units.
pumping_rate—Pumping rate (L3/T) starting at time. Units are defined by the -well_flow_rate identifier in the
UNITS data block.
Line 10: -land_surface_datum land_surface_datum
-land_surface_datum—This identifier is used to specify the elevation of the well datum. This data item is required
only if open intervals are defined with the -depth identifier. Optionally, land_surface_datum, lsd,
-l[and_surface_datum], or -l[sd].
land_surface_datum—Elevation of land surface at the well. Units, L, are defined by the -vertical_grid identifier in
the UNITS data block.
Line 11: -radius radius
-radius—This identifier is used to specify the radius of the well. Optionally, radius, or -r[adius].
radius—Radius of the well. Units, L, are defined by the -well_diameter identifier in the UNITS data block.
Line 12: -depth depth1, depth2
-depth—This identifier is used to specify the top and bottom of an open interval as depths below the well datum.
The two depths may be entered in either order. The -land_surface_datum identifier must be used to specify
the elevation of the well datum. Multiple -depth identifiers are used to define all open intervals for the well.
Optionally, depth, depths, or -de[pths].
depth1—Depth of top of open interval in the well. Units, L, are defined by the -vertical_grid identifier in the
UNITS data block.
depth2—Depth of bottom of open interval in the well. Units, L, are defined by the -vertical_grid identifier in the
UNITS data block.
Line 13: -allocate_by_head_and_mobility [True or False]
Notes
Multiple wells are defined by using multiple WELL data blocks, where each well is uniquely identified by the integer
following the WELL keyword. The well location, geometry, and flow rate must be defined for each well, including X–Y coordinate
location, diameter or radius, injection or pumping rate, open intervals and solution composition. Only the flow rate
(-injection_rate or -pumping_rate) and the solution composition (-solution) for a well may vary during a simulation. Open
intervals for a well could include screened intervals, perforated intervals, and open-hole intervals. The elevation of open intervals
in a well can be defined in two ways: (1) the elevations of the top and bottom of an interval can be defined explicitly with the
-elevation identifier, or (2) the well datum (elevation of a measuring point) can be defined with the -land_surface_datum identifier
and the depths to the top and bottom of each open interval can be defined with the -depth identifier. If the well is an injection well,
the flow rate is defined with the -injection_rate identifier as a positive number and an associated solution composition (-solution
identifier) must be specified for reactive-transport simulations. If the well is a pumping well, the flow rate is defined with the
-pumping_rate identifier as a positive number. A well can be changed from an injection well to a pumping well (or the reverse)
in the time series definition for injection or pumping rate by changing the sign of the rate.
Wells in corner cells or side cells are assumed to be located exactly at the corner or at the mid-side of the cell, respectively.
The well flow rate into or out of the active grid region is specified by the user. The program does not adjust the well flow rate to
account for symmetry at boundaries. Thus, if the simulation region is one-quarter or one-half of a symmetric region (see Example
2 for an example of the use of symmetry) then the user must reduce the well flow rate by a factor of one-quarter or one-half,
respectively, to account for the actual flow into the active grid region.
By default, allocation of well-bore flow to the open intervals is by a formula that depends only on mobility. Alternatively, the
-allocate_by_head_and_mobility identifier can be used to allocate well-bore flow by a formula that uses the product of mobility
and head difference between the well and the aquifer (Kipp, 1987, p. 34 and p. 122). For numerical stability, wells should have at
least a small flow rate.
Example Problems
The WELL data block is used in the example problem 4.
78 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
Chapter 5. Output Files
PHAST has many options to control writing data to output files. Many of the output files are in paragraph or tabular form to
be displayed or printed. Some files are columnar data or binary, and are intended for post-processing by plotting, statistical, and
visualization programs. All of the output files are written in ASCII text format, except for the HDF file, which is in compressed
binary format. Programs are included in the PHAST distribution package to visualize and extract data from the HDF file.
80 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
prefix.O.wel—Static and transient well information is written to this file, including well location, well identification number,
fluid and solute flow rates, cumulative fluid and solute flow amounts, solute concentrations, and injection and production rates per
node for each well. This ASCII file is intended to be viewed with a text editor.
Static data are written at the beginning of the simulation as defined by the -wells identifier in PRINT_INITIAL data block.
By default, static well data are written to the file. The frequency for writing transient well data to the file is specified by the -wells
identifier in the PRINT_FREQUENCY data block. By default, transient well data are written to the file at the end of each
simulation period.
prefix.xyz.chem—Selected initial-condition and transient chemical data for solutions, pure-phase assemblages, surface
assemblages, exchange assemblages, kinetic reactions, solid solutions, and gas phases are written to this file for all active nodes
in natural order (see section 4.2. Spatial Data). Basic-language programs can be used to calculate other chemical quantities that
are written to this file. Data in the file are formatted in tab-delimited columns with one row per node; columns of X, Y, and Z
coordinates and time begin each row. This ASCII file is intended to be used for post-processing simulation results by user-supplied
spreadsheet, statistical, plotting, and visualization programs.
Initial-condition data are written to the file at the beginning of the simulation as defined by the -xyz_chemistry identifier in
PRINT_INITIAL data block. By default, no initial-condition chemical data are written to the file. The frequency for writing
transient chemical data to the file is specified with the -xyz_chemistry identifier in the PRINT_FREQUENCY data block. By
default, no transient chemical data are written to the file. The PRINT_LOCATIONS data block in the flow and transport data file
can be used to specify the cells for which data will be printed. By default, chemical data will be printed for all cells in the active
grid region.
The chemical data to be written to the prefix.xyz.chem file are defined in the SELECTED_OUTPUT data block of the
chemistry data file and by Basic-language programs in the USER_PUNCH data block of the chemistry data file.
prefix.xyz.comps—Initial-condition and transient concentrations for each component (chemical element) are written to this
file for all nodes in natural order (see section 4.2. Spatial Data). Data in the file are formatted in tab-delimited columns with one
row per node; columns with X, Y, and Z coordinates and time begin each row. This ASCII file is intended to be used for
post-processing simulation results by user-supplied spreadsheet, statistical, plotting, and visualization programs.
Initial-condition component data are written at the beginning of the simulation as defined by the -xyz_components identifier
in PRINT_INITIAL data block. By default, initial component data are not written to the file. The frequency for writing transient
chemical component data to the file is specified with the -xyz_components identifier in the PRINT_FREQUENCY data block.
By default, transient chemical data are not written to the file.
prefix.xyz.head—Initial-condition and transient potentiometric heads for all nodes are written to this file in natural order (see
section 4.2. Spatial Data). If steady-state flow is simulated, heads are written at most once during the simulation. Data in the file
are formatted in tab-delimited columns with one row per node; columns with X, Y, and Z coordinates and time begin each row.
This ASCII file is intended to be used for post-processing simulation results by user-supplied spreadsheet, statistical, plotting, and
visualization programs.
Initial-condition heads are written at the beginning of the simulation as defined by the -xyz_heads identifier in
PRINT_INITIAL data block. By default, initial heads are not written to the file. The frequency for writing transient heads to the
file is specified with the -xyz_heads identifier in the PRINT_FREQUENCY data block. By default, transient heads are not
written to the file.
prefix.xyz.vel—Steady-state or transient velocity-vector components interpolated to grid nodes (see section D.10. Nodal
Velocity Calculation) are written to this file for all nodes in natural order (see section 4.2. Spatial Data). If steady-state flow is
simulated, velocity vector components are written at most once during the simulation. Data in the file are formatted in
tab-delimited columns with one row per node; columns with X, Y, and Z coordinates and time begin each row. This ASCII file is
intended to be used for post-processing simulation results by user-supplied spreadsheet, statistical, plotting, and visualization
programs.
If steady-state flow is simulated (STEADY_FLOW data block), the -xyz_steady_flow_velocities identifier in
PRINT_INITIAL data block can be used to control printing of velocity vector components to the file. By default, steady-state
velocities are not written to the file. For transient-flow simulations, the frequency for writing transient velocity data is specified by
the -xyz_velocities identifier in the PRINT_FREQUENCY data block. By default, transient velocities are not written to the file.
prefix.xyz.wel—Initial and transient concentration data for wells are written to this file, including component concentrations,
pH, and alkalinity. Data in the file are formatted in tab-delimited columns with one row per well; columns with X and Y well
coordinates, vertical datum, time, and well number begin each row. This ASCII file is intended to be used for post-processing
simulation results by user-supplied spreadsheet, statistical, plotting, and visualization programs.
The -xyz_wells identifier in PRINT_INITIAL data block can be used to control printing of initial component concentrations
for wells to the file. By default, initial component concentrations are not written to the file. The frequency for writing transient
82 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
diagnostic output to the file prefix.log. All warnings and errors are written to this file, including those detected while processing
the input files and those that occur during the flow, transport, and reaction calculations. The prefix.log file also contains simulation
progress and information on the solution of the finite-difference equations for each time step. The equation-solution information
includes iteration counts for the solver (if applicable) and maximum changes in the dependent variables written out at an interval
requested by the user (PRINT_FREQUENCY data block, -progress_statistics).
The first set of data in the prefix.O.head and prefix.O.comps files contains the initial-condition distributions of the variables
for potentiometric head and component concentrations, respectively, if requested by the user (PRINT_INITIAL data block,
-heads and -components). These files can be used to verify that the initial conditions have been defined correctly. The
prefix.O.probdef file contains information related to the problem definition, which is useful for verifying that the problem
formulation is correct. This information includes locations of nodes, parameters for the fluid and porous medium, initial
conditions, and boundary conditions.
The boundary-condition index array contains indices of boundary-condition types and excluded cells for the simulation grid.
This array is written to the prefix.O.probdef file if requested (PRINT_INITIAL data block, -boundary_conditions). The array
can help the user locate errors in specification of boundary-condition type and spatial distribution. The 9-digit index numbers in
table 5.1 apply to individual boundary types, with one exception: the combination of a flux and river leakage on a Z-face. A given
index number may have a combination of the values in the table for flux, leakage, and river leakage conditions. For example flux
on the X-face and leakage on the Y-face would be indicated by an index number of 230000000. A cell face can have at most one
boundary type associated with it (except that flux and river leakage can coexist on a Z-face). Flux and leakage boundaries can be
applied to at most one face. River leakage always applies to the Z-face. An index number of -1 indicates that a cell is outside the
active grid region.
Table 5.1.—Format of the boundary-condition index number for each type of boundary condition
[Specified flux, leakage, and river boundaries can be used in a single cell; the index number for the cell can be obtained by adding the appropriate indices from the
table. A cell face can have at most one boundary type associated with it. Flux and leakage boundaries can be applied to at most one face. River leakage always
applies to the Z-face]
Boundary condition
Meaning
index number
-1 Inactive cell
The prefix.O.kd file contains conductance factors for flow, flow conductances, and solute-dispersive conductances for
transport, if requested (PRINT_INITIAL data block, -conductances; PRINT_FREQUENCY data block, -conductances). The
solute-dispersive conductances are functions of the velocity field and, thus, may be transient. This file is used primarily for
diagnostic purposes in the later stages of tracking down a problem.
6.2. Example 1: Pulse Source of Chemical Constituent that Undergoes Sorption and Decay
An analytical solution for the concentration of a constituent as a function of time and distance following a pulse injection into
a one-dimensional column is given by de Marsily (1986, p. 268). The constituent simultaneously undergoes linear decay and linear
sorption. This example compares PHAST simulation results with the analytical solution for an injection with the column
characteristics and the chemical parameters given in table 6.1. A solution containing the constituent is injected into the column for
60 s (seconds); a solution without the constituent is then injected for an additional 60 s.
In this example, the prefix “ex1” is used for the input file names. The chemistry for the simulation is defined in the
ex1.chem.dat file and the flow and transport characteristics of the simulation are defined in the ex1.trans.dat file.The third input
file that is needed for a reactive-transport simulation is the thermodynamic database file, which is named phast.dat by default and
is the same as a PHREEQC thermodynamic database file.
Chapter 6. Examples 85
Table 6.1.—Chemical and physical parameters for example 1
Parameter Value
Porosity, unitless .1
Longitudinal dispersivity, cm .1
The chemistry data file for this example is given in table 6.2. Typically, the data base file phast.dat is used for the definition
of most reactions and thermodynamic data. However, because of the idealized nature of this example problem, it is convenient to
define all of the chemical characteristics of the chemical system within the chemistry data file (except for water and its associated
species, which are found in the thermodynamic database file). The first data block, SOLUTION_MASTER_SPECIES, defines
a new “element”, A, which will be used as the reactive constituent. The SOLUTION_SPECIES data block defines a single
uncharged1 aqueous species for the element.
TITLE
. Example 1.--Pulse of solute undergoing sorption and decay
. Analytical solution from Quantitative Hydrogeology, de Marsily
# Kd = 1 mol sorbed/mol dissolved
# K = 0.01 1/s Decay constant
SOLUTION_MASTER_SPECIES
A A 0 A 1
SOLUTION_SPECIES
A = A
log_k 0
SURFACE_MASTER_SPECIES
Surf Surf
SURFACE_SPECIES
Surf = Surf
log_k 0
Surf + A = SurfA
log_k -10
SOLUTION 1
END
SOLUTION 2
A 1.0 mmol/kgw
END
SURFACE 1
-no_edl
1If
the constituent were an ion, additional issues would be raised. KINETICS removes the element and water is split to form dis-
solved O2 or H2 and hydronium or hydroxide ions to maintain charge balance. Thus, unwanted pH and redox effects will be obtained if a
major cation undergoes significant decay. It is advisable to remove an oppositely charged element or replace the ionic element with
another like ionic element, so that charge balance is maintained.
86 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
Surf 1e10
END
KINETICS 1
A_decay
-formula A 1.0
-m 0
RATES
A_decay
-start
10 rate = -(TOT(“A”) + MOL(“SurfA”)) * .01
20 moles = rate * TIME
30 SAVE moles
-end
END
SELECTED_OUTPUT
-file ex1.dummy.sel
-reset false
USER_PUNCH
-headings A SurfA SurfA/A
10 PUNCH TOT(“A”)*1000
20 PUNCH MOL(“SurfA”)*1000
30 IF TOT(“A”) > 0 THEN PUNCH MOL(“SurfA”)/TOT(“A”) ELSE PUNCH -1
END
The SURFACE_MASTER_SPECIES data block defines a surface that will sorb constituent A. The SURFACE_SPECIES
data block defines two surface complexes; the sites of the surface will be either an uncomplexed site, denoted by “Surf”, or a site
complexed with constituent A, denoted “SurfA”. The empty SOLUTION 1 data block defines pure water by default. This pure
water solution will be used to fill the column initially and also to flush the column for the last 60 s of the simulation. SOLUTION 2
defines a solution containing 1 mmol/kgw (millimole per kilogram water) of constituent A. This solution will be injected into the
column for the first 60 s of the simulation. SURFACE 1 defines the name of a surface sorption site and the number of sorption
sites available to react.
PHREEQC does not have an explicit mechanism for simulating linear sorption. However, it is possible to define the number
of surface sites and equilibrium constants for surface species in such a way that linear sorption is simulated accurately. Consider
the reaction and log form of the mass-action equation for the sorption of A on surface Surf:
Surf + A = SurfA with Log ( K ) = Log ( SurfA ) – Log ( A ) – Log ( Surf ) . (6.1)
The mass-action equation holds strictly for activities. (Note that for charged surface species, by default, an electrostatic term is
included in the mass-action equation; -no_edl in the SURFACE 1 data block eliminates that term and also precludes the need to
define the surface area parameters for the surface.) For an uncharged aqueous species (A), activity in dilute solutions is nearly
equal to molality. For surface species, activity is equal to mole fraction. If the number of sites is large relative to the amount of A
that sorbs, 1010 moles for example, the mole fraction of Surf is very nearly 1 and the mole fraction of SurfA is the number of
moles ( SurfA )
-----------------------------------
kgwater
moles of SurfA divided by 10 . For this example, K d is 1, ----------------------------------- = 1 , where ( A ) is molality. Substituting and
10
(A)
rewriting equation 6.1 gives
moles ( SurfA ) 10
Log ( K ) = Log ⎛ -----------------------------------⎞ + Log ( kgwater ) – Log ( 10 ) – Log ( A ) – 0 , and (6.2)
⎝ kgwater ⎠
moles ( SurfA )
⎛ -----------------------------------⎞
Log ( K ) + 10 – Log ( kgwater ) = Log ⎜ -----------------------------------⎟ = Log ( K d ) = 0 .
kgwater
(6.3)
⎜ (A) ⎟
⎝ ⎠
Chapter 6. Examples 87
The mass of water in each cell is fixed at 1 kg (kilogram), so the term Log ( kgwater ) is zero. Therefore, Log ( K ) must be -10
to obtain the required K d . These definitions are implemented in SURFACE_SPECIES and SURFACE 1 data blocks.
The KINETICS 1 data block defines the name of a rate expression, “A_decay”, that removes constituent A from solution.
The RATES data block defines the rate of the kinetic reaction “A_decay”. The rate expression defines a rate that is proportional to
the total number of moles of A in the system (dissolved plus sorbed). Because the chemical calculation is performed for one
kilogram of water, the rate has the same proportionality to concentration.
The SELECTED_OUTPUT and USER_PUNCH data blocks define selected data to be written to output files. The
SELECTED_OUTPUT data block is used to control writing selected-output data to as many as three files: ex1.dummy.sel (as
defined with -file in the SELECTED_OUTPUT data block in this example), ex1.xyz.chem, and ex1.h5. In the
SELECTED_OUTPUT data block, -reset false eliminates all default writing to the selected-output files. In this example, all data
to be written to selected-output files are defined in the USER_PUNCH data block. To understand which data go to each of the
three selected output files, it is necessary to know the sequence of calculations in PHAST. PHAST runs the chemistry data file as a
PHREEQC simulation before it begins to simulate flow and transport. During this initial PHREEQC simulation, any results specified
by SELECTED_OUTPUT and USER_PUNCH data blocks will be written to the selected-output file as defined by the -file
identifier (ex1.dummy.sel). However, in this example, these data blocks are located at the end of the file after an END keyword,
and no chemical simulations are defined after this point. Therefore, the file ex1.dummy.sel will be empty. After the PHREEQC
simulation, PHAST begins the flow and transport simulation. During the flow and transport simulation, PHAST writes all selected
output to the file ex1.xyz.chem and to the file ex1.h5. The identifiers -xyz_chemistry and -hdf_chemistry in the
PRINT_FREQUENCY data block of the flow and transport data file are used to specify the frequencies at which data are written
to these two files.
The flow and transport data file (table 6.3) defines all system geometry, spatial discretization, characteristics of the porous
media, boundary conditions, initial conditions, time steps, and duration of the simulation. The flow and transport data file is linked
to the chemistry data file by the index numbers of solutions, surface, and kinetics that are used as initial conditions
(CHEMISTRY_IC in the flow and transport data file) and the index numbers of solutions used as boundary conditions
(SPECIFIED_HEAD_BC data block in the flow and transport data file).
TITLE
. Example 1.--Pulse of solute undergoing sorption and decay
. Analytical solution from Quantitative Hydrogeology, de Marsily
# 1D region 12 cm
# Velocity 0.1 cm/s
# Porosity 0.1
# Dispersivity 1 cm (isotropic)
# 60 s pulse, 60 s chaser
SOLUTE_TRANSPORT true
STEADY_FLOW true
UNITS
-time sec
-horizontal cm
-vertical cm
-head cm
-hydraulic_cond cm/s
-specific_storage 1/cm
-dispersivity cm
GRID
-uniform X 0 12 61
-uniform Y 0 1 2
-uniform Z 0 1 2
-chemistry_dimensions X
-print_orientation XY
MEDIA
-zone 0 0 0 12 1 1
-Kx 0.12
88 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
-Ky 0.12
-Kz 0.12
-porosity 0.1
-storage 0
-longitudinal_dispersivity 0.1
-horizontal_dispersivity 0.1
-vertical_dispersivity 0.1
FREE_SURFACE_BC false
SPECIFIED_HEAD_BC
-zone 0 0 0 0 1 1
-head 0 1
-associated_solution 0 2
60 1
-zone 12 0 0 12 1 1
-head 0 0.0
-associated 0 1
HEAD_IC
-zone 0 0 0 12 1 1
-head X 1.0 0.0 0.0 12.0
CHEMISTRY_IC
-zone 0 0 0 12 1 1
-solution 1
-surface 1
-kinetics 1
SOLUTION_METHOD
-direct
-space 0.5
-time 0.5
TIME_CONTROL
-time_step 0 0.4 sec
-time_end 120 sec
PRINT_FREQUENCY
0
-hdf_chemistry 10 sec
-xyz_chemistry 0 sec
60
-velocity 60 sec
-xyz_chemistry 60 sec
-force_chemistry_print 60 sec
END
The first data block in the flow and transport file is TITLE, which simply defines two lines to be written to the output files to
identify the simulation. The SOLUTE_TRANSPORT data block is used to specify that this is not only a flow simulation, but
transport and reactions are to be simulated as well. The flow field is defined to be steady state for the duration of the simulation
with the STEADY_FLOW data block. A steady-state velocity field will be calculated once from the boundary conditions. The
velocity field will then be constant for all time steps of the transport calculation. The UNITS data block is required to set the units
of measure for all of the input quantities. On output, all units are in SI, including seconds for time, as specified with the -time
identifier.
The GRID data block defines the locations of nodes that discretize the simulation region. The grid is 12 cm (centimeter) (X)
by 1 cm (Y), by 1 cm (Z), with two nodes in the Y and Z directions and 61 nodes equally spaced in the X direction. The grid region
begins at the first node (at X=0 cm) and ends at the last node (at X=12 cm). The flow and transport calculations are always
performed on a three-dimensional grid. However, for symmetric systems (both flow and chemistry must be symmetric), the
chemistry can be run on a subset of nodes, either a line (one dimensional) or plane (two dimensional), and the results copied to the
remaining symmetric parts of the grid region. The identifier -chemistry_dimensions X indicates that chemical reactions will be
calculated for one line of nodes in the X direction, and then copied to the other three lines of nodes in the X direction. The
-print_orientation identifier specifies that X–Y planes of data will be written to the files with names beginning with ex1.O.
Chapter 6. Examples 89
The MEDIA data block specifies the properties of the porous medium. In this example, a single zone, inclusive of the entire
grid region, is used to define uniform porous-medium properties throughout the grid region. Multiple zones could be used to
represent heterogeneity of porous media properties within the grid region. An interstitial velocity of 0.1 cm/s (centimeter per
second) is desired for this example simulation. From Darcy’s Law (eq. D.3), if the head gradient is defined to be 1/12 by the
boundary conditions (SPECIFIED_HEAD_BC data block) and the porosity is 0.1, then a hydraulic conductivity of 0.12 cm/s will
produce the desired interstitial velocity of 0.1 cm/s.
The example simulates flow in a confined aquifer (column), which is specified by inactivating the free-surface boundary
condition (FREE_SURFACE_BC false). The flow is prescribed by specified heads at both ends of the column to achieve the
desired head gradient. The SPECIFIED_HEAD_BC data block defines two zones. At the plane of nodes at X=0 cm, the head is
specified to be 1 cm and beginning at time 0 s, any inflowing solution will have the composition defined by solution 2. At 60 s, the
composition of water entering at X=0 cm changes to solution 1. At the plane of nodes at X=12 cm, the head is specified to be 0 cm
and any inflowing solution will have the composition defined by solution 1 for the entire simulation. Recall that solution 2 is
defined in the chemistry data file to contain constituent A, whereas solution 1 is defined to be pure water. For confined flow,
specified-head values may be relative to any elevation datum, without regard to the Z datum of the coordinate system. (For
unconfined flow, heads must be defined relative to the Z datum of the coordinate system.)
The initial head is defined to be linear in the X direction, ranging from 1 cm at X=0 cm to 0 cm at X=12 cm by the HEAD_IC
data block. This initial head distribution is exactly the steady-state head distribution for this system, but any initial head distribution
should result in the same steady-state head distribution. The CHEMISTRY_IC data block is used to define the initial composition
of water throughout the grid region and the types of chemistry that are active in each cell. In this example, the grid region initially
contains pure water (solution 1), and every cell has surface and kinetic chemical reactions. The index numbers for the identifiers
-solution, -surface, and -kinetics refer to the index numbers of solutions, surfaces, and kinetic reactants defined in the chemistry
data file.
The SOLUTION_METHOD data block specifies that the flow and transport equations are solved by the direct method,
which is appropriate for the small number of nodes in this problem. The finite-difference approximations to the flow and transport
differential equations use centered-in-time and centered-in-space weighting (-time and -space in SOLUTION_METHOD data
block). This weighting results in second-order truncation errors, which contain no numerical dispersion, but may introduce
oscillations in the numerical solutions for head and concentration. In this example, the Peclet number is 2 (eq. D.5), which indicates
that there will be no oscillations due to the spatial discretization (see section D.1.2. Spatial Discretization). The
TIME_CONTROL data block specifies the time step (-time_step) of 0.4 s will be used from 0 s until the end of the simulation.
The time at the end of the simulation (-time_end) is specified to be 120 s. For this example, the oscillation criterion (eq. D.8)
2 2
∆x 0.2
resulting from temporal discretization is ∆t = 0.4 < --------- = ------------------- = 4 , which indicates that there should be no oscillations
vα 0.1 ( 0.1 )
(see section D.1.3. Temporal Discretization).
The PRINT_FREQUENCY data block specifies the frequency of writing data to the output files. Starting at 0 s, the default
print frequencies will be used for all data, except that chemistry data will be written to the HDF file after every 10 s of simulation
(-HDF_chemistry 10 sec), and no data will be written to the ex1.xyz.chem file (-xyz_chemistry 0 sec). At 60 s, print frequencies
are specified to be 60 s for the ex1.O.vel (-velocity), ex1.xyz.chem (-xyz_chemistry), and ex1.O.chem (-force_chemistry_print)
data files (PRINT_FREQUENCY data block). The print frequency for the HDF file is not redefined at 60 s, so the print frequency
from 0 s (10 s print frequency) remains in effect until the end of the simulation.The END statement marks the end of the definitions
for the flow and transport data file.
The time-series definitions for the SPECIFIED_HEAD_BC and PRINT_FREQUENCY data blocks specify a change at
time 60 s. Thus, the total number of simulation periods is two, from 0 s to 60 s, and from 60 s to the end of the simulation at 120
s (-time_end in the TIME_CONTROL data block).
The results of the simulation are written to several output files. The velocity field, which is written to the ex1.O.vel file and
also can be viewed in Model Viewer from data written in the ex1.h5 file, is uniform at 0.001 m/s (meters per second) or 0.1 cm/s
(centimeters per second). The head field is listed in ex1.O.head and also stored in the ex1.h5 file. Descriptions of the chemistry in
each cell are written to ex1.O.chem. Selected output (as defined in the chemistry data file), including the concentration of A and
SurfA, is written to ex1.xyz.chem and also to the ex1.h5 file. The concentration of A from the PHAST simulation as a function of
distance at 120 s is plotted in figure 6.1 along with the analytical solution. The simulation used centered-in-time and
centered-in-space weighting for the difference equations. Results of a simulation using upstream-in-space (-space_differencing
0) and backward-in-time (-time_differencing 1) also are plotted for comparison. The PHAST results for centered-in-time and
centered-in-space weighting are similar to the analytical solution. The discrepancy with the analytical solution is caused
predominantly by the operator-splitting error because the spatial and temporal discretization errors should be minimized by using
90 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
0.4
0.2
0.1
0
0 1 2 3 4 5 6 7 8 9 10 11 12
DISTANCE, IN CENTIMETERS
Figure 6.1.—Example 1: Analytical solution for concentration at 120 seconds of a pulse of solute
that undergoes linear sorption and linear decay compared to numerical solutions using (1)
centered-in-space and centered-in-time weighting and (2) upstream-in-space and
backward-in-time weighting.
centered-in-time and centered-in-space weighting. The operator-splitting error for linear sorption and centered-in-time weighting
D nos ( 0.1 ) ( 0.4 )
can be estimated by equation D.31, α nos = ----------- = ------------------------ ( ( 2 ) ( 0.5 ) ( 2 ) – 1 ) = 0.01 , which indicates that the
v (2)(2)
numerical dispersivity caused by operator splitting is one tenth of the specified dispersivity [0.1 m (meters)]. For this weighting,
the numerical dispersivity caused by operator splitting (and time discretization) can be reduced most effectively by decreasing the
time step.
The PHAST results for backward-in-time and upstream-in-space weighting show additional numerical dispersion. Here,
numerical dispersion is caused by errors due to spatial and temporal discretization in addition to the operator-splitting error. The
total numerical dispersion is estimated from equations D.7, D.10, and D.31,
0.2 ( 0.1 ) ( 0.4 ) ( 0.1 ) ( 0.4 )
α ns + α nt + α nos = ------- + ------------------------ + ------------------------ ( ( 2 ) ( 1 ) ( 2 ) – 1 ) = 0.1 + 0.02 + 0.03 = 0.15 . Thus, for
2 2 (2)(2)
backward-in-time and upstream-in-space weighing, the numerical dispersivity is larger than specified dispersivity (0.1 m), which
accounts for the large deviation from the analytical solution. For this weighting, the numerical solution can be improved both by
refining the spatial discretization and by decreasing the time step.
Chapter 6. Examples 91
Table 6.4.—Chemical and physical parameters for example 2
Parameter Value
Porosity, unitless .1
regarded as more accurate than the single term approximation of Domenico (1987). The parameters for this example are given in
table 6.4. Simulation and analytical results are presented for a 400-day simulation.
The chemistry data file is presented in table 6.5. All of the chemical information for the four species of the chain decay series
are defined in the chemistry data file. SOLUTION_MASTER_SPECIES and SOLUTION_SPECIES data blocks define the
name and a single aqueous species for each of four elements: [A], [B], [C], and [D]. (Using brackets in the names avoids conflicts
with elements carbon (C) and boron (B), which are defined in the thermodynamic database file.) SOLUTION 1 is defined as pure
water and SOLUTION 2 contains 1 mmol/kgw of [A], which will be applied over the rectangular patch at the upstream end of the
grid region.
SOLUTION_MASTER_SPECIES
[A] [A] 1 1 1
[B] [B] 1 1 1
[C] [C] 1 1 1
[D] [D] 1 1 1
SOLUTION_SPECIES
[A] = [A]
log_k 0
[B] = [B]
log_k 0
[C] = [C]
log_k 0
[D] = [D]
log_k 0
92 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
SOLUTION 1
END
SOLUTION 2
units mmol/kgw
pe 12.0 O2(g) -0.67
[A] 1.0
END
RATES
[A]_decay
-start
10 rate = -TOT(“[A]”) * .05/(3600*24)
20 moles = rate * TIME
30 SAVE moles
-end
[B]_decay
-start
10 rate = -TOT(“[B]”) * .02/(3600*24)
20 moles = rate * TIME
30 SAVE moles
-end
[C]_decay
-start
10 rate = -TOT(“[C]”) * .01/(3600*24)
20 moles = rate * TIME
30 SAVE moles
-end
[D]_decay
-start
10 rate = -TOT(“[D]”) * .005/(3600*24)
20 moles = rate * TIME
30 SAVE moles
-end
END
KINETICS 1
[A]_decay
-formula [A] 1 [B] -1.0
-m 0
[B]_decay
-formula [B] 1 [C] -1.0
-m 0
[C]_decay
-formula [C] 1 [D] -1.0
-m 0
[D]_decay
-formula [D] 1
-m 0
END
SELECTED_OUTPUT
-file ex2.dummy.sel
-reset false
USER_PUNCH
-heading A B C D
-start
10 PUNCH TOT(“[A]”)*1000
20 PUNCH TOT(“[B]”)*1000
30 PUNCH TOT(“[C]”)*1000
40 PUNCH TOT(“[D]”)*1000
-end
END
Chapter 6. Examples 93
The RATES data block defines rate expressions for the decay of each species in the decay series. Each rate expression
converts decay constants in units of per day to units of per second and multiplies by the respective species concentration to obtain
the rate of decay. In the KINETICS 1 data block, the stoichiometry of each decay reaction is defined. The sign of the stoichiometric
coefficient in -formula in KINETICS combined with the sign of the mole transfer calculated in the RATES expression (30 SAVE
moles) gives the direction of the transfer relative to the solution. In this example, moles as calculated in RATES is negative.
Therefore, constituents that have a positive coefficient for -formula identifier in the KINETICS data block will be removed from
solution (moles times coefficient is negative); constituents that have a negative coefficient in -formula will be added to the solution
(moles times coefficient is positive). Thus, the rate expression “[A]_decay” converts [A] to [B]; “[B]_decay” converts [B] to [C];
“[C]_decay” converts [C] to [D]; and “[D]_decay” removes [D]. The SELECTED_OUTPUT and USER_PUNCH data blocks
define data to be written to output files as described in example 1.
For the definitions of the flow and transport data file (table 6.6), it is useful to take advantage of the symmetry of the problem
definition. A horizontal plane of symmetry is located at Z=12.5 m, and a vertical plane of symmetry is located at Y=20.5 m. All
concentration, head, and velocity fields on either side of each of these two planes are mirror images. Thus, it is possible to run a
simulation on a grid region that is one quarter of the original problem (Y=0 to 20.5 m, Z=0 to 12.5 m) and reflect the results to the
other three quadrants. In this example, all properties, boundary conditions, and initial conditions are defined for the original
problem (Y=0 to 41 m, Z = 0 to 25 m). Only the grid, which defines the actual simulation region, is restricted to the front lower
quadrant (Y=0 to 20.5 m, Z=0 to 12.5 m).
TITLE
. 3D analytic, continuous injection, 4 species chain decay
. Sun, Peterson, Clement (1999) J. Cont. Hyd., Example 6.3
. Documentation compares PHAST with chain decay from
. Sun and others combined with Wexler (1992) solution
. to patch source
SOLUTE_TRANSPORT true
UNITS
-time day
-horizontal m
-vertical m
-head m
-hydraulic_conductivity m/d
-specific_storage 1/m
-dispersivity m
GRID
# Symmetry is used, so that grid is only defined on 1/4 of YZ face
-uniform X 0.0 100 26 # 4.0 m spacing
-uniform Y 0.0 20.5 2
-overlay_uniform Y
# nodes are set so that cell face is at 15 m to allow source patch definition
0.5 19.5 20 # 1.0 m spacing
-uniform Z 0.0 12.5 2
-overlay_uniform Z
# nodes are set so that cell face is at 10 m to allow source patch definition
0.5 11.5 12 # 1.0 m spacing
-print_orientation XY
MEDIA
-zone 0 0 0 100 41 25
# V = (1/e)*K*dh/dx, .2 = 1/.1*K*1/100, K = 2
-Kx 2
-Ky 2
-Kz 2
-porosity 0.1
-storage 0
-longitudinal_dispersivity 1.5
-horizontal_dispersivity 0.45
94 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
-vertical_dispersivity 0.15
FREE_SURFACE_BC false
SPECIFIED_HEAD_BC
# first define x=0 head, inflow to be pure water
-zone 0 0 0 0 41 25
-head 0 1
-fixed_solution 0 1
# now define patch source of contaminant A
-zone 0 15 10 0 26 15
-fixed_solution 0 2
# define x=100 head
-zone 100 0 0 100 41 25
-head 0 0
-associated_solution 0 1
HEAD_IC
-zone 0 0 0 100 41 25
-head X 1.0 0.0 0.0 100.0
CHEMISTRY_IC
-zone 0 0 0 100 41 25
-solution 1
-kinetics 1
SOLUTION_METHOD
-iterative true
-tolerance 1e-14
-space 0.5
-time 0.5
-cross_dispersion false
PRINT_FREQUENCY
0
-hdf_chemistry 400 day
-vel 400 day
-xyz_chemistry 400 day
-xyz_head 400 day
-xyz_velocity 400 day
TIME_CONTROL
-time_step 0 10 day
-time_end 400 day
END
The uses of the TITLE, SOLUTE_TRANSPORT, UNITS, FREE_SURFACE_BC, and PRINT_FREQUENCY data
blocks are the same as described in described in example 1. For demonstration purposes, steady-state flow (STEADY_FLOW data
block) is not specified, so head and velocity are calculated at each time step of the simulation, even though the flow field is specified
by the initial and boundary conditions to be at steady state.
To ensure that the rectangular patch over which species [A] is introduced into the region corresponds exactly the edges of cell
faces, it is necessary to define cell boundaries that coincide with Y=15 m and Z=10 m. Cell boundaries occur halfway between
nodes, so for equally spaced nodes 1 m apart, Y nodes need to be placed at Y=14.5 m and Y=15.5 m. Similarly, Z nodes need to
be placed at 9.5 m and 10.5 m. The GRID data block defines the locations of these nodes and the extent of the grid region by using
a combination of uniform grid spacings. For the Y dimension, nodes are placed at Y=0 m and Y=20.5 m with the -uniform Y
identifier. Nodes are placed at 0.5, 1.5, 2.5, …19.5 m, which satisfy the required cell boundary criterion, by overlaying additional
equally spaced nodes with the -overlay_uniform Y identifier. Similarly, -uniform Z and -overlay_uniform Z identifiers place
nodes in the required locations in the vertical. Nodes in the X direction have four-meter spacing from 0 to 100 m.
An interstitial velocity of 0.2 m/d (meter per day) is used in the analytical solution for this example simulation. From Darcy’s
Law (eq. D.3), if the head gradient is defined to be 0.01 (1 m per 100 m) by the boundary conditions and the porosity is 0.1, then
a hydraulic conductivity of 2 m/d will produce the desired interstitial velocity of 0.2 m/d. The MEDIA data block defines the
hydraulic conductivity, porosity, storage, and the three dispersivities (table 6.4) from Sun and others (1999). The
SPECIFIED_HEAD_BC data block defines the head to be 1 m at the upstream end of the grid region and 0 m at the downstream
end of the grid region to produce a head gradient of 0.01 for time 0 s onward. Also in the SPECIFIED_HEAD_BC data block,
Chapter 6. Examples 95
the water composition at the boundary (-fixed_solution) is defined to be pure water (SOLUTION 1 in chemistry data file) from
time 0 s onward, except over a rectangular patch at X=0. For the patch from Y=15 to 26 m and Z=10 15 m, the water composition
is specified to be solution 2 (water containing [A], SOLUTION 2 in chemistry data file) from time 0 s onward.
The initial head condition is defined to be linear from 1 m at X=0 m to 0 m at X=100 (HEAD_IC data block), which is
consistent with the desired steady-state flow system. The initial water composition within the grid region is specified by the
CHEMISTRY_IC data block to be pure water (-solution 1) and four kinetic decay reactions are defined by the identifier -kinetics
1, where 1 corresponds to the definition of KINETICS 1 in the chemistry data file.
The iterative linear-equation solver is specified to be used for the finite-difference equations with the
SOLUTION_METHOD data block and the identifier -tolerance is used to define the relative residual tolerance for convergence
of the iterative solver. Centered-in-space (-space) and centered-in-time (-time) weightings are used to form the finite-difference
equations. The TIME_CONTROL data block specifies the time step to be 10 d (days), starting at time 0 s. The time at the end of
the simulation is 400 d (-time_end). The time step is less than the estimate of the time step needed to avoid oscillations due to
2
4
temporal discretization (see section D.1.3. Temporal Discretization), ∆t = 10 < ------------------- = 53 d. The cell Peclet number (eq.
1.5 ( 0.2 )
4
D.5) in the X direction is ------- = 2.7 (see section D.1.2. Spatial Discretization), which is greater than 2, the criterion to avoid
1.5
oscillations (eq. D.8) due to spatial discretization; however, in this example no oscillations appear in the results. Cross-dispersive
terms are not included in the difference equations (-cross_dispersion false). The cross-dispersion identifier was not necessary
because the default is not to include the cross-dispersive terms. Cross-dispersive terms were not used in this example because the
analytical solution from Wexler (1992) does not include cross dispersion.
Results of the simulation at 400 d for the plane Z=12.5 are shown in figure 6.2 along with the analytical solution. The
similarity of results indicates that PHAST is performing the calculations correctly. The minor discrepancies between the two sets
of curves are ascribed to truncation errors and operator-splitting errors in PHAST, which could be decreased by decreasing spatial
and temporal discretization.
YS
R oxygen, S = -------V max ( S ) ---- ⎛ ------------------------⎞ , and
X S
(6.5)
YO I b K h ( S ) + S⎠
⎝
where R oxygen, O is the limiting rate of oxygen consumption due to oxygen availability; R oxygen, S is the limiting rate of oxygen
consumption due to substrate availability; R oxygen is the limiting rate of oxygen consumption, which is the minimum of the two
rates, R oxygen, O and R oxygen, S ; O , S , and X are the concentrations of oxygen, substrate, and aerobic biomass; V max ( O )
and K h ( O ) are the kinetic parameters for oxygen; V max ( S ) and K h ( S ) are the kinetic parameters for the substrate; Y O and
96 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
0.01
0.01
0.05 0.05
0.1 0.1
0.5 0.5
0.01 0.01
0.05 0.05
0.1 0.1
Z-DISTANCE, IN METERS
Y-DISTANCE, IN METERS
0.01 0.01
0.05 0.05
0.1 0.1
0.01 0.01
0.05 0.05
0.1 0.1
X-DISTANCE, IN METERS
Figure 6.2.—Example 2: Analytical solution (solid lines) compared to simulation results (dashed lines) for concentrations at 400
days and Z=12.5 meters of a chain of decay products. Component A decays sequentially to components B, C, and D.
Chapter 6. Examples 97
X
Y S are yield coefficients for oxygen and organic substrate, and I b is the biomass inhibition factor. I b = 1 + -------------------- , where
k biomass
k biomass is the aerobic biomass inhibition constant. The rate of biomass production is
where k m is the specific death rate or maintenance coefficient for aerobic biomass. The parameters for equations 6.4-6.7 and the
flow and transport parameters for the simulation are given in table 6.7.
Parameter Value
V max ( S ) , d-1 1
K h ( S ) , mg/L .1
Y S , L/mg .25
V max ( O ) , d-1 1
K h ( O ) , mg/L .1
Y O , L/mg .125
k m , d-1 .01
k biomass , mg/L 1
Dispersivity, m .2
Column length, m 50
Time simulated, d 37
The chemistry data file for this example is given in table 6.8. The TITLE, SELECTED_OUTPUT, and USER_PUNCH
data blocks are used in the same ways as the previous two examples. The SOLUTION_MASTER_SPECIES and
SOLUTION_SPECIES data blocks define a new chemical component to represent the substrate that is used by the bacteria.
SOLUTION 1 defines the composition of the water initially present in the column, which contains no substrate; SOLUTION 2
defines the water that is introduced into the column, which contains 10 mg/L (milligram per liter) of the substrate. All
concentrations are entered as mg/L.
98 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
Table 6.8.—Chemistry data file for example 3
TITLE
Kindred and Celia, WRR, 1989, v. 25, p. 1154
Problem 4.1. Aerobic Biodegradation
SOLUTION_MASTER_SPECIES
Substrate Substrate 0 1.0 1.0
SOLUTION_SPECIES
Substrate = Substrate
log_k 0.0
SOLUTION 1 Initial condition
units mg/L
pH 7.0
pe 8
Substrate 0.0
O(0) 3
SOLUTION 2 Infilling
units mg/L
pH 7.0
pe 8
Substrate 10.
O(0) 3
END
RATES
Aerobic
-start
200 vmaxO = 1/(24*3600)
210 vmaxS1 = 1/(24*3600)
240 Kh1O = .1
250 Kh1S1 = .1
290 kbio = 1
320 km = .01/(24*3600)
410 O = TOT(“O(0)”)*16*1000
430 S1 = TOT(“Substrate”)*1000
450 x1 = KIN(“aerobic_biomass”)
470 Ib = 1 + x1 / kbio
Aerobic_biomass
-start
200 vmaxO = 1/(24*3600)
210 vmaxS1 = 1/(24*3600)
240 Kh1O = .1
250 Kh1S1 = .1
290 kbio = 1
320 km = .01/(24*3600)
410 O = TOT(“O(0)”)*16*1000
430 S1 = TOT(“Substrate”)*1000
Chapter 6. Examples 99
450 x1 = KIN(“aerobic_biomass”)
470 Ib = 1 + x1 / kbio
KINETICS 1
Aerobic
# mg_O * 1/gfw * 1/1000 = mg_O * 1/(16*1000) = mg_O * 6.25e-5
# mg_O * (mg_S/mg_O)* 1 / gfw * 1/1000 = mg_O * 0.5 * 1/(1*1000) = mg_O * 5e-4
-formula O 6.25e-5 Substrate 5e-4
-m 0
Aerobic_biomass
-formula Substrate 0
-m 0.2
KINETICS 2
Aerobic_biomass
-formula Substrate 0
-m 0.2
SELECTED_OUTPUT
-file ex3.dummy.sel
-reset false
USER_PUNCH
-headings Substrate O(0) O_biomass
10 PUNCH TOT(“Substrate”)*1000, TOT(“O(0)”)*16*1000
20 PUNCH KIN(“Aerobic_biomass”)
END
Two rate expressions are defined in the RATES data block, which are named “Aerobic” and “Aerobic_biomass”. The
Basic-language statements for the “Aerobic” rate expression calculate the rate of oxygen consumption as defined by equations
6.4-6.6. The Basic-language statements for the “Aerobic_biomass” rate expression calculate the rate of biomass production (or
decay) as defined by equation 6.7. The KINETICS 1 data block defines the stoichiometry of the reactions and the amount of
reactants initially present in the rest of the column (X > 0), which includes biomass growth (“Aerobic_biomass”) and oxygen and
substrate consumption (“Aerobic”). The KINETICS 2 data block defines the stoichiometry of the reactions and the amount of
reactants that will be present in the cell at X = 0; biomass growth (“Aerobic_biomass”) is included [Kindred and Celia (1989, show
aerobic biomass at X = 0], but oxygen and substrate consumption (“Aerobic”) are not included to maintain the specified-head
boundary condition in this cell for dissolved oxygen and substrate concentrations. Considering the definitions in KINETICS and
RATES for “Aerobic”, the sign and magnitude of the transfers need explanation. First, the sign of the mass transfer calculated in
the “Aerobic” rate expression (the quantity mg_O in the RATES data block) is negative and the coefficients (-formula) in the
KINETICS data blocks are positive. Therefore, the product of mass transfer (mg_O from RATES) and coefficient (from
KINETICS, -formula) is negative and the “Aerobic” kinetic reaction removes oxygen and substrate from solution. The rate
expressions from Kindred and Celia (1989) calculate mole transfer in terms of mg, which is assumed to be equal to mg/kgw;
however, for PHAST, mass-transfers must have units of moles. The coefficients in the identifier -formula have been adjusted to
provide molar mass-transfer quantities. If mg _O is the mass-transfer calculated by the RATES expression, the mole transfer is
1 1 –5
mg _O ------------------- = mg _O ---------------------- = 6.25x10 mg _O , where f O is the gram formula weight of elemental oxygen g/mol
f O 1000 ( 16 )1000
100 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
YO
(grams per mole). The number of milligrams of substrate removed is -------mg _O , and the number of moles of substrate removed
YS
YO 1 0.5 –4
is -------mg _O ----------------- = -------------------mg _O = 5x10 mg _O , where f S is the gram formula weight of substrate (g/mol). Thus,
YS f S 1000 ( 1 )1000
the coefficients in -formula for “Aerobic” in the KINETICS data blocks are 6.25x10-5 for oxygen and 5x10-4 for substrate.
The coefficient for Substrate in -formula for “Aerobic_biomass” in the KINETICS data blocks is zero. Thus, the
“Aerobic_biomass” reaction does not affect the solution composition in any way, but the mass transfer (mg_O_biomass) does
affect the calculation through the cumulative amount of a reactant that is present. Initially, the amount of biomass is set to 0.2 mg
(-m identifier) per kilogram of water. As biomass increases or decreases according to the mg_O_biomass calculated in the rate
expression, the variables KIN(“Aerobic_biomass”) and “M” (only available within the Basic-language program for
“Aerobic_biomass”) are updated. Note the sign convention for calculating the cumulative moles of reactant: positive
mg_O_biomass (from RATES expressions) decreases the amount of reactant (biomass) and negative mg_O_biomass increases the
amount of reactant (biomass). (For dissolved Substrate, the gram formula weight was defined to be 1.0, which means that moles
equals grams.) At any time in the simulation, the cumulative amount of biomass is known through either of the two variables
KIN(“Aerobic_biomass”) or “M”.
The flow and transport file corresponding to the problem description is given in table 6.9. The TITLE, UNITS,
SOLUTE_TRANSPORT, MEDIA, and FREE_SURFACE_BC data blocks have the same functions as previously described in
the first two examples. A 50-m column is defined with 101 nodes at a uniform spacing of 0.5 m (GRID data block). Because the
example is one-dimensional for flow and transport and symmetric in the Y and Z directions, chemistry needs to be calculated for
only one line of nodes in the X direction (-chemistry_dimensions X). The head gradient is calculated such that the interstitial
velocity is 1 m/d. By assuming a hydraulic conductivity of 1x10-4 m/s and a porosity of 0.38, Darcy’s law (eq. D.3) is used to
determine that a decrease in head of 2.199074 m over the 50-m grid region will result in an interstitial velocity of 1 m/d. Specified
heads are defined at each end of the column (SPECIFIED_HEAD_BC data block) to maintain the head gradient and any water
entering the column at the upstream end will have the composition of solution 2 (water containing substrate) as defined in the
chemistry data file. Both the heads and solution compositions for the specified-head boundary conditions apply from time 0 d to
the end of the simulation. The initial head condition is defined to be consistent with the boundary conditions and the steady-state
flow at the specified velocity; the initial head is 2.199074 m at X=0, decreasing linearly to 0 m at X=50 m (HEAD_IC data block).
The CHEMISTRY_IC data block defines the water composition and reactants that initially are present in the column. Solution 1
fills the column and a set of kinetic reactions (KINETICS 1, in the chemistry data file) are present throughout the column, except
at the inlet (X=0). At the inlet, biomass is allowed to accumulate, but the “Aerobic” reaction, which consumes oxygen, is not
included because the concentration of oxygen is specified by the problem definition to be fixed at 3.0 mg/L at the boundary.
TITLE
Kindred and Celia, WRR, 1989, v. 25, p. 1154
Problem 4.1. Aerobic Biodegradation
UNITS
-time days
-horizontal_grid meters
-vertical_grid meters
-head meters
-hydraulic_conductivity m/s
-specific_storage 1/m
-dispersivity m
SOLUTE_TRANSPORT true
GRID
-uniform x 0.0 50. 101
-uniform y 0.0 1.0 2
-uniform z 0.0 1.0 2
-chemistry_dimensions X
-print_orientation XZ
MEDIA
The SOLUTION_METHOD data block specifies use of the direct linear-equation solver and centered-in-space,
centered-in-time weighting for the finite-difference equations. Oscillations are possible with this weighting because the cell Peclet
number (2.5, eq. D.5) is greater than 2.0 (see section D.1.2. Spatial Discretization) for this node spacing (0.5 m) and dispersivity
(0.2). The time step (0.2 d) exceeds the time criterion for possible oscillations (0.125 d, eq. D.8) (see section D.1.3. Temporal
Discretization). The PRINT_INITIAL data block specifies that initial concentrations for each component will be written to the
ex3.O.comps file. The print frequencies for the ex3.xyz.chem and ex3.h5 files are specified in the PRINT_FREQUENCY data
block. The duration of the simulation and the size of the time step are defined in the TIME_CONTROL data block.
Results of the simulation (fig. 6.3) appear to be identical to results presented in figure 1 of Kindred and Celia (1989) (not
reproduced here). No oscillations are observed in the results, which justifies the use of the centered-in-time, centered-in-space
weighting for the difference equations with the spatial and temporal discretization chosen.
102 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
CONCENTRATION, IN MILLIGRAMS PER LITER
10
SUBSTRATE
6 BIOMASS
DISSOLVED OXYGEN
0
0 10 20 30 40 50
DISTANCE, IN METERS
Figure 6.3.—Example 3: Concentrations of substrate, biomass, and dissolved oxygen at 37
days.
6.5. Example 4: Simulation of Regional-Scale Transport and Reactions in the Central Oklahoma
Aquifer
Example 4 presents a reactive-transport model that simulates the evolution over geologic time of water compositions that are
found in the Central Oklahoma aquifer. The model simulates flow, transport, and reactions at a regional scale [90 km (kilometers)
by 48 km] for an aquifer with both confined and unconfined regions and a complex three-dimensional flow pattern. Assuming the
aquifer initially contained brines similar to those found at depth in the area, the chemical evolution of the aquifer over geologic
time is hypothesized to result from a constant influx of fresh water from precipitation and chemical reactions with the aquifer
material. The simulated chemical evolution provides an explanation for differing water compositions between confined and
unconfined parts of the aquifer and the large naturally occurring arsenic concentrations that are found in the confined part of the
aquifer. Most of the flow and transport capabilities and the phase-equilibrium, cation-exchange, and surface-complexation reaction
capabilities of PHAST are used in this example. Because of the variety of boundary conditions and chemical capabilities used, the
input files are useful templates for setting up other field-scale reactive-transport simulations.
The geochemistry of the aquifer has been described in Parkhurst and others (1996). Two predominant water types occur in
the aquifer, a calcium magnesium bicarbonate water with pH in the range of 7.0 to 7.5 in the unconfined part of the aquifer and a
sodium bicarbonate water with pH in the range of 8.5 to 9.2 in the confined part of the aquifer. In addition, marine-derived sodium
chloride brines exist below the aquifer and presumably in fluid inclusions and dead-end pore spaces within the aquifer. Large
concentrations of arsenic, selenium, chromium, and uranium occur naturally within the aquifer, but only arsenic is considered in
this simulation. Figure 6.4 shows that locations of large arsenic concentrations are almost exclusively within the confined part of
the aquifer, which also is the location of high-pH, sodium bicarbonate water.
The conceptual model for the calculation assumes that brines initially filled the aquifer. The aquifer contains calcite, dolomite,
clays with cation exchange capacity, and hydrous ferric oxide surfaces. The initial compositions of the cation exchanger and
surfaces are in equilibrium with the brine, which contains arsenic. Arsenic is initially sorbed on the hydrous ferric oxide surfaces.
The aquifer is assumed to be recharged with rainwater that is concentrated by evaporation and equilibrated with calcite and
dolomite in the vadose zone. This water then enters the saturated zone and reacts with calcite and dolomite in the presence of the
cation exchanger and hydrous ferric oxide surfaces. A period of 100,000 years of flushing the brine-filled aquifer with fresh water
is simulated.
Unconfined aquifer
Confined aquifer
Figure 6.4.—Locations in the Central Oklahoma aquifer with arsenic concentrations greater than 50
micrograms per liter and PHAST model area.
104 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
In general, the ion-association model of PHAST is not appropriate for brine calculations. However, a brine is a logical initial
condition for the chemical composition of the aquifer water in this example. The inclusion of a brine initial condition is justified
on the basis that concentrations quickly decrease to levels appropriate for the ion association model and that the brine has a sodium
chloride composition. Chloride salts were used to fit the activity coefficient parameters of the major cations in the aqueous model
of PHAST and so thermodynamic calculations should be appropriate to higher ionic strengths in chloride dominated systems than
in systems dominated by other anions.
EQUILIBRIUM_PHASES 1 data blocks) is defined and the resulting solution is stored as solution 1 (SAVE solution 1).
The composition of the brine that represents the water that initially filled the aquifer was selected from Parkhurst and others
(1996) and is defined in the SOLUTION 2 data block. A pure-phase assemblage containing calcite and dolomite is defined with
the EQUILIBRIUM_PHASES 2 data block. The brine and pure-phase assemblage are allowed to react to equilibrium and the
result of the batch-reaction equilibration is stored as solution 2 (SAVE solution 2).
The number of cation exchange sites is defined with the EXCHANGE 2 data block and the number of surface sites, specific
surface area, and mass of surface material are defined with the SURFACE 2 data block. Both the initial exchange and the initial
surface compositions are specified to be in equilibrium with the brine (-equil solution 2). The concentration of arsenic in the brine
is set to 0.01 µmol/kgw (micromole per kilogram water), which results in a total of approximately 8 mmol arsenic on the surface
(from the ex4.O.chem file). This concentration on the surface is greater than the upper end of the range of the sequential extraction
data.
SURFACE_MASTER_SPECIES
Surf SurfOH
SURFACE_SPECIES
SurfOH = SurfOH
log_k 0.0
SurfOH + H+ = SurfOH2+
log_k 7.29
SurfOH = SurfO- + H+
log_k -8.93
SurfOH + AsO4-3 + 3H+ = SurfH2AsO4 + H2O
log_k 29.31
SurfOH + AsO4-3 + 2H+ = SurfHAsO4- + H2O
log_k 23.51
SurfOH + AsO4-3 = SurfOHAsO4-3
log_k 10.58
SOLUTION_MASTER_SPECIES
As H3AsO4 -1.0 74.9216 74.9216
SOLUTION_SPECIES
#H3AsO4 primary master species
H3AsO4 = H3AsO4
log_k 0.0
#H2AsO4- 482
H3AsO4 = AsO4-3 + 3H+
log_k -20.7
#HAsO4-2 483
H+ + AsO4-3 = HAsO4-2
log_k 11.50
#AsO4-3 484
2H+ + AsO4-3 = H2AsO4-
log_k 18.46
SOLUTION 1 20 x precipitation
pH 4.6
pe 4.0 O2(g) -0.7
temp 25.
units mmol/kgw
Ca .191625
Mg .035797
Na .122668
Cl .133704
C .01096
S .235153 charge
END
USE solution 1
EQUILIBRIUM_PHASES 1
Dolomite 0.0 1.6
Calcite 0.0 0.1
CO2(g) -1.5 100.
SAVE solution 1
END
SOLUTION 2 Brine
106 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
pH 5.713
pe 4.0 O2(g) -0.7
temp 25.
units mol/kgw
Ca .4655
Mg .1609
Na 5.402
Cl 6.642 charge
C .00396
S .004725
As .01 umol/kgw
END
USE solution 2
EQUILIBRIUM_PHASES 2
Dolomite 0.0 1.6
Calcite 0.0 0.1
SAVE solution 2
END
EXCHANGE 2
-equil with solution 2
X 0.5
SURFACE 2
-equil solution 2
SurfOH 0.14 600. 30.
END
SELECTED_OUTPUT
-file ex4.dummy.sel
-reset false
-pH
USER_PUNCH
# Prints concentrations in mg/kgw to ex4.xyz.chem
-heading Ca Mg Na Cl C(4) SO4 As
10 PUNCH TOT(“Ca”)*1e3*40.08
20 PUNCH TOT(“Mg”)*1e3*24.312
30 PUNCH TOT(“Na”)*1e3*23.
40 PUNCH TOT(“Cl”)*1e3*35.45
50 PUNCH TOT(“C(4)”)*1e3*61. # as HCO3-
60 PUNCH TOT(“S(6)”)*1e3*96. # as SO4
70 PUNCH TOT(“As”)*1e6*74.296 # ug/L
END
TITLE
Central Oklahoma aquifer,
demonstration of PHAST
UNITS
-time years
-horizontal_grid meters
-vertical_grid meters
-head meters
-hydraulic_conductivity m/s
-specific_storage 1/m
-dispersivity m
-leaky_k m/sec
-leaky_thickness m
-flux m/yr
-river_bed_thickness m
-river_bed_hydraulic_conductivity m/s
-well_diameter in
-well_flow_rate L/day
GRID
-uniform x 0 90000 16
-uniform y 0 48000 9
-uniform z 0 400 5
-print_orientation XY
SOLUTE_TRANSPORT true
STEADY_FLOW true
-head_tolerance 1e-6
-flow_balance_tolerance 1e-3
MEDIA
-zone 0. 0. 0. 90000. 48000. 400.
-porosity 0.22
-long_dispersivity 2000.
-horizontal_dispersivity 50.
-vertical_dispersivity 50.
-Kx 1.5e-5
-Ky 1.5e-5
-Kz 1.5e-7
-storage 0
# Make bottom, east zone inactive
-zone 48000. 0. 0. 90000. 48000. 100.
-active 0
108 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
RIVER 2 North Fork River
-point 30000. 36000.
-width 200.
-depth 1.
-bed_thickness 1.
-bed_hydraulic_conductivity 1
-head 0 335.
-solution 0 1
-point 30000. 48000.
-point 90000. 48000.
-width 200.
-depth 1.
-bed_thickness 1.
-bed_hydraulic_conductivity 1
-head 0 280.
-solution 0 1
RIVER 3 North Canadian River
-point 60000. 30000.
-width 200.
-depth 1.
-bed_thickness 1.
-bed_hydraulic_conductivity 1
-head 0 350.
-solution 0 1
-point 90000. 20000.
-width 200.
-depth 1.
-bed_thickness 1.
-bed_hydraulic_conductivity 1
-head 0 305.
-solution 0 1
FLUX_BC
-zone 30000. 3000. 400. 90000. 45000. 400.
-flux 0 -0.055
-associated_solution 0 1
SPECIFIED_HEAD_BC
# Lake Stanley Draper
-zone 30000. 14000 300. 32000. 20000. 400.
-head 0 348.
-associated_solution 0 1
LEAKY_BC
-zone 0. 48000. 0. 29000. 48000. 400.
-hydraulic 1.5e-5
-thickness 30000.
-head 0 305.0
-associated 0 1
-zone 0 0 0 39000 0 400
-hydraulic_conductivity 1.5E-5
-thickness 20000
-head 0 320
-associated_solution 0 2
FREE_SURFACE_BC true
WELL 1 Observation well 1 in arsenic zone
12000 36000
-diameter 2 # inches
-pumping 0 1 # L/day
-elevation 90 110 # m
HEAD_IC
-zone 0. 0. 0. 90000. 48000. 400.
Both flow and reactive-transport are simulated, which is specified with SOLUTE_TRANSPORT true. The
STEADY_FLOW data block specifies that the program perform an initial flow calculation to obtain the steady-state head and
velocity fields, which will be used for all transport calculations during the simulation. Criteria for attainment of steady flow are
defined by the identifiers in the STEADY_FLOW data block. The properties of the porous media are defined in the MEDIA data
block. The longitudinal dispersivity (2,000 m) and horizontal and vertical transverse dispersivities (50 m) are set arbitrarily to be
less than the node spacing. The dispersivity specifies the amount of physical dispersion for the simulation; however, numerical
dispersion also is present in the numerical solution as discussed below. The MEDIA data block excludes nodes in the eastern part
of the lowest layer from the active grid region (-active 0), so that the flow system thins toward the eastern edge.
Boundary conditions are defined with the RIVER, FLUX_BC, SPECIFIED_HEAD_BC, LEAKY_BC, and WELL data
blocks. This example demonstrates the use of all of these data blocks; the nodes affected by these boundary conditions are shown
in figure 6.5. Three rivers are defined in the RIVER data blocks. The location of each river is defined with X, Y locations. Head,
width, depth, river-bed thickness, river-bed hydraulic conductivity, and associated solution are defined for the beginning and ending
points for each river; in this example values for intermediate points are not specified, but are calculated by interpolation along the
line segments that connect the river points. All rivers are expected to be gaining streams for this simulation, but if any water
recharges from the river to the aquifer, its composition will be the composition of solution 1 (-solution 1 is used for all river end
points). The hydraulic conductivity of the riverbed is large (-bed_hydraulic_conductivity), which will cause the head in the
aquifer to be nearly equal to the head in the river for each cell that contains a river. All heads and solution compositions for the
rivers are defined to apply from time 0 yr (year) through the end of the simulation.
A flux boundary condition (FLUX_BC data block) represents precipitation of 0.055 m/yr (meter per year) recharge over the
eastern two-thirds of the aquifer with water composition defined by solution 1. Note the sign of the flux is negative, which indicates
that the flux is in the negative Z direction. The SPECIFIED_HEAD_BC data block is used in this simulation to represent a lake.
The western part of the northern boundary face is defined to have a leaky boundary condition (LEAKY_BC data block) on the
north and south boundaries of the simulation region. These leaky boundaries allow flow out of the grid region in response to the
difference between the head at the boundary and a specified head at a given distance from the boundary. If flow into the active grid
110 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
A. FLUX AND SPECIFIED HEAD B. LEAKY BOUNDARY CONDITIONS
BOUNDARY CONDITIONS
HEAD, IN METERS
HEAD, IN METERS
C. D.
RIVERS WELL
Figure 6.5.— Example 4, locations of boundary conditions: (A) flux boundary-condition nodes are shown in orange and
specified-head boundary-condition nodes are shown in green; (B) leaky boundary-condition nodes; (C) river
boundary-condition nodes; and (D) node of cell containing the well screen (head field is cropped to show the location of the
node). All panels show color rendition of head distribution in the simulation region. View is from the northwest looking to the
southeast.
region should occur through these boundaries, the composition of the water will be given by solution 1. All heads, solution
compositions, and fluxes are defined to apply from time 0 yr through the end of the simulation.
Unconfined flow with a water-table boundary condition is simulated (FREE_SURFACE_BC true). One well is included
(WELL 1 data block) in a zone that has large arsenic concentration; the well is pumped at a small rate, which is constant from 0
yr through the end of the simulation. The well is included to demonstrate how a well could be used to monitor concentrations at a
given point in the aquifer. Component concentrations for wells are written to the file ex4.xyz.wel. More detailed information for a
node can be extracted from the ex4.h5 and ex4.xyz.chem files, but the ex4.xyz.wel file contains fewer data items and thus can be
written at a higher frequency without exceeding file-size limitations for the computer operating system.
Initial conditions for head are defined in the HEAD_IC data block. Although this initial-condition head distribution is
uniform (380 m), the initial steady-state flow calculation will calculate the head distribution to achieve steady-state flow for the
specified boundary conditions. Initial conditions for chemistry (CHEMISTRY_IC data block) include not only the composition
of the water in the active grid region, but also the initial amounts of reactive minerals, the amount and composition of the cation
exchanger, and the number of sites and composition of a reactive surface in each cell. These compositions are not defined directly
in the flow and transport file, but by index numbers that refer to definitions in the chemistry data file. In this simulation, initial
chemical conditions are uniform throughout the active grid region, but heterogeneous distributions may be defined by using
multiple zone definitions in the CHEMISTRY_IC data block.
The SOLUTION_METHOD data block is used to specify that the iterative linear-equation solver is used in this example.
The difference equations are formulated with upstream-in-space and backward-in-time weighting (as opposed to centered-in-time
and centered-in-space weighting for examples 1–3), which avoids the possibility of oscillations due to spatial and temporal
A. B.
CHLORIDE, IN CALCIUM, IN
MILLIGRAMS PER LITER MILLIGRAMS PER LITER
C. D.
pH ARSENIC, IN
MICROGRAMS PER LITER
Figure 6.6.—Example 4, distribution of: (A) chloride concentrations, (B) calcium concentrations, (C) pH, and (D) arsenic
concentrations after 100,000-year simulation of the evolution of water in the Central Oklahoma aquifer. View is from the
northwest looking to the southeast.
112 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
6.5.4. Results
Selected results at the end of the 100,000-year simulation are plotted in figure 6.6. The three-dimensional view of the active
grid region is from the northwest, which shows a part of the grid region is missing—the inactive grid region—at the eastern end
of the bottom layer. Also, much of the top layer of cells are not shown because the cells are dry. The block of nodes that is shown
for the top layer is a coarse representation of the water-table mound in the central part of the aquifer.
Figure 6.6A shows the concentration of chloride in the active grid region. After 100,000 years, the large-concentration brine
has been flushed from the eastern two-thirds of the active grid region, but concentrations of chloride exceeding1,000 mg/L remain
at the western edge of the active grid region.
Initially, the exchange sites in each active cell were in equilibrium with the brine, which caused sodium to be the dominant
cation on the exchanger. The yellow areas in the eastern two-thirds of the active grid region in figure 6.6B represent areas where
sodium has been removed from the exchanger, and calcium and magnesium are the dominant cations in solution and on the
exchanger. In the western one-third of the active grid region, brines have been mostly removed or greatly diluted, but sodium
persists as the dominant cation on the exchanger. The blue areas of figure 6.6B correspond to high pH zones in figure 6.6C. The
pH is high in these zones because of dissolution of calcite and dolomite, which is enhanced because of the exchange of calcium
and magnesium for sodium on the exchanger.
The zones of high pH correspond to large arsenic concentrations in figure 6.6D. The carbonate and exchange reactions drive
the pH to higher than 8.5 and arsenic concentrations increase to greater than 100 µg/L in the red zones. In the blue zones of figure
6.6D, the concentrations of arsenic are small, either because the exchanger has been flushed of sodium and the pH has stabilized
at about 7.0 to 7.5, or because low pH values associated with the brines still persist in the western part of the active grid region.
The transport calculations show three types of water in the aquifer, the remnants of the initial brine, sodium bicarbonate water,
and calcium and magnesium bicarbonate water, all of which are similar to the observed water types in the aquifer. Arsenic
concentrations are consistent with values observed in the aquifer. The time of evolution to calcium-magnesium dominated
exchange sites is dependent on the number of exchange sites. A larger number of exchange sites will produce lower maximum pH
values and lower maximum arsenic concentrations at the end of a 100,000-year simulation. The calculation is sensitive to the
stability constant for the surface-complexation reactions for arsenic (SURFACE_SPECIES data block in the chemistry data file),
the number of surface complexation sites (SURFACE data block in the chemistry data file), and the concentration of arsenic in
the brine; a decrease in the log K for the predominant arsenic complexation reaction, a decrease in the number of sites, or a decrease
in the arsenic concentration in the brine tends to decrease the maximum arsenic concentrations. The large arsenic concentrations
are dependent of the flow field; changes in the flow model cause the position of the peak arsenic concentrations to occur at different
times and in different locations. Finally, the peaks in arsenic concentrations are affected by the effective dispersivity (specified plus
numerical) in the calculation; smaller effective dispersivity tends to increase the maximum arsenic concentrations.
The model results, which are based largely on measured values and literature thermodynamic data, provide a satisfactory
explanation of the variation in major ion chemistry, pH, and arsenic concentrations within the Central Oklahoma aquifer. However,
the time scale for the simulation (100,000 yr) is much shorter than the length of time over which the aquifer probably evolved
(millions of years) and the initial amount of sorbed arsenic in the model is greater than the selective extractions from modern
sediments. It is the nature of modeling that even satisfactory results give rise to more detailed questions and suggest new
hypotheses about the ground-water system. One of the keys to successful modeling is to know when to stop.
116 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
R oxygen, S limiting rate of oxygen consumption due to substrate availability (mg L-1 d-1)
(ν)
r residual vector at iteration ν (appropriate units)
S concentration of substrate (mg/L)
S BLm area of the leakage boundary face of cell m (m2)
S s storage coefficient (m-1)
Surf surface complexation site
SurfA element A sorbed on a surface complexation site
T time for all processors to complete the reaction task (s)
T i total component concentration in aqueous and solid phases (mol/L) or mass fraction (-)
T̂ p time per cell for the reaction task for processor p (s/cell)
t time (s)
V max ( O ) maximum rate parameter for oxygen consumption (d-1)
V max ( S ) maximum rate parameter for substrate consumption (d-1)
v interstitial velocity vector (m/s)
v i interstitial velocity component in the i coordinate direction (m/s)
w j mass fraction of component j (-)
X concentration of aerobic biomass (mg/L)
(ν)
x solution vector at iteration ν (appropriate units)
Y O yield coefficient oxygen (L/mg)
Y S yield coefficient substrate (L/mg)
z elevation coordinate (m)
118 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
References Cited
Allison, J.D., Brown, D.S., and Novo-Gradac, K.J., 1990, MINTEQA2/PRODEFA2—A geochemical assessment model for
environmental systems—version 3.0 user’s manual: Athens, Georgia, Environmental Research Laboratory, Office of Research
and Development, U.S. Environmental Protection Agency, 106 p.
Aziz, Khalid and Settari, Antonin, 1979, Petroleum reservoir simulation: Barking, Essex, England, Applied Science, 476 p.
Ball, J.W., and Nordstrom, D.K., 1991, WATEQ4F—User’s manual with revised thermodynamic data base and test cases for
calculating speciation of major, trace and redox elements in natural waters: U.S. Geological Survey Open-File Report 90-129,
185 p.
Barrett, R., Berry, M., Chan, T.F., Demmel, J., Donato, J., Dongarra, J., Eijkhout, V., Pozo, R., Romine, C., and van der Vorst, H.,
1994, Templates for the solution of linear systems—Building blocks for iterative methods: Philadelphia, PA, Society for
Industrial and Applied Mathematics, 112 p.
Bear, Jacob, 1972, Dynamics of fluids in porous media: New York, American Elsevier, 764 p.
Behie, G.A. and Forsyth, P.A., 1984, Incomplete factorization methods for fully implicit simulation of enhanced oil recovery:
SIAM Journal of Scientific and Statistical Computation, v. 5, pp. 543-560.
Bethke, C.M., 1996, Geochemical reaction modeling, concepts and applications: New York, Oxford University Press, 397 p.
Burnett, R.D. and Frind, E.O., 1987, Simulation of contaminant transport in three dimensions, 2. Dimensionality effects: Water
Resources Research, v. 23, no. 4, pp. 695-705.
Burns, Greg, Daoud, Raja, and Vaigl, James, 1994, LAM—An open cluster environment for MPI, in J.W. Ross, ed., Proceedings
of Supercomputing Symposium ‘94: University of Toronto, pp. 379-386.
Charlton, S.R., and Parkhurst, D.L., 2002, PHREEQCI—A graphical user interface to the geochemical model PHREEQC: U.S.
Geological Survey Fact Sheet FS-031-02, 2 p.
Cheng, A.H.-D., and Morohunfola, O.K., l993, Multilayered leaky aquifer systems, 1, Pumping well solutions: Water Resources
Research, v. 29, no. 8, pp. 2787-2800.
Cohen, S.D., and Hindemarsh, A.C., 1996, CVODE, A stiff/nonstiff ODE solver in C: Computers in Physics, vol. 10, no. 2, p. 138.
Domenico, P.A., 1987, An analytical model for multidimensional transport of a decaying contaminant species: Journal of
Hydrology, v. 91, pp. 49-58.
Dongarra, J.J., Duff, I.S., Sorensen, D.C., and van der Vorst, H.A., 1991, Solving linear systems on vector and shared memory
computers: Philadelphia, Society for Industrial and Applied Mathematics, 256 p.
Dzombak, D.A., and Morel, F.M.M., 1990, Surface complexation modeling—Hydrous ferric oxide: New York, John Wiley, 393 p.
Eagleson, P.S., 1970, Dynamic hydrology: New York, McGraw Hill, 462 p.
Elman, H.C., l982, Iterative methods for large sparse nonsymmetric systems of linear equations: Yale University, New Haven,
Conn., Ph.D., 190 p.
Fletcher, C.A.J., 1991, Computational Techniques for Fluid Dynamics, vol.1, 2nd ed., New York, Springer-Verlag, 401 p.
Foster, I.T., 1995, Designing and building parallel programs: Reading, Mass., Addison-Wesley, 381 p.
Garabedian, S.P., LeBlanc, D.R., Gelhar, L.W., and Celia, M.A., 1991, Large-scale natural gradient tracer test in sand and gravel,
Cape Cod, Massachusetts, 2. Analysis of spatial moments for a nonreactive tracer: Water Resources Research, v. 27, no. 5, pp.
911-924.
Gelhar, L.W., Welty, C., and Rehfeldt, K.R., 1992, A critical review of data on field-scale dispersion in aquifers: Water Resources
Research, v. 28, no. 7, pp. 1955-1974.
Gropp, W.D., and Lusk, Ewing, 1996, User’s guide for MPICH, a portable implementation of MPI: Argonne, Ill.,Mathematics and
Computer Science Division, Argonne National Laboratory, ANL-96/6, 70 p.
Gropp, W., Lusk, E., and Skjellum, A., 1995, Using MPI—Portable parallel programming with the message passing interface:
Cambridge, Mass., MIT Press, 307 p.
Hsieh, P.A., and Winston, R.B., 2002, User’s guide to Model Viewer, a program for three-dimensional visualization of
ground-water model results: U.S. Geological Survey Open File Report 02-106, 18 p.
Johnson, J.W., Oelkers, E.H., and Helgeson, H.C., 1991, SUPCRT92—A software package for calculating the standard molal
thermodynamic properties of minerals, gases, aqueous species, and reactions from 1 to 5000 bars and 0o to 1000o C: Livermore,
Calif., Earth Sciences Department, Lawrence Livermore Laboratory, 168 p.
Kindred, J.S., and Celia, M.A., 1989, Contaminant transport and biodegradation 2. Conceptual model and test simulations: Water
Resources Research, v. 25, no. 6, pp. 1149-1159.
Kipp, K.L., 1987, HST3D—A computer code for simulation of heat and solute transport in three-dimensional ground-water flow
systems: U.S. Geological Survey Water-Resources Investigations Report 86-4095, 517 p.
120 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
Wexler, E.J., 1992, Analytical solutions for one-, two-, and three-dimensional solute transport in ground-water systems with
uniform flow: Techniques of Water-Resources Investigations of the U.S. Geological Survey, Book 3, Chapter B7, 190 p.
Wolery, T.J., 1992a, EQ3/EQ6, a software package for geochemical modeling of aqueous systems, package overview and
installation guide (version 7.0): Lawrence Livermore National Laboratory Report UCRL-MA-110662, part 1, 66 p.
Wolery, T.J., 1992b, EQ3NR, a computer program for geochemical aqueous speciation-solubility calculations—Theoretical
manual, user’s guide, and related documentation (version 7.0): Lawrence Livermore National Laboratory Report
UCRL-MA-110662, part 3, 246 p.
Yeh, G.T., and Tripathi, V.S., 1989, A critical evaluation of recent developments in hydrogeochemical transport models of reactive
multichemical components: Water Resources Research, v. 25, no. 1, pp. 93-108.
Zhu, Chen, and Anderson, Greg, 2002, Environmental applications of geochemical modeling: Cambridge, UK, Cambridge
University Press, 284 p.
The HDF output file (prefix.h5) is in compressed, binary format (http://hdf.ncsa.uiuc.edu), which cannot be read by text
editors. The contents of the HDF output file can be extracted with the HDF utility h5dump and written to an ASCII text file, but the
file format produced by the utility is not convenient for use with other programs. PHASTHDF is a graphical, interactive utility
program included with the PHAST distribution that is used to extract results from the HDF output file. PHASTHDF is written in the
Java language, which can be run on any type of computer that has a Java Runtime Environment. PHASTHDF generates an ASCII
text file, referred to as the export file, which is in the same format as prefix.xyz files. The format of an export file is suitable for
importing into spreadsheets, plotting programs, statistics programs, text editors, or for manipulation by scripting languages such
as PERL or AWK. Export files generated by PHASTHDF contain a set of lines—one line for each active node—for each time step
that is selected; time steps for inclusion in the export file are selected from interactive screens of the PHASTHDF program. The
lines of the export file include columns for X, Y, and Z coordinates of a node, the time, a cell-saturation identifier that indicates
whether the cell for the node is dry (0) or not (1), followed by columns for the scalar and velocity data that are selected from the
appropriate screens of the PHASTHDF program.
Figure B.1.—PHASTHDF input screen for selection of HDF output file from which data are to be
extracted.
Running PHASTHDF consists of three steps: (1) selecting the HDF output file from which to extract data (fig. B.1), (2)
selecting the X, Y, and Z coordinates of node locations, the time steps, the scalars, and vectors to be extracted (fig. B.2), and (3)
specifying the name of the export file (fig. B.3).
Figure B.2 shows the second screen for PHASTHDF, which allows selection of the nodes, time steps, scalars, and vectors that
will be extracted from the prefix.h5 file. This screen has five tabs that change the content of the screen. By default, all data
contained in the HDF file—all scalars and vectors, all nodes, and all time steps—are selected for extraction. Extracting the
complete set of data may generate a large text file, which could exceed the file-size limitation of the computer operating system.
Normally, the screens corresponding to the five tabs are used to specify a subset of data that can be exported to a text file of
manageable size.
A hyperslab is a set of nodes that is selected by specifying individual X, Y, and Z node locations. The screen on the left of
figure B.2 corresponds to the “X-Coor” tab. In the figure, a subset of X coordinates has been selected by using the “Hyperslab
selection” check boxes. Beginning with the third coordinate (Start=2 indicates the offset from the first coordinate), every other
node (Stride=2) for a total of seven nodes (Count=7) has been unselected. Nodes with these X coordinates will not appear in the
export file. Selecting the Y-Coor or Z-Coor tab produces a screen for the respective coordinate that is identical in function to the
screen for the X-Coor tab. The HDF output file contains a series of time planes; the “Times” tab allows selection of a subset of time
planes to be extracted and written to the export file.
Using PHASTHDF to Extract Data from the HDF Output File 125
Figure B.2.—PHASTHDF input screens associated with the first and fourth of five tabs that allow selection of model nodes and
chemical data to be extracted from the HDF output file.
The screen on the right of figure B.2 corresponds to the “Scalars” tab. Selecting this tab produces a list of all of the scalar data
that have been stored in the HDF file. It is possible to include or exclude each item of the list individually. For every item that is
checked, a column of data will be written to the export file. In this example, all of the data except fluid head will be written to the
export file. Similarly, the “Vector” tab allows selection of any combination of the X, Y, and Z components of the interstitial
velocities at nodes to be written to the export file.
The final screen of PHASTHDF is used to specify the name for the export file (fig. B.3). When the “Finish” button is clicked,
the selected data will be written to the export file.
Figure B.3.—PHASTHDF input screen used to specify the file name for the export file.
126 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
Appendix C. Parallel-Processing Version of PHAST
The numerical simulation of ground-water flow and solute transport with geochemical reactions is computationally intensive
and often requires the use of large vector or massively parallel computers. Three-dimensional simulation of reactive transport with
dozens of components and tens of thousands of grid nodes can take days of computing time on desktop workstations or personal
computers (PCs). Speeding up multi-component reactive-transport simulation in a workstation or PC environment makes
reactive-transport simulations accessible to a much wider group of ground-water modelers.
One class of parallel computer that is potentially available to ground-water modelers is a cluster of workstations or PCs on a
private, high-speed, local area network (LAN). If the Linux operating system is used on the cluster, the cluster is known as a
Beowulf cluster. Clusters of computers running Unix, Macintosh, and Windows operating systems also are possible. Another class
of parallel computer that is readily available is a single workstation, server, or PC containing multiple (2–8) processors. A parallel
version of PHAST has been written that can be run on all of these classes of parallel systems.
F
I - Initialization and
Load Balancing Task
T F - Flow Task
T - Transport Task
N Ri - Reaction Task i
R1 R2 R3 .... RN S - Summary Calculation and
Load Balancing Task
N - Next Time Step Task
E - Completion Task
S
P
n p T̂ p = T ; for p = 1, ..., P ; subject to the constraint that ∑ np = N, (C.1)
p=1
where n p is the number of cells for process p ; T̂ p is the average time per cell for a reaction task for process p (the average time
to complete one cell calculation during the last chemical calculation); P is the number of processes; and N is the total number of
cells. Recognizing that
T̂ 1
n p = n 1 ------, for all p = 1, ..., P , (C.2)
T̂ p
P
and substituting into ∑ np = N , the following relation is obtained:
p=1
128 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
N
n 1 = ------------------
P
, (C.3)
T̂ p
∑ ------
T̂ 1
p=1
which determines the number of cells to assign to process 1. The number of cells to assign to all other processes can be
determined by equation C.2, with some accommodation to account for the fact that each n p must be an integer. An optimal load
balance will satisfy equations C.1, and reduce the idle time for each of the processors to zero during the reaction-task calculation.
A damping factor is used to eliminate flutter in rebalancing; only half of the number of cells to be remapped are actually
transferred to a different process at any rebalancing step. The time to rebalance the load using this algorithm, including
communication time to move cell information, is minimal, typically consuming much less than 1 percent of the total computation
time.
The parallel algorithm for PHAST is a coarse-grain parallelization in that the ratio of computation time to communication time
is large. Overall efficiency, which includes the communication time of distributing data to and gathering data from each process,
frequently is in the range of 80 to 95 percent. This efficiency implies that a network of 10 identical single-processor computers can
run the same simulation about 8 to 9 times faster than a single computer with one processor.
The results of a parallel simulation should be nearly identical to the results of the same simulation run on a single processor.
However, slight differences in the results between the parallel and single-processor versions are caused by rounding and truncation
of numbers in the message passing between the parallel processes and by differences in implementation of floating-point
arithmetic among the processors of a cluster. The chemistry data, flow and transport, and thermodynamic database files used to
run the single-processor version are the same as those used to run the parallel version, and the same output files are produced. The
only differences in the content of the output files are some additional data related to the efficiency of the parallel processing that
are written to the screen and to the log file.
cd /z/wulf1/home/geek/phast/examples/ex4
phastinput ex4
lamboot hosts
mpirun N -wd /z/wulf1/home/geek/phast/examples/ex4 phast-lam
wipe hosts
The phastinput command runs PHASTINPUT, which reads the data input files and generates an intermediate file named
Phast.tmp, the same as for single-processor execution. The lamboot command initiates the LAM daemon on each computer listed
cd c:\phast\examples\ex4
phastinput ex4
mpirun -np 10 -dir \\hostname\mpich_share \\hostname\mpich_share\phast-mpich
The phastinput command runs PHASTINPUT, which reads the data input files and generates an intermediate file named
Phast.tmp, the same as for single-processor execution. The mpirun command initiates ten instances of the program phast-mpich
distributed among the computers for which MPICH has been configured (-np 10). Each process (program) reads from and writes to
the shared directory. Many temporary files are written into the shared directory for each process, but will be deleted if the job
completes successfully. The process of running PHAST with MPICH may be simplified by writing batch scripts, adding directories
to the path environmental variable, and by defining additional environmental variables, but use of these features is not discussed
in this documentation.
130 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
Appendix D. Theory and Numerical Implementation
PHAST is a simulator of multi-component, reactive transport in three dimensions derived from the flow and solute-transport
model HST3D and the geochemical-reaction model PHREEQC. Multi-component solute transport and chemical reactions are
simultaneous processes. However, in PHAST, the solute-transport and chemical-reaction calculations are separated by operator
splitting and performed by a sequential solution approach without iteration.
The governing equations for a reactive solute-transport simulator are a set of partial differential equations describing
ground-water flow and solute transport for each aqueous component, a set of non-linear algebraic equations describing equilibrium
chemical reactions, and a set of ordinary differential equations describing rates of kinetic chemical reactions. Multiple aqueous
chemical constituents are present in a natural or contaminated ground-water flow system. A subset of the aqueous chemical
constituents is chosen to be components. The number of components required is the minimum number of species from the total
set necessary to describe the chemical composition of the system (Reed, 1982). Components as defined for this simulator are not
the same as thermodynamic components used in connection with phase rule calculations (see Zhu and Anderson, 2002, pp. 51-55).
A set of aqueous species is chosen as master species (one for each component), such that all other species (aqueous and solid) can
be formed by chemical reactions from these master species. The total aqueous concentrations of the chemical components are the
dependent variables of the transport equations, and the activities of the master species and the number of moles of solid reactants
are the dependent variables for the chemical equations.
This appendix covers the essential equations, features, and methods used in the PHAST simulator including: the assumptions
underlying the flow and transport equations and their discretization; the equilibrium and kinetic reaction equations; the property
functions and transport coefficients; the well-source conditions; the boundary and initial conditions; the operator-splitting
approach and sequential solution of flow, transport, and chemical equations; accuracy of solutions to the coupled equations; the
global balance calculation; and the nodal velocity calculation. The ground-water flow and component-transport differential
equations and boundary conditions are summarized, and those that are implemented differently than in HST3D are described in
detail. No additions or modifications to the numerical methods of PHREEQC were necessary for the chemical-reaction calculations
of PHAST; minor modifications were made to the output functions of PHREEQC. The PHREEQC manual (Parkhurst and Appelo,
1999) covers the numerical implementation details for the chemical-reaction calculations, and only a brief summary will be
included here.
∂h
Ss = ∇•K ∇h + q , (D.1)
∂t
p
with h = ------ + z , (D.2)
ρg
where S s is the storage coefficient (per meter, m-1); h is the potentiometric head (m); t is time (s); ∇ is the gradient operator
(m-1) for scalars and the divergence operator for vectors; K is the hydraulic conductivity tensor (m/s); q is the source flow rate
intensity (m3s-1m-3); p is the pressure (Pa); ρ is the water density (kg/m3); g is the gravitational acceleration (m/s2); and z is
the elevation coordinate (m).
Darcy’s law relates the specific discharge field to the gradient of the potentiometric head. Thus, the interstitial velocity is
K
v = – ---- ∇h , (D.3)
ε
where v is the interstitial velocity (m/s) and ε is the saturated porosity (-).
The equation for conservation of a single solute aqueous component is based on the following assumptions:
• Pressure diffusion is neglected.
• Solute transport by local, interstitial, velocity-field fluctuations and mixing at pore junctions is described by a
hydrodynamic dispersion-coefficient tensor.
• Forced diffusion by gravitational, electrical, and other fields is neglected.
• No pure diffusive solute sources occur in the fluid or porous matrix phases.
The general form of the reactive solute-transport equation for component j in the aqueous phase with both equilibrium and
kinetic reactions (modified from Bear, 1972; Kirkner and Reeves, 1988) is as follows:
NE NK
∂ E ∂
∑ ∑ υ j, k ερRk + qερĉ j ;
K
( ερc j ) = ∇•εD ∇ρc j – ∇•εvρc j – υ j, e ( ερc e ) + j = 1, …, N c , (D.4)
∂t ∂t
e=1 k=1
where c j is the total aqueous concentration of component j (mol/kgw); D is the dispersion-coefficient tensor (m2/s); N E is the
E
number of heterogeneous equilibrium reactions; υ j, e is the stoichiometric coefficient of component j in heterogeneous
K
equilibrium reaction e (-); c e is the concentration of solid reactant e (mol/kgw); N K is the number of kinetic reactions; υ j, k is
the stoichiometric coefficient of component j in kinetic reaction k (-); R k is the rate of kinetic reaction k [mol kgw-1 s-1 (moles
per kilogram water per second)]; ĉ j is the total aqueous concentration of component j in the source water (mol/kgw); and N c is
132 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
the number of chemical components in the system. Equation D.4 is written for each aqueous component. Note that the reaction
rate, R k , may be a function of aqueous species of components other than j and the R k and c e may appear in multiple transport
equations. Thus, the reaction rate and the rate of solid species formation provide terms that couple the set of reactive-transport
differential equations D.4.
The classical method of finite differences (Patankar, 1980) is used to discretize the partial-differential equations and boundary
conditions in space and time. Several options are available for the differencing, which are discussed in the following sections. The
selection of components for PHAST also is discussed.
D.1.1. Components
For PHAST, the term component is used to refer to an entity that has an aqueous mole-balance equation in a PHREEQC
calculation. PHREEQC has an aqueous mole-balance equation for each element that is present in the system, including hydrogen
and oxygen, and a mole-balance equation that conserves charge. Therefore hydrogen, oxygen, and charge imbalance are
transported, plus any additional elements. It is possible to extend the definition of an “element” to include an organic compound,
for example atrazine, or a single redox state of an element, for example ferrous iron, by appropriate definitions in
SOLUTION_MASTER_SPECIES and SOLUTION_SPECIES data blocks. It also is possible to formulate mass balance on
individual isotopes through the use of the isotope capabilities of PHREEQC, for example carbon-13. If these definitions are made,
then atrazine, ferrous iron, or carbon-13 could be components in a PHAST simulation.
A component may be present in the form of many different aqueous species; however, the transport equation is applied to the
total aqueous concentration (sum of moles in all aqueous species) for each component. As in HST3D (Kipp, 1987; 1997)
concentration units for the transport equation in PHAST are mass fraction. Mass fraction is calculated for each component as
Mj 0.001n j f j
w j = ---------------- = --------------------------------- , where w j is mass fraction of component j (-), M j is the total mass of component j in the
1 + Mj 1 + 0.001n j f j
aqueous phase (kg), n j is the total number of moles of component j in the aqueous phase (mol), and f j is the gram formula weight
of component j (g/mol). Note that the masses of other components do not affect the mass fraction of a given component and that
the mass of water is assumed to be exactly 1 kg. This formulation is compatible with the single-component transport formulation
inherited from the program HST3D (Kipp, 1987; 1997) and is necessary to conserve mass between the transport calculations and
the reaction calculations.
The components hydrogen and oxygen are handled in a special way. The two quantities that are transported are the “excess”
hydrogen and oxygen relative to 1 kg of water. In other words, the mass of excess hydrogen is calculated by taking the total mass
of hydrogen in solution and subtracting the mass of hydrogen in 1 kg of water, similarly for oxygen. PHREEQC allows the mass of
water to vary, so the total mass of water in a solution may not be identically 1.0 kg, but variable water mass is not consistent with
the constant density assumption for the flow and transport equations. To avoid mass-balance errors, the transport calculations use
the mass of each component in solution relative to an assumed 1 kg of water. However, the chemical calculations use the total mass
of water, including water that is produced or consumed by reactions. The chemical calculations reconstitute the total hydrogen and
oxygen, and implicitly the total mass of water, by adding the excess hydrogen and oxygen from transport to 1.0 kg of water.
The grid region can be partitioned into elements. An element is the volume of a rectangular prism defined by eight nodes that
are adjacent in the grid, with one node at each corner of the element (fig. 4.1). The set of elements fills the entire grid region. An
element is referred to as active if all of its nodes are in the active grid region, either internal or on the boundary. An element is
referred to as inactive if any of its nodes are in the inactive grid region.
The active grid region also can be partitioned into cells (fig. 4.2). A cell is the volume associated with an active node. For
interior nodes, a cell is a rectangular prism with cell boundaries that are planes bisecting the distance between adjacent node points.
Interior cells are referred to as full cells and contain portions of eight elements that meet at the cell node. Cells associated with
boundary nodes are referred to as fractional cells. From one to seven active elements may meet at a boundary node; thus, a
fractional boundary cell may consist of various fractions of the full cell (1/8 to 7/8). Parts of one to three boundary faces of a
fractional cell do not lie between adjacent node points, but, rather, are boundary planes of the active grid region that intersect the
cell node (fig. 4.2). Each of the grid region boundary faces of a given fractional cell is perpendicular to a different coordinate axis.
Cells are not defined for inactive nodes.
The type of grid that is described here and is used by PHAST is called a point-distributed grid. A common alternative method
for constructing the grid is to specify the locations of the planes that form the cell boundaries. Their intersections form the cells,
and the node points are located in the center of each cell. This type of grid is called a cell-centered or block-centered grid.
An element has uniform porous-media properties: porosity, specific storage coefficient, hydraulic conductivity, and
dispersivity. However, a cell contains portions of one to eight active elements (fig. 4.4); thus it can contain as many as eight different
values for a porous-media property. The finite-difference equations are formed by integrating the partial differential equations over
each cell volume, as explained in Kipp (1987). In this integration, the variations in porous-media properties within a cell are
arithmetically averaged in proportion to their active element volume in the cell (fig. 4.4). Fluid and solute-dispersive conductances
are calculated from porous-media properties by averaging the properties over a given cell face in proportion to the area of the cell
face that is within each active element. A cell face is within parts of one to four active elements (fig. 4.4); thus a conductance is
calculated from property values of as many as four different elements.
134 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
Variable weighting for spatial discretization of the advective term in the transport equations is available, ranging from
centered-in-space differencing to upstream-in-space differencing (SOLUTION_METHOD data block, -space_differencing).
Centered-in-space differencing has the potential for causing oscillations in the solutions. This can be particularly problematic for
the chemical-reaction calculations if negative concentrations are computed. In PHAST, negative concentrations are set to zero and
ignored in the chemical-reaction calculation, but this leads to mass-balance errors. Analysis of one-dimensional flow and transport
with constant coefficients (Fletcher, 1991, pp. 286-293) shows that numerical oscillation does not occur if
∆x
------ ≤ 2 or Pe ≤ 2 , (D.5)
α
∆x ∆x
where ∆x is the cell size (m); α is the dispersivity (m); Pe is the cell Peclet number ( Pe = v x --------- = ------ )(-); v x is the
D xx α
component of velocity (m/s) in the X direction; and D xx is the dispersion-coefficient tensor element (m2/s) appropriate for
one-dimensional flow and transport in the X direction.
Upstream-in-space differencing introduces artificial numerical dispersion into the transport solutions. Again, analysis of
one-dimensional flow and transport with constant coefficients (Fletcher, 1991, pp. 302-303) yields a numerical dispersion
coefficient and a numerical dispersivity given by
v x ∆x
D ns = ------------ and (D.6)
2
∆x
α ns = ------ , (D.7)
2
where D ns is the numerical dispersion coefficient from spatial discretization (m2/s) and α ns is the numerical dispersivity from
spatial discretization (m). These terms result from the truncation error of the finite-difference approximation.
D xx ∆t αv x ∆t
--------------- = --------------- ≤ 1 or Cr ≤ Pe , (D.8)
2 2
∆x ∆x
v x ∆t
where ∆t is the time step (s) and Cr is the cell Courant number ( Cr = ----------- ) (-). This criterion is not as stringent as that for
∆x
spatial oscillation, and in some cases the method is stable even if the criterion is exceeded.
Backward-in-time differencing also introduces artificial numerical dispersion into the transport solutions. Again, analysis of
one-dimensional flow and transport with constant coefficients yields the numerical dispersion coefficient and numerical
dispersivity from temporal discretization given by
v x ∆t
α nt = ----------- , (D.10)
2
where D nt is the numerical dispersion coefficient from temporal discretization (m2/s) and α nt is the numerical dispersivity
from temporal discretization (m). These terms result from the truncation error of the finite-difference approximation.
The total numerical dispersivity is the sum of the spatial (eqn. D.7) and temporal (eqn. D.10) numerical dispersivities. For
numerical accuracy in transport simulations, the total numerical dispersivity should be much less than the physical dispersivity.
Thus, for upstream-in-space and backward-in-time differencing,
∆x v x ∆t
------ + ----------- « α or in dimensionless form: (D.11)
2 2
Pe ( 1 + Cr ) « 2 . (D.12)
If upstream-in-space and centered-in-time differencing are used, then the temporal dispersivity is zero and accuracy depends on
the relation:
∆x
------ « α . (D.13)
2
If centered-in-space and backward-in-time differencing are used, then the spatial dispersivity is zero and accuracy depends on the
relation:
v x ∆t
----------- « α . (D.14)
2
Although these equations are from a simplified, restricted one-dimensional analysis, they provide guidance for discretization of
more complex three-dimensional simulations of transport.
136 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
D.2. Chemical-Reaction Equations
Both equilibrium and kinetic reactions are simulated in PHAST. Homogeneous equilibrium in the aqueous phase is described
with an ion-association aqueous model that includes mass-action equations for ion pairs and complexes, and activity coefficients
based on Debye-Hückel theory. Heterogeneous equilibrium reactions are based on equality of activities among phases. For kinetic
chemical reactions, the rates of reactions are user-defined functions of solution composition. The equations describing equilibrium
reactions and the formulation of kinetic chemical reactions are given in detail in Parkhurst and Appelo (1999).
The chemical equations form a set of non-linear algebraic equations for equilibrium reactions and ordinary differential
equations in time for kinetic reactions. The differential and algebraic equations are coupled through the total aqueous concentration
of components. However, the chemical reactions in each cell of the simulation region are solved independently. For a given cell,
no information about chemical compositions in other cells is used in the simulation of equilibrium and kinetic reactions.
where K is the equilibrium constant, a is activity, and υ r and υ p are stoichiometric coefficients of the reactants and products in
the chemical equation. Equilibrium constants are functions of temperature. Activities of aqueous species are related to molalities
through activity coefficients:
a = γm , (D.16)
where γ is the activity coefficient and m represents molality. The activity coefficients are functions of species charge and ionic
strength, and are derived from extensions of the Debye-Hückel activity-coefficient theory. Activities of pure minerals are
assumed to be fixed at 1.0. Activities of gas components are equal to their partial pressures. Activities of solid-solution
components are equal to their mole fraction or optionally a function of mole fraction. Activities of ion-exchange species are equal
to their equivalent fractions, possibly times an activity coefficient that is a function of ionic strength. Activities of surface
complexes are equal to mole fraction of the site type (Parkhurst and Appelo, 1999).
vi v j
D ij = ( α L – α T ) --------- + α T v δ ij + D M δ ij , (D.17)
v
where D ij is the dispersion-coefficient tensor element (m2/s); v i is the interstitial velocity in the i coordinate direction (m/s); v
is the magnitude of the interstitial velocity vector (m/s); α L is the longitudinal dispersivity (m); α T is the transverse dispersivity
(m); D M is the effective molecular diffusion coefficient (m2/s); and δ ij is the Kronecker delta function, δ ij = 1, for i = j and
δ ij = 0, for i ≠ j . The dispersion-coefficient tensor is a nine-element tensor that is symmetric. This tensor links the solute
dispersive fluxes to the concentration gradients. The off-diagonal elements give rise to cross-dispersive fluxes, which are
dispersive fluxes in one coordinate direction driven by concentration gradients in another coordinate direction.
Several field studies have indicated that transverse dispersion in the vertical direction is much smaller than transverse
dispersion in the horizontal direction (Robson, 1974, 1978; Garabedian and others, 1991; and Gelhar and others, 1992) for the case
of a stratified porous medium with flow parallel to the stratification. Burnett and Frind (1987) formulated an ad hoc anisotropic
dispersion-coefficient tensor for this case involving horizontal and vertical transverse dispersivities. The modified
dispersion-coefficient tensor is
2 2 2
vx vy vz
D xx = α L ----- + α T ----- + α T ----- + D M , (D.18)
v H v V v
2 2 2
vy vx vz
D yy = α L ----- + α T ----- + α T ----- + D M , (D.19)
v H v V v
2 2 2
vz vx vy
D zz = α L ----- + α T ----- + α T ----- + D M , (D.20)
v V v V v
vx v y
D xy = D yx = ( α L – α T ) ----------- , (D.21)
H v
138 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
vx vz
D xz = D zx = ( α L – α T ) ---------- , and (D.22)
V v
v y vz
D yz = D zy = ( α L – α T ) ---------- , (D.23)
V v
where α T is the horizontal transverse dispersivity (m) and α T is the vertical transverse dispersivity (m). Here the terms
H V
horizontal and vertical refer to the axes directions of the Cartesian coordinate system. This formulation is used in the PHAST
simulator and it reduces to the isotropic form when α T = α T .
H V
Cross-derivative dispersive-flux terms may be included or excluded in a PHAST simulation. The more rigorous treatment of
including the cross-derivative terms involves an explicit calculation (SOLUTION_METHOD data block, -cross_dispersion
true). Explicit calculation of the cross-dispersive flux terms is lagged one iteration in the solution cycle of the solute-transport
equations; this lagging preserves the seven-point stencil in the finite-difference equations, which enables the use of the same linear
equation solvers for the transport equations as are used for the flow equation. When cross-derivative dispersive flux terms are
included in the solution method, two iterations of transport equation solution are done for each time step to compensate for the
lagged terms. The cross-derivative dispersive flux terms are recalculated for each iteration on the basis of the concentration
conditions existing at the end of the previous iteration. These lagged terms are incorporated into the right-hand-side of the
finite-difference transport equations. This treatment requires storage of the nine finite-difference dispersion-coefficient terms for
each cell.
In the solution of the transport equations, strong diagonal flows through a cell can cause the cross-dispersive solute fluxes to
produce negative concentrations. Therefore, an alternative treatment of the cross-derivative dispersion terms consists of neglecting
the cross-derivative dispersion fluxes entirely. No iterations of the component transport solution are required. For robustness of the
PHAST simulator, the default option is to neglect the cross-derivative dispersive flux terms.
For PHAST, it is assumed that dispersion of each aqueous component can be described by the same set of dispersivity values.
This yields the same set of dispersion coefficients for each chemical component. No other transport coefficients are present
because, in the operator-split form of the component transport equations, no source terms from reactions appear. Each
component-transport equation contains only advective, dispersive, and storage terms.
140 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
SPECIFIED FLUX SPECIFIED VALUE
LEAKAGE
NO FLUX (DEFAULT)
EXPLANATION
CELL BOUNDARY
ELEMENT BOUNDARY
NODE
Figure D.2.—Types of boundary-condition cells in a two-dimensional grid.
incorporated into the difference equations by replacing the flow equation for those nodes by equations defining the specified heads.
Therefore, it is not possible to define flux, leaky, or river boundary conditions for any face of a cell that is a specified-head cell.
The associated solution-composition option (-associated_solution) for a specified-head boundary defines the composition of
water flowing into the boundary cells. The solution composition of a specified-head boundary cell with an associated solution
composition will vary during the simulation period depending on the flux of water through the boundary relative to the composition
currently in the cell and the flux and composition of water from other faces of the cell.
The head and associated solution composition for a specified-head boundary condition can be a function of location and time.
Zones are used to define the spatial distribution of the specified-head boundaries. The head and associated solution composition
may vary during the simulation; any specified change in value causes the beginning of a new simulation period. For compatibility
among well-source conditions and boundary conditions, see section D.5.7. Boundary-Condition Compatibility.
KL
q L = ------- ( h e – h b ) , (D.24)
bL
where q L is the volumetric flux at a leakage boundary (m3 m-2 s-1); K L is the hydraulic conductivity of the semi-confining layer
(m/s); b L is the thickness of the semi-confining layer (m); h e is the potentiometric head at the external boundary of the
semi-confining layer (m); and h b is the potentiometric head at the boundary of the simulation region (m). The associated solute
component fluxes are assumed to be purely advective. They are obtained from the total aqueous concentrations of the associated
solution composition if water flux is into the simulation region, or from the ambient total aqueous concentrations at the boundary
location if the water flux is out of the simulation region. The associated solution compositions are defined by position along the
leakage boundary and may vary during the simulation; any specified change in solution composition (solution index number)
causes the beginning of a new simulation period. The head at the external boundary may also be specified to vary during the
simulation.
Leakage boundary conditions are transformed into source terms in the difference equations on a cell-by-cell basis. The
discretized equation for boundary cell, m, is
K Lm (n) K Lm
Q Lm = ----------- ( h em – h m )S BLm – ----------- S BLm δh m , (D.25)
b Lm b Lm
where Q Lm is the volumetric flow rate at a leakage boundary for cell m (m3/s); K Lm is the hydraulic conductivity of the
semi-confining layer for cell m (m/s); b Lm is the thickness of the semi-confining layer for cell m (m); h em is the potentiometric
142 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
head at the external boundary of the semi-confining layer for cell m (m); h m is the potentiometric head at the boundary of the
simulation region for cell m (m); (n) is the index of the discrete time value when the variable is evaluated; S BLm is the area of the
leakage boundary face of cell m (m2); and δh m is the change in potentiometric head at the boundary of the simulation region
over the time step for cell m (m). The leakage flow rate given by equation D.25 has an explicit term for the right-hand side of the
discretized flow equations and an implicit factor for the left-hand side. For compatibility among well-source conditions and
boundary conditions, see section D.5.7. Boundary-Condition Compatibility.
LA N D SURFACE
WATER TABLE
hR
z RIVER
zeR
RIVER BED b
zB
w
AQUIFER
Figure D.3.—Schematic section showing geometry for a river-leakage boundary, where b is thickness of
riverbed, h r is elevation of river surface, w is width of river, z eR is elevation of the top of the riverbed,
and z B is elevation of the bottom of the riverbed.
A. 2 B. 2
3 3
1 1
4 4
C. 2 D. 2
3 3
1
1
4 4
E. F.
2
3
Figure D.4.—Steps by which river subpolygons and river subpolygon properties are determined. (A) Trapezoidal areas are
defined by the river points (numbered blue dots) and the river widths at each river point. (B) Gaps are filled and overlaps
are eliminated. (C) River polygons are created for each river segment. (D) River polygons are intersected with the grid to
form river subpolygons. (E) River subpolygons are ready for final processing, color indicates association with original
data. (F) Properties are assigned by finding the point on the river nearest the centroid (black dot) of the river subpolygon
and interpolating from values at river points.
144 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
all river subpolygons in a vertical column are aggregated, and the aggregated flow is injected into or removed from the cell that
contains the water table.
Conceptually, all river leakage into and out of the aquifer occurs through the river bottom; no leakage through the sides of the
riverbed is considered. Rivers with extensive vertical sides that contact multiple layers of cells cannot be represented adequately
because the river is connected through its riverbed to only one cell in each vertical column. The configuration of a deep riverbed
with lateral flow into one or more layers of aquifer cells could be approximated by a set of specified-head cells. However, a fine
areal discretization would be required because the river would have an effective width of an entire cell.
When a single river subpolygon recharges an aquifer cell, the incoming water has the chemical composition of the associated
solution composition for that subpolygon. When water discharges from the aquifer to the river, the discharging water has the
ambient chemical composition of the water-table cell. For the case of multiple branches of rivers traversing a given column of cells,
with net recharge into the aquifer, the total aqueous concentrations of the recharge are determined as the flow-rate-weighted
averages of the associated solution concentrations of all the river subpolygons recharging to that column of cells. It is possible that
some river subpolygons receive discharge from the aquifer; however, the recharge concentrations are calculated by using only
associated solution concentrations from river subpolygons that recharge the aquifer.
Hydrostatic extrapolation of the potentiometric head is used exclusively to locate the free surface (water table) under a river.
This extrapolation prevents a non-convergent cycle of free-surface adjustment that can occur if other types of extrapolation or
interpolation are used. Problems will occur if the elevation of the free surface drops to a cell that is below a cell with a partial or
full saturation. This implies perched water and a zone of unsaturated flow, which PHAST cannot simulate.
The head and associated solution composition for each river point may vary during the simulation; any specified change in
value causes the beginning of a new simulation period. At each new simulation period, head and solution composition are
re-interpolated for each river subpolygon. A river-leakage boundary condition and a specified-flux boundary can be applied to the
same upper-boundary face of a given cell because they are different types of boundary conditions. This feature is needed to
represent river leakage over part of a cell area and precipitation infiltration over the remaining area. Numerically, the precipitation
flux is distributed over the entire area of the cell boundary including the portion that is covered by the riverbed. This is not a serious
limitation for riverbeds covering only a small fraction of the upper surface of a cell. A river-leakage boundary condition and a leaky
boundary condition cannot be applied to the Z face of the same cell. For compatibility among well-source conditions and boundary
conditions, see section D.5.7. Boundary-Condition Compatibility.
146 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
boundary cell could have as many as three different types of boundary conditions, each applied to a different cell face. Only rivers
can have multiple instances of the boundary condition that apply to the same face of a boundary cell.
[Yes, one boundary condition of each kind is allowed for a cell; No, this combination of boundary conditions cannot be defined for a cell; One, only one boundary
condition of this type can be defined for a cell; Multiple, multiple river segments can affect a cell; --, information can be found in the upper triangle of the table]
Specified
Specified Specified River Free
Boundary Condition solution Leakage Well
head flux leakage surface
composition
Well -- -- -- -- -- -- One
Table D.1 shows which types of boundary conditions are compatible for application to a cell. Specified-head boundary
conditions are applied to entire cells and, thus, preclude application of any specified-flux, leakage, river-leakage, or well-source
condition. Specified solution compositions can only be applied in conjunction with specified-head boundary conditions.
Free-surface boundary conditions and well-source conditions also are applied to entire cells, while specified-flux, leakage, and
river-leakage boundary conditions are applied to boundary faces of cells. However, only one boundary condition of each type may
be applied to a given cell, with the exception of the river-leakage condition, which my have multiple river segments traversing a
cell.
River leakage is compatible only with an unconfined (free surface) flow region and is applied only through a Z-face.
river-leakage and specified-flux boundary conditions can be used together on a Z-face with a free-surface boundary condition to
represent recharge at the land surface. River leakage may not share a boundary face with a leakage boundary condition. If both
river-leakage and leakage boundary conditions are defined for the Z-face of a cell, the river-leakage boundary condition will be
ignored. Similarly, if both river-leakage and specified-head boundary conditions are applied to a cell, the river-leakage boundary
condition will be ignored.
Leakage and specified-flux boundary conditions must be applied to separate boundary faces. A leakage boundary condition
cannot be applied to a Z-face for a cell with a free surface. Well-source conditions can be applied to any cell except those with
specified-head boundary conditions.
148 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
the interstitial velocity field, which goes into the component transport equations through the advective transport terms and the
dispersion coefficients. This one-way coupling allows the flow equation to be solved independently from all other equations.
Several methods have been used in the literature to solve the transport and reaction equations as summarized by Steefel and
MacQuarrie (1996). In PHAST, the calculations for reactive transport are split into a transport calculation step and a
chemical-reaction calculation step. This method is referred to as operator splitting with sequential solution (Press and others,
1989). The transport equations (and flow equation) require a sparse-matrix linear equation solver for the finite-difference
equations. The chemical-reaction equations require a combination of numerical methods to solve the nonlinear algebraic equations
for equilibrium and the ordinary differential equations for kinetics.
where C f is the flow storage factor (m2), θ is the weighting factor for time differencing, and L f is the spatial discretization of
∇ • K∇ (m-1 s-1).
In PHAST, operator splitting is used to separate the reactive-transport equations into transport equations and chemical-reaction
equations. Each reactive transport equation is split into two equations: a solute-transport equation
∂
( ερc j ) = ∇•εD ∇ρc j – ∇•εvρc j + qερĉ j ; j = 1, …, N c , and (D.27)
∂t
a reaction equation for heterogeneous equilibrium and kinetic equations
NE NK
∂ E ∂
∑ ∑ υ j, k ερRk ;
K
( ερc j ) = – υ j, e ( ερc e ) + j = 1, …, N c . (D.28)
∂t ∂t
e=1 k=1
Note that no reaction terms appear in the transport equation. Discretization of equations D.27 and conversion to units of mass
fraction gives the following finite-difference equation for each component:
( ) (n)
w j* – w j ( ) (n)
C s --------------------------- – θL s ( w j* ) = ( 1 – θ )L s ( w j ) + Qŵ j ; j = 1,…, N c , (D.29)
∆t
where C s is the component storage factor (m3); w j is the mass fraction of component j (-); L s is the spatial discretization of
( )
ρ∇ • D∇ – ρ ∇•v (kg m-3 s-1); w j* is the intermediate mass fraction of component j (-); Q is the source flow rate for the cell
(m3/s); and ŵ j is the mass fraction of component j in the source water (-). Discretization of equations D.28 yields
NE NK (n + 1)
t
(n + 1) ( ) (n + 1) (n)
∑ υ j, e ( ce ∑ υ j, k ∫
E K
cj – c j* = – – ce ) + R k dt ; j = 1,…, N c . (D.30)
e=1 k=1 t
(n)
In PHAST, the set of equations D.26, D.29, and D.30 plus the algebraic equations for chemical equilibria and rate expressions
are solved sequentially in three steps. First, the flow equation D.26 is solved for the potentiometric head (pressure) values. The
heads are used to calculate the interstitial velocity values that are used in the component transport equations. Second, each transport
equation (D.29) is solved individually for the total aqueous concentrations of the component. And third, the equilibrium and kinetic
ρb K e
R = 1 + ------------ , (D.32)
ε
where D nos is the numerical dispersion coefficient from operator splitting (m2/s); R is the retardation factor for linear sorption
(-); ρ b is the dry bulk density of the porous medium (kg/m3); and K e is the linear equilibrium sorption coefficient (m3/kg). The
retardation factor also expresses the ratio of the effective transport velocity of the sorbed component relative to the interstitial
velocity of the ground water.
For numerical accuracy, the numerical dispersion from operator splitting should be much less than the physical dispersion.
Thus, for centered-in-time differencing,
2R
CrPe « ------------ , which reduces to (D.33)
R–1
CrPe « 2 , (D.34)
for large value of R. For backward-in-time differencing,
2R
CrPe « --------------- , which reduces to (D.35)
2R – 1
CrPe « 1 , (D.36)
for large value of R. Although these equations are from a very restricted reaction case, they can give guidance for discretization of
more complex reaction systems.
In SNIA, the reaction terms have been completely removed from the transport equations. Removing these terms may cause
overshoot and undershoot in the intermediate concentrations in the transport solution, especially in cases of strong sorption or
strong partitioning of components. The undershoot concentrations can be negative, which will result in mass-balance errors when
those concentrations are set to zero in the chemical-reaction calculation. Overshoot concentrations may cause nonconvergence in
the solution of the algebraic chemical equations. The remedy available in PHAST for these overshoot and undershoot problems is
to use a smaller time step.
150 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
D.7.2. Linear-Equation Solvers for Flow and Transport Finite-Difference Equations
The set of linear equations for flow or transport of each component includes one finite-difference equation for each node in
the grid region. The set of finite-difference equations are solved in two steps: (1) a reduced matrix is formed by renumbering the
nodes and performing a partial block Gaussian elimination, which results in a savings in computation time and computer-storage
requirements, and (2) the reduced matrix equation is solved by either a direct or iterative linear-equation solver.
When using the direct solver, the reduced matrix is formed by renumbering the nodes by alternating diagonal planes (Price
and Coats, 1974), followed by the partial Gaussian elimination. This reduced matrix is solved by complete Gaussian elimination.
This method is referred to as the D4 solution technique described in Kipp (1987). The workload and storage requirements for the
direct solver are completely defined by the number of nodes and configuration of the active grid region.
When using the iterative solver, the reduced matrix is formed by renumbering the nodes by alternating diagonal planes in a
zig-zag fashion, followed by the partial Gaussian elimination. This reduced matrix is solved by a generalized conjugate gradient
algorithm. This method is referred to as the D4 zig-zag solution technique described in Kipp and others (1992, 1994) and Kipp
(1997). The workload and storage requirements for the iterative solver depend not only on the number of nodes, but also on the
user-specified solver parameters.
The iterative algorithm is a restarted ORTHOMIN method with incomplete lower-upper (ILU) triangular factorization
preconditioning as described by Meijerink and van der Vorst (1977), Elman (1982), and Behie and Forsyth (1984). The
ORTHOMIN method calculates an approximate solution vector that is based upon a set of orthogonal search directions. For the
full ORTHOMIN method, the number of search directions is equal to the iteration count, which leads to workload and storage
requirements that increase linearly with iteration count. To limit the workload and storage requirements, a modified algorithm,
ORTHOMIN(m), is implemented by simply restarting ORTHOMIN every m iterations. To restart the ORTHOMIN(m) algorithm,
the latest solution vector is used as the initial guess for the next cycle. The restart interval m is specified by the user
(-save_directions, SOLUTION_METHOD data block). Increasing this interval may accelerate convergence, but also will
increase the computer memory requirements.
The convergence criterion of the iterative solver is based on the Euclidean norm of the residual vector being small relative to
the norms of the linear-equation matrix, the right-hand-side vector, and the initial solution vector (Barrett and others, 1994, p. 54).
Mathematically, this is expressed as
(ν) (ν)
r ≤ τ( A ⋅ x + b ), (D.37)
(ν)
where r is the residual vector at iteration ν (appropriate units); τ is the convergence tolerance (-); A is the matrix of
coefficients of the difference equations (appropriate units); b is the right hand side vector of the difference equations (appropriate
(ν)
units); x is the solution vector at iteration ν (appropriate units); is the Euclidean norm for a vector or the Frobenius
norm for a matrix (Stoer and Bulirsch, 1993, p.184).
The criterion of equation D.37 yields the forward error bound of
(ν) –1 (ν)
e ≤τ A ⋅( A ⋅ x + b ), (D.38)
(ν) –1
where e is the error in the solution vector at iteration ν (appropriate units) and A is the inverse of the coefficient matrix of
the difference equations (appropriate units). Thus, the norm of the error in the solution vector is related to the norm of the residual
vector under this criterion. Unfortunately, it is usually not feasible to compute the norm of the inverse of the coefficient matrix;
therefore, the convergence tolerance must be determined empirically. The convergence tolerance τ is specified by the user
(-tolerance, SOLUTION_METHOD data block). Once the convergence tolerance τ has been specified, it is used in equation
D.37 to define the criterion for convergence.
152 PHAST—A Program for Simulating Ground-Water Flow, Solute Transport, and Multicomponent Geochemical Reactions
factor makes the global mass-balance calculations consistent with the formulation of the finite-difference equations and thus gives
an exact mass-balance for each cell over a time step.
The fluid-flow at specified-head boundary cells is obtained by evaluating the residual of the finite-difference flow equation.
The component mass flows at specified concentration boundary cells are obtained by evaluating the residual of the transport
equations. These residuals are the masses of fluid and components that are necessary to satisfy the fluid-balance and solute-balance
equations. Thus, the fluid mass-balance equation is satisfied exactly for each of the specified-head boundary cells, and the
component mass-balance equation is satisfied exactly for each of the specified-concentration boundary cells. To make the
global-balance calculations for the components compatible with the operator-splitting algorithm, the boundary mass flows are
based on the intermediate concentrations resulting from equation D.29. The change in component mass from reactions is taken to
be the difference between the mass of the component before and after the reaction step.
The information produced by the global-balance calculation is printed to the file prefix.O.bal. The primary use of the
global-balance calculations is to identify changes in mass in the system relative to reactions and mass flows (kg) through the
various types of boundary conditions. Mass-accumulation and mass-flow rates (kg/s) also are tabulated. The utility of the fractional
residuals is not great. It is more informative to compare the residuals with each of the various flows, sources, and accumulations
in the region.
Flow and component mass balances with small residuals are a necessary, but not a sufficient, condition for an accurate
numerical simulation. Because the system equations are a balance for each cell, and the methods used for integrating boundary
flows and reaction sources over a time step are compatible with the finite-difference equations and the operator-splitting method,
and because the fluxes between the cells are conservative, errors in the global-balance equations may result from the following
remaining causes: (1) explicit treatment of the water-table elevation for unconfined flow, (2) explicit treatment of well flow rates,
(3) explicit treatment of the nonlinear limit for river leakage, (4) explicit treatment or neglect of the cross-dispersive flux terms,
(5) use of the iterative-matrix equation solver to obtain an approximate numerical solution, and (6) roundoff error in special cases,
such as wide variation in parameter magnitudes. The first three items are usually the major cause of mass-balance errors. Errors
caused by discretization in time or space will not be revealed by these global-balance calculations. However, the inaccuracies
resulting from a time step that is too long under conditions of significant nonlinearity will be evident. Significant nonlinearity can
be caused by large changes in the water-table location or by non-linear reaction mechanisms.