Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Основы компьютерных технологий решения геологических задач

..pdf
Скачиваний:
0
Добавлен:
12.11.2023
Размер:
13.24 Mб
Скачать

Имя2 – имя столбца Электронной таблицы, содержащего целочисленные индексы;

Индекс – числовая константа, внутренняя переменная программы, ячейка Электронной таблицы, элемент блока параметров. Значение аргумента должно быть целым числом. Этот аргумент является фильтром, который отбирает для расчета среднего геометрического только те элементы из столбца Имя1, для которых соответствующие значения элементов столбца Имя2 равны Индексу.

Пример.

G – переменная; Кп – столбец в таблице, содержащий коэффициенты пористости; ХН – столбец в таблице, содержащий индексы флюидов от 1 до 5, при этом 1 соответствует – воде, 2 – воде с нефтью, 3 – нефти с водой, 4 – нефти, 5 – газу.

с

сВ этом фрагменте программы определяется среднее геометрическое

сзначение коэффициента пористости для газовой части залежи

с

G = GeomMeanByIndex (Кп, ХН, 5)

HarmMean

Функция HarmMean находит среднее гармоническое в столбце Электронной таблицы. Функция имеет 1 аргумент. Аргументом функции должно быть имя столбца Электронной таблицы.

Пример

H – переменная; Прув (продуктивность по углеводородам) – столбец в таблице H = HarmMean (Прув) // Переменная H содержит среднее гармоническое // значение столбца Прув

HarmMeanByIndex

Функция HarmMeanByIndex находит среднее гармоническое в столбце Электронной таблицы с использованием в качестве фильтра целочисленного индекса. Функция имеет 3 аргумента. Обращение к функции выглядит следующим образом:

H = HarmMeanByIndex (Имя1, Имя2, Индекс),

где Имя1 – имя столбца Электронной таблицы, для которого будет производиться расчет среднего гармонического;

Имя2 – имя столбца Электронной таблицы, содержащего целочисленные индексы;

Индекс – числовая константа, внутренняя переменная программы, ячейка Электронной таблицы, элемент блока параметров. Значение аргумента должно быть целым числом. Этот аргумент является фильтром, который отбирает для расчета среднего гармонического только те элементы из столбца Имя1, для которых соответствующие значения элементов столбца Имя2 равны Индексу.

191

Пример

H – переменная; Прув – столбец в таблице, содержащий продуктивности по углеводородам; ХН – столбец в таблице, содержащий индексы флюидов от 1 до 5, при этом 1 соответствует – воде, 2 – воде с нефтью, 3 – нефти с водой, 4 – нефти, 5 – газу.

с

сВ этом фрагменте программы определяется среднее гармоническое

сзначение продуктивности по углеводородам для газовой части залежи

H = HarmMeanByIndex (Прув, ХН, 5)

ArithWeightedAve

Функция ArithWeightedAve находит арифметическое средневзвешенное в столбце Электронной таблицы. Функция имеет 2 аргумента. Обращение к функции выглядит следующим образом:

A = ArithWeightedAve (Имя1, Имя2),

где Имя1 – имя столбца Электронной таблицы, для которого будет рассчитываться арифметическое средневзвешенное;

Имя2 – имя столбца Электронной таблицы, по которому будет производиться взвешивание.

Пример

А – переменная; Кп, Hэф – столбцы в таблице

A = ArithWeightedAve (Кп, Hэф) // Переменная A содержит арифметическое // средневзвешенное значение столбца Кп

ArithWeightedAveByIndex

Функция ArithWeightedAveByIndex находит арифметическое средневзвешенное в столбце Электронной таблицы с использованием в качестве фильтра целочисленного индекса. Функция имеет 4 аргумента. Обращение к функции выглядит следующим образом:

A = ArithWeightedAveByIndex (Имя1, Имя2, Имя3, Индекс),

где Имя1 – имя столбца Электронной таблицы, для которого будет производиться расчет арифметического средневзвешенного;

Имя2 – имя столбца Электронной таблицы, по которому будет производиться взвешивание;

Имя3 – имя столбца Электронной таблицы, содержащего целочисленные индексы;

Индекс – числовая константа, внутренняя переменная программы, ячейка электронной таблицы, элемент блока параметров. Значение аргумента должно быть целым числом. Этот аргумент является фильтром, который отбирает для расчета арифметического средневзвешенного только те элементы из столбца Имя1, для которых соответствующие значения элементов столбца Имя3 равны Индексу.

192

Пример А – переменная; Кп – столбец в таблице, содержащий коэффициенты порис-

тости; Hэф – столбец в таблице, содержащий эффективные мощности; ХН – столбец в таблице, содержащий индексы флюидов от 1 до 5, при этом 1 соответствует – воде, 2 – воде с нефтью, 3 – нефти с водой, 4 – нефти, 5 – газу.

с

сВ этом фрагменте программы определяется арифметическое средневзвешенное

сзначение коэффициента пористости для нефтяной части залежи

с

A = ArithWeightedAveByIndex (Кп, Hэф, ХН, 4)

HarmWeightedAve

Функция HarmWeightedAve находит гармоническое средневзвешенное в столбце Электронной таблицы. Функция имеет 2 аргумента. Обращение к функции выглядит следующим образом:

H = HarmWeightedAve (Имя1, Имя2),

где Имя1 – имя столбца Электронной таблицы, для которого будет рассчитываться гармоническое средневзвешенное;

Имя2 – имя столбца Электронной таблицы, по которому будет производиться взвешивание.

Пример

H – переменная; Прув, Hэф – столбцы в таблице

H = HarmWeightedAve (Прув, Hэф) // Переменная H содержит гармоническое // средневзвешенное значение столбца Прув

HarmWeightedAveByIndex

Функция HarmWeightedAveByIndex находит гармоническое средневзвешенное в столбце Электронной таблицы с использованием в качестве фильтра целочисленного индекса. Функция имеет 4 аргумента. Обращение к функции выглядит следующим образом:

H = HarmWeightedAveByIndex (Имя1, Имя2, Имя3, Индекс),

где Имя1 – имя столбца Электронной таблицы, для которого будет производиться расчет гармонического средневзвешенного;

Имя2 – имя столбца Электронной таблицы, по которому будет производиться взвешивание;

Имя3 – имя столбца Электронной таблицы, содержащего целочисленные индексы;

Индекс – числовая константа, внутренняя переменная программы, ячейка Электронной таблицы, элемент блока параметров. Значение аргумента должно быть целым числом. Этот аргумент является фильтром, который отбирает для рас-

193

чета гармонического средневзвешенного только те элементы из столбца Имя1, для которых соответствующие значения элементов столбца Имя3 равны Индексу.

Пример

H – переменная; Прув – столбец в таблице, содержащий продуктивности по углеводородам; Hэф – столбец в таблице, содержащий эффективные мощности; ХН – столбец в таблице, содержащий индексы флюидов от 1 до 5, при этом 1 соответствует – воде, 2 – воде с нефтью, 3 – нефти с водой, 4 – нефти, 5 – газу.

с

сВ этом фрагменте программы определяется гармоническое средневзвешенное

сзначение продуктивности по углеводородам для газовой части залежи

с

H = HarmWeightedAveByIndex (Прув, Hэф, ХН, 5)

CorrectInterfluidalContacts

Функция CorrectInterfluidalContacts является специальной геофизической процедурой и предназначена для корректировки и уточнения межфлюидальных контактов в продуктивном интервале разреза. Функция имеет четыре аргумента. Обращение к этой функции выглядит следующим образом:

CorrectInterfluidalContacts ('Имя1', 'Имя2', Индекс1, Индекс2),

где 'Имя1' – имя столбца Электронной таблицы, содержащего предварительно рассчитанные индексы насыщения пластов. Содержимое этого столбца изменяется в процессе работы функции;

'Имя2' – имя столбца Электронной таблицы, содержащего эффективные мощности пластов;

Индекс1 – числовая константа, внутренняя переменная программы, ячейка Электронной таблицы, элемент блока параметров. Значением аргумента является номер строки Электронной таблицы в которой начинается геологический объект (в случае, если в таблице содержится только один объект, в качестве значения аргумента используйте 1);

Индекс2 – числовая константа, внутренняя переменная программы, ячейка Электронной таблицы, элемент блока параметров. Значением аргумента является номер строки Электронной таблицы в которой заканчивается геологический объект (в случае, если в таблице содержится только один объект, в качестве значения аргумента используйте RowNumber).

Алгоритм работы функции предполагает, что индексы флюидов пластов объекта возрастают снизу вверх, т.е минимальный индекс соответствует воде, а максимальный газу.

Пример

CorrectInterfluidalContacts (ХН, Нэф, 1, RowNumber)

194

MinValue

Функция MinValue находит минимальное значение среди своих аргументов. Число аргументов функции неограничено. Обращение к функции выглядит следующим образом:

AMin = MinValue (Аргумент1, Аргумент2, …, АргументN),

где каждый аргумент может быть числовой константой, внутренней переменной, элементом блока параметров, ячейкой Электронной таблицы, столбцом Электронной таблицы, Электронной таблицей.

Пример

A, B, C, M – переменные; AK, ГК – столбцы в таблице

A = 100 B = –1000 C = 1.0e5

M = MinValue (–1, 10, 2, 4) M = MinValue (A, B, C)

M = MinValue (AK)

M = MinValue (AK, 100, Table[10, ColumnIndex (ГК) ]) M = MinValue (Table)

MaxValue

Функция MaxValue находит максимальное значение среди своих аргументов. Число аргументов функции неограничено. Обращение к функции выглядит следующим образом:

AMax = MaxValue (Аргумент1, Аргумент2, …, АргументN),

где каждый аргумент может быть числовой константой, внутренней переменной, элементом блока параметров, ячейкой Электронной таблицы, столбцом Электронной таблицы, Электронной таблицей.

Пример

A, B, C, M – переменные; AK, ГК – столбцы в таблице

A = 100 B = –1000 C = 1.0e5

M = MaxValue (–1, 10, 2, 4) M = MaxValue (A, B, C)

M = MaxValue (AK)

M = MaxValue (AK, 100, Table[10, ColumnIndex (ГК)]) M = MaxValue (Table)

StdDeviation

Функция StdDeviation находит несмещенную оценку стандартного отклонения в столбце Электронной таблицы. Функция имеет 1 аргумент. Аргументом функции должно быть имя столбца Электронной таблицы.

195

Пример

A – переменная; AK – столбец в таблице

A = StdDeviation (AK) // Переменная A содержит значение стандартного // отклонения в столбце АК

Служебные слова и операторы

Часть символьных имен в языке ETL зарезервирована под служебные слова, из которых строятся все синтаксические конструкции языка. Ниже приведен список всех служебных слов языка ETL.

And

Логическая операция And объединяет несколько логических выражений в одно. Результирующее выражение истинно только в случае истинности каждого логического выражения в отдельности.

Пример

if ((Кпр[i]>=0.05) and (Кпр[i]<=100)) and (Кп[i]>=0.13) then ЛИТ[i] = 1

else

ЛИТ[i] = 0 endif

В этом примере проверяется истинность 3 логических выражений связанных операцией And. Если одновременно верны все 3 выражения, то элементу столбца ЛИТ присваивается 1. В противном случае элементу столбца ЛИТ присваивается 0.

Break

Оператор Break прерывает выполнение тела цикла For…Endfor и передает управление следующему за циклом выполняемому оператору. Если оператор Break располагается вне цикла, то управление переходит к следующей строке программы. В программе оператор Break должен располагаться на отдельной строке:

for i = 1 to RowNumber

…………………………

break

…………………………

endfor

Кроме этого, разрешено совместное использование оператора Break и условного оператора. В этом случае правильный синтаксис выглядит следующим образом:

for i = 1 to RowNumber

…………………………

if (Условие) break

…………………………

endfor

196

Обратите внимание, что при использовании оператора Break внутри вложенного цикла, происходит прерывание только самого внутреннего цикла:

for j = 1 to ColNumber n = 1

for i = 1 to RowNumber

if not Number (table[i, j]) then n = i

break endif

endfor

……………………..

endfor

Continue

Оператор Continue прерывает выполнение текущей итерации цикла For…Endfor и передает управление на следующую итерацию. Если оператор Continue располагается вне цикла, то управление переходит к следующей строке программы. В программе оператор Continue должен располагаться на отдельной строке:

for i = 1 to RowNumber

…………………………

continue

…………………………

endfor

Кроме этого, разрешено совместное использование оператора Continue и условного оператора. В этом случае правильный синтаксис выглядит следующим образом:

for i = 1 to RowNumber

…………………………

if (Условие) continue

…………………………

endfor

Пример.

for i = 1 to RowNumber

if (ЛИТ[i] == 0) continue // Пропускаем объект неколлектор // Продолжаем обработку коллекторов

…………………………

endfor

197

Else

Служебное слово ELSE входит в состав условного оператора. Смотрите описание служебного слова IF.

End

Служебное слово End указывает на конец блока программы или блока параметров. Слово End используется только совместно со служебными словами Program и (или) Parameters, указывающими соответственно на начало программы и на начало блока параметров.

Пример

program < 2 Нормировка ГК и НКТ, выделение коллекторов >

………..

end

Parameters < Блок N1 >

………..

10 20.0 // Что-то неизвестное

………..

end

Endfor

Endif

Служебное слово ENDIF входит в состав условного оператора. Смотрите описание служебного слова IF.

Exit

Оператор Exit прерывает выполнение текущей программы. В программе оператор Exit должен располагаться на отдельной строке:

program <Имя 1>

…………………………

exit

…………………………

end

Кроме этого, разрешено совместное использование оператора Exit и условного оператора. В этом случае правильный синтаксис выглядит следующим образом:

program <Имя 1>

…………………………

if (Условие) exit

…………………………

end

198

For

Служебное слово For входит в состав оператора цикла. Оператор цикла имеет вид

For I = M1 To M2 Step M3

……………………

Endfor

где I – переменная цикла; М1, М2, М3 – арифметические выражения, указывающие начальное (М1) и конечное (М2) значение переменной цикла и шаг изменения (М3). Если М3 = 1, то служебное слово Step может быть опущено и оператор цикла имеет вид

For I = M1 To M2

…………….

Endfor

Шаг изменения переменной цикла М3 может быть положительным или отрицательным, но не равным нулю. Если М3 > 0, то М1 меньше М2, если М3 < 0, то М1 больше М2. В противном случае цикл выполняться не будет.

Число повторений цикла определяется по формуле k = MAX (int ((М2 – М1) /М3 + 1), 0).

Если (М2 – М1) /М3 < 0, то k получает значение 0. Порядок выполнения оператора цикла:

1)вычисляется значение числа повторений цикла k. Если k = 0, то осуществляется выход из цикла;

2)переменной цикла присваивается начальное значение I = М1;

3)выполняются операторы, входящие в цикл;

4)значение переменной цикла изменяется на величину М3 (I=I+М3), а число повторений цикла уменьшается на единицу (k=k–1);

5)проверяется значение k. Если k = 0, то осуществляется выход из цикла, иначе цикл выполняется еще раз (выполняются п. 3–5).

На период выполнения цикла переменная цикла становится немодифицируемой переменной, т.е. нельзя присвоить ей какое-либо значение. При завершении работы цикла и при выходе из цикла с помощью оператора Goto или Break переменная цикла сохраняет свое значение и становится доступной для модификации.

Для управления ходом циклического процесса в теле цикла могут располагаться операторы Continue и Break. Оператор Continue прерывает текущую итерацию и передает управление на следующую итерацию. Оператор Break прерывает выполнение тела цикла и передает управление следующему за циклом выполняемому оператору.

Циклические конструкции могут быть вложены друг в друга.

199

Примеры n1 = 0

for i = 1 to RowNumber

if (Опорные[i] == 1) then n1 = i

endif endfor

В примере организован цикл, пробегающий по всем строкам текущей Электронной таблицы. После выполнения фрагмента переменная n1 содержит номер строки, в которой значение столбца Опорные равно 1. Если в столбце Опорные нет ни одной ячейки со значением 1, то переменная n1 равна 0.

for i = 1 to 10 // Вложение циклов for j = 1 to 5

……….

endfor

……….

endfor

Goto

Оператор Goto n осуществляет безусловный переход к строке с меткой n. Метка представляет собой целое число в диапазоне 1..999 и должна находиться в первых трех позициях строки. Оператор Goto n можно использовать совместно с условным оператором: if (Условие) goto n. В этом случае переход к метке n будет осуществляться только при выполнении Условия. Запрещено передавать управление извне внутрь условного оператора и оператора цикла. Использование оператора Goto затрудняет анализ логики программы и поэтому должно быть по возможности сведено к минимуму.

Пример program <Имя 1>

……….

goto 120

………..

120 a = 10.5

if (a > 5) goto 130

………..

130 b = 1.7

……….

end

200

Соседние файлы в папке книги