ps.aquifers
ps.aquifers.CarterTracy
Section titled “ps.aquifers.CarterTracy”ps.aquifers.CarterTracy(*, number: int, datum_depth: ScalarPropertyInput, permeability: ScalarPropertyInput, porosity: ScalarPropertyInput, total_compressibility: ScalarPropertyInput, radius: ScalarPropertyInput, thickness: ScalarPropertyInput, angle: ScalarPropertyInput, connections: tuple[Connection, ...], datum_pressure: Optional[ScalarPropertyInput] = None, influence_table: InfluenceTable | None = None, pvt_region: int = 1, datum_temperature: Optional[ScalarPropertyInput] = None) -> None
A Carter-Tracy aquifer and the grid boxes it connects to.
ps.aquifers.CarterTracy(number=1, datum_depth=2500.0, permeability=100.0, porosity=0.2, total_compressibility=1.0e-4, radius=500.0, thickness=30.0, angle=360.0, connections=faces) is
an infinite-acting aquifer all round the reservoir, flowing in through faces.
The aquifer’s properties (AQUCT, manual 10.3.12): its datum depth and pressure, permeability,
porosity, total compressibility, radius (the inner radius r0, the reservoir’s equivalent
radius, which Flow reads from AQUCT item 7 whatever the manual’s wording of it), thickness
and influence angle; its influence_table (None: Flow’s built-in infinite-acting
table 1) and its connections (AQUANCON).
datum_depth, radius and thickness are lengths, datum_pressure a pressure,
permeability a permeability and datum_temperature a temperature (each a bare number
in the model’s units, or a ps.Quantity); porosity is a fraction,
total_compressibility per unit pressure and angle in degrees (360 all round). Its
cards are AQUCT and AQUANCON in SOLUTION (its influence table’s AQUTAB in PROPS), counted
in AQUDIMS. It is one of ps.Model(aquifers=[...]), the n-th at aquifers/<n>.
ps.aquifers.Connection
Section titled “ps.aquifers.Connection”ps.aquifers.Connection(*, cells: Box, face: Literal['plus_i', 'minus_i', 'plus_j', 'minus_j', 'plus_k', 'minus_k'], influx_area: Optional[ScalarPropertyInput] = None, influx_multiplier: Optional[ScalarPropertyInput] = 1.0, transmissibility_multiplier: Optional[ScalarPropertyInput] = 1.0, mode: Optional[Literal['geometric']] = None, allow_adjoin_active_cells: bool = False) -> None
A box of grid cells an aquifer connects to across one face.
ps.aquifers.Connection(cells=ps.Box(i=(1, 1), j=(1, 10), k=(1, 5)), face="minus_i").
An analytic aquifer’s connection (AQUANCON, manual 6.3.6) states influx_area, the influx
coefficient (item 9; unset, the simulator takes the connecting face area), and
influx_multiplier, the multiplier on it (item 10; None leaves the simulator’s default of
1, written 1*). A numerical aquifer’s (AQUCON, manual 6.3.7) states
transmissibility_multiplier (item 9; None leaves the simulator’s default) and mode,
the area its transmissibility uses (item 10; "geometric" is option 1, and None leaves
the simulator’s default, which is not option 1).
allow_adjoin_active_cells (item 11 of both) lets the box face an active cell inside the
grid, which the manual advises against. An aquifer refuses a connection stating the other
card’s items.
influx_area is an area (length squared) and the two multipliers are dimensionless, all
positive and bare numbers in the model’s units. A connection is held in its aquifer’s
connections: the m-th of the n-th aquifer at aquifers/<n>/connections/<m>.
ps.aquifers.ConstantFlux
Section titled “ps.aquifers.ConstantFlux”ps.aquifers.ConstantFlux(*, number: int, connections: tuple[Connection, ...], initial_water_flux_rate: Optional[ScalarPropertyInput] = None, temperature: Optional[ScalarPropertyInput] = None, pressure: Optional[ScalarPropertyInput] = None) -> None
An aquifer whose water influx is prescribed, and the grid boxes it connects to.
ps.aquifers.ConstantFlux(number=1, connections=faces, initial_water_flux_rate=0.05) lets
water in through faces at 0.05 per unit of face area.
The influx is AQUFLUX’s (manual 10.3.14) and the connections AQUANCON’s.
initial_water_flux_rate is a surface water rate per unit area of the connected faces, a
bare number in the model’s units; temperature and pressure are a temperature and a
pressure (each a bare number, or a ps.Quantity). Its cards are AQUFLUX and AQUANCON in
SOLUTION, counted in AQUDIMS. It is one of ps.Model(aquifers=[...]), the n-th at
aquifers/<n>; a later influx is a ps.aquifers.Flux.
ps.aquifers.Fetkovich
Section titled “ps.aquifers.Fetkovich”ps.aquifers.Fetkovich(*, datum_depth: ScalarPropertyInput, initial_water_volume: ScalarPropertyInput, compressibility: ScalarPropertyInput, productivity_index: ScalarPropertyInput, connections: tuple[Connection, ...], datum_pressure: Optional[ScalarPropertyInput] = None, number: int = 1, pvt_region: int | None = None, datum_temperature: Optional[ScalarPropertyInput] = None) -> None
A finite aquifer (Fetkovich) and the grid boxes it connects to.
ps.aquifers.Fetkovich(datum_depth=2500.0, initial_water_volume=5.0e8, compressibility=1.0e-4, productivity_index=50.0, connections=faces) is a finite aquifer of that volume, flowing in
through faces.
The aquifer’s datum depth and pressure, its initial water volume, total compressibility and
productivity index (AQUFETP, manual 10.3.15), and its connections (AQUANCON).
datum_depth is a length and datum_pressure a pressure (each a bare number in the
model’s units, or a ps.Quantity); initial_water_volume is a surface volume of
water, compressibility per unit pressure and productivity_index a surface water rate
per unit pressure, bare numbers in the model’s units. Its cards are AQUFETP and AQUANCON in
SOLUTION, counted in AQUDIMS. It is one of ps.Model(aquifers=[...]), the n-th at
aquifers/<n>.
ps.aquifers.Flux
Section titled “ps.aquifers.Flux”ps.aquifers.Flux(*, aquifer: int, water_flux_rate: ScalarPropertyInput) -> None
A constant-flux aquifer’s water influx from a date on (AQUFLUX in the schedule).
ps.Event("2019-01-01", ps.aquifers.Flux(aquifer=1, water_flux_rate=0.12)): from that
date the ps.aquifers.ConstantFlux numbered aquifer flows at water_flux_rate in
place of its initial_water_flux_rate. Statements for several aquifers standing together
at one date are written as one card.
water_flux_rate is a surface water rate per unit area of the aquifer’s connected faces,
a bare number in the model’s units. It writes AQUFLUX in SCHEDULE at its date. It is a dated
change, at schedule/<date>/flux.
ps.aquifers.InfluenceTable
Section titled “ps.aquifers.InfluenceTable”ps.aquifers.InfluenceTable(*, dimensionless_time: NDArray[numpy.float64], dimensionless_pressure: NDArray[numpy.float64], number: int = 2) -> None
A Carter-Tracy influence table: the dimensionless pressure at each dimensionless time.
ps.aquifers.InfluenceTable(dimensionless_time=[0.01, 0.1, 1.0, 10.0], dimensionless_pressure=[0.112, 0.315, 0.802, 1.651]) is table 2, which a Carter-Tracy aquifer
names with influence_table=.
AQUTAB (manual 8.3.11); the times are positive and rising, and both columns are
dimensionless. OPM Flow reserves table 1 for its built-in infinite-acting table, so the
tables a model states are numbered from 2 (number).
It writes AQUTAB in PROPS, each number once and in its place. It is the
influence_table of a ps.aquifers.CarterTracy, at aquifers/<n>/influence_table;
a table no aquifer names, which Flow reads all the same, is one of ps.Model(aquifers=[...])
on its own, at aquifers/<n>, so the tables numbered after it keep their numbers.
Rows: (dimensionless_time, dimensionless_pressure). Each column is a field taking a list, a tuple or a 1-D array, one value per row; InfluenceTable.from_frame(frame) reads them from a frame by name.
ps.aquifers.Numerical
Section titled “ps.aquifers.Numerical”ps.aquifers.Numerical(*, number: int, cells, connections: tuple[Connection, ...]) -> None
A numerical aquifer: its cells and the grid boxes it connects to.
ps.aquifers.Numerical(number=1, cells=[dict(i=1, j=1, k=1, area=1.0e6, length=5000.0, porosity=0.25, permeability=500.0, depth=2600.0)], connections=faces) replaces cell (1, 1, 1)
by an aquifer cell 5000 long, connected through faces.
Its cells are AQUNUM’s records (manual 6.3.10) and its connections AQUCON’s. A cell is a
mapping by column name, or a sequence in column order: i, j, k (the grid cell the
aquifer cell replaces), area, length, porosity, permeability, depth,
initial_pressure, pvt_region, saturation_region (the last three may be left out of
a mapping; see the cell’s defaults below). A connection’s transmissibility_multiplier and
mode left unset ask the simulator for AQUCON items 9 and 10 as it defaults them. Item
10 left to the simulator is not option 1, mode="geometric": on
opm-tests/model3/4_NUMAQ_MODEL3.DATA the two give connection transmissibilities 61
times apart. The authored default states the unit multiplier (item 9, read by value, so
the same run) and leaves the option to the simulator.
initial_pressure left unset starts the aquifer in equilibrium with the cells it connects
to (manual 6.3.10 item 10); pvt_region and saturation_region left unset in a loaded
deck ask for the region of the cell the aquifer replaces, and default to region 1 when
authored. A cell’s area is an area (length squared) and its porosity a fraction,
bare numbers in the model’s units; length and depth are lengths, permeability a
permeability and initial_pressure a pressure (each a bare number, or a ps.Quantity).
Its cards are AQUNUM and AQUCON in GRID, counted in AQUDIMS. It is one of
ps.Model(aquifers=[...]), the n-th at aquifers/<n>, its m-th cell at
aquifers/<n>/cells/<m>.
PetroScript is licensed under the Apache License 2.0. © 2026 Blauweiss EDV LLC. PetroScript by Blauweiss AI.For AI agents: llms.txt