как считать коэффициент расчлененности я знаю вот как посчитать его в Petrel? проблема по большому счету только одна, как посчитать в калькуляторе Petrel количество прослоев коллектора и общее количество проластков.
Насколько я знаю, в случае, если у вас есть 3D модель, количество пропластков и по кубу и по скважинам можно найти в Data Analysis. А если модели нет - наверняка можно через workflow посчитать, правда не так все просто будет. В конечном счете, плагин - это специально созданный для этого инструмент, так что с ним все будет легко
Если бы не посто про 500 баксов в месяц не писал бы однако да уж)
Вообще можешь написать workflow но будет он работать долго и нудно
Второй самый простой вариант выгрузить файл свойств NTG в и загрузить его в эксель далее в эселе напиши слудющий макрос
да при выгрузке укажи знаечние не определенных ячеек как -999
обычно он выгружается в 4 столбца
''i,j,k размерность твоего грида
dim arr(i,j,k) as double
dim frac(i,j,k) as double
ll=2 ' 'это строка с которой будут начинаться твои загруженные знаечния NTG
nn=1 ' 'это столбец
set q=workshets("имя товего листа куда ты сохранил значения свойства")
for k=1 to kk
for j=1 to jj
for i=1 to ii
arr(i,j,k)=q.cells(ll,nn)
nn=nn+1
if nn>4 then
nn=1
ll=ll+1
end if
next i
next j
next kk
''- ты загрузил файл свойств теперь тебе надо посичитать расчлененность
for jj=1 to j
for ii=1 to i
for kk=1 to k
if arr(i,j,kk)>=0 then exit for
next kk
fraction=-999
if kk<k then
fraction=1
startfacies=arr(i,j,kk)
for kkk=kk+1 to k
if arr(i,j,k)<> startfacies then
frac=frac+1
startfacies=arr(i,j,kkk)
end if
next kkk
end if
for kk=1 to k
frac(ii,jj,kk)=fraction ' это и есть твой массив расчлененностей
next kk
next ii
next jj
' далее надо распечатать массив на одельный лист
n=2
l=1
set q=workshets("имя товего листа куда ты будешь записывать новое свойство")
for kk=1 to k
for jj=1 to j
for ii=1 to i
q.cells(n,l)=frac(ii,jj,kk)
if l>5 then
l=1
n=n+1
end if
next ii
next jj
next kk
Понимаю, что сложно но сам код если с логикой все в порядке понятен достаточно и поверь если полчиться сделать это то в будущем сможешь делать вещи которые будут значительно экономить твое время
а что из базы данных нельзя посчитать расчлененность? мы так считаем. вот расчлененность модели сложнее, по моему плагин может посчитать расчлененность на небольшой модели, когда я пытался его использовать на своих моделях все просто вылетало к чертовой матери:
Извините вы собрали в массив значение переменных, действительно красиво, на сколько я понял коллектор не коллектор, НТГ в целом по залежи или по скважине выгрузили?
Вопрос "Хочу посчитать коэффициент расчлененности на каждой скважине" в начале темы.
Для вычисления расчлененности по модели необходимо сравнивать значения свойства в соседних ячейках. Насколько я знаю, в Petrel нет такого функционала, поэтому вычисление расчлененности без посторонних инструментов (например в калькуляторе или workflow) невозможно. Для фиксированного количества ячеек по Z, наверное, можно что-то замутить через карты, заведя переменную для каждого слоя модели и строя карты по каждому слою.
1. Пусть есть куб NTG, 1 - коллектор, 0 - не колллектор.
2. Строим куб NTG_Shift со сдигом значений по z на одну ячейку вниз (NTG_Shift в первом слое присвоить NTG в последнем слое, т.е. циклический сдвиг) - это ключевой шаг, который был невозможен в предыдущих версиях.
3. Строим куб Boundaries = NTG_Shift - NTG. Получаем Воundaries = 1 - граница коллектор-неколлектор, Boundaries = -1 - граница неколлектор-коллектор. Boundaries = 0 - нет границы. Но в первом слое значения некорректны, т.к. сравниваем первый слой с последним. Корректируем следующим образом, для первого слоя Boundaries = (NTG_Shift - 0.5)*2. Таким образом мы учтем границы пропластков на "дне" модели, которые до сих пор не посчитаны.
4. Строим Reservoir = if (Boundaries=-1,0,Boundaries) и NonReservoir = if (Boundaries=1,0,-Boundaries)
5. Строим суммарные карты по этим свойствам и получаем карту кол-ва пропластков-коллекторов и карту кол-ва пропластков-неколлекторов.
Конечно, всё оптимизируется. С кубиками просто нагляднее :) Просто возможны глюки из-за сложной формы грида, когда что-нибудь выклинивается - вылезают Undefined значения при сдвиге.
Только я не понял, зачем в конце дополнительное условие, вроде должно быть просто:
с помощью плагина :)
_____________________
это ответ службы поддержки Шлюмберже, я к ним обращался с этим вопросом месяц назад, думал в 2010 версии можно без плагина обойтись :)
Не хило стОит плугин, 580 зелени за месяц, пипец!
раньше для 2008 версии были бесплатно )
Плагины это конечно все хорошо. может кто скажет как в калькуляторе посчитать количество пропластков коллекторов и общее количество пропластков.
почему раньше? 2008 версия никуда не делась))
в самом petrel не придумал как, можно только выгрузив каждую скважинку в эксель
http://oilm.nglib.ru/book_view.jsp?idn=000234&page=14&format=free
как считать коэффициент расчлененности я знаю вот как посчитать его в Petrel? проблема по большому счету только одна, как посчитать в калькуляторе Petrel количество прослоев коллектора и общее количество проластков.
имеющимся функционалом в петреле без плагина, это практиго не сделать. Свяжитесь со службой поддержки )
разные варианты перебирал через калькулятор, не придумал :(
ну так-то да, никуда не делась 2008 версия ;) но работаю и создаю проекты щас в 2010 версии
Я к ним обращался, вот вопрос:
"Подскажи пожалуйста как посчитать расчленённость?
В исходных LOG’ах я неколлектор сделал андефайн, как в атрибутах посчитать количество пропластков в пласте?"
вот ответ службы поддержки:
"К сожалению, в Petrel нет возможности напрямую сделать это, но вы можете воспользоваться следующими плагинами, чтобы посчитать расчлененность:
T21 - http://www.ocean.slb.com/pages/product.aspx?category=petrophysics&cat=ocean&id=pst2-b1
ExpertiseModel - http://www.ocean.slb.com/pages/product.aspx?category=geophysics&cat=ocean&id=pexm-b1
Обратите внимание, для каждого плагина есть бесплатная 10-дневная версия."
:)
Насколько я знаю, в случае, если у вас есть 3D модель, количество пропластков и по кубу и по скважинам можно найти в Data Analysis. А если модели нет - наверняка можно через workflow посчитать, правда не так все просто будет. В конечном счете, плагин - это специально созданный для этого инструмент, так что с ним все будет легко
В топку плагины))
пример макроса для построения карты расчлененности по модели rasch_iz_modeli.jpg
пример для расчлененности по скважинам rasch_po_skvazhinam_i_apskeylinym_yacheykam.jpg
Если бы не посто про 500 баксов в месяц не писал бы однако да уж)
Вообще можешь написать workflow но будет он работать долго и нудно
Второй самый простой вариант выгрузить файл свойств NTG в и загрузить его в эксель далее в эселе напиши слудющий макрос
да при выгрузке укажи знаечние не определенных ячеек как -999
обычно он выгружается в 4 столбца
''i,j,k размерность твоего грида
dim arr(i,j,k) as double
dim frac(i,j,k) as double
ll=2 ' 'это строка с которой будут начинаться твои загруженные знаечния NTG
nn=1 ' 'это столбец
set q=workshets("имя товего листа куда ты сохранил значения свойства")
for k=1 to kk
for j=1 to jj
for i=1 to ii
arr(i,j,k)=q.cells(ll,nn)
nn=nn+1
if nn>4 then
nn=1
ll=ll+1
end if
next i
next j
next kk
''- ты загрузил файл свойств теперь тебе надо посичитать расчлененность
for jj=1 to j
for ii=1 to i
for kk=1 to k
if arr(i,j,kk)>=0 then exit for
next kk
fraction=-999
if kk<k then
fraction=1
startfacies=arr(i,j,kk)
for kkk=kk+1 to k
if arr(i,j,k)<> startfacies then
frac=frac+1
startfacies=arr(i,j,kkk)
end if
next kkk
end if
for kk=1 to k
frac(ii,jj,kk)=fraction ' это и есть твой массив расчлененностей
next kk
next ii
next jj
' далее надо распечатать массив на одельный лист
n=2
l=1
set q=workshets("имя товего листа куда ты будешь записывать новое свойство")
for kk=1 to k
for jj=1 to j
for ii=1 to i
q.cells(n,l)=frac(ii,jj,kk)
if l>5 then
l=1
n=n+1
end if
next ii
next jj
next kk
Понимаю, что сложно но сам код если с логикой все в порядке понятен достаточно и поверь если полчиться сделать это то в будущем сможешь делать вещи которые будут значительно экономить твое время
оооо temr красава!!! молодец
а что из базы данных нельзя посчитать расчлененность? мы так считаем. вот расчлененность модели сложнее, по моему плагин может посчитать расчлененность на небольшой модели, когда я пытался его использовать на своих моделях все просто вылетало к чертовой матери:
Спасибо, старался)
я видимо совсем чайник.
Извините вы собрали в массив значение переменных, действительно красиво, на сколько я понял коллектор не коллектор, НТГ в целом по залежи или по скважине выгрузили?
Вопрос "Хочу посчитать коэффициент расчлененности на каждой скважине" в начале темы.
Тут просто спор http://heriot-watt.ru/t2487.html
а можно пожалуйста перезалить картинки?
Для вычисления расчлененности по модели необходимо сравнивать значения свойства в соседних ячейках. Насколько я знаю, в Petrel нет такого функционала, поэтому вычисление расчлененности без посторонних инструментов (например в калькуляторе или workflow) невозможно. Для фиксированного количества ячеек по Z, наверное, можно что-то замутить через карты, заведя переменную для каждого слоя модели и строя карты по каждому слою.
В Petrel есть такой функционал - индексация массивов по I,J,K поддерживается с 2011-й версии
вот мне как раз синтаксис нужен, помню на тех картинах он был
пойду хелп покопаю, может там есть
Тогда все элементарно и не надо никаких плагинов.
1. Пусть есть куб NTG, 1 - коллектор, 0 - не колллектор.
2. Строим куб NTG_Shift со сдигом значений по z на одну ячейку вниз (NTG_Shift в первом слое присвоить NTG в последнем слое, т.е. циклический сдвиг) - это ключевой шаг, который был невозможен в предыдущих версиях.
3. Строим куб Boundaries = NTG_Shift - NTG. Получаем Воundaries = 1 - граница коллектор-неколлектор, Boundaries = -1 - граница неколлектор-коллектор. Boundaries = 0 - нет границы. Но в первом слое значения некорректны, т.к. сравниваем первый слой с последним. Корректируем следующим образом, для первого слоя Boundaries = (NTG_Shift - 0.5)*2. Таким образом мы учтем границы пропластков на "дне" модели, которые до сих пор не посчитаны.
4. Строим Reservoir = if (Boundaries=-1,0,Boundaries) и NonReservoir = if (Boundaries=1,0,-Boundaries)
5. Строим суммарные карты по этим свойствам и получаем карту кол-ва пропластков-коллекторов и карту кол-ва пропластков-неколлекторов.
6. PROFIT!!!
Wastekland Rat: Отличный метод, только я бы немного его упростил, убрав несколько промежуточных гридов, но суть метода оставил прежнюю
Col = дискретное свойство коллектор-неколлектор
ReservoirLayers=if(K<КоличествоСлоев, if(Col-Col[I,J,K+1]>0,1,0),if(Col=Col[I,J,K-1] or Col=0,0,1))
Аналогично для неколлектора если нужно, хотя по-моему всегда количество слоев коллектора считают.
Конечно, всё оптимизируется. С кубиками просто нагляднее :) Просто возможны глюки из-за сложной формы грида, когда что-нибудь выклинивается - вылезают Undefined значения при сдвиге.
Только я не понял, зачем в конце дополнительное условие, вроде должно быть просто:
ReservoirLayers=if(K<КоличествоСлоев, if(Col-Col[I,J,K+1]>0,1,0),if(Col=0,0,1))
Да все верно, доп. условие не нужно. С доп условием при чистом коллекторе в пласте получится расчлененность 0