Python和R水力电导率和达西流神经算子

27 篇文章 0 订阅
11 篇文章 0 订阅

📜水力电导率和达西流 - 用例

📜水力电导率机器学习预测土壤特性变化 | 📜三维体达西流静态和交互式模拟

📜Python流体数据统计模型和浅水渗流平流模型模拟

📜Python高克勒-曼宁-斯特里克勒公式计算一维流量

📜Python和Julia河流湖泊沿海水域特征数值算法模型

📜Python蒸发散物理问题(微积分-线性代数-拉普拉斯和傅立叶变换)

✒️Python多孔材料流体渗透性

由于材料的渗透性,不同的物质可以穿过它们。它允许气体、液体和磁场的移动。然而,流体渗透性是水文学、土壤力学和石油工程的主要关注点。这调节液体通过多孔材料的流动。了解流体渗透性很重要。它允许开发有效的过滤器,预测地下水运动,并增强石油开采。

达西定律描述了流体通过多孔材料的流动。这是与渗透性相关的基本概念。在许多领域,达西定律都具有重要意义。它提供了有关材料特性、流体动力学和地质过程的信息。虽然渗透性有好处,但也有缺点。由于渗透性因材料而异,并且取决于温度和压力等变量,因此很难预测和适当调节。此外,由于渗透性物质的复杂性和众多元素的相互作用,准确的测量和计算经常带来困难,需要先进的实验和计算技术。

从井中提取岩心数据后,这些数据会被带到实验室进行分析。沿着取回的岩心样本的长度,会进行一系列测量。其中两个是孔隙度和渗透率,这两者都是岩石物理分析的关键组成部分。

孔隙度是渗透率的关键控制因素,孔隙越大,储层流体流过的通道就越宽。测井工具不能直接测量渗透率,因此必须通过与来自同一油田或油井的岩心数据的关系或根据经验导出的方程来推断。

一种常用方法是绘制孔隙度(线性标度)与渗透率(对数标度)的关系图,并观察趋势。由此,可以将回归应用于孔隙度渗透率(孔隙度-渗透率)交会图以得出一个方程,该方程随后可用于根据任何井中计算出的孔隙度预测连续渗透率。

在本文中,我将介绍如何使用 Python 中的两种方法进行孔隙度-渗透率回归。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

在分析岩心板时,会不定期地进行有限数量的测量。在某些情况下,可能无法进行测量,例如在非常紧密(渗透性低)的部分。因此,我们可以告诉 pandas 加载任何缺失值。

core_data = pd.read_csv("Data/CORE.csv", na_values=' ')

加载数据后,我们可以通过调用 .head() 和 .describe() 方法来查看其中内容的详细信息。.head() 方法返回数据帧的前五行和标题行。

core_data.head()

 DEPTH   OrigDepth   CORE_NO   SAMPLE   CKHG   CKHL   CKVG   CKVL   CPOR   CPORV   So   Sw   CGD   CGDV  0 3838.60 3837.00 1 1 13.80 11.500 N a N N a N 17.0 N a N N a N N a N 2.66 N a N 1 3838.85 3837.25 1 2 N a N N a N N a N N a N 14.8 N a N N a N N a N 2.67 N a N 2 3839.15 3837.55 1 3 25.20 21.400 3.94 3.16 10.8 N a N N a N N a N 2.69 N a N 3 3839.40 3837.80 1 4 1.02 0.694 N a N N a N 12.8 N a N N a N N a N 2.70 N a N 4 3839.48 3837.88 1 5 N a N N a N N a N N a N N a N 18.8 52.9 36.4 N a N 2.68 \begin{array}{llllllllllllllll} & \text { DEPTH } & \text { OrigDepth } & \text { CORE\_NO } & \text { SAMPLE } & \text { CKHG } & \text { CKHL } & \text { CKVG } & \text { CKVL } & \text { CPOR } & \text { CPORV } & \text { So } & \text { Sw } & \text { CGD } & \text { CGDV } \\ \hline 0 & 3838.60 & 3837.00 & 1 & 1 & 13.80 & 11.500 & NaN & NaN & 17.0 & NaN & NaN & NaN & 2.66 & NaN \\ 1 & 3838.85 & 3837.25 & 1 & 2 & NaN & NaN & NaN & NaN & 14.8 & NaN & NaN & NaN & 2.67 & NaN \\ \hline 2 & 3839.15 & 3837.55 & 1 & 3 & 25.20 & 21.400 & 3.94 & 3.16 & 10.8 & NaN & NaN & NaN & 2.69 & NaN \\ 3 & 3839.40 & 3837.80 & 1 & 4 & 1.02 & 0.694 & NaN & NaN & 12.8 & NaN & NaN & NaN & 2.70 & NaN \\ \hline 4 & 3839.48 & 3837.88 & 1 & 5 & NaN & NaN & NaN & NaN & NaN & 18.8 & 52.9 & 36.4 & NaN & 2.68 \end{array} 01234 DEPTH 3838.603838.853839.153839.403839.48 OrigDepth 3837.003837.253837.553837.803837.88 CORE_NO 11111 SAMPLE 12345 CKHG 13.80NaN25.201.02NaN CKHL 11.500NaN21.4000.694NaN CKVG NaNNaN3.94NaNNaN CKVL NaNNaN3.16NaNNaN CPOR 17.014.810.812.8NaN CPORV NaNNaNNaNNaN18.8 So NaNNaNNaNNaN52.9 Sw NaNNaNNaNNaN36.4 CGD 2.662.672.692.70NaN CGDV NaNNaNNaNNaN2.68

.describe() 方法返回有关数据帧中包含的数值数据的有用统计信息,例如平均值、标准差、最大值和最小值。
 DEPTH   OrigDepth   CORE_NO   SAMPLE   CKHG   CKHL   CKVG   CKVL   CPOR   CPORV   So   Sw   count  728.000000 728.000000 728.00000 728.000000 557.000000 557.000000 141.000000 141.000000 593.000000 71.000000 71.000000 71.000000  mean  3920.528338 3920.153338 3.93956 364.500000 649.801463 627.972549 490.086071 472.875284 16.829342 19.497183 56.943662 28.309859  std  46.545695 46.902816 1.75976 210.299786 2160.127387 2116.307023 1973.601098 1929.420018 6.552523 5.657763 21.084319 19.203758 min ⁡ 3838.600000 3837.000000 1.00000 1.000000 0.018000 0.010000 0.030000 0.017000 2.900000 2.700000 0.000000 4.500000 25 % 3882.580000 3881.980000 3.00000 182.750000 2.620000 2.030000 0.874000 0.590000 12.000000 18.150000 52.000000 18.200000 50 % 3921.725000 3921.125000 4.00000 364.500000 59.900000 52.300000 27.300000 23.300000 18.100000 21.200000 62.300000 22.800000 75 % 3960.287500 3960.487500 5.00000 546.250000 213.000000 194.000000 108.000000 96.300000 21.700000 23.500000 68.500000 29.950000 max ⁡ 3999.950000 3999.750000 7.00000 728.000000 20800.000000 20500.000000 14800.000000 14500.000000 36.000000 27.800000 86.000000 90.800000 \begin{array}{|c|c|c|c|c|c|c|c|c|c|c|c|c|} \hline & \text { DEPTH } & \text { OrigDepth } & \text { CORE\_NO } & \text { SAMPLE } & \text { CKHG } & \text { CKHL } & \text { CKVG } & \text { CKVL } & \text { CPOR } & \text { CPORV } & \text { So } & \text { Sw } \\ \hline \text { count } & 728.000000 & 728.000000 & 728.00000 & 728.000000 & 557.000000 & 557.000000 & 141.000000 & 141.000000 & 593.000000 & 71.000000 & 71.000000 & 71.000000 \\ \hline \text { mean } & 3920.528338 & 3920.153338 & 3.93956 & 364.500000 & 649.801463 & 627.972549 & 490.086071 & 472.875284 & 16.829342 & 19.497183 & 56.943662 & 28.309859 \\ \hline \text { std } & 46.545695 & 46.902816 & 1.75976 & 210.299786 & 2160.127387 & 2116.307023 & 1973.601098 & 1929.420018 & 6.552523 & 5.657763 & 21.084319 & 19.203758 \\ \hline \min & 3838.600000 & 3837.000000 & 1.00000 & 1.000000 & 0.018000 & 0.010000 & 0.030000 & 0.017000 & 2.900000 & 2.700000 & 0.000000 & 4.500000 \\ \hline 25 \% & 3882.580000 & 3881.980000 & 3.00000 & 182.750000 & 2.620000 & 2.030000 & 0.874000 & 0.590000 & 12.000000 & 18.150000 & 52.000000 & 18.200000 \\ \hline 50 \% & 3921.725000 & 3921.125000 & 4.00000 & 364.500000 & 59.900000 & 52.300000 & 27.300000 & 23.300000 & 18.100000 & 21.200000 & 62.300000 & 22.800000 \\ \hline 75 \% & 3960.287500 & 3960.487500 & 5.00000 & 546.250000 & 213.000000 & 194.000000 & 108.000000 & 96.300000 & 21.700000 & 23.500000 & 68.500000 & 29.950000 \\ \hline \max & 3999.950000 & 3999.750000 & 7.00000 & 728.000000 & 20800.000000 & 20500.000000 & 14800.000000 & 14500.000000 & 36.000000 & 27.800000 & 86.000000 & 90.800000 \\ \hline \end{array}  count  mean  std min25%50%75%max DEPTH 728.0000003920.52833846.5456953838.6000003882.5800003921.7250003960.2875003999.950000 OrigDepth 728.0000003920.15333846.9028163837.0000003881.9800003921.1250003960.4875003999.750000 CORE_NO 728.000003.939561.759761.000003.000004.000005.000007.00000 SAMPLE 728.000000364.500000210.2997861.000000182.750000364.500000546.250000728.000000 CKHG 557.000000649.8014632160.1273870.0180002.62000059.900000213.00000020800.000000 CKHL 557.000000627.9725492116.3070230.0100002.03000052.300000194.00000020500.000000 CKVG 141.000000490.0860711973.6010980.0300000.87400027.300000108.00000014800.000000 CKVL 141.000000472.8752841929.4200180.0170000.59000023.30000096.30000014500.000000 CPOR 593.00000016.8293426.5525232.90000012.00000018.10000021.70000036.000000 CPORV 71.00000019.4971835.6577632.70000018.15000021.20000023.50000027.800000 So 71.00000056.94366221.0843190.00000052.00000062.30000068.50000086.000000 Sw 71.00000028.30985919.2037584.50000018.20000022.80000029.95000090.800000
使用我们的 core_data 数据框,我们可以通过在数据框末尾添加 .plot 并提供一些参数来简单快速地绘制数据。在本例中,我们需要一个散点图(在岩石物理学中也称为交叉图),x 轴为 CPOR(岩心孔隙度),y 轴为 CKH(岩心渗透率)。

从这个散点图中,我们注意到低渗透率的点集中度很高,而高渗透率的点则很少。我们可以通过将 y 轴转换为对数刻度并添加网格来整理我们的图。这将生成我们在岩石物理学中熟悉的孔隙-渗透率交叉图。

core_data.plot(kind="scatter", x="CPOR", y="CKH")
plt.yscale('log')
plt.grid(True)

如果我们想要访问其中一个参数,例如 CPOR 值的斜率或常数,我们可以像访问列表一样访问它:

results.params[1]

返回结果是:0.174287

然后我们可以拼凑出用于预测渗透率的方程:
 渗透率  = 1 0 0.174287 ∗ (  孔隙度  ∗ 100 ) − 1.556078 \text { 渗透率 }=10^{0.174287 *(\text { 孔隙度 } * 100)-1.556078}  渗透率 =100.174287( 孔隙度 100)1.556078
最后,我们可以使用以下代码将方程应用到散点图上:

ax.semilogy(core_data['CPOR'], 10**(results.params[1] * core_data['CPOR'] + results.params[0]), 'r-')

散点图的完整代码:

from matplotlib.ticker import FuncFormatter
fig, ax = plt.subplots()
ax.axis([0, 30, 0.01, 100000])
ax.semilogy(core_data['CPOR'], core_data['CKHG'], 'bo')
ax.grid(True)
ax.set_ylabel('Core Perm (mD)')
ax.set_xlabel('Core Porosity (%)')
ax.semilogy(core_data['CPOR'], 10**(results.params[1] * core_data['CPOR'] + results.params[0]), 'r-')

for axis in [ax.yaxis, ax.xaxis]:
    formatter = FuncFormatter(lambda y, _: '{:.16g}'.format(y))
    axis.set_major_formatter(formatter)

现在我们有了方程且满意的结果,我们可以将其应用于测井孔隙度以生成连续的渗透率曲线。

👉参阅一:计算思维

👉参阅二:亚图跨际

  • 29
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值