“Хозяюшке” на заметку #3: Полезные трюки калькулятора Petrel

“Хозяюшке” на заметку #3: Полезные трюки калькулятора Petrel

Не все знают, что в Петреловском калькуляторе свойств можно обращаться к любой ячейке грида, используя такой же синтаксис, как и во многих языках программирования, указывая координаты ячейки в квадратных скобках. При этом, если скобки не указаны подразумевается, то адресуется текущая ячейка, с координатами I, J, K.

Координаты ячейки могут быть относительными (I+1 – следующая по оси Х, K-1 – предыдущий слой и т.д.) или абсолютными, указывая на конкретную ячейку.

Например, в выражении ниже произойдет копирование свойств первого слоя на все остальные. В принципе в этом выражении можно даже конструкцией if не пользоваться.

Poro = if(K>1, Poro[i,j,1], Poro)
или
Poro = Poro[i,j,1]

Ну и еще, исключительно для примера, произведём некого рода сглаживание, путем осреднения значений соседних ячеек. Понятно, что сам Petrel умеет сглаживать гораздо лучше, но тут важно продемонстрировать возможности калькулятора:

PoroSmooth = (Poro[i-1,j,k]+Poro[i+1,j,k]+Poro+Poro[i,j-1,k]+Poro[i, j+1,k])/5

И еще момент, в последнем примере нет необходимости проверять граничные значения (не вывалились ли мы за пределы грида). Ничего криминального не произойдет. Petrel автоматически проигнорирует выражения, в которых происходит обращение к недопустимым значениям индексов, что очень удобно и значительно упрощает жизнь, т.к. нет необходимости вводить огромное количество вложенных if-ов в одном выражении. НО, есть один нюанс, краевые ячейки результирующего грида будут иметь неопределенные значения – U, которые если это необходимо можно будет подправить следующими выражениями:

PoroSmooth = if(i=1,(Poro[i+1,j,k]+Poro+Poro[i,j-1,k]+Poro[i, j+1,k])/4, PoroSmooth)
PoroSmooth = if(i=i.Max,Poro[i-1,j,k]+Poro+Poro[i,j-1,k]+Poro[i,j+1,k])/4, PoroSmooth)
...

Ну и еще в вышеприведенном примере, если в вашем свойстве Poro есть неопределенные ячейки внутри грида, это конечно же добавит необходимость их отработать.

Share

Leave a Reply

Your email address will not be published. Required fields are marked *