Скрипты языка программирования Python для целей интерпретации

Последнее сообщение
Napatum 7 11
Апр 14

В связи с энергичным освоением Techlog, а в частности создания скриптов на Пайтон. Предлагаю открыть тему по обмену мнениями и возможностям реализации различных функций. Так как людей программирующих на Python  много то для него есть сайт и проф форумы, но к сожалению это не сайты по нефтяной отрасли. Для желающих могу выложить Python 2.7, но он есть и в свободном доступе. Предлагаю начать с начала. Есть инструкции и краткие презентации.

Napatum 7 11
Апр 14 #1

Желающим предлагаю выкладывать программы для обсуждения.

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

 

Celebrity 1578 16
Апр 14 #2

Почему именно 2.7?

Актуальна же версия 3!

Вопрос: разве по правилам форума выкладывать открытй код (даже для скриптов)????

Antalik 1747 17
Апр 14 #3

Без проблем, это же не пиратский софт.

AKazak 75 12
Апр 14 #4

Работаю с Techlog'ом несколько лет и у меня собралась библиотека скриптов Python.

Представляется уместным создать специальный раздел сайта, типа http://www.codesampler.com/python.htm для систематизации скриптов.

Antalik 1747 17
Апр 14 #5

давайте пока в этой теме что-нибудь начните выкладывать, если будет живой интерес я попробую что-то сделать. Файлы можно закачать в файловый брайзер (в профиле) и ссылку вставить в комментарий к этой теме.

 

Napatum 7 11
Апр 14 #6

В связи с тем что я только начал заниматься скриптами Python, прошу сразу извинить за неточности и возможную простоту решений. Первый скрипт который я создаю сделан для быстрой проверки расчетов пористости и насыщения. Проблема с которой столкунулся, следующая: надо вместо коэффициентов а, m,n в формуле Арчи подставить формулу из известной для данного региона (например Kv=pow(10,(2.3*pow(0.72,log10(Pn))-2.301))), причем хочеться что бы при запуске в AWI вводить именно формулу. Думаю как сделать. Плюс дальше на базе скрипта для осреднения значений для попластовки столкнулся с такой проблемой, при быстром создание зон использую кривую литологических индексов, в связи с чем появляються повторы названий и скрипт срабатывает только для первого значения, ищу выход. Пока удалось только реализовать идею с добавлением к названию отметки кровли (Zone: 2_2435...), думаю как сделать более красиво. Примеры скриптов:

1)

LOOP:

Djg =(gr-GRmin)/(GRmax- GRmin)

Djg = limitValue (Djg, 0,1)

#print Djg

#print "OK"

if gr == MissingValue:

Kgl = MissingValue

elif "Larionov sand":

Kgl =0.083*(2.0**(3.7*Djg)-1.0)

Kgl= limitValue (Kgl, 0,1)

#print Kgl

r=w*Kgl

Kpnnk = nnk-r

Kpggk =((ggk-densk)/(densk-denf))- Kgl*((densk-densh)/(densk-denf))

Kpdt =((dt-dtsk)/(dtf-dtsk))- Kgl *((dtsh-dtsk)/(dtf-dtsk))

#if Kpggk > 1:

#Kpggk = 1

#if Kpdt > 1:

#Kpdt = 1

Pp=a/Kpggk**m

rvp=Pp*rv

Pn=Rp/rvp

Kv=10**(2.3*(0.72**log10(Pn))-2.301)

#Kvind=pow(((rvp*rsh)/ Rp *((rsh+pow((rvp*rsh),0.5))*2.0*pow(rsh,(1.0-0.5*rsh))+rvp*pow(rsh,(2.0-rsh)))),0.5);

2) 

import TechlogStat as ts

 

values = {}

for V in VL:

values[V] = {}

 

LOOP:

if "zoneName" in locals():

for V, v in zip(VL, vl):

if zoneName not in values[V]:

values[V][zoneName] = []

values[V][zoneName].append(v)

if VL:

w = VL[0].wellName()

if "zonationDataset" in locals() and db.datasetExists(w, zonationDataset):

refS = db.datasetSize(w,zonationDataset)

 

zn = db.variableListByFamily(w, zonationDataset, "Zone Name")[0]

znL = db.variableLoad(w, zonationDataset, zn)

 

ovl = {}

for V in VL:

ovl[V] = db.variableLoad(w, zonationDataset, V.variableName())

if not ovl[V]:

ovl[V] = [MissingValue]*refS

 

for zoneName in values[V]:

if zoneName in znL:

i = znL.index(zoneName)

ovl[V][i] = ts.average(values[V][zoneName])

 

db.variableSave(w, zonationDataset, V.variableName(), V.familyName(), V.unitName(), ovl[V])

else:

print "Please select zones"

Napatum 7 11
Апр 14 #7

На базе этих скриптов планирую создать скрипт для комплексного теоретического расчета с выводом таблицы РИГИС с флагами (нефть, нефть+вода, вода, газ, коллектор, неколлектор, плотняк) по существующим пластам для проверки и исключения случайных ошибок при интерпретации и оформление отчета. Буду благодарен если у кого то есть наработки...

vktr 140 11
Апр 14 #8

Данный скрипты есть у Шлюмберже. В свое время я брал эти скрипты у них и вставлял в свой интепретационный. Все работало. Но сами скрипты у меня не сохранились.

beaves 419 15
Апр 14 #9

Хм, язык в принципе схож с тем, что используется в ГеоПоиске.

Судя по текстовке скрипта, пористости тоже можно было залимитировать от 0 до 1, как и в случае с dJgк (двойной разностный по GR).

Napatum 7 11
Апр 14 #10

Можно задавать лимиты, а также в случае выхода за эти пределы присваивать нужный. Но интересует именно возможность указания функции при запуске AWI как например в модуле "Итог" где вноситься зависимоть для расчета.Сейчас в отпуске , через неделю продолжу и выложу готовый скрипт.

kealon 138 15
Май 14 #11

Napatum пишет:

Можно задавать лимиты, а также в случае выхода за эти пределы присваивать нужный. Но интересует именно возможность указания функции при запуске AWI как например в модуле "Итог" где вноситься зависимоть для расчета.Сейчас в отпуске , через неделю продолжу и выложу готовый скрипт.

там функция eval используется - скорость снижается раз в 10 где то (по сравнению с тем, если бы это было в самом скрипте написано)

 

vktr 140 11
Май 14 #12

можно использовать диалоговое окно. 

vktr 140 11
Май 14 #13

beaves пишет:

Хм, язык в принципе схож с тем, что используется в ГеоПоиске.

Судя по текстовке скрипта, пористости тоже можно было залимитировать от 0 до 1, как и в случае с dJgк (двойной разностный по GR).

Я бы сказал недоязык использованный в Геопоиске имеет общие корни с нормальными языками, то бишь Python.  

Khmarin 241 9
Сен 14 #14

Поделитесь опытом, стоит ли начинать изучать Python, если за плечами только школьный курс Pascal, который благополучно забыт? 

Если нет, то с какого языка начать?

Если да, то посоветуйте литературу! 

Заранее спасибо!

AGA 740 12
Сен 14 #15

Khmarin пишет:

Позделитесь опытом, стоит ли начинать изучать Python, если за плечами только школьный курс Pascal, который благополучно забыт? 

Если нет, то с какого языка начать?

Если да, то посоветуйте литературу! 

Заранее спасибо!

~~Я начал изучение C# по совету местных товарисчей. Впринице норм - очень интересно. Только времени мало на него =) "C# для чайников", "Ватсон Б. С# 4.0 на примерах", "Петцольд Ч. - Windows Presentation Foundation (WPF) - базовый курс", "Шилдт Г. Полное руководство С#4.0"

Khmarin 241 9
Сен 14 #16

 

Спасибо, уже заглянул на твирпикс, начну постигать..

denfromufa 89 12
Сен 14 #17

Python стоит изучать для инженерных целей. Можно даже заменить VBA в Excel. Потом есть пакеты numpy, scipy, sympy, ipython, matplotlib, pandas которые вам почти полность заменять основные функции matlab & mathematica. Можно даже внедрить Python как скриптовую среду в свое ПО как это сделал шлюм.

C# один из ведущих языков программирования для windows, но для инженерных или вычислительных расчетов, для работы с многомерными данными не очень развит по-моему. даже если использовать LINQ.

Khmarin 241 9
Сен 14 #18

Понял, почти осознал! Спасибо!)

Гоша 1201 17
Сен 14 #19

Python и R вам в руки (http://www.kdnuggets.com/2014/08/four-main-languages-analytics-data-mining-data-science.html). Там действительно очень многие вычислительные задачи решены и описаны как надо. Только бери и пользуй!

denfromufa 89 12
Сен 14 #20

если использовать R, то вы не сможете внедрить его в свой коммерческий проект не открыв ваши исходники из-за лицензии GPL. Python использует лицензии MIT, BSD итп - поэтому используется обширно в коммерческой среде.

ShadowRaven 613 15
Сен 14 #21

Ежели кто работал с двумя ГГК-п развернутыми на 90 град. В тектонически напряженных интервалах с эллиптическим стволом помогает:

In RHOB1, RHOB2, DRHO1 & DRHO2

Out RHOB, DRHO & BADHOLE

Params: "c" =0.11 g/cc Cut-off & "w" - window 0.6 feet

 

 

 

import TechlogStat as ts

 

def median_filter(values, window, sr):

window_points = window/sr + 1

half_window = int(window_points - 1)

new_values = []

for ind in xrange(len(values)):

if values[ind] != MissingValue:

if ind < half_window or (len(values) - ind <= half_window):

new_values.append(MissingValue)

continue

temp_list = values[ind-half_window:ind + half_window + 1]

new_values.append(ts.median(temp_list))

else:

new_values.append(MissingValue)

return new_values

 

LOOP:

drho1abs=abs(drho1)

drho2abs=abs(drho2)

 

if drho1abs<drho2abs:

drho=drho1

rhob=rhob1

else:

drho=drho2

rhob=rhob2

 

if drho==MissingValue:

badhole=1

if drho>c:

badhole=1

if drho<(-1*c):

badhole=1

if badhole==MissingValue:

badhole==0

RHOB.setValues(median_filter(RHOB.values(), w, RHOB.samplingRate()))

RHOB.save()

 

DRHO.setValues(median_filter(DRHO.values(), w, RHOB.samplingRate()))

DRHO.save()

 

 

udachniy paren 9 10
Дек 14 #22

Добрый день! Уважаемые коллеги прошу помочь, только начинаю питоном играться))) Если что где спрашиваю простые веши, прошу понять правильно.

Вопрос: "MissingValue"  для чего используется?

if gamm ==MissingValue:

vsh_py == MissingValue

else: vsh_py = (gamm-30) / (100-30)

vaque 389 15
Дек 14 #23

ShadowRaven пишет:

Ежели кто работал с двумя ГГК-п развернутыми на 90 град. В тектонически напряженных интервалах с эллиптическим стволом помогает:

а что это дает?

есть 18 развернутых по всему стволу..

Евген 159 12
Дек 14 #24

udachniy paren пишет:

Добрый день! Уважаемые коллеги прошу помочь, только начинаю питоном играться))) Если что где спрашиваю простые веши, прошу понять правильно.

Вопрос: "MissingValue"  для чего используется?

if gamm ==MissingValue:

vsh_py == MissingValue

else: vsh_py = (gamm-30) / (100-30)

MissingValue - отсутствие значений. Обычно используется связка для проверки отсутствия значений, чтобы все корректно считалось:

if GR != MissingValue:

      VSH= .......

vaque 389 15
Окт 15 #25

Интерес к теме пропал?

Moveton 100 13
Окт 15 #26

Не совсем для целей интерпретации, но написал небольшой конвертер из .dat в .zmap. Полезен, например, при необходимости загрузить в тот же Petrel горизонты, оцифрованные в Golden Software Didger. Конвертирует, собсна, сам файл, название которого при вводе необходимо вписывать в кавычках.

import sys

count = 0

filename = input()

with open(filename, "r") as f:

sys.stdout = open('%s (converted).txt' % f.name, 'a')

for line in f:

changed_line = line.split()[0:3]

if not changed_line:

count += 1

else:

changed_line.insert(2, str(count))

print('\t'.join(changed_line))

 

altair 78 8
Фев 19 #27

Можете поделиться?

AKazak пишет:

Работаю с Techlog'ом несколько лет и у меня собралась библиотека скриптов Python.

Представляется уместным создать специальный раздел сайта, типа http://www.codesampler.com/python.htm для систематизации скриптов.

Go to top