我相信这是一个很容易处理的问题,但我想不通。我创建了一个钻孔类,并想计算每个钻孔/井周围的孔隙压力。沿着一个轴,我的代码如下所示:
from scipy.special import *
import matplotlib.pyplot as plt
import numpy as np
from math import *
## Globale Variablen ##
rhof = 1000 # Dichte Flüssigkeit [kg/m³]
lameu = 11.2*10**9 # Lamé-Parameter, undrained [GPa]
lame = 8.4*10**9 # Lamé-Parameter, drained [GPa]
pi # durch Pythonmodul "math" gegeben
alpha = 0.65 # Biot-Willis-Koeffizient
G = 8.4*10**9 # Schermodul [GPa]
k = 1.0e-15 # Permeabilität [m²] bzw. [Darcy]
eta = 0.001 # Viskosität des Fluids [Pa*s]
## Berechnung der Parameter ##
kappa = k/eta
c = ((kappa*(lameu-lame)*(lame+2*G))/((alpha**2)*(lameu+2*G)))
## Wertebereich ##
xmin = 0
xmax = 100
xsteps = 1.0
x = np.arange(xmin, xmax, xsteps)
## Class ##
class Bohrloch(object):
loch_zaehler = 0
def __init__(self, xlage, tstart, q): # Funktion, um BL zu erzeugen
self.xlage = xlage
#self.ylage = ylage # Lage der Bohrung
self.tstart = tstart # Start der Injektion/Produktion
self.q = q # Fluidmenge
## Druck ##
def getPressure(self, t): # gibt nach Zeit t die zugehörigen Druckwerte aus
if (t-self.tstart<0): # Fehlermeldung, falls Startpunkt nach t liegt
return ()
print "Startpunkt liegt außerhalb des Förderzeitraumes!"
else:
self.r = np.sqrt((x-self.xlage)**2)
self.P = (self.q/(rhof*4*pi*kappa))*(expn(1,self.r**2/(4*c*(t-self.tstart))))
#self.P[self.xlage] = 0 # gibt Bohrlochlage wieder
self.z = self.P/1e6
return self.z # Druckwerte in [MPa]
def pressureTable (self, t, xschritt): # erstellt Wertetabelle
self.getPressure(t)
for i in range (xmin, xmax, xschritt):
print i, " ", self.z[i]
t = 1000*24*3600
b1 = Bohrloch(50,0*24*3600,6.0/1000)
b1.pressureTable(t,1)
用这种方法我得到了我想要的压力表。现在我想要一个x和y值的压力表,包括一个3D绘图。这是我目前为止的代码:
^{pr2}$不幸的是,我的表格不工作,而且所需的三维绘图看起来很奇怪。我仍然是Python的初学者,需要一些建议。在
有人能帮忙吗?在
问题是
self.z
不是二维数组/列表。因此,尝试访问self.z[k][l]
会导致IndexError: invalid index to scalar variable.
我不太明白你想如何实现第二个维度。您引入了y位置,但是,您只需使用中的x和y位置来计算一维半径数组
下一个问题是,你打算做什么:
^{pr2}$如果您将
xsteps
和ysteps
更改为10
,并调用:您的输出将是:
为什么要用
nan
替换第三和第四个元素?这些问题也是你的绘图程序的基础。因为数组中现在有
np.nan
值,所以这些值不会显示在绘图中。因为self.z
不是二维的,所以您可能没有得到预期的曲面:这里有一个简单的方法来实现2D实现。我对你想做的事情还不太熟悉,但它让我明白了这一点:
从绘图例程中,删除以下行:
Z[Z == np.inf] = np.nan
,使用原始命令:现在你将得到这个情节:
相关问题 更多 >
编程相关推荐