Skip to content

ps.tracer

ps.tracer.Tracer(*, name: str, phase: Literal['water', 'gas'], units: str | None = None, concentration_by_depth=(), free_gas_concentration_by_depth=(), solution_gas_concentration_by_depth=(), initial_free_gas_concentration: Optional[ScalarPropertyInput] = None, initial_solution_gas_concentration: Optional[ScalarPropertyInput] = None) -> None

A passive tracer: a named concentration one phase carries without changing the flow.

ps.tracer.Tracer(name="SEA", phase="water", concentration_by_depth=[(2000.0, 0.0), (2600.0, 1.0)]) starts the tracer in the water at none at a depth of 2000, rising to 1 at 2600.

ps.Model(passive_tracers=[...]) holds it at passive_tracers/<name> (m.get("passive_tracers/SEA")). It writes its record of TRACER (PROPS) and its initial state in SOLUTION, and ps.load reads both back. A well injects it by name: ps.wells.InjectedStream(well="I1", tracers={"SEA": 1.0}), the stream’s tracer card.

Its initial concentration against depth is rows of a depth (in the model’s units) and the tracer’s concentration there, the depths strictly rising, each row a sequence in that order or a mapping by those names: concentration_by_depth for a water tracer (TVDPF<name>), free_gas_concentration_by_depth (TVDPF<name>) and solution_gas_concentration_by_depth (TVDPS<name>) for a gas tracer.

Flow starts a concentration nothing states at zero. A free-gas number (TBLKF<name>) wins over a free-gas depth table. Flow reads a solution-gas concentration only where the gas dissolves in the oil, and only beside a free-gas one of the same form: the depth table beside the depth table, the number beside the number.

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