Угловую 3D сетку -> 8-ми точку

Последнее сообщение
FullChaos 834 16
Июл 10

В какой программе можно провести такое конвертировние? также из нужно из 8-ми точки удалить несколько слоев, сделав дыры.
Может у кого есть написанная утилита? самому заморачиваться времени нету.

westa 147 15
Июл 10 #1

FullChaos пишет:

В какой программе можно провести такое конвертировние? также из нужно из 8-ми точки удалить несколько слоев, сделав дыры.
Может у кого есть написанная утилита? самому заморачиваться времени нету.

сетка регулярная или нет?

westa 147 15
Июл 10 #2

Невозможно удалить одну или несколько точек, не нарушив при этом геометрии. Там, где есть так называемые "дыры" точки все равно присутствуют, просто они неактивные. Если только это не разлом.
Ремасштабирование не решит проблему, проще перестроить модель с учетом "дыр".

Celebrity 1578 16
Июл 10 #3

а чо сам RMS не катит для такой конвертации??

FullChaos 834 16
Июл 10 #4

-сетка нерегулярная
-сделать "дыры" возможно только в 8-point grid (corner по своей структуре так не может)
-rms "не катит", из 8-point в corner умеет, назад нет
-поддержка обоих "гигантов" спасовала, знаем, слышали, но помочь не можем

Поясню: есть 8-ми точечный грид формата эклипс, где в неактивных ячейках вырезана сама структура грида. При конвертации в corner (необходимо чтоб обновить) "дыры" заполняются дополнительными слоями. Чтоб корректно всё вернуть назад в эклипс их нужно вырезать.

Взялся писать макрос, хотя так не хотелось.

EmptyEye13 102 16
Янв 11 #5

FullChaos пишет:

Взялся писать макрос, хотя так не хотелось.

Получилось? Я написал нечто близкое - мне разбор zcorn/coord для вывода 3D нужен. Только немного длинновато получается, хреновастенько код выглядит wacko.gif

Код

print 'I-%d J-%d K-%d' % (I+1, J+1, K+1)
print 'Centre %f %f %f' % (mean(coord[J:J+2, I:I+2, 0]), mean(coord[J:J+2, I:I+2, 1]), mean(zcorn[2*K:2*K+2, 2*J:2*J+2, 2*I:2*I+2]))

((imm, jmm, kmm, imm2, jmm2, kmm2), (ipm, jpm, kpm, ipm2, jpm2, kpm2)), \
((imp, jmp, kmp, imp2, jmp2, kmp2), (ipp, jpp, kpp, ipp2, jpp2, kpp2)) = coord[J:J+2, I:I+2, :]

((kmmp, kpmp), (kmpp, kppp)), ((kmmm, kpmm), (kmpm, kppm)) = zcorn[2*K:2*K+2, 2*J:2*J+2, 2*I:2*I+2]

a = (kmmp-kmm)/(kmm2-kmm)
b = 1-a
xmm, ymm = b*imm + a*imm2, b*jmm + a*jmm2
print 'point --+', xmm, ymm, kmmp

и т.д. Пока что-то не получается упростить sad.gif Но по крайней мере с геометрией в Cell Probe из Floviz совпадает

FullChaos 834 16
Янв 11 #6

угу, только работает на малых сетках, на больших почему то всё каверкает.

Цитата

Только немного длинновато получается

у меня так вообще 3 страницы кода biggrin.gif хреновый из меня программист

RomanK. 2139 16
Янв 11 #7

Скриншот бы проблемы.

EmptyEye13 102 16
Янв 11 #8

FullChaos пишет:

Поясню: есть 8-ми точечный грид формата эклипс, где в неактивных ячейках вырезана сама структура грида. При конвертации в corner (необходимо чтоб обновить) "дыры" заполняются дополнительными слоями. Чтоб корректно всё вернуть назад в эклипс их нужно вырезать.

У эклипса есть возможность 8-точку считать, задав её через ключевое слово GDFILE. Хотя в каком оно там виде должно быть не знаю - с какого угла выгружать, по часовой стрелке или нет. Ну это ладно, не совсем понятно как вообще можно 8-точку в zcorn/coord перевести без потерь, это же более ограниченный формат. Конвертер некие усредненные направляющие COORD вычисляет?

RomanK. 2139 16
Янв 11 #9

Это ясно. Не понятно про вырезанную структуру грида. Скриншотик бы что есть и что хочется. Без потерь (мне кажется) можно перевести, только это приведет к увеличению количества ячеек.

Пока мыл посуду домыслил. Не все так просто. Если 8 точечные блоки имеют скошенные (невертикальные) боковые грани перевод не получится. Также если блоки лежат друг на друге со смещением. Алгоритм усреднения между слоем z и z+1 будет работать только в случае очень простой геометрии. Нормально надо делать так: По всем блокам 8 точки собрать координаты (X, Y) это будет основой. Далее можно ввести некоторую погрешность, чтобы некоторую пару координат обьеденить в одну. И тут придется загрублять геометрию, для описания скошенной геометрии вертикальными гранями - придется добавлять столбцов и строк. Далее надо будет "приблизительно" свойства раскидать - например в 8точке был один блок, в корнерпоинт стало из четыре... Теоретически я мог бы написать этого монстра.

EmptyEye13 102 16
Янв 11 #10

RomanK. пишет:

Если 8 точечные блоки имеют скошенные (невертикальные) боковые грани перевод не получится.

Вот и я о том же. Но насколько я понял перевод из 8-точки уже есть, надо обратно в zcorn/coord, что гораздо проще. Мой скрипт в текущем виде читает бинарные *EGRID и можно в цикле все координаты 8-ми точек выгрузить, (i- j- k- ) (i- j+ k-) и т.п. - я нужную последовательность только не знаю, с какой вершины начинать и по часовой ли стрелке вести.

RomanK. 2139 16
Янв 11 #11

Если проще то могу написать за пару дней

FullChaos 834 16
Янв 11 #12

Начну с самого начала, с задачи, что было и что нужно было сделать.
Дано: старые достатночно большие гидродинамические модели выполненные петроальянсом. Апскелинг проведен их же хитрой самописной программулиной. В результате имеем 8point грид со слоями "через один"для экономии ресурсов. Сделано это, я понимаю, с целью, чтоб в одном случае когда между двумя слоями глины не было соединения (была просто дырка), а в другом районе где слои сливаются не было необходимости использовать несоседние соединения. Объяснил как смог. )) Eclipse и FloViz понимают и отображают.
Задача: корректно обновить структуру и свойства.
Решение: Petrel тоже понимает, но уже на этапе импорта конвертирует в corner-point при этом добавляя некие extra zone между, слоев будет n*2-1. RMS же умеет загружать 8point, но не умеет локально обновлять такие гриды. При конвертации в corner он растягивает существующие слои до середины пустых "дыр".
Хотел обновить petrel'ем и вырезать програмулиной лишние слои. Но текучка не дала во время все завершить, в результате пошли путем RMS - сконвертировали, растянули слои, ввели множитель на NTG, задали MultZ=0, там где слои ранее не соприкасались (со скриптами помогла поддрежка роксар). Минусы - увеличились размеры ячеек по Z.

Что касается структуры 8point и cornerpoint, то в процессе я пришел к выводу, что они асбсолютно идентичны: сначала в COORD описываются координаты XYZ самых верхних и самых нижних узлов, потом в ZCORN описывается координата Z каждого узла, каждой ячейки (по 8 на штуку), и так в обоих форматах, хотя по логике в corner смежные узлы должны быть общими, как я считал ранее. В гриде же достаточно вырезать узлы отвечающие за нужные слои из ZCORN.

EmptyEye13 102 16
Янв 11 #13

А вот интересно, что мешает использовать в эклипсе corner-point после первого же обновления? Каждый раз двойные преобразования..

FullChaos 834 16
Янв 11 #14

Число слоев другое, соотвественно перфорация "съезжает", это критично, т.к. руками при ~5000 скв на модель поправить сие нереально. Плюс так как возникают фиктивные доп. слои в местах где раньше сливались верхний и нижний будет слой нулевой толщины. Придется использовать несоседение соединения, это тоже критично, т.к. кол-во ячеек достигает 3 млн. В общем гидродинамщики это так объяснили, может конечно просто поленились biggrin.gif

Go to top