1
Апр 14
В связи с энергичным освоением Techlog, а в частности создания скриптов на Пайтон. Предлагаю открыть тему по обмену мнениями и возможностям реализации различных функций. Так как людей программирующих на Python много то для него есть сайт и проф форумы, но к сожалению это не сайты по нефтяной отрасли. Для желающих могу выложить Python 2.7, но он есть и в свободном доступе. Предлагаю начать с начала. Есть инструкции и краткие презентации.
Опубликовано
01 Апр 2014
Активность
30
ответов
9134
просмотра
20
участников
2
Рейтинг
Желающим предлагаю выкладывать программы для обсуждения.
Желательно указать какую цель приследует скрипт. И в случае успешного завершения, описать работу и возникающие проблемы.
Почему именно 2.7?
Актуальна же версия 3!
Вопрос: разве по правилам форума выкладывать открытй код (даже для скриптов)????
Без проблем, это же не пиратский софт.
Работаю с Techlog'ом несколько лет и у меня собралась библиотека скриптов Python.
Представляется уместным создать специальный раздел сайта, типа http://www.codesampler.com/python.htm для систематизации скриптов.
давайте пока в этой теме что-нибудь начните выкладывать, если будет живой интерес я попробую что-то сделать. Файлы можно закачать в файловый брайзер (в профиле) и ссылку вставить в комментарий к этой теме.
В связи с тем что я только начал заниматься скриптами 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"
На базе этих скриптов планирую создать скрипт для комплексного теоретического расчета с выводом таблицы РИГИС с флагами (нефть, нефть+вода, вода, газ, коллектор, неколлектор, плотняк) по существующим пластам для проверки и исключения случайных ошибок при интерпретации и оформление отчета. Буду благодарен если у кого то есть наработки...
Данный скрипты есть у Шлюмберже. В свое время я брал эти скрипты у них и вставлял в свой интепретационный. Все работало. Но сами скрипты у меня не сохранились.
Хм, язык в принципе схож с тем, что используется в ГеоПоиске.
Судя по текстовке скрипта, пористости тоже можно было залимитировать от 0 до 1, как и в случае с dJgк (двойной разностный по GR).
Можно задавать лимиты, а также в случае выхода за эти пределы присваивать нужный. Но интересует именно возможность указания функции при запуске AWI как например в модуле "Итог" где вноситься зависимоть для расчета.Сейчас в отпуске , через неделю продолжу и выложу готовый скрипт.
там функция eval используется - скорость снижается раз в 10 где то (по сравнению с тем, если бы это было в самом скрипте написано)
можно использовать диалоговое окно.
Я бы сказал недоязык использованный в Геопоиске имеет общие корни с нормальными языками, то бишь Python.
Поделитесь опытом, стоит ли начинать изучать Python, если за плечами только школьный курс Pascal, который благополучно забыт?
Если нет, то с какого языка начать?
Если да, то посоветуйте литературу!
Заранее спасибо!
~~Я начал изучение C# по совету местных товарисчей. Впринице норм - очень интересно. Только времени мало на него =) "C# для чайников", "Ватсон Б. С# 4.0 на примерах", "Петцольд Ч. - Windows Presentation Foundation (WPF) - базовый курс", "Шилдт Г. Полное руководство С#4.0"
Спасибо, уже заглянул на твирпикс, начну постигать..
Python стоит изучать для инженерных целей. Можно даже заменить VBA в Excel. Потом есть пакеты numpy, scipy, sympy, ipython, matplotlib, pandas которые вам почти полность заменять основные функции matlab & mathematica. Можно даже внедрить Python как скриптовую среду в свое ПО как это сделал шлюм.
C# один из ведущих языков программирования для windows, но для инженерных или вычислительных расчетов, для работы с многомерными данными не очень развит по-моему. даже если использовать LINQ.
Понял, почти осознал! Спасибо!)
Python и R вам в руки (http://www.kdnuggets.com/2014/08/four-main-languages-analytics-data-mining-data-science.html). Там действительно очень многие вычислительные задачи решены и описаны как надо. Только бери и пользуй!
если использовать R, то вы не сможете внедрить его в свой коммерческий проект не открыв ваши исходники из-за лицензии GPL. Python использует лицензии MIT, BSD итп - поэтому используется обширно в коммерческой среде.
Ежели кто работал с двумя ГГК-п развернутыми на 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()
Добрый день! Уважаемые коллеги прошу помочь, только начинаю питоном играться))) Если что где спрашиваю простые веши, прошу понять правильно.
Вопрос: "MissingValue" для чего используется?
if gamm ==MissingValue:
vsh_py == MissingValue
else: vsh_py = (gamm-30) / (100-30)
а что это дает?
есть 18 развернутых по всему стволу..
MissingValue - отсутствие значений. Обычно используется связка для проверки отсутствия значений, чтобы все корректно считалось:
if GR != MissingValue:
VSH= .......
Интерес к теме пропал?
Не совсем для целей интерпретации, но написал небольшой конвертер из .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))
Можете поделиться?
Доброго времени суток!
Подскажите, имеется ли у кого конвертер бинарников (темпеста\еклипса) в какой то упращённый вид, для обработки результатов в экселе? Где-то видел тему что делали такое. Может подскажите в каком направлении начать. Хочу сделать через пайтон или VBA.
p.s. интересуют только графики
Таких проектов много на гитхабе
Например
https://github.com/permeAbiliTy/unsmry_reader