Чтение реккурентных свойств в Eclipse из UNRST файла

Последнее сообщение
Alex Bordzilovsky 41 14
Май 08

Коллеги всем доброго дня! biggrin.gif Обращаюсь к нашим спецам еклипсерам) Возникла тут задача требующая чтвния свойств из UNRST файла, делаем на Delphi может ли кто нибудь подсказать алгоритм чтения реккурентных свойств из UNRST файла или может быть какое то описания формата этого файла, а то уже голову тут сломали найти нигде не можем. Спасибо!

Mishgen 145 14
Май 08 #1

Alex Bordzilovsky пишет:

Коллеги всем доброго дня! biggrin.gif Обращаюсь к нашим спецам еклипсерам) Возникла тут задача требующая чтвния свойств из UNRST файла, делаем на Delphi может ли кто нибудь подсказать алгоритм чтения реккурентных свойств из UNRST файла или может быть какое то описания формата этого файла, а то уже голову тут сломали найти нигде не можем. Спасибо!

Сие не просто ... а очень просто:
1. Читаем File Handling in ECLIPSE File internal format page 219 (Eclipse "Technical Description" 2005)
- ничего толком не понимаем и приступаем к экспериментам
2. Берем утилиту Eclipse - $convert.bat .... она позволяет перевести бинарный UNRST в ASCII (ну или ключевое слово FORMATED в RUNSPEC) и изучаем как это выглядит в тексте на небольшом примере. Заодно лучше конечно начать всетаки с НЕ унифицированного ... но тут у каждого свой подход.
3. Понимаем, что вначале неплохо бы прочесть файл RSSPEC (смотрим вновь его ASCII вариант и изумляемся как все тонко закручено).
4. Пытаемся прочитать бинарник Eclipse. Обнаруживаем, что байты в слове надо менять местами как в стандартах UNIX, а программируем-то под Win! (меняем их местами и все дела).
5. Тестируем загрузку каких-то массивов каких-то данных ... радуемся :-)
6. Обнаруживаем, что на больших файлах программа не работает, вспоминаем, что в Eclipse "Technical Description" что-то писали про "блоки". Упс - оказывется FORTRAN пишет данные блоками, а не непрерывно. Учимся распознавать конец блока.
7. Блин файлы читаем, но значений меньше чем ячеек (NX*NY*NZ). Хватает только на активные ... учимся общаться с EGRID или INIT (вот тут могу соврать) и привязывать IJK к индексу (ну это просто, этому нас еще в скриптах FloGrid научили).
8. Радостно тащимся от своей программы, мощи разума ... потом узнаем что есть еще LGR, PARALLEL и 64-разрядные версии ... ломаем подкидную доску и покидаем большой спорт.
9. Плюем на "нестандартные решения" и пишем "workflow" под Petrel .... если совсем злые - переходим за недельку на C# и под "иханным Оушеном" создаем свой первый "плагинчик" которым на радостях делимся с коллегами.

Уф. Ну это если коротенько.

С уважением,
Инженер.

ЗЫ Вроде все правильно описал, если где и ошибся, то это в моменте привязки значения к I J K, тут что-то не припомню. Знаю, что создается масссив индексов к которому обращаешься через I J K, чтоб получить ID по которому можно обратиться уже непосредственно к массиву данных. А вот откуда его "притянуть" в начале ... по-моему он и в INIT и в EGRID зашит, но вот есть ли он в самом UNRST не знаю.

Alex Bordzilovsky 41 14
Май 08 #2

Спасибо огромное за то что поделился житейским опытом! biggrin.gif Объяснение исчерпывающее и оч полезное, а то мы своим умом дошли пока только до пункта 3 твоего "рецепта". Хотя уже счас прилично прифигели "как там все тонко закручено" Судя по твоим объяснениям матерков в связи с этим увлекательным занятием предстоит еще много, будем морально готовы)

Go to top