oil-simulator

black-oil · fully implicit · pytorch · gpu

Симулятор пласта
на одной видеокарте.

Открытый гидродинамический симулятор: берёт DATA-файл Eclipse и считает трёхфазный пласт целиком — сетку с разломами, жирный газ, скважины по расписанию. Python и PyTorch, без лицензий.

16:41мин:с · Norne · RTX 3090
−0,064%накопленная нефть против Eclipse
0,01%дебит нефти SPE9 против Eclipse
1 млнячеек на 24 ГБ GPU

Прогон Norne против Eclipse →

Corner-point модель Norne, нефтенасыщенность
Norne · So · расчёт oil-simulator

01 — что это

Deck Eclipse на входе, пласт на выходе

oil-simulator читает тот же DATA-файл, что Eclipse и OPM Flow, и считает его без конвертации в свой формат. Наружу — векторы SUMMARY в единицах deck, поля давления и насыщенностей, дебиты и забои по скважинам.

Основной решатель — полностью неявный black-oil на GPU. Для учебных задач и стресс-тестов рядом есть IMPES на JSON-конфигах.

Сетка

Corner-point, разломы, NNC

COORD и ZCORN, объёмы, глубины, проводимости в духе NEWTRAN. FAULTS, MULTFLT, MULTX, MULTREGT, PINCH, MINPV. На Norne все 44 431 активные ячейки и 13 455 несоседских связей совпадают с Eclipse.

Флюиды и порода

Жирный газ и регионы

PVTO, PVTG, растворённый газ и испарённая нефть, VAPPARS. Таблицы лифта VFPPROD/VFPINJ, ограничение по устьевому давлению добывающих и нагнетательных, поверхностная сеть с балансировкой (BRANPROP/NODEPROP/GRUPNET), газлифт с оптимизацией (LIFTOPT/WLIFTOPT/GLIFTOPT), WEFAC. Регионы PVT, ОФП и равновесия, EQUIL с контактами, масштабирование концевых точек, гистерезис Карлсона, пороговые давления THPRES.

Скважины

Расписание как в deck

WELSPECS, COMPDAT, режимы по дебиту и BHP, исторический RESV, WELOPEN, WTEST, смена типа и групповые ограничения. STOP сохраняет внутренний переток при нулевом поверхностном расходе, SHUT отключает соединения. Полные производные связывают перфорации; RESV учитывает фактический состав смеси.

Сравнение

Сводки Eclipse и OPM

Читает бинарные UNSMRY, INIT, EGRID. Один скрипт считает deck и сравнивает любые векторы — месторождение, скважины, ячейки — с Eclipse и OPM Flow.

02 — внутри

Как устроен решатель

В каждой ячейке три уравнения — нефть, вода, газ — и три неизвестных: давление, водонасыщенность и третья переменная, которая переключается по состоянию ячейки. Пока свободного газа нет — газосодержание Rs. Появился газ — насыщенность Sg. Нефть кончилась — паросодержание Rv.

Поток на грани — вверх по потоку отдельно для каждой фазы, с гравитацией и капиллярным давлением. Производные свойств вычисляются автоматическим дифференцированием; блочная сборка потоков и скважин сверена с конечными разностями. Ньютон сходится по тем же критериям, что Eclipse и OPM: локальный CNV и глобальный баланс массы.

Линейная система — FGMRES с CPR: классический AMG Ruge–Stüben по давлению и блочный Якоби по остальному, всё в PyTorch на GPU, float64. Иерархия AMG переиспользуется внутри шага, значения матриц обновляются по итерациям Ньютона. Ячейки, отрезанные от соседей, решаются отдельно и не портят Крылова.

  • GPU и CPUОдин код PyTorch для обоих устройств. CUDA-графы свойств и CPR используют переиспользуемые пулы памяти; в последнем полном Norne графы работали до конца. Расчёт идёт только по активным ячейкам.
  • ЧекпоинтыСохраняются на отчётных шагах. Проверка продолжения Norne: 379 векторов SUMMARY совпали с непрерывным расчётом с максимумом 4,32×10−12 от масштаба вектора.
  • Строгая сходимостьCNV ≤ 10−3, MB ≤ 10−7 без ослабления. Адаптивный шаг, дробление при отказе и импорт временных параметров TUNING; отчётный интервал проходится полностью.
  • Python до концаСвойства, сборка, предобуславливатель — читаемый код на PyTorch, который легко менять и встраивать в свои эксперименты.

03 — проверка

Рядом с Eclipse

Последняя проверка Norne: весь исходный deck, 3312 суток, строгие CNV/MB без ослабления. Итоги накопленной добычи ниже относятся к 29 октября 2026. Старый расчёт OPM flow_legacy показан отдельно: это другая версия решателя, а не современный OPM с идентичными настройками.

Все 12 эталонных тестов пройдены с прежними допусками. В строках SPE1/SPE9 указан допуск теста, а не новая точечная оценка ошибки; значения Norne и газлифта — измеренные результаты. Нормированная ошибка на отчётных датах отличается от ошибки итогового накопленного объёма.

модельчто сравнивалиoil-simulatorOPM Flow
SPE1, 10×10×3, 10 летвекторы SUMMARY против Eclipse/OPMдопуск 1% · пройденэталон
SPE9, 24×25×15, 26 скважинместорождение / ячейки / забоидопуск 0,5% · пройденэталон
SPE9остальные векторы скважиндопуск 2,5% · пройденэталон
Norne · strict · 3312 сутокнакопленные нефть / вода / газ, против Eclipse−0,064% / +0,158% / −0,099%legacy: −0,21% / +1,40% / −0,44%
Norneзакачка воды / газа, против Eclipse−0,00704% / −0,000023%legacy: +0,392% / +0,000024%
SPE1 VFP1 (opm-tests), таблица лифта, переход на THPзабой / устье / дебиты / FOPT, против OPM Flowдо 1%эталон
GASLIFT-04 · первые 213 сутокнормированная ошибка дебита нефти / газлифта0,64% / 6,10%эталон OPM
NETWORK-01 и NETWORK-01-REROUTEбаланс сети, VREP и смена маршрутаоба эталонных теста пройденыэталон OPM
VFPINJ_WCONINJE-01забой / устье / закачка, TUNING включёндопуск 1% · пройденOPM 2026.04
VAPPARS-01 (opm-tests), жирный газ, закачка газагазовый фактор / забой / дебит газа, против OPM Flowдо 2%эталон
BASE_MODEL_1 и MSW_MODEL_1RESV, переток, многосегментные скважиныоба эталонных теста пройденыэталон OPM
Дебиты Norne: наш солвер, Eclipse и история
Norne, месторождение целиком: голубая — Eclipse 2014.2, оранжевый пунктир — oil-simulator, точки — история. Подробно — на странице прогона.

04 — скорость

16 минут 41 секунда на всю историю

Последний полный Norne на RTX 3090: 1000,8 с, 654 принятых подшага, 32 отказа с дроблением, 3322 итерации Ньютона. Float64, CNV 10−3, MB 10−7, один CPU-поток; запись чекпоинтов и аудит включены во время. Графы оставались включены, резерв памяти в конце — 1712 MiB.

Исправление состава потока RESV уменьшило итоговую ошибку воды E-4AH с +6,37% до −0,55%. Полные производные собраны пакетно для всех скважин. Время двух запусков различается на 1,8%; это наблюдение отдельных прогонов, а не статистический тест скорости.

версиячто изменилосьNorne, минитераций Ньютона
До исправления RESVSTOP, полный переток и его производные · strict16,383479
Текущий прогон+ фактический состав потока RESV · strict16,683322
  • Eclipse 2014.2Около 17 минут в PRT опубликованного эталона. Его оборудование и условия запуска не идентичны текущим; это не прямой сравнительный тест скорости.
  • OPM flow_legacyАрхивный замер около 2,7 минуты на двух CPU-потоках. Версия и настройки отличаются от текущего строгого прогона; современный OPM в равных условиях здесь не измерялся.
  • Для экспериментов и агентовGPU-исполнение, доступный Python-код, чекпоинты и управление после каждого отчётного шага позволяют строить серии сценариев и среды обучения. Преимущество по скорости нужно измерять на конкретной модели.

05 — запуск

От deck до сводки

Установка — pip install -r requirements.txt и CUDA-сборка PyTorch. Учебные deck SPE1 и SPE9 лежат в репозитории вместе со сводками Eclipse и OPM.

Norne берётся из открытого набора OPM opm-tests; прогон и рисунки — двумя скриптами.

import torch
from simulator.eclipse_run import run_deck

summary, info = run_deck(
    "tests/data/spe1/SPE1CASE1.DATA",
    device=torch.device("cuda:0"))

# В терминале: весь Norne, строгий профиль
NORNE_DIR=opm-tests/norne NORNE_OUT=results/norne \
NORNE_DEVICE=cuda:0 NORNE_CONVERGENCE_PROFILE=strict \
CUBLAS_WORKSPACE_CONFIG=:4096:8 python scripts/run_norne.py

# Затем рисунки для страницы
NORNE_DIR=opm-tests/norne NORNE_OUT=results/norne \
python scripts/norne_figures.py

Репозиторий на GitHub →

Документация: физика, численные методы, deck, верификация →

06 — агенты

Пласт как среда

iter_deck отдаёт управление после каждого отчётного шага: можно менять уставки скважин и смотреть, что стало с пластом. Поверх него — среда gymnasium DeckEnv: действие — множители к дебитам скважин, наблюдение — дебиты, забои и среднее давление, награда — экономика шага. Эпизод может начинаться с чекпоинта, например с середины истории Norne.

07 — чего пока нет

Границы

  • Устье и VFPVFPPROD, VFPINJ, THP, газлифт с оптимизацией и поверхностная сеть (расширенная и стандартная) есть; сети закачки и GSATPROD пока нет.
  • Сложные скважины и сетиМногосегментные скважины — явная модель (давления сегментов на начало шага), без клапанов и модели дрейфа; в WECON нет POTN, END RUN и CON, WCUTBACK только сокращает дебит (без обратного увеличения).
  • ФизикаBlack-oil: без композиционной и термической моделей, трассеров, полимера. Гистерезис ОФП — модель Карлсона.