Corner-point, разломы, NNC
COORD и ZCORN, объёмы, глубины, проводимости в духе NEWTRAN. FAULTS, MULTFLT, MULTX, MULTREGT, PINCH, MINPV. На Norne все 44 431 активные ячейки и 13 455 несоседских связей совпадают с Eclipse.
black-oil · fully implicit · pytorch · gpu
Открытый гидродинамический симулятор: берёт DATA-файл Eclipse и считает трёхфазный пласт целиком — сетку с разломами, жирный газ, скважины по расписанию. Python и PyTorch, без лицензий.
01 — что это
oil-simulator читает тот же DATA-файл, что Eclipse и OPM Flow, и считает его без конвертации в свой формат. Наружу — векторы SUMMARY в единицах deck, поля давления и насыщенностей, дебиты и забои по скважинам.
Основной решатель — полностью неявный black-oil на GPU. Для учебных задач и стресс-тестов рядом есть IMPES на JSON-конфигах.
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.
WELSPECS, COMPDAT, режимы по дебиту и BHP, исторический RESV, WELOPEN, WTEST, смена типа и групповые ограничения. STOP сохраняет внутренний переток при нулевом поверхностном расходе, SHUT отключает соединения. Полные производные связывают перфорации; RESV учитывает фактический состав смеси.
Читает бинарные UNSMRY, INIT, EGRID. Один скрипт считает deck и сравнивает любые векторы — месторождение, скважины, ячейки — с Eclipse и OPM Flow.
02 — внутри
В каждой ячейке три уравнения — нефть, вода, газ — и три неизвестных: давление, водонасыщенность и третья переменная, которая переключается по состоянию ячейки. Пока свободного газа нет — газосодержание Rs. Появился газ — насыщенность Sg. Нефть кончилась — паросодержание Rv.
Поток на грани — вверх по потоку отдельно для каждой фазы, с гравитацией и капиллярным давлением. Производные свойств вычисляются автоматическим дифференцированием; блочная сборка потоков и скважин сверена с конечными разностями. Ньютон сходится по тем же критериям, что Eclipse и OPM: локальный CNV и глобальный баланс массы.
Линейная система — FGMRES с CPR: классический AMG Ruge–Stüben по давлению и блочный Якоби по остальному, всё в PyTorch на GPU, float64. Иерархия AMG переиспользуется внутри шага, значения матриц обновляются по итерациям Ньютона. Ячейки, отрезанные от соседей, решаются отдельно и не портят Крылова.
03 — проверка
Последняя проверка Norne: весь исходный deck, 3312 суток, строгие CNV/MB без ослабления. Итоги накопленной добычи ниже относятся к 29 октября 2026. Старый расчёт OPM flow_legacy показан отдельно: это другая версия решателя, а не современный OPM с идентичными настройками.
Все 12 эталонных тестов пройдены с прежними допусками. В строках SPE1/SPE9 указан допуск теста, а не новая точечная оценка ошибки; значения Norne и газлифта — измеренные результаты. Нормированная ошибка на отчётных датах отличается от ошибки итогового накопленного объёма.
| модель | что сравнивали | oil-simulator | OPM 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_1 | RESV, переток, многосегментные скважины | оба эталонных теста пройдены | эталон OPM |
04 — скорость
Последний полный 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, мин | итераций Ньютона |
|---|---|---|---|
| До исправления RESV | STOP, полный переток и его производные · strict | 16,38 | 3479 |
| Текущий прогон | + фактический состав потока RESV · strict | 16,68 | 3322 |
05 — запуск
Установка — 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
06 — агенты
iter_deck отдаёт управление после каждого отчётного шага: можно менять уставки скважин и смотреть, что стало с пластом. Поверх него — среда gymnasium DeckEnv: действие — множители к дебитам скважин, наблюдение — дебиты, забои и среднее давление, награда — экономика шага. Эпизод может начинаться с чекпоинта, например с середины истории Norne.
07 — чего пока нет