0
Июн 08
Народ, может кто нить кто нить подскажет как написать воркфло в Петреле для такой задачи:
Есть папка с картами (пористость) их нужно все пересчитать по одной зависимости (Кпо-Кпр) и соответственно создать новые карты.
Также интересно поделиться опытом написания воркфло для различных задач.
Есть "мега" воркфло для выгрузки карты расчленености из модели....
Опубликовано
07 Июн 2008
Активность
37
ответов
8340
просмотров
7
участников
0
Рейтинг
Контекст
Petrel x248
Меня уже давно волнует вопрос написания плагинов для Петреля…
Я бы обменял все плагины, что у меня есть на короткие инструкции по написанию простейшего плагина (например, по осреднению параметров модели по колонкам (для построения карты).
Есть еще у меня инструкция по Ocean'у (на анг.), но она написана по принципу "много чего написано, но такая хрень… что время жалко тратить на чтение
PS Все, что у меня есть могу кинуть на адрес в Пн…
Хм, вопрос был про Воркфло :-) а не плагины....
Написание простого плагина не так сложно как кажется!
Самый простой путь разобраться с этим это запустить прилагаемый (Petrel 2005) проект VisualStudia.net и покопаться в нем.
C:\Program Files\Schlumberger\Petrel 2005\APIDevKit\Samples\API_samples.sln
[Нужно поставить VisialStudia.net]
Вот пример как из Модели выгрузить ГСР....
В принципе ничего страшного здесь нет....
{
int k=0;
int i=0;
int j=0;
uint ij=0;
uint ij1=0;
float Summing=0;
float Summing1=0;
float devide2=0;
Index3 numCells = PropIN.NumCellsIJK;
int ijtot= (numCells.J)*(numCells.I);
CoreSystem.Log.Info(string.Format("undefined = {0:f10}", PropIN[5,15,1] ));
CoreSystem.Log.Info(string.Format("Number of cells in IJ = {0:f0}", ijtot ));
for ( k=0; k<numCells.K; ++k)
{
for ( i=0; i<numCells.I; ++i)
{
for ( j=0; j<numCells.J; ++j)
{
Summing=PropIN[i,j,k]*PropInLito[i,j,k]*PropInRegion[i,j,k]+ Summing;
ij=ij+PropInLito[i,j,k]*PropInRegion[i,j,k];
Summing1=PropInLito[i,j,k]*PropInRegion[i,j,k]+ Summing1;
ij1=ij1+PropInRegion[i,j,k];
} //j cycle
} // i cycle
float devide=Summing/ij;
float devide1=Summing1/ij1;
devide2=(float)ij*100/ijtot;
CoreSystem.Log.Info(string.Format("layer = {0:f0}, GSR = {1:f4}, Proportion of Sand, % = {2:f6}", k , devide, devide1));
Summing=0;
ij=0;
Summing1=0;
ij1=0;
} // k cycle
} //invoke
могу предложить брутальный способ, на случай если ничего лучше не будет
loop - For All Icons In ... Child reference ...
дальше выражаешь свою зависимость через набор обыкновенных арифметических операций (может даже придется создать surfac'ы типа е и тд )))
и используешь Arithmetic Operations
end loop
ну и в начале желательно добавить строчку с копированием папки и использованием новой папки в качестве базы для лупа, а то данная операция просто заменит карты в сущуствующей
выглядеть он конечно будет странно, но зато он будет рабоать
Ага, смысл ясен, но что то с Child reference ... не могу разобраться?
Если не сложно, можно пример?
в child reference ты просто указываешь какую-нить Variable (из закладки воркфло)
и в дальнейших операциях уже просто вставляешь этот Variable
прикрепил скрин в качестве примера:
этот воркфло прибавит 1000 всем поверхностям (а также точкам, полигонам и тд.) в папке 12Picture1.jpg
А с well tops как работать? Пробую посчитать isochore points для каждого well top.
Пока цветок не выходит
с well tops'ами уже без скрипта не обойтись...
помогло!
Спасибо!
Всегда бесило, что isochore points нельзя апдейтить.
Т.е. если ты сделал эти самые isochore points, настроил стили всех аттрибутов, а потом поменял well tops где-нить - надо снова делать новые isochore points и тд..
Есть какие-нибудь наработки?
Я вот думаю, что уже существующие isochore points можно апдейтить с помощью workflow:
- в reference задать welltops
- по welltops посчитать surfaces (не важно каким алгоритмом)
- калькулятором для аттрибута thickness задать разницу between surfaces
Не знаю, легче ли это..
неа... я обычно с веллтопами руками работаю,
хотя то, что ты написал должно сработать
Гриша, ты штоли?
мож и боян, но вот одна ссыла на форум
http://www.egpet.net/vb/tags-petrel.html
тама можно найти полезную библиотеку воркфлоу
http://ifile.it/zrqku94
Привет!
Часть вопроса уже задал в моделировании - повторяться не буду
Остальная часть - можно ли в workflow "попросить" Petrel создать каротаж по кубу свойств? И если да, то как можно сделать это только для нужных мне скважин...
Вопросы, возможно, глуповатые, но разобраться нужно быстро - времени нет
а зачем в воркфлоу? это делается скопом для всех скважин одним нажатием кнопки, вот по поводу фильтра незнаю
Есть просто идея по моделированию Х реализаций, там бы нужно посреди процесса снять лог по свойству и использовать эту кривую в дальнейшем, отсюда желание затолкать все в воркфлоу
может быть в воркфлоу сделать сейсмический куб из текущего свойства, а скважину превратить в точки (предварительно по каждой скважине и отделно в папочку) затем в том же воркфлоу и присвоить значения из сейсмического куба этим точкам,
просто вместо логов у вас будет точки с атрибутами в количестве Х реализаций....где то так я размышляю. Я так понимаю нужно сначало создать и начальный сейсмический куб пустышку с нужным дискретом по вертикали.
Ух... сурово
А (усложняя задачу) разве можно будет эти точки потом преобразовать в каротаж?.. (собсссно, для целей, указанных в соседней ветке, которую Вы уже видели )
в пете 2005 вродь нет напрямую, но мож еще покопаюсь
Спасибо за активное участие!
ну если вам нужно просто посмотреть эти полученные "псевдологи", то мож "и так сойдет"(с)?
по задумке хочется снять каротажки, которые тут же пустить, как входные данные для дальнейшего моделинга...
Ох...
ну ок, апскейлить то можно и точки с атрибутами
Так а в моделинг же потом все равно каротажи нужны, а не точки... видимо, гиблая затея
Буду, скорее всего, делать кучу реализаций куба#1, потом усреднять, снимать каротаж, а потом уже с этими логами строить кучу реализаций куба#2.
Изначально хотел по каждой реализации куба#1 снимать логи, и сразу моделить одну реализацию куба#2, т.е. снимать логи до усреднения реализаций куба#1
Еще раз пролистал ман - пусто
стоп, в моделинг нужны апскейлиные логи, или как? ну дык какая разница че апскейлить в куб - логи или точки?
Ну, тогда... делая скидку на мое базовое знание workflow manager (или как там его ), можно пробежаться по пунктам?
1. Я так понимаю, что нужно с нужным дискретом создать псевдо-сейсмокуб (а зачем именно сейсмокуб?)
2. разбить скважины на точки (опять же с нужной дискретизацией)
3. точкам - свойства куба
4. апскейлить точки
5. и... вот тут вопрос - теперь из точек нужно склеить логи? или точки что-нить типа "convert to logs"... щас уже глупые предположения, просто мозг уже сломан
все верно, окромя пункта 5 - зачем логи? или я неправильно понял задачу
- есть 3d грид, там чет моделится на основе апскейлиных логов?
- затем результат выгуржается в лог обратно чтоб сравнить или опять подать на моделирование? - но ведь моделирование предполагает поиск результата между скважинами а в скважинах нужно соответсвие входяжему логу - так ведь?
Всё верно!
Проще нарисовать, но картинки в сеть у меня с работы не уйдут...
Я все о моделировании эксплуатации/разведки
Идея моя расписана уже и там, чиркану еще раз (раз уж нас двоих и там, и тут показывают ):
1. хочу замоделить свойство (литологию) как два разных кубика (или один и тот же, но проще представить, что я моделю два разных куба) первый - с большим радиусом вариограмм, который подходит для большей части территории, 2й - для зоны эксплуатации
2. после того, как замоделю большой куб, хочу на расстоянии Х от эксплуатации перестроить кусочек того же кубика, но с малым радиусом вариограммы. Для этого я хочу ввести в модель фиктивные скважины по периметру той зоны, которую хочу перемоделить (т.е. на расстоянии Х от эксплуатации). И вот в этих фиктивных скважинах мне нужен каротаж, чтобы сохранить прежний тренд от разведок, и при этом заново отстроить эксплуатацию...
Блин, сам не знаю, понял бы или нет... картинок, жаль (снова) , нет
ааааа, понял, т.е. фиктивные логи нужны только после первой итерации, далее они менятся не будут так как будут уже участвовать во второй итерации с эксплуатационными, и логи уфиктивных будут равны значению куба литологии после первой итерации расчета куба с большим рэнжем.....ну, для меня слишком сложно, я все же попробовал бы итерационный просесс, тот что я описал в соседней ветке - моделить постепенно включая в разведочные часть (или по одной) эксплуатационные с максимальными выскоками и так далее по ниспадающей, а результат бы подавал как тренд для следующей итерации, соответсвенно и ренжи постепенно уменьшались бы, так наверное?
да, по поводу пунка 5 - еще раз, можно апскейлить вместо лога точки с атрибутами, это дело не меняет, почти по-моему
да, и еще, дискрет куба думаю не стоит делать равным дискрету лога (типо там 0.2 м) а в дискрет 3D грида
Продолжим в соседней?..
Алексей, для этих целей есть плагин, который помечает все ячейки вдоль замкнутого полигона как перемасштабированные, таким образом можно миновать стадию создания фиктивных скважин с логами и их перемасштабирования в модель.
Плагин правда работает только в версии 2008 и 2009. на страницеhttp://www.slb.ru/sis/item355/ можно скачать его описание - номер плагина "4.6" , но вот сами плагины к сожалению скачать больше нельзя. Остается надеяться только на тех кто успел скачать.
С этим плагином можно создать воркфлоу для обновления модели:
Сначала ручками создаешь замкнутый полигон, затем в воркфлоу:
1. двигаешь его к нужной скважине.
2. с помощью плагина помечаешь ячейки как перемасштабированные,
3. в воркфлоу добавляешь процесс геометрического моделирования для создания фильтра внутри этого полигона.
4. и добавляешь процесс моделирования свойств с включенным фильтром
Если надо обновить модель вокруг нескольких скважин, то из этого воркфлоу можно создать цикл и процесс моделирования вынести за цикл - таким образом сэкономиться немного времени))
Спасибо, как раз оно Это снимает пару проблем с фиктивными скважинами. Спасибо!
А еще пара вопросов по воркфлоу, на которые я решенья пока не нашел - надеюсь потому, что еще многого не догнал А можно ли в воркфлоу поставить фильтр по какому-нибудь свойству? тут это не нужно, а вообще эт реально? И 2й - можно ли тут же усреднить множество реализаций куба?
Ну.... это я чего-т затупил сам дотумкал
Фильтр по свойству можно использовать. Но сначала создай это свойство вручную и отметь как фильтр на закладке
Properties => settings => Filter . а в воркфлоу просто меняй это свойство и фильтр будет автоматически перестраиваться по обновленному свойству. и когда будешь пользоваться этим фильтром не забывай ставить соответствующую галочку. Например в калькуляторе свойств есть такая галочка. В процессах моделирования фаций и непрерывных свойств тоже есть такая галочка на закладке Common.
осреднять тоже можно в воркфлоу))) - с помощью калькулятора свойств. В цикле с помощью калькулятора пробегаешься по всем свойствам и суммируешь их. а потом просто делишь сумму на количество свойств.
Еще можно осреднить одной кнопкой, но уже не в воркфлоу: в настройках папки со свойствами модели есть закладка Operations, там все можно сделать очень быстро.
По поводу осреднения свойств: если ты распространяешь свойства гаусом, а потом осредняешь много реализаций, то ты можешь сэкономить кучу времени распространив свойство кригингом с темиже настройками что и в гаусе. получишь почти тот же результат. кригинг=осреднению кучи реализаций гауса (десятки реализаций). а если ты осредняешь только потому что получается очень пестрая картина при моделировании гаусом, то проще в настройках моделирования гаусом включить сглаживание - картинка сразу станет человеческой))
Спасибо за помощь!
Насчет этого сглаживания с SLB решили, что не наш вариант (долго рассказывать)
Осредняю именно для "человеческого вида"
Вопрос по плагину... а он всегда так долго работает? или сам не пользовался? или есть какие-нить вещи, сделав которые я упрощу ему и себе жизнь?