Skip to content

Add an aquifer

An aquifer is water outside the grid that pushes into it as the reservoir pressure falls. In PetroScript it is one object in the model’s aquifers= list: the aquifer’s own properties, and the grid faces it flows in through (ps.aquifers.Connection).

AquiferClassWhat you state
Finite, pseudo-steady (Fetkovich)ps.aquifers.Fetkovichits water volume, total compressibility and productivity index
Infinite-acting, radial (Carter-Tracy)ps.aquifers.CarterTracyits permeability, porosity, compressibility, radius, thickness and angle
A set influxps.aquifers.ConstantFlux, then ps.aquifers.Flux at a datethe water rate per unit area of the connected faces (not a total)
Grid cells of its ownps.aquifers.Numericalits cells

Here a Fetkovich aquifer goes under SPE1 (a FIELD deck: ft, psia, stb), connected to the bottom face of the bottom layer:

import petroscript as ps
m = ps.load("opm-tests/spe1/SPE1CASE2.DATA")
bottom = ps.aquifers.Connection(cells=ps.Box(i=(1, 10), j=(1, 10), k=(3, 3)), # all three ranges
face="plus_k") # their lower face
support = ps.aquifers.Fetkovich(
datum_depth=8450.0, # ft
initial_water_volume=2.0e9, # stb
compressibility=6.0e-6, # 1/psi: water and rock together
productivity_index=200.0, # stb/day/psi
connections=[bottom],
)
with_aquifer = m.set("aquifers", [support])
deck = ps.compile(with_aquifer).files["SPE1CASE2.DATA"]
assert "AQUFETP" in deck and "AQUANCON" in deck

A connection’s box states all three ranges ([aquifers.connection.cells] otherwise). The datum pressure, left out, is the reservoir’s at the aquifer’s datum depth, so the aquifer starts in equilibrium with it. A Carter-Tracy aquifer takes rock properties instead:

radial = ps.aquifers.CarterTracy(
number=2, datum_depth=8450.0, permeability=200.0, porosity=0.25,
total_compressibility=6.0e-6, radius=5000.0, thickness=100.0, # ft
angle=360.0, # degrees: all round
connections=[bottom],
)

To see what the aquifer is worth, run the model with and without it: m.set("aquifers", []) removes every aquifer. examples/aquifer.py does exactly that in Flow and prints both pressure declines.

ps.help(ps.aquifers.Fetkovich) and ps.help(ps.aquifers.Connection) have every field.

PetroScript is licensed under the Apache License 2.0. © 2026 Blauweiss EDV LLC. PetroScript by Blauweiss AI.For AI agents: llms.txt