pofff.jobs.data module#
Generate FluidFlower benchmark data from OPM Flow results.
The job locates the current simulation, reads restart, grid, initialization, and summary files through the OPM Python bindings, calculates sparse benchmark time series, maps saturation and dissolved CO2 to the reporting grid, and writes CSV files at the requested evaluation times.
- class pofff.jobs.data.SimulationContext(resolution: NDArray, dense_t: NDArray, maps: Path, where: Path = PosixPath('.'), sparse_t: float = 600.0, dims: NDArray = <factory>, sim: Path | None = None, unrst: ERst | None = None, ini: EclFile | None = None, egrid: EGrid | None = None, smspec: ESmry | None = None, times: list[float] = <factory>, times_summary: NDArray | None = None, time_initial: float = 0.0, porv: NDArray | None = None, actind: NDArray | None = None, gxyz: tuple[int, int, int] | None=None, norst: int | None = None)[source]#
Bases:
objectStore simulation files, time grids, and OPM grid metadata.
The object is initialized from command-line selections. OPM handles, report times, active-cell indices, pore volumes, and grid dimensions are populated after the current simulation base name is located.
- Attributes:
- resolution
Numbers of benchmark reporting cells in x and z order.
- dense_t
Requested dense-output times in seconds.
- maps
Path to the NumPy mapping from reporting cells to simulation cells.
- where
Directory containing simulation files and receiving generated CSV data.
- sparse_t
Uniform sparse-output interval in seconds.
- dims
FluidFlower dimensions in x, y, and z order, in metres.
- sim
Simulation base path without an OPM file extension.
- unrst
Open OPM restart result, or
Nonebefore results are loaded.- ini
Open OPM initialization result, or
Nonebefore results are loaded.- egrid
Open OPM grid result, or
Nonebefore results are loaded.- smspec
Open OPM summary result, or
Nonebefore results are loaded.- times
Restart times relative to the start of CO2 injection, in seconds.
- times_summary
Summary times relative to the start of CO2 injection, in seconds.
- time_initial
Absolute simulator time at the start of CO2 injection, in seconds.
- porv
Pore volumes in global cell order.
- actind
Global indices of cells with positive pore volume.
- gxyz
Simulation-grid dimensions in x, y, and z order.
- norst
Number of restart report steps.
- dense_t: NDArray#
- dims: NDArray#
- resolution: NDArray#
- class pofff.jobs.data.SparseResults(ctx: SimulationContext, times_data: NDArray = <factory>, fipnum: NDArray = <factory>, dx: NDArray = <factory>, dz: NDArray = <factory>, pop1: NDArray = <factory>, pop2: NDArray = <factory>, moba: NDArray = <factory>, imma: NDArray = <factory>, dissa: NDArray = <factory>, seala: NDArray = <factory>, mobb: NDArray = <factory>, immb: NDArray = <factory>, dissb: NDArray = <factory>, sealb: NDArray = <factory>, sealt: NDArray = <factory>, m_c_series: list[float] = <factory>, m_c: NDArray | None = None)[source]#
Bases:
objectStore sparse FluidFlower quantities before writing the time series.
The state is initialized by
_initialize_sparse_results()with the uniform time grid, region identifiers, and cell dimensions. Pressure, mobile, immobile, dissolved, seal, and migration quantities are then populated from OPM summary and restart results and interpolated totimes_data.- Attributes:
- ctx
Shared simulation context and OPM file handles.
- times_data
Uniform sparse-output times in seconds.
- fipnum
FIPNUM values in global cell order.
- dx, dz
Cell dimensions in x and z order, in metres.
- pop1, pop2
Pressure time series at the two observation points, in pascals.
- moba, imma, dissa, seala
Mobile, immobile, dissolved, and seal CO2 masses in box A, in kilograms.
- mobb, immb, dissb, sealb
Mobile, immobile, dissolved, and seal CO2 masses in box B, in kilograms.
- sealt
Total CO2 mass in the seal regions, in kilograms.
- m_c_series
Mass-center migration values calculated at restart times.
- m_c
Mass-center migration values interpolated to
times_data, in metres.
- ctx: SimulationContext#
- dissa: NDArray#
- dissb: NDArray#
- dx: NDArray#
- dz: NDArray#
- fipnum: NDArray#
- imma: NDArray#
- immb: NDArray#
- moba: NDArray#
- mobb: NDArray#
- pop1: NDArray#
- pop2: NDArray#
- seala: NDArray#
- sealb: NDArray#
- sealt: NDArray#
- times_data: NDArray#
- pofff.jobs.data._compute_mass_center_metric(ctx: SimulationContext, res: SparseResults) None[source]#
Calculate the box-C mass-center migration series.
- Parameters:
- ctxSimulationContext
Loaded simulation context and restart metadata.
- resSparseResults
Sparse result state receiving migration values.
- Raises:
- SystemExit
If restart results or grid metadata are unavailable.
- pofff.jobs.data._extract_summary_quantities(ctx: SimulationContext, res: SparseResults) None[source]#
Extract pressures and regional CO2 masses from OPM summary vectors.
- Parameters:
- ctxSimulationContext
Loaded simulation context and OPM summary data.
- resSparseResults
Sparse result arrays populated in place.
- Raises:
- SystemExit
If summary or restart results are unavailable.
- pofff.jobs.data._find_simulation_base(path: Path) Path[source]#
Locate the simulation base name from an OPM restart file.
- Parameters:
- pathPath
Directory to search for a
.UNRSTfile.
- Returns:
- Path
Restart-file path without its extension.
- Raises:
- SystemExit
If the directory contains no
.UNRSTresult.
- pofff.jobs.data._get_initial_water_pressure(unrst: ERst, fipnum: NDArray, region: int) float[source]#
Return the initial water pressure for one FIP region.
- Parameters:
- unrstOpmRestart
Open OPM restart result containing pressure and capillary pressure.
- fipnumNDArray
FIPNUM values in global cell order.
- regionint
FIPNUM identifying the observation-point region.
- Returns:
- float
Water pressure corrected for capillary pressure, in pascals.
- pofff.jobs.data._initialize_sparse_results(ctx: SimulationContext) SparseResults[source]#
Initialize sparse time coordinates and OPM cell-property arrays.
- Parameters:
- ctxSimulationContext
Loaded simulation context with initialization data and restart times.
- Returns:
- SparseResults
Sparse state initialized with times, FIPNUM, DX, and DZ arrays.
- Raises:
- SystemExit
If initialization data or restart times are unavailable.
- pofff.jobs.data._interpolate_sparse_quantities(ctx: SimulationContext, res: SparseResults) None[source]#
Interpolate sparse quantities to a uniform time grid.
- Parameters:
- ctxSimulationContext
Simulation and summary time coordinates.
- resSparseResults
Sparse quantities replaced by their interpolated arrays.
- pofff.jobs.data._read_opm_results(ctx: SimulationContext) None[source]#
Load OPM restart, initialization, grid, and summary results.
Populate OPM handles, injection-relative times, pore volumes, active-cell indices, and grid dimensions on
ctx.- Parameters:
- ctxSimulationContext
Mutable simulation context with an initialized simulation base path.
- pofff.jobs.data._sum_summary_vectors(smry: ESmry, expressions: Iterable[str]) NDArray[source]#
Sum selected OPM summary vectors and convert CO2 to kilograms.
- Parameters:
- smryOpmSummary
Open OPM summary result containing the requested vectors.
- expressionsIterable[str]
OPM summary-vector names to add.
- Returns:
- NDArray
Total mass time series in kilograms.
- pofff.jobs.data._write_dense_outputs(ctx: SimulationContext) None[source]#
Write spatial maps at the requested dense-output times.
Map active-cell saturation and dissolved-CO2 concentration to the reporting grid and write one CSV file for every requested restart time that is available.
- Parameters:
- ctxSimulationContext
Loaded restart data, reporting-grid resolution, and cell mapping.
- Raises:
- SystemExit
If restart or initialization data are unavailable.
- pofff.jobs.data._write_sparse_outputs(ctx: SimulationContext) None[source]#
Calculate and write the sparse benchmark time series.
- Parameters:
- ctxSimulationContext
Loaded simulation context and OPM results.
- pofff.jobs.data._write_spatial_map_csv(ctx: SimulationContext, refxz: list[NDArray], sgas: NDArray, cco2: NDArray, hours: float) None[source]#
Write one saturation and concentration reporting-grid map.
- Parameters:
- ctxSimulationContext
Output location and reporting-grid resolution.
- refxzlist[NDArray]
Reporting-cell centre coordinates in x and z order, in metres.
- sgasNDArray
Gas saturation in reporting-cell order.
- cco2NDArray
Dissolved-CO2 concentration in reporting-cell order.
- hoursint | float
Evaluation time in hours used in the output filename.
- pofff.jobs.data._write_time_series_csv(res: SparseResults) None[source]#
Write sparse benchmark quantities to
time_series.csv.- Parameters:
- resSparseResults
Interpolated pressure, mass, and migration series.
- pofff.jobs.data.main(argv: list[str] | None = None) None[source]#
Generate sparse time-series and dense spatial benchmark data.
Parse reporting-grid settings, locate the OPM simulation, load its results, and write the benchmark time-series and spatial-map CSV files.
- Parameters:
- argvlist[str] | None, optional
Arguments to parse instead of
sys.argv[1:].