Главная страница

Калькулятор графиков в tNavigator


Скачать 4.2 Mb.
НазваниеКалькулятор графиков в tNavigator
Дата11.04.2022
Размер4.2 Mb.
Формат файлаpptx
Имя файлаHow To Use Graph Calculator Python.pptx
ТипУрок
#462485

Калькулятор графиков в tNavigator


Тренинги 2021
Внимание! При прохождении данного курса следует помнить, что методики, описанные в рамках урока, носят рекомендательный характер и не являются единственно верными. Основной целью данного курса является рассмотрение всех основных функций, доступных в tNavigator. В реальных проектах применяемые методики могут отличаться от описанных в данном курсе. Все данные, используемые в курсе, не являются реальными.

Калькулятор графиков


Предназначен для создания дополнительных графиков

Дополнительный инструмент анализа моделей Синтаксис и логика языка Python

Специальные функции для работы с элементами

моделей

Импорт библиотек Доступен в:

GUI симулятора
AHM
Дизайнер моделей

Внимание! Для корректной работы калькулятора графиков необходимо использовать внешний интерпретатор Python версии 3.6.8 (64 бит)

Окно калькулятора

Функции Python: Print


Вывод сообщений в консоль
Удобно использовать для вывода отладочной и любой другой дополнительной информации в текстовом виде
Можно формировать комбинации из нескольких строк


Пример № 1

Пример № 2

Функции Python: If, Else


Оператор if используется для выполнение кода только в том случае, если выполняется заданное условие
В качестве условия может производиться сравнение величин (>, <, ==, !=), либо использоваться переменная типа Boolean (True или False)
Оператор else – выполнение действий, если условие в if не выполнено


Пример № 1

Пример № 2

Функции Python: For


Оператор for позволяет выполнять один и тот же код несколько раз для разных значений переменной или разных объектов.
Аргументы цикла for:
    Переменная цикла
    Массив, содержащий объекты или значения переменных

Функции Python: Import Оператор import используется для импорта заранее созданных модулей (как стандартных, так и сторонних)


В Калькулятор графиков включены готовые скрипты, которые можно загружать и менять произвольным образом

Создание пустого графика


Для создания нового объекта типа график используется функция graph
graph ( type = ‘graph_type’ , default_value = value )

graph_type – тип графика
    field – график по всему месторождению
    well – график по скважинам
    group – график по группам
    conn – график по ячейкам перфорации
    fip – график по отчетным регионам

    value – значение по умолчанию


Пример:

objective = graph ( type = ‘field’, default_value = 0) TR1TOT = graph ( type = ‘well’, default_value = 0)

Вывод графиков


Функция export – вывод графика в GUI для последующей визуализации

export ( mnem, name = ‘graph_name’ , units = “units” )

mnem – мнемоника графика, используемая в калькуляторе
graph_name – полное имя графика (будет отображаться в GUI)
units – единицы измерения для данного графика


Пример:

export (objective, name = 'Objective Function', units = "no")

export (TR1TOT, name = 'Cumulative tracer production', units = "liquid_surface_rate")

Импорт графиков


График, созданный в одном скрипте, можно импортировать в другой
get_global_graph (name = ‘graph_name’)
graph_name – полное имя, под которым график доступен в интерфейсе


Пример:

export (objective, name = 'of_tracer', units = 'no') get_global_graph (name = 'of_tracer')

Объекты в калькуляторе


Типы объектов:

Скважина
Группа
Перфорация
Временной шаг
График
Отчетный регион
Трассер
Аквифер
Численный аквифер
Глобальные функции
Глобальные функции графиков


Каждый объект имеет определенный набор свойств

Скважины


Обычные свойства

.name – свойство, содержащее имя скважины.
.group – свойство, содержащее группу, к которой принадлежит скважина.

Свойства-массивы
.connections – свойство, содержащие массив со всеми интервалами перфорации.
.virtual_connections – свойство, содержащие массив со всеми виртуальными интервалами перфорации скважин.
.get_connections_from_branch (branch_id = ) – возвращает массив со всеми интервалами перфорации определенного ствола скважины.

Логические функции
.is_producer () - True, если скважина добывающая
.is_opened () - True, если скважина открыта
.is_shut () - True, если скважина закрыта
.is_stopped () - True, если скважина остановлена

Группы


Обычные свойства

.name – свойство, содержащее название группы.
.parent_group – свойство, содержащее родительскую группу данной.

Свойства-массивы
.wells – свойство, содержащее массив со всеми скважинами данной группы. Скважины дочерних групп, если таковые есть, не включаются.
.all_wells – массив, рекурсивно включающий все скважины данной группы и ее дочерних групп.
.child_groups – свойство, содержащее массив со всеми дочерними группами.

Перфорация


Обычные свойства

.name – свойство, содержащее имя интервала перфорации (формируется автоматически).
.i – свойство, содержащее координату сетки i данного интервала перфорации.
.j – свойство, содержащее координату сетки j данного интервала перфорации.
.k – свойство, содержащее координату сетки k данного интервала перфорации.
.well – свойство, содержащее скважину, к которой относится интервал перфорации.
.branch_id – свойство, содержащее номер ствола скважины, к которому относится интервал перфорации.
.lgr_name – свойство, содержащее имя локального измельчения сетки, к которому относится интервал перфорации.

Модели и Временной шаг


Свойства модели

.name – свойство, содержащее название модели (актуально, когда загружены результаты расчёта нескольких моделей).

Свойства и функции для временных шагов
.name – свойство, содержащее представление даты шага в виде строки согласно шаблону.
.to_datetime () – возвращает объект Python datetime со значением текущей даты. Для данного объекта доступны стандартные свойства и методы.

Некоторые из них:
    .year – возвращает год
    .month – возвращает месяц
    .day – возвращает день
    .hour – возвращает час
    .minute – возвращает минуту
    .second – возвращает секунду

График


Извлечение и агрегация данных

.fix (model = '', object = '', date = ‘’) – возвращает

значение графика для заданной модели, объекта и даты.
.min (models = '', objects = '', dates = ‘’)
.max (models = '', objects = '', dates = ‘’)
.avg (models = '', objects = '', dates = ‘’)
.sum (models = '', objects = '', dates = ‘’)
.aggregate_by_time_interval (interval = '', type = ‘’) – берется массив значений для заданного интервала (month, year) из исходного графика и создается новый график, в котором все шаги в рамках заданных интервалов имеют одинаковые значения (avg, min, max, last, sum, total)
.to_list () – возвращает список значений графика.


Выбор подмножества значений для заданной модели, объекта и даты и возвращает мин, макс, среднее или сумму для получившегося массива

Отчетный регион, трассер, аквифер и численный аквифер


Обычные свойства (Отчетный регион)

.name – свойство, содержащее имя региона (состоит из названия семейства и номера региона в семействе).
.family – свойство, содержащее название семейства, к которому принадлежит регион.
.number – свойство, содержащее номер региона в семействе. Обычные свойства (Трассер)
.name – свойство, содержащее название трассера. Обычные свойства (Аквифер)
.name – свойство, содержащее название аквифера. Обычные свойства (Численный аквифер)
.name – свойство, содержащее название численного аквифера.

Глобальные функции


Функции

get_well_by_name (‘’) – возвращает объект скважины по её имени.
get_group_by_name (‘’) – возвращает объект группы по её имени.
get_model_by_name (‘’) – возвращает объект модели по её имени.
get_tracer_by_name (‘’) – возвращает объект трассера по его имени.
get_aquifier_by_name (‘’) – возвращает объект аквифера по его имени.
get_numerical_aquifier_by_name (‘’) – возвращает объект численного аквифера по его имени.
get_all_wells () – возвращает массив, содержащий все скважины соответствующего типа.
get_all_groups () – возвращает массив, содержащий все группы.
get_all_connections (type = ‘’) – возвращает массив, содержащий все интервалы перфорации соответствующего типа во всех скважинах.
get_all_models () – возвращает массив, содержащий все модели (актуально, когда загружены результаты расчёта нескольких моделей).
get_all_timesteps () – возвращает массив, содержащий список всех временных шагов.
get_all_tracers () – возвращает массив, содержащий список всех трассеров.
get_all_aquifiers () – возвращает массив, содержащий список всех аквиферов.
get_all_numerical_aquifiers () – возвращает массив, содержащий список всех численных аквиферов.

Глобальные функции


Функции

get_wells_by_mask (‘’) – возвращает массив, содержащий все скважины, подходящие под маску.
get_wells_from_filter (‘’) – возвращает массив, содержащий все скважины, включённые в фильтр по скважинам.
get_project_folder () – возвращает полный путь к директории, содержащей данную модель.
get_project_name () – возвращает имя файла текущей модели (без расширения).
get_all_fip_regions () – возвращает массив, содержащий все FIP-регионы всех семейств.
get_fip_regions_from_family (<имя семейства отчет. рег.>) – возвращает массив, содержащий все FIP-регионы данного семейства.
get_fip_region (<имя семейства отчет. рег.>, <номер отчет. рег.>) – возвращает объект FIP-региона по имени семейства и номеру.
get_timestep_from_datetime (, mode = ‘’) – возвращает временной шаг по указанной дате.
get_well_by_criterion (method = ‘min/max’, crit = <>, group = <>, status = <>, recursive = ) – возвращает скважину, на которой достигает минимального или максимального значения выбранный график.
get_group_by_criterion (method = ‘min/max’, crit = <>, group = <родительская группа>, recursive = ) – возвращает группу, на которой достигает минимального или максимального значения выбранный график.
get_connection_by_criterion (method = ‘min/max’, crit = <>, well = <>) – возвращает интервал перфорации, на котором достигает минимального или максимального значения выбранный график.


Функции

graph (тип = ‘’, значение по умолчанию = ) – возвращает график указанного типа.
create_table_vs_time (<список<дата, значение>>) – возвращает график, содержащий кусочно-линейную интерполяцию данного ряда значений. Ряд должен представлять собой массив кортежей из двух элементов.
shift_t (<график>, <значение сдвига>, <значение по умолчанию>) – возвращает первоначальный график, сдвинутый на указанное число шагов. Пропущенные позиции заполняются указанным значением по умолчанию.
export (<график>, name = ‘’, units = ‘’) – экспортирует переданное выражение в пользовательский график, задавая также его имя и (опционально) единицы измерения. Выражение должно при вычислении давать результат типа график, иначе будет возвращена ошибка.
get_global_graph (name = ‘’) – импортирует и возвращает пользовательский график с указанным именем, который мог быть создан, например, в другом скрипте.

Логические функции
if_then_else (<условие (график)>, <график если да>, <график если нет>) – условный оператор, который применяется к графикам поэлементно.


Математические операции над графиками

diff (<график>) – численное дифференцирование временного ряда, т.е. его преобразование в ряд разностей (newt = grapht - grapht-1).
diff_t (<график>) – численное дифференцирование временного ряда, т.е. его преобразование в ряд разностей, с последующим делением результатов на длины временных шагов в днях (newt = ( grapht - grapht-1 ) / ( Tt - Tt-1 )).
cum_sum (<график>) – численное интегрирование временного ряда, т.е. его преобразование в ряд сумм (newt = newt-1 + grapht).
cum_sum_t (<график>) – численное интегрирование временного ряда, т.е. его преобразование в ряд сумм, с умножением добавляемых величин на длины временных шагов в днях (newt = newt-1 + grapht * ( Tt - Tt-1 )).
exp (<график>), ln (<график>), sqrt (<график>), abs (<график>) – математические функции (экспонента, логарифм, квадратный корень и модуль, соответственно). При передаче графика в качестве аргумента применяются к нему поэлементно.


Вектора – многомерные массивы
Массивы индексируются объектами в зависимости от типа вектора:
    Скважины – модель, временной шаг, скважина
    Группа – модель, временной шаг, группа
    Перфорации – модель, временной шаг, ячейка перфорации
    Отчетный регион – модель, временной шаг, отчетный регион
    Месторождение – модель, временной шаг


Пример:

wopr[m,w,t] – значение дебита нефти по скважине w в модели m в момент времени t.

Внимание:

Порядок задания объектов не важен. wopr[m,w,t] аналогично wopr[w,m,t]
Если не задать один из объектов, то получается соответствующее подмножество: wopr[m,w] возвращает график дебита нефти по скважине w в модели m по всем временным шагам.
В данном случае w, m, t являются объектами, а не их именами


24

Модель

Скважина

Отчетные шаги

01.08.18

01.01.19

01.01.20

01.01.21

01.01.22

01.01.23

FC_v1

P101

0.00

3638.63

9342.79

13009.09

15436.22

17075.52

P103

0.00

2308.29

5854.74

8060.11

9494.40

10450.70

P104

0.00

486.28

1088.51

1410.33

1609.24

1740.39

FC_v2.DAT A

P101

0.00

3304.40

8312.86

11310.21

13161.12

14328.44

P103

0.00

2635.50

6586.91

8918.24

10347.68

11243.56

P104

0.00

1359.49

3276.61

4359.74

5008.73

5411.30

FC_v3.DAT A

P101

0.00

3015.50

7588.70

10320.34

12007.80

13073.29

P103

0.00

1831.86

4468.16

5984.49

6903.13

7476.74

P104

0.00

2453.47

6047.06

8185.98

9505.09

10336.08

m=get_model_by_name ('FC_v2.DATA') w=get_well_by_name ('P104')

t = get_timestep_from_datetime (datetime(2023,1,1))

wopt[m,w,t]

5411.30

m=get_model_by_name ('FC_v1') w=get_well_by_name ('P101') wopt[m, w]

01.08.18

01.01.19

01.01.20

01.01.21

01.01.22

01.01.23

0.00

3638.63

9342.79

13009.09

15436.22

17075.52

w=get_well_by_name ('P103') wopt[w]

Модель

Отчетные шаги

01.08.18

01.01.19

01.01.20

01.01.21

01.01.22

01.01.23

FC_v1

0.00

2308.29

5854.74

8060.11

9494.40

10450.70

FC_v2

0.00

2635.50

6586.91

8918.24

10347.68

11243.56

FC_v3

0.00

1831.86

4468.16

5984.49

6903.13

7476.74

Оптимизация по ЧПС


25

ЧПС – чистая приведенная стоимость, показатель, оценивающий рентабельность инвестиционных проектов
В интерфейсе Автоадаптации имеется скрипт для расчёта ЧПС
Сначала требуется задать экономические параметры
ЧПС можно использовать как целевую функцию в Оптимизации


1

2

3

Содержание


Примеры использования

Пример № 1. Список скважин по условию.
Пример № 2. Поиск некорректных WPIMULT.
Пример № 3. Адаптация характеристики вытеснения.
Пример № 4. Настройка модели на трассерные

исследования.

Пример 1 Нужен список скважин, находящихся в работе на заданный временной шаг. Открываем модель Example1, проводим расчёт, затем запускаем скрипт (Шаблоны графиков Калькулятор графиков импортируем скрипт ex1.py из файла со входными данными):
1

2

3

4

Пример 2


Модель медленно считается. Есть подозрения, что проблемы со скоростью счета происходят из-за слишком высоких значений продуктивности скважин.

В SCHEDULE последовательно заданы ключевые слова WPIMULT. Множители проводимости задаются последовательно, что потенциально приводит к слишком высоким (нефизичным) значениям множителя проводимости.

Требуется определить скважины, у которых ячейки перфорации имеют очень высокие значения проводимости

Пример 2


Откройте модель Example2, проведите расчёт, затем запустите скрипт (Шаблоны графиков Калькулятор графиков

импортируйте скрипт ex2.py):

1

2

3

max_ctfac=graph (type = 'well', default_value = 0) for m in get_all_models ():

for w in get_all_wells (): for c in w.connections: max_conn_f = 0

for t in get_all_timesteps ():

max_conn_f = max (max_conn_f, float (ctfac[c,m,t])) if max_conn_f > 100:

max_ctfac[c.well, m]+=ctfac[c, m] print(w.name,c.name,max_conn_f)

export (max_ctfac, name = 'SUM_ctfac', units = "no")

max_ctfac – это сумма множителей продуктивности для всех перфораций скважины, у которых его максимальное значение превосходит 100.

Внимание! Для данной скважины просмотрите графики множителя проводимости

Пример 2 Новый график появится в разделе Графики пользователя


Разверните список перфораций,

посмотрите на их множители продуктивности

Выберите Имя Шаблона – Дебиты Графики пользователя SUM_ctfac

Пример 3


Необходимо настроить модель по результатам испытаний разведочных скважин и характеристике вытеснения объекта- аналога.

Для настройки модели на характеристику вытеснения ЦФ должна рассчитываться как сумма квадратов отклонений характеристики «КИН-прокачка» от заданной по объекту-аналогу.

Характеристика задана в виде таблицы.

Отклонения нужно рассчитывать между ближайшими

точками (КИН, прокачка) объекта аналога и (КИН, прокачка) модели, т.к. значения прокачки в таблице могут не совпадать с расчетными.

Прокачка = накопл. закачка

поровый объём

0

0,1

0,2

0,3

0,4

0,5

0,6

0

0,2

0,4

0,6

0,8

1

1,2

Модель Эталон

Расчет целевой функции


Откройте модель

Example3
Создайте проект адаптации
Проведите любой эксперимент
Посчитайте одну модель
Перейдите на вкладку Целевые функции и результаты Калькулятор графиков
Запустите скрипт (импортируйте скрипт ex3.py)


1

2

3

4

Внимание! Опции

«Автоматически запускать скрипт для новых моделей» и

«Скрипт задан для одной модели»

включены по умолчанию.

Адаптация модели


Создайте целевую функцию (Целевые функции Добавить)
Задайте ее параметры (Тип функции – Оптимизация на прогнозе (Forecast Optimization), Тип объекта – Польз. график по месторождению, Параметр – Objective_function, Режим – минимизировать накопленное)
Создайте эксперимент Дифференциальная эволюция и выберите настроенную целевую функцию
Запустите расчет


1

2

3

4

5

6

Внимание! В секции Максимальное число запусков симулятора задайте любое количество реализаций, в рамках курса не стоит использовать слишком большие или маленькие значения.

Результат 1


Перейдите на закладку Кроссплот, чтобы просмотреть результаты (Графики менее наглядны, т.к. целевая функция не зависит от времени)
Выберите Месторождение Objective_function


Выберите оптимальную модель (с минимальным значением целевой функции

Результат 2


Альтернативный способ визуализации:

Импортируйте скрипт ex3_view.py из файла с входными данными
Задайте значения эталонной кривой и пороговое значение Целевой Функции, для отображения лучших вариантов


Внимание! Обязательно выключите опции

«Автоматически запускать для новых моделей» и

«Скрипт задан для одной модели» (т.к. этот скрипт обрабатывает результаты ВСЕХ моделей сразу.

Для успешной визуализации: В главном окне tNavigator (Настройки Опции Пути)

задайте внешний интерпретатор

Python

Установите библиотеку matplotlib: pip install matplotlib

Можно запускать в любой момент выполнения эксперимента AHM

Имя варианта и значение ЦФ

Визуализация

Пример 4


Данный пример демонстрирует возможности использования языка Python в настройке модели на трассерные исследования через модуль AHM

Исходные данные:

Добыча трассера по скважинам на конкретную дату

Параметры модели:
11х11х10 ячеек
4 добывающих скважины
1 нагнетательная скважина
Для настройки на добычу трассера изменяется множитель на проницаемость
В точках скважины (для межскважинного пространства множитель интерполируется)
Для работы с вектором добычи трассера создана UDQ:

UDQ

DEFINE WUTRTOT WTPTTR1 /

/

Задание модификаторов Определение модификаторов: множитель на проницаемость по скважинам


DEFINES

'PERMMULT_P1'

1

0.5

2

/

'PERMMULT_P2'

1

0.5

2

/

'PERMMULT_P3'

1

0.5

2

/

'PERMMULT_P4'

1

0.5

2

/

/

...

...

...

Использование модификаторов в арифметике

ARITHMETIC

--Создание куба множителей путем интерполяции

ARRMPERMSRC=-999.25 ARRMPERMSRC=IF(BLOCK(50,50)==1,@PERMMULT_P1@,ARRMPERMSRC) --Скважина P1

ARRMPERMSRC=IF(BLOCK(1050,50)==1,@PERMMULT_P2@,ARRMPERMSRC) --Скважина P2 ARRMPERMSRC=IF(BLOCK(1050,1050)==1,@PERMMULT_P3@,ARRMPERMSRC) --Скважина P3


--Скважина P4

ARRMPERMSRC=IF(BLOCK(50,1050)==1,@PERMMULT_P4@,ARRMPERMSRC)

ARRPERMMULT=interpolate_ml_idw(ARRMPERMSRC,-999.25,1,3)

--Модификация куба проницаемости PERMX=PERMX*ARRPERMMULT PERMY=PERMX

PERMZ=PERMX/10

/

Анализ чувствительности 1


Откройте файл модели Example4
Создайте проект адаптации (после создания проекта адаптации закройте окно создания нового эксперимента)
Откройте калькулятор графиков и запустите скрипт (импортируйте скрипт ex4.py)


1

2

Скрипт добавляет замеры добычи трассера в проект:

Создается график накопленной

добычи трассера – расчетные значения +

исторические точки
Создается целевая функция для адаптации модели


3

Анализ чувствительности 2


Запустите эксперимент Латинский Гиперкуб (20 вариантов)
Диапазон множителей на проницаемость: [0.5;2]


1

2

Анализ чувствительности 3


График OBJFUNC:

Не зависит от времени
Определён для месторождения в целом
Применяется как целевая функция для минимизации

График Cumulative_tracer_production:
Зависит от времени
Определён для скважин
У исторической модели определён только один момент времени (01.01.2018, дата замера)
Применяется для визуального сравнения результатов на графиках

Анализ чувствительности 4


Графики накопленной добычи трассера с историей:

Расчеты «покрывают» исторические точки
Можно переходить к автоматической адаптации

Адаптация модели


Создайте целевую функцию (Целевые функции Добавить)
Задайте ее параметры (Тип функции – Оптимизация на прогнозе (Forecast Optimization), Тип объекта – Польз. график по месторождению, Параметр – OBJFUNC, Режим – минимизировать накопленное)
Создайте эксперимент Дифференциальная эволюция и выберите настроенную целевую функцию, задайте Случайное число равным 100000000


4. Запустите расчет

1

2

3

4

5

6

Внимание! В секции Максимальное число запусков симулятора задайте любое количество реализаций, в рамках курса не стоит использовать слишком большие или маленькие значения.

Результат Сравнение результатов базового расчета и расчета с наилучшим качеством:

Остались вопросы?


Хотите узнать больше?

https://support.rfdyn.com

tNavigator@rfdyn.com


написать администратору сайта