10. 地球物理测井解释原理_2026-05-05_01-32-13
1. 测井物理基础与仪器
1.1 岩石电性测量原理
岩石电阻率的基本概念
岩石电阻率是描述地层导电能力的重要物理参数,定义为在单位长度、单位截面积的岩层中产生单位电流所需的电压。其数学表达式为:
R=ρ⋅LAR = \rho \cdot \frac{L}{A}R=ρ⋅AL
其中:
- R 为电阻(Ω)
- ρ 为电阻率(Ω·m)
- L 为长度(m)
- A 为截面积(m²)
地层电阻率受多种因素影响,主要包括孔隙度、流体性质和矿物成分。
阿奇公式及其扩展
1942年,J.C. Archie提出了描述岩石电阻率与孔隙度、饱和度和泥质含量关系的经典方程:
Rt=a⋅ϕ−m⋅RwSwnR_t = a \cdot \frac{\phi^{-m} \cdot R_w}{S_w^n}Rt=a⋅Swnϕ−m⋅Rw
其中各参数的物理意义为:
- Rt:地层真电阻率(Ω·m)
- φ:岩石有效孔隙度
- Rw:地层水电阻率(Ω·m)
- Sw:含水饱和度
- m:水泥化指数
- n:胶结指数
- a:分散系数
该公式的物理基础在于多孔介质中电流主要通过流体相传导,而固体矿物骨架的导电能力相对较弱。
影响岩石电性的主要因素
(1)孔隙度与电阻率关系
孔隙度增加时,流体所占空间增大,电阻率相应降低。实验研究表明,孔隙度与电阻率的关系近似满足:
Rt∝ϕ−mR_t \propto \phi^{-m}Rt∝ϕ−m
不同岩性地层的水泥化指数 m 存在差异,砂岩通常取值在1.5-2.0之间,碳酸盐岩则可能达到3.0左右。
(2)含流体性质
地层水电阻率 Rw 是决定电阻率大小的关键因素之一。对于含有相同孔隙度和饱和度的地层,Rw越大,则 Rt也越大。这一关系可表示为:
Rt∝RwR_t \propto R_wRt∝Rw
在实际应用中,通常采用岩心分析或地球物理测井方法获取 Rw值。
(3)粘土矿物的影响
粘土矿物具有特殊的电学性质,能够显著改变地层的电阻率响应。粘土含量增加时,地层电阻率通常降低,但具体变化规律与粘土类型密切相关:
Rt=Rma1+CvR_t = \frac{R_{ma}}{1 + C_v}Rt=1+CvRma
其中 Cv为粘土系数,Rma为泥岩基线电阻率。
(4)温度效应
电阻率随温度升高而降低,其关系可表示为:
ρT=ρ25°C⋅e−0.018(T−25)\rho_T = \rho_{25°C} \cdot e^{-0.018(T - 25)}ρT=ρ25°C⋅e−0.018(T−25)
该公式中 ρT为温度 T(°C)时的电阻率值。
电阻率测量方法分类
| 测量类型 | 描述 | 适用场景 |
|---|---|---|
| 深探测测井 | 电流从电极向外扩散,探测深度较大 | 获取地层真电阻率 |
| 浅探测测井 | 探测范围较浅,受侵入带影响大 | 判断泥浆侵入程度 |
| 微电阻率测井 | 极小探测半径,主要用于识别泥质含量 | 评价泥质含量和含油性 |
1.2 典型测井工具结构
深、中、浅三侧向测井仪
三侧向测井仪由斯伦贝谢公司于1950年代研制成功,其基本结构包括:
(1)发射系统
采用交流电源激励的电极系,通过四个发射电极(A1、A2、B1、B2)产生电流场。各电极按特定几何关系布置,保证测量精度。
┌─────────────────────────────────────────┐
│ 三侧向测井仪结构 │
│ │
│ A1 B1 │
│ ●━━━━━━● │
│ ╲ ╱ │
│ ╲ ╱ │
│ ╲╱ │
│ ● │
│ C (接收电极) │
│ │
│ A2 B2 │
│ ●━━━━━━● │
└─────────────────────────────────────────┘
(2)接收系统
由三个接收电极(C、D1、D2)组成,用于采集电位差信号。测量原理基于:
V=I⋅RmeasV = I \cdot R_{meas}V=I⋅Rmeas
其中 V 为接收电位差,I 为发射电流强度。
(3)机械结构特点
- 仪器外径:约 9.5 cm
- 重量:约 12 kg
- 供电方式:电池组提供直流电源
- 信号处理:通过模拟电路完成初步放大和滤波
感应测井仪
感应测井采用电磁感应原理测量地层电导率,特别适用于高电阻率或油气层探测。其基本结构包括:
(1)发射线圈系统
由多个激励线圈组成,按特定几何关系排列,产生交变磁场。典型参数为:
# 感应测井仪发射线圈配置示例
transmitter_coils = {
"coil_count": 4, # 发射线圈数量
"frequency": 100000, # 工作频率 (Hz)
"current_amplitude": 5.0, # 电流振幅 (A)
"diameter": 8.2 # 线圈直径 (cm)
}
# 计算磁场强度
def calculate_magnetic_field(current, frequency, coil_diameter):
"""根据发射参数计算感应磁场强度"""
import math
B = (mu_0 * current * N) / (2 * pi * r)
return {
"magnetic_flux_density": B, # 磁通密度 (T)
"wavelength": c / frequency # 电磁波波长 (m)
}
# 示例计算
result = calculate_magnetic_field(5.0, 100000, 8.2e-2)
print(f"磁场强度: {result['magnetic_flux_density']:.6f} T")
(2)接收线圈系统
由多个接收线圈组成,通过感应电动势获取地层电导率信息。接收信号处理流程为:
Vinduced=−N⋅dΦdtV_{induced} = -N \cdot \frac{d\Phi}{dt}Vinduced=−N⋅dtdΦ
其中 N 为线圈匝数,Φ 为磁通量。
声波测井仪结构
声波测井用于测定地层的声波传播速度,进而计算孔隙度、岩性等信息。典型结构包括:
┌─────────────────────────────────────────────┐
│ 声波测井仪剖面示意图 │
│ │
│ ┌──────────┐ │
│ │发射换能器│ ←→ 声脉冲 │
│ └──────────┘ │
│ ↓ │
│ ┌──────────┐ │
│ │地层 │ → 声波传播 │
│ │(砂岩) │ │
│ └──────────┘ │
│ ↓ │
│ ┌──────────┐ │
│ │接收换能器│ ← 接收反射波 │
│ └──────────┘ │
│ │
│ 主要参数: │
│ - 发射频率: 25-40 kHz │
│ - 脉冲宽度: 100 μs │
│ - 重复周期: 50 ms │
└─────────────────────────────────────────────┘
测井仪器数据传输系统
现代测井仪器采用数字化传输技术,主要包括:
(1)模拟信号处理
早期测井仪使用模拟电路进行信号采集和放大:
# 模拟信号处理模块示例
class AnalogSignalProcessor:
def __init__(self, gain=100.0, filter_freq=100):
"""
初始化模拟信号处理器
Args:
gain: 放大器增益 (默认100)
filter_freq: 滤波器截止频率 (Hz)
"""
self.gain = gain
self.filter_freq = filter_freq
def amplify_signal(self, voltage):
"""对输入电压进行放大"""
amplified_voltage = voltage * self.gain
return amplified_voltage
def apply_low_pass_filter(self, frequency):
"""应用低通滤波器,仅通过低于截止频率的信号"""
if frequency <= self.filter_freq:
return True # 信号可通过
else:
return False # 信号被滤除
(2)数字数据传输
现代测井系统采用数字化传输技术:
| 数据类型 | 带宽要求 | 传输协议 |
|---|---|---|
| 模拟数据 | 10-50 kHz | RS-485 |
| 数字数据 | >1 MHz | Ethernet |
| 视频/图像 | >10 MHz | Fiber Optic |
测井工具质量控制
为确保测量精度,测井仪器需要定期进行校准和维护:
# 测井仪器校准程序示例
class WellLoggingCalibration:
def __init__(self):
self.reference_values = {
"resistivity": 1.0, # 标准电阻率 (Ω·m)
"porosity": 0.25, # 标准孔隙度
"velocity": 4500 # 标准声波速度 (m/s)
}
def calibrate_resistivity_tool(self):
"""电阻率测井工具校准"""
print("开始电阻率测井工具校准...")
test_results = {
"tool_id": "RL-2024-X1", # 工具编号
"calibration_date": "2024-03-15",
"reference_resistivity": self.reference_values["resistivity"]
}
# 模拟校准过程
measured_value = self.reference_values["resistivity"] * (1 + 0.02) # 假设误差2%
correction_factor = 1 / (1 + 0.02)
test_results["correction_factor"] = correction_factor
print(f"修正系数: {correction_factor:.4f}")
return test_results
def calibrate_porosity_tool(self):
"""孔隙度测井工具校准"""
print("开始孔隙度测井工具校准...")
test_results = {
"tool_id": "CNL-2024-Y1", # 中子测井仪编号
"calibration_date": "2024-03-15"
}
# 使用标准孔隙度块进行校准
standard_porosity = self.reference_values["porosity"]
measured_porosity = standard_porosity * (1 - 0.015) # 假设误差-1.5%
correction_factor = standard_porosity / measured_porosity
test_results["correction_factor"] = correction_factor
print(f"孔隙度修正系数: {correction_factor:.4f}")
return test_results
# 执行校准程序
calibration_system = WellLoggingCalibration()
resistivity_cal = calibration_system.calibrate_resistivity_tool()
porosity_cal = calibration_system.calibrate_porosity_tool()
测井数据记录与存储
测井数据的数字化记录和存储是现代测井技术的重要组成部分:
# 测井数据存储结构示例
import json
from datetime import datetime
class WellLoggingDataStorage:
def __init__(self):
self.data_structure = {
"well_name": "",
"measurement_date": "",
"depth_range": {"start": 0.0, "end": 0.0},
"tools_used": [],
"raw_data": []
}
def record_measurement(self, depth, tool_type, value):
"""记录单次测量数据"""
measurement_record = {
"depth_m": depth,
"tool_type": tool_type,
"value": value,
"timestamp": datetime.now().isoformat()
}
self.data_structure["raw_data"].append(measurement_record)
return measurement_record
def save_to_file(self, filename):
"""保存数据到文件"""
try:
with open(filename, 'w', encoding='utf-8') as f:
json.dump({
"metadata": self.data_structure["well_name"],
"measurements": self.data_structure["raw_data"]
}, f, indent=2)
print(f"数据已保存到 {filename}")
except Exception as e:
print(f"保存失败:{e}")
# 示例使用
storage = WellLoggingDataStorage()
storage.data_structure["well_name"] = "Well-A-101"
measurement1 = storage.record_measurement(1234.5, "电阻率", 8.7)
measurement2 = storage.record_measurement(1235.0, "孔隙度", 28.3)
# 保存数据
storage.save_to_file("well_data.json")
以上章节涵盖了岩石电性测量原理和典型测井工具结构的核心内容。通过理论分析与实例说明相结合的方式,帮助读者深入理解测井技术的基础知识及其工程应用。
2. 电阻率测井与流体识别
2.1 地层水电阻率计算
在地层评价中,地层水电阻率 RwR_wRw 是连接岩石物理性质与含流体现象的关键参数。由于地下环境的复杂性,直接测量 RwR_wRw 往往受到限制,因此需要通过间接方法推算。主要的推算依据包括岩心分析数据、邻井对比以及经验统计模型。
计算原理与方法
目前常用的计算方法主要包括:
- 岩心分析法:对取出的岩样进行实验室测试,结合孔隙度测定,建立 RwR_wRw 与地层条件的关系曲线。这是最准确但成本较高的方法。
- 经验公式法:利用不同沉积相带的统计规律,如前苏联的“克拉斯诺亚尔斯基”模型或美国的“Shirley-Garland”模型。
- 核磁共振测井(NMR)反演:NMR技术可以直接反映孔隙中的流体分布,结合弛豫时间谱可以分离 RwR_wRw 分量。
在实际工程软件中,通常采用混合模型进行估算。以下示例展示了如何基于已知参数和统计关系计算地层水电阻率。
import numpy as np
class RwCalculator:
def __init__(self):
# 默认参数:不同岩性类型的经验系数
self.params = {
"sandstone": {"a": 0.7, "m": 1.8}, # 砂岩典型值
"limestone": {"a": 0.5, "m": 2.4}, # 石灰岩
"dolomite": {"a": 0.6, "m": 2.1} # 白云岩
}
def calculate_rw(self, formation_type="sandstone",
porosity=0.25, measured_resistivity=None):
"""
根据地层类型和孔隙度估算地层水电阻率
Args:
formation_type: 岩石类型 ('sandstone', 'limestone', etc.)
porosity: 有效孔隙度 (phi)
measured_resistivity: 实测电阻率 (可选,用于校验)
Returns:
estimated_rw: 估算的地层水电阻率 (Ohm·m)
"""
if formation_type not in self.params:
raise ValueError("Unsupported rock type")
base_params = self.params[formation_type]
# 简化模型:基于 Archie 公式的变形
# Rt = a * phi^-m * Rw / Sw^n (假设 Sw=1, n=m)
# => Rw = Rt / (a * phi^-m)
# 此处为了演示计算逻辑,设定一个基准关系
# 模拟数据:假设已知某标准样品的 Rt 和 phi
sample_rt = 2.5 # Ohm·m
sample_phi_std = porosity
# 计算理论 Rw (假设样品完全饱和)
a, m = base_params["a"], base_params["m"]
rw_estimated = sample_rt / (a * pow(sample_phi_std, -m))
return {
"rock_type": formation_type,
"porosity_input": porosity,
"estimated_rw": rw_estimated
}
# 实例应用
calc_system = RwCalculator()
result_sand = calc_system.calculate_rw("sandstone", porosity=0.28)
print(f"砂岩地层水电阻率估算值: {result_sand['estimated_rw']:.3f} Ohm·m")
2.2 油气水层划分方法
在获得电阻率曲线后,核心任务是将储层划分为油、气、水或含油水层。这一过程通常结合孔隙度数据(如中子测井 CNL)和电阻率数据进行综合判识。
判别逻辑与交会图法
传统的判别方法是使用 RtR_tRt-ϕ\phiϕ 交会图,设定不同的斜率和截距来区分流体性质。
- 油层/气层:通常表现为高电阻率(相对于水层),且孔隙度较高。
- 水层:电阻率较低,且随深度增加变化较小。
- 含油饱和度层:介于两者之间。
现代算法引入了机器学习分类器,但基础逻辑仍基于物理模型。以下代码演示了基于阈值的初步判别流程。
class FluidIdentifier:
def __init__(self):
# 定义典型流体的电阻率下限阈值 (Ohm·m)
self.thresholds = {
"water": 10.0, # 水层上限,低于此值通常为干层或异常低阻
"oil_gas": 50.0, # 油气下限,高于此值可能为高阻油气
"mixed": 25.0 # 过渡带
}
def classify_layer(self, rt_value, phi_eff):
"""
根据电阻率和有效孔隙度进行流体分类
Args:
rt_value: 真电阻率 (Ohm·m)
phi_eff: 有效孔隙度
Returns:
classification: 流体类型字符串
"""
# 结合孔隙度校正的判别逻辑
if phi_eff < 0.1:
return "non-reservoir" # 非储层
# 简易判别规则:高阻 + 高孔 = 油气可能,低阻 = 水
if rt_value > self.thresholds["oil_gas"]:
return "potential_oil_gas"
elif rt_value < self.thresholds["water"]:
return "water_layer"
else:
# 中间区域需要结合其他曲线进一步分析
if phi_eff > 0.25:
return "transition_zone"
else:
return "uncertain"
def batch_process(self, data_list):
"""批量处理测井数据"""
results = []
for record in data_list:
rt = record['rt']
phi = record['phi']
label = self.classify_layer(rt, phi)
results.append({
"depth": record['depth'],
"label": label,
"parameters": {"rt": rt, "phi": phi}
})
return results
# 模拟数据输入
sample_data = [
{'depth': 1200.5, 'rt': 65.2, 'phi': 0.28},
{'depth': 1201.0, 'rt': 8.5, 'phi': 0.15},
{'depth': 1201.5, 'rt': 45.0, 'phi': 0.30}
]
processor = FluidIdentifier()
layer_analysis = processor.batch_process(sample_data)
for item in layer_analysis:
print(f"深度 {item['depth']}: 判为 -> {item['label']}")
2.3 含油饱和度模型
含油饱和度 SoS_oSo 的计算是储量评估的基础。虽然 Archie公式是最经典的工具,但在复杂地质条件下(如存在泥质、高矿化度水),需要采用修正模型。Simandoux方程和 Waxman-Smits模型在处理这些特殊情况时表现优异。
模型原理与应用
含油饱和度计算的核心在于准确获取含水饱和度 SwS_wSw,进而导出 So=1−SwS_o = 1 - S_wSo=1−Sw(假设无气)。
对于含泥质地层,电阻率关系修正为:
Rt=Rma⋅(1+Cv)/(1+Cv⋅Rwa/Rtma)R_t = R_{ma} \cdot (1 + C_v) / (1 + C_v \cdot R_{wa}/R_{tma})Rt=Rma⋅(1+Cv)/(1+Cv⋅Rwa/Rtma)
在数值计算中,我们通常采用迭代法或解析解来求解 SwS_wSw。以下代码实现了基于 Archie 公式及其改进型的饱和度计算器。
def calculate_saturation(archie_params, measured_rt, rw, porosity):
"""
计算含油饱和度
Args:
archie_params: 包含 m (水泥化指数), n (胶结指数) 的字典
measured_rt: 测量的真电阻率
rw: 地层水电阻率
porosity: 有效孔隙度
Returns:
sw, so: 含水饱和度和含油饱和度
"""
m = archie_params.get('m', 2.0)
n = archie_params.get('n', 2.0)
# Archie 公式基础形式:Rt = a * phi^-m * Rw / Sw^n (忽略 a=1, n=m 简化)
# Sw = (a * phi^-m * Rw / Rt) ^ (1/n)
numerator = porosity ** (-m) * rw
sw_value = (numerator / measured_rt) ** (1.0 / n)
# 限制饱和度在物理范围内 [0, 1]
if sw_value > 1.0: sw_value = 1.0
elif sw_value < 0.0: sw_value = 0.0
so_value = 1.0 - sw_value
return {"sw": sw_value, "so": so_value}
# 示例参数配置
geo_model_params = {
"m": 2.15,
"n": 2.0,
"rw_base": 0.45 # 平均地层水电阻率假设值
}
# 计算一组数据
test_data = [
{"rt": 25.0, "phi": 0.25},
{"rt": 12.0, "phi": 0.30}
]
print("--- 饱和度计算结果 ---")
for item in test_data:
res = calculate_saturation(geo_model_params,
measured_rt=item["rt"],
rw=geo_model_params["rw_base"],
porosity=item["phi"])
print(f"电阻率={item['rt']}, 孔隙度={item['phi']} -> Sw={res['sw']:.2%}, So={res['so']:.2%}")
本章完
3. 综合岩性解释与应用
3.1 密度中子交会分析
密度测井和中子测井是识别岩石岩性和孔隙度的核心组合测井系列。两者基于不同的物理原理,通过交会图分析可获得准确的储层参数。
技术原理
密度测井测量的是电子密度,与岩石骨架和流体密度相关:
ρb=ϕ⋅ρf+(1−ϕ)⋅ρm\rho_b = \phi \cdot \rho_f + (1-\phi) \cdot \rho_mρb=ϕ⋅ρf+(1−ϕ)⋅ρm
其中 ρb\rho_bρb 为地层视密度,ϕ\phiϕ 为孔隙度,ρf\rho_fρf 为流体密度,ρm\rho_mρm 为岩石骨架密度。
中子测井测量的是氢原子数量,与孔隙度正相关:
CNL=CNL0⋅e−αϕCNL = CNL_0 \cdot e^{-\alpha \phi}CNL=CNL0⋅e−αϕ
交会图分析技术
通过绘制密度-中子交会图,可以区分不同岩性:
- 砂岩:位于典型区域,具有特定的斜率
- 石灰岩/白云岩:骨架密度差异导致位置偏移
- 泥质层:显示为高孔隙度特征但实际无储集能力
import numpy as np
import matplotlib.pyplot as plt
class DensityNeutronCrossplot:
def __init__(self):
# 典型岩石的骨架参数(g/cm³)
self.bone_density = {
"sandstone": 2.65,
"limestone": 2.71,
"dolomite": 2.87,
"shale": 2.40
}
def calculate_crossplot_params(self, rock_type):
"""计算特定岩性的交会图参数"""
bd = self.bone_density.get(rock_type, 2.65)
# 密度-中子交会图的理论斜率公式
slope = (1 - 0.9 * bd) / (1 + 0.9 * bd)
return {
"rock_type": rock_type,
"bone_density": bd,
"slope": slope,
"expected_position": self._get_expected_pos(bd)
}
def _get_expected_pos(self, bd):
"""获取预期交会图位置"""
if bd < 2.5:
return {"density_range": (1.8, 2.0), "neutron_range": (35, 40)}
elif bd < 2.7:
return {"density_range": (2.0, 2.3), "neutron_range": (30, 35)}
else:
return {"density_range": (2.3, 2.8), "neutron_range": (25, 30)}
def analyze_sample(self, rho_b, cnl):
"""分析样品并识别岩性"""
# 计算偏离程度
deviation = np.sqrt((rho_b - 1.9)**2 + **(cnl - 38)2)
if deviation < 5:
return "sandstone"
elif rho_b > 2.6 and cnl < 30:
return "dolomite"
elif rho_b > 2.7 and cnl > 35:
return "shale"
else:
return "unknown_or_mixed"
# 实际应用示例
crossplot_analyzer = DensityNeutronCrossplot()
# 分析多个深度点的岩性
samples = [
{"depth": 1200.0, "rho_b": 2.35, "cnl": 32},
{"depth": 1201.0, "rho_b": 2.48, "cnl": 36},
{"depth": 1202.0, "rho_b": 2.72, "cnl": 28}
]
print("密度中子交会分析结果:")
for sample in samples:
result = crossplot_analyzer.analyze_sample(
sample["rho_b"],
sample["cnl"]
)
print(f"深度{sample['depth']}: {result}")
3.2 声波测井参数应用
声波测井测量纵波传播时间,与岩石弹性性质密切相关。
物理基础
声波时差 Δt\Delta tΔt 定义为:
Δt=LVp\Delta t = \frac{L}{V_p}Δt=VpL
其中 LLL 为声程距离,VpV_pVp 为纵波速度。
Gardner关系式建立了速度与密度的经验联系:
Vp=a⋅ρb,b=0.5V_p = a \cdot \rho^b, \quad b = 0.5Vp=a⋅ρb,b=0.5
参数应用分析
声波测井可用于:
- 孔隙度计算:通过声波时差与标准岩石对比
- 岩性识别:不同骨架密度产生不同的速度响应
- 裂缝检测:各向异性导致双折射现象
class SonicLoggingAnalyzer:
def __init__(self):
# 参考参数(石灰岩)
self.reference_delta_t = 54.0 # µs/m
def calculate_porosity(self, delta_t_measured, depth):
"""计算声波孔隙度"""
if delta_t_measured <= 0:
return None
porosity = (delta_t_measured - self.reference_delta_t) / \
(self.reference_delta_t * 0.5)
# 限制在物理范围内
return max(0, min(1, porosity))
def estimate_velocity(self, density):
"""基于Gardner关系估算速度"""
a = 1684.79 # Gardner方程系数
b = 0.5
velocity = a * (density ** b)
return velocity
def analyze_anisotropy(self, delta_t_fast, delta_t_slow):
"""分析各向异性(裂缝指示)"""
if delta_t_fast <= 0:
return None
anisotropy_ratio = delta_t_slow / delta_t_fast
ellipticity = (delta_t_slow - delta_t_fast) / delta_t_fast
# 判断是否存在显著裂缝
has_cracks = anisotropy_ratio > 1.15
return {
"fast_time": delta_t_fast,
"slow_time": delta_t_slow,
"ratio": anisotropy_ratio,
"ellipticity": ellipticity,
"crack_indicator": has_cracks
}
# 声波测井数据示例分析
sonic_analyzer = SonicLoggingAnalyzer()
well_data = [
{"depth": 1205.0, "dt": 62.5},
{"depth": 1206.0, "dt": 58.3},
{"depth": 1207.0, "dt": 49.8},
]
print("\n声波测井参数分析:")
for record in well_data:
porosity = sonic_analyzer.calculate_porosity(record["dt"], record["depth"])
print(f"深度{record['depth']}: Δt={record['dt']:.1f} µs/m, "
f"孔隙度={porosity*100:.1f}%")
# 各向异性分析示例
crack_data = {
"delta_t_fast": 63.5,
"delta_t_slow": 72.8
}
anisotropy_result = sonic_analyzer.analyze_anisotropy(
crack_data["delta_t_fast"],
crack_data["delta_t_slow"]
)
if anisotropy_result:
print(f"\n各向异性分析:")
print(f" 快慢时比: {anisotropy_result['ratio']:.2f}")
print(f" 裂缝指示: {'存在' if anisotropy_result['crack_indicator'] else '不存在'}")
3.3 资源储量评估流程
技术体系概述
油气储量评估遵循标准化的国际规范(如PRMS标准),主要包括:
- 地质建模:构建三维储层模型
- 体积计算:确定有效孔隙空间
- 含流体饱和度确定:基于测井数据
- 采收率估算:考虑开发方案影响
储量计算公式
原始地质储量(OGIP):
N=100⋅A⋅h⋅ϕ⋅(1−Swi)BoN = \frac{100 \cdot A \cdot h \cdot \phi \cdot (1 - S_{wi})}{B_o}N=Bo100⋅A⋅h⋅ϕ⋅(1−Swi)
其中各参数含义为:
- AAA:油藏面积(acres)
- hhh:有效厚度(ft)
- ϕ\phiϕ:平均孔隙度
- SwiS_{wi}Swi:初始含水饱和度
- BoB_oBo:原始油气比
数值实现与数据处理
class ReserveEstimation:
def __init__(self):
# 单位转换系数
self.conversion = {
"acres_to_m2": 4046.86,
"feet_to_m": 0.3048,
"barrel_to_m3": 0.158987
}
def calculate_ogip(self, area_acres, effective_thickness_ft,
porosity, initial_water_saturation, formation_volume_factor):
"""计算原始地质储量(标准油桶)"""
# 确保参数有效性
if any(p < 0 or p > 1 for p in [porosity, initial_water_saturation]):
raise ValueError("饱和度或孔隙度必须在[0,1]范围内")
# 计算净含油体积(立方米)
net_oil_volume = area_acres * self.conversion["acres_to_m2"] \
* effective_thickness_ft * self.conversion["feet_to_m"] \
* porosity * (1 - initial_water_saturation)
# 转换为标准油桶
ogip_barrels = net_oil_volume / formation_volume_factor / \
self.conversion["barrel_to_m3"]
return {
"net_oil_volume_m3": round(net_oil_volume, 2),
"ogip_barrels": round(ogip_barrels, 0)
}
def analyze_uncertainty(self, mean_value, std_deviation, confidence_level):
"""分析储量不确定性"""
# 置信区间计算(假设正态分布)
z_scores = {
"95%": 1.96,
"90%": 1.645,
"80%": 1.282
}
z = z_scores.get(confidence_level, 1.96)
lower_bound = mean_value - z * std_deviation
upper_bound = mean_value + z * std_deviation
return {
"confidence_interval": f"{lower_bound:.0f} - {upper_bound:.0f}",
"relative_uncertainty": (upper_bound - lower_bound) / mean_value * 100
}
# 实际评估案例数据
reserve_data = {
"area_acres": 2500,
"effective_thickness_ft": 85.3,
"porosity_mean": 0.24,
"porosity_std": 0.06,
"initial_water_saturation": 0.28,
"formation_volume_factor": 1.25
}
# 计算原始地质储量
calculation = ReserveEstimation()
result = calculation.calculate_ogip(
reserve_data["area_acres"],
reserve_data["effective_thickness_ft"],
reserve_data["porosity_mean"],
reserve_data["initial_water_saturation"],
reserve_data["formation_volume_factor"]
)
print(f"原始地质储量评估结果:")
print(f" 净含油体积: {result['net_oil_volume_m3']:.2f} m³")
print(f" OGIP: {result['ogip_barrels']:,.0f} 标准桶")
# 不确定性分析
uncertainty = calculation.analyze_uncertainty(
result["ogip_barrels"],
reserve_data["porosity_std"] * result["ogip_barrels"],
"95%"
)
print(f"\n95%置信区间: {uncertainty['confidence_interval']}")
# 多情景评估
scenarios = [
{"name": "乐观", "thickness_ft": 100, "porosity": 0.28},
{"name": "基准", "thickness_ft": 85.3, "porosity": 0.24},
{"name": "悲观", "thickness_ft": 60, "porosity": 0.18}
]
print(f"\n多情景评估对比:")
for scenario in scenarios:
result = calculation.calculate_ogip(
reserve_data["area_acres"],
scenario["thickness_ft"],
scenario["porosity"],
reserve_data["initial_water_saturation"],
reserve_data["formation_volume_factor"]
)
print(f" {scenario['name']:8s}: {result['ogip_barrels']:,.0f} 桶")
储量分类体系
按照PRMS标准,储量分为:
- 探明储量(Proven):高置信度(90%),可经济开采
- 概略储量(Probable):中等置信度(50%)
- 可能储量(Possible):较低置信度(10%)
def classify_reserves(estimated_value, confidence_percentage):
"""根据置信度分类储量"""
if confidence_percentage >= 90:
category = "Proven (探明)"
color_code = "#28a745" # 绿色
elif confidence_percentage >= 50:
category = "Probable (概略)"
color_code = "#ffc107" # 黄色
else:
category = "Possible (可能)"
color_code = "#dc3545" # 红色
return {
"category": category,
"confidence_level": confidence_percentage,
"color": color_code
}
# 储量分类示例
reserves_summary = [
{"value": 125000000, "confidence": 92},
{"value": 78500000, "confidence": 65},
{"value": 32000000, "confidence": 45}
]
print("\n储量分类汇总:")
for item in reserves_summary:
classification = classify_reserves(
item["value"],
item["confidence"]
)
print(f" {classification['category']:20s}: "
f"{item['value']:>12,} 桶 (置信度:{item['confidence']}%)")
# 经济可行性初步筛选
def economic_screening(ogip_barrels, operating_cost_per_bbl):
"""基于简单经济模型进行储量筛选"""
# 典型参数假设
oil_price = 70.0 # USD/barrel
breakeven_cost = 45.0 # USD/barrel
net_revenue_per_barrel = max(0, oil_price - operating_cost_per_bbl)
total_value = ogip_barrels * net_revenue_per_barrel
return {
"net_revenue_per_barrel": round(net_revenue_per_barrel, 2),
"total_projected_value": round(total_value / 1e6, 2), # 百万美元
"economically_viable": total_value > 0
}
# 经济评估示例
economic_analysis = economic_screening(
reserve_data["ogip_barrels"], # 使用之前计算的OGIP值
breakeven_cost=45.0
)
综合岩性解释与资源评价是石油地质工作的核心环节,通过密度、声波等多物理量测井数据的综合分析,结合规范的储量评估流程,可实现从地质认识到商业决策的科学转化。这些技术方法在油气田勘探开发的全生命周期中都发挥着关键作用。
【本章完】
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)