1
Июл 19
Добрый день! Интересуют два вопроса к специалистам, которые считали в GAP модели газоконденсатных месторождений:
1) Можно ли не задавать давление на УКПГ/сепараторе, а рассчитать его при заданном уровне отбора со скважин/кустов?
2) Есть ли возможность задания автоматического графика бурения? Например, для подключения низконапорного пласта после падения давления в пласте с более высоким давлением, или просто вводить скважины по мере необходимости в соответствии с задаными темпами бурения?
И если эти задачи не решаются в GAP, можно ли решить их скриптами или через RESOLVE?
Опубликовано
10 Июл 2019
Активность
11
ответов
2203
просмотра
5
участников
1
Рейтинг
К сожалению с первым пунктов не все так просто.
С этим все гораздо проще. В мануале даже есть примеры как раз по этой теме. Автоматический ввод скважин при достижении некоторых условий, как например, падение добычи ниже указанной, в Resolve можно рализовать через Event Drilling Schedule или Workflow.
А график бурения и ввода скважин, задать напямую в GAP в секции Schedule для скважин или кустов.
Так же можно через GAP->Prediction->Edit Prediction Script написать небольшой скрипт на VBA.
Проблема в том, что такая задача сформулирована не полно. Поэтому простой ответ - нельзя. Поясню на простом примере. Пусть есть две скважины А и Б с разной продуктивностью, пусть для простоты характеристика продуктивности линейно зависит от устьевого давления (обычно это квадрат, но пусть будет линейно) и выражается одним коэффициентом - WPI. Q(А) = WPI(A)*(Рстат-Pуст(A)), Q(B) = WPI(B)*(Рстат-Pуст(B)).
Пускай статическое устьевое давление на обеих скважинах одинаковое Рстат=100 бар (это можно понимать как одинаковое пластовое давление, флюид и конструкцию скважины)
Пускай скважина A дает 500 тыс.м3/сут газа при устьевом 50 бар. WPI(А) = 10.
Пускай скважина Б дает 500 тыс.м3/сут при устьевом 80 бар. WPI(Б) = 25.
Задаем целевой уровень отбора 500 тыс.м3/сут, какое линейное давление нам для этого нужно?
Навскидку видим уже два решения, кардинально разных по давлениям:
1. Закрыть скважину А, оставить скважину Б с давлением 80 бар.
2. Закрыть скважину Б, оставить скважину А с давлением 50 бар.
Также можно дать и промежуточный вариант, который даже не требует штуцеров:
3. При линейном давлении 85.72 бар скважина А дает 143 тыс. кубов, скважина Б 357 тыс. кубов, в сумме 500.
Если добавим в систему хотя бы один штуцер (на более продуктивную скважину Б), то получим бесконечное множество решений с практически любым значением линейного давления.
В итоге, такой возможности в GAP нет, потому что сама задача некорректно поставлена. Нужно ее переформулировать, понять, какие есть ограничения на оборудование по давлению, скоростям потока и т.д.
Спасибо, исчерпывающе.
Подскажите, пожалуйста, вдогонку, есть ли способы бороться с нестабильностями потока, которые возникают при расчете? Есть несколько пластов, задан график ввода скважин, но при задании единой сети сбора и давления в точке УКПГ многие скважины вылетают со статусом Unstable, Choked by Optimizer. Давления в пластах различаются примерно на 30-50 атмосфер. Может, стоит разные системы сбора на них поставить?
Итак по первому вопросу... Как я уже писал выше, да можно менять давление на сепараторе во время расчета, но это потребует некоторых усилий. Конкретных способов несколько, но я бы рекомендовал использовать workflow, где все это можно сделать достаточно просто.
Для примера, я сделал простенькую модель, с примером похожим на тот, что приводит AlNiks с двумя скважинами, добывающими из разных пластов и с сильными различиями по продуктивности.
Итак имеются 2 нефтяных пласта - А и В. и 2 скважины Well-1а и Well-1b. Простая система сбора, скважины добывают фонтаном. На сепараторе, искусственно ограничена добыча жидкости уровнем 5000 bbl/d, но потенциально скважины могут добычать больше. Пласты имеют похожие свойства нефти и динамику роста обводненности. Продуктивность скваижны 1А: 5 stb/d/psi и скв. 1B: 1 stb/d/psi.
Самый простой вариант был был задать постоянное низкое давление на сепараторе и запустить на расчет, GAP сам бы ограничил добычу под заданные условия, меняя штуцеры на каждой из скважин. Точнее на скважинах бы просто задавалась необходимая потеря давления (dP Choke), которые потом при необходимости можно перевести в реальные размеры штуцеров.
Но наша задача - определить максимальное давление на сепараторе, при котором достигался максимальный дебит жидкости при минимальных ограничениях добычи со скважин.
Используя несложные workflow можно задать алгоритм выбора давления сепаратора, следующим образом, выбираем стартовое давление сепаратора (например с предудущего шага), выполняем расчет, если добыча жидкости меньше лимита, пробуем снизить давление на сепараторе, если оно еще не достигло минимума, если добыча равна максимуму (выше мы быть не может, т.к. при расчете модели добыча ограничена), то увеличиваем давление и перерасчитываем модель, повторяем каждую из отераций несколько раз пока не найдем нужное давление.
Для демонстрации я сделал модель только со снижением давления, задав в качестве стартового давления сепаратора заведомо высокое значение.
Результаты расчета:
Давление сепаратора (синяя кривая), постепенно с шагом 5 psi снижается с 530 до минимального давления 250 psi. В качестве стартового при инциализации расчета было взято 550 psi.
При этом на малопродуктивной скважине за все время расчета потери давления на штуцере были равны 0, а высокодебитная штуцерилась не более 20 psi.
А
Спасибо! Workflow - это через Resolve? Боюсь, у меня его нет. Или есть другой способ?
Интересно как у GAP идет оптимизация. ECLIPSE включает скважины по потенциалу, а GAP как делает? Наверное то же самое.
Тогда еще как вариант - через OpenServer.
НУ и я тут подумал на досуге... в принципе, имея только GAP, тоже можно реализовать подобный функционал через внутренние скрипты.
Я попробую реализовать и скинуть пример скрипта.
А вот собственно и скрипт, реализующий ту же логику, что и в Workflow в Resolve:
Sub Gap_PredStepEpilog()
MaxLiqRate = DoGet("GAP.MOD[{PROD}].SEP[{Separator}].MaxQliq")
MaxLiqRate = CDBL(MaxLiqRate)
LiqRate = DoGet("GAP.MOD[{PROD}].SEP[{Separator}].SolverResults[0].LiqRate")
LiqRate = CDBL(LiqRate)
SepPres = DoGet("GAP.MOD[{PROD}].SEP[{Separator}].SolverPres[0]")
SepPres = CDBL(SepPres)
If (LiqRate<MaxLiqRate) And (SepPres>250) Then
SepPres = SepPres-5
DoSet "GAP.MOD[{PROD}].SEP[{Separator}].SolverPres[0]", SepPres
LogMsg("Separator pressure: "+CStr(SepPres))
SetRedoStep()
End If
End Sub
В зависимости от задач можно значительно расширить логику выбора давления сепаратора внутри скрипта.
Сравнение результатов расчетов с использованием Workflow в Resolve и скрипта в GAP (концовка отличается, так как в GAP я указал другое минимальное давление на сепараторе 250 вместо 255 psi):
Способы есть, но нужно смотреть отдельно по каждому случаю и разбираться в причинах. Но как правило это происходит в тех случаях, когда пересечение VLP и IPR имеет 2 точки пересчения и поток близок к нестабильному. При оптимизации происходит ограничение добычи скважин для того чтобы удовлетворить ограничениям, и при это часто срабатывает PE5 stability flag, который срабатывает если жидкость начинает двигаться вниз по стволу из-за нехватки скорости. В реальной жизни, если модель скважины хорошо настроена на фактические данные, это не обязательно означает, что скважина будет отключена, но вероятно будет нестабильна из-за слаггинга, возможно перейдет на циклический режим работы.
В любом случае, если такое проиходит рекомендуется потратить некоторое время на изучение потоков, OLGA для этого идеально подходит.