跳转到内容
RailWise KB已发布

隧道施工地表沉降预测工具 — Peck公式与经验系数法

基于Peck公式和经验系数的盾构隧道施工地表沉降预测计算工具,适用于轨道交通控制保护区施工影响评估

复核 2026-07-09入门公开可引用RailWise 技术团队
tool-guide

本工具用于预测盾构隧道施工引起的地表沉降,基于经典Peck公式及国内工程经验系数,为轨道交通控制保护区内的施工影响评估提供定量依据。

  • 盾构隧道施工前的影响范围预评估
  • 控制保护区监测方案的测点布设依据
  • 预警等级划分与控制阈值设定
  • 不同施工参数(埋深、直径、土体损失率)的敏感性分析
类型 内容
输入 隧道埋深、隧道直径、土体损失率、地表距隧道中心线距离、经验系数i
输出 地表沉降值、沉降槽曲线、最大沉降量、影响范围宽度

Peck(1969)提出的地表沉降槽公式:

$$S(x) = S_{max} \cdot \exp\left(-\frac{x^2}{2i^2}\right)$$

其中:

  • $S(x)$:距隧道中心线x处的地表沉降量(mm)
  • $S_{max}$:隧道中心线处最大沉降量(mm)
  • $x$:距隧道中心线的水平距离(m)
  • $i$:沉降槽宽度系数(m)

$$S_{max} = \frac{V_l \cdot D^2}{4\sqrt{2\pi} \cdot i}$$

其中:

  • $V_l$:土体损失率(%)
  • $D$:隧道直径(m)

根据O’Reilly & New(1982)及国内工程经验:

$$i = K \cdot z_0$$

其中:

  • $z_0$:隧道轴线埋深(m)
  • $K$:经验系数(与地层条件相关)
地层类型 K值范围 推荐值
黏性土 0.4~0.6 0.5
砂性土 0.25~0.35 0.3
软黏土 0.6~0.8 0.7
复合地层 0.35~0.55 根据项目实际情况确定

沉降槽影响范围通常取 $x = \pm 2.5i$ 处,此处沉降约为最大沉降的4%。


Terminal window
python tool_deformation_prediction.py --depth 15 --diameter 6.2 --loss-rate 0.8 --soil-type clay
from deformation_prediction import predict_settlement, plot_settlement_curve
# 基础计算
result = predict_settlement(
tunnel_depth=15.0, # 隧道轴线埋深(m)
tunnel_diameter=6.2, # 隧道直径(m)
volume_loss_rate=0.8, # 土体损失率(%)
soil_type='clay', # 地层类型
x_range=(-50, 50), # 计算范围(m)
x_step=0.5 # 计算步长(m)
)
# 绘制沉降槽曲线
plot_settlement_curve(result, save_path='settlement_curve.png')

参数名 含义 单位 取值范围 默认值 说明
tunnel_depth 隧道轴线埋深 m 5~100 必填 从地表到隧道轴线的垂直距离
tunnel_diameter 隧道外径 m 3~15 必填 盾构机刀盘直径
volume_loss_rate 土体损失率 % 0.1~5.0 必填 开挖面超挖、盾尾间隙等引起的体积损失
soil_type 地层类型 str clay/sand/soft_clay/mixed ‘clay’ 决定经验系数K
k_value 自定义K值 - 0.2~1.0 None 若指定则覆盖soil_type的默认值
x_range 计算水平范围 (m, m) (-200, 200) (-50, 50) 距隧道中心线的对称范围
x_step 计算步长 m 0.1~5.0 0.5 越小越精细,计算量越大
x_points 指定计算点 list[m] - None 指定特定位置计算沉降
施工条件 土体损失率Vl(%) 备注
正常盾构,良好控制 0.3~0.8 常规城市地铁施工
砂层,水压高 0.8~1.5 需加强注浆管理
软黏土,浅埋 1.0~2.5 地面沉降风险大
小半径曲线 1.5~3.0 纠偏导致超挖
穿越既有结构 0.2~0.5 需严格控制

提示:土体损失率是预测精度的关键参数,建议结合类似工程实测数据反算确定。


工程背景:盾构穿越黏土地层,隧道直径6.2m,轴线埋深15m。

输入参数

params = {
'tunnel_depth': 15.0,
'tunnel_diameter': 6.2,
'volume_loss_rate': 0.8,
'soil_type': 'clay'
}

计算过程

  1. 经验系数K = 0.5(黏土推荐值)
  2. 沉降槽宽度系数 i = K × z₀ = 0.5 × 15 = 7.5 m
  3. 最大沉降量 S_max = (0.008 × 6.2²) / (4 × √2π × 7.5) = 0.3046 / 37.70 ≈ 8.08 mm
  4. 影响范围 = ±2.5i = ±18.75 m

输出结果

最大沉降量: 8.08 mm
沉降槽宽度系数 i: 7.50 m
影响范围: ±18.75 m
距中心线10m处沉降: 4.52 mm
距中心线20m处沉降: 0.29 mm

工程背景:盾构侧穿高架桥墩,需评估桥墩位置沉降。

输入参数

params = {
'tunnel_depth': 12.0,
'tunnel_diameter': 6.2,
'volume_loss_rate': 0.5, # 严格控制
'soil_type': 'clay',
'x_points': [8.5] # 桥墩距隧道中心线8.5m
}

计算结果:桥墩位置预测沉降 3.42 mm,需结合差异沉降要求评估。


最大沉降量 风险等级 建议措施
< 5 mm 常规监测
5~15 mm 加密监测频率,准备应急措施
15~30 mm 专项方案评审,预注浆加固
> 30 mm 极高 设计复核,调整施工参数或线路
  • 沉降槽不对称:可能预示偏压、地层不均或盾构姿态异常
  • 沉降量远大于预测:检查土体损失率取值、是否发生涌水涌砂
  • 影响范围异常偏大:复核K值选取,可能存在软弱夹层

预测值应与施工监测数据动态对比,当实测值超过预测值30%时,应重新评估并调整参数。


#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
隧道施工地表沉降预测工具
基于Peck公式和经验系数法
Author: RailWise技术团队
Version: 1.0.0
"""
import math
import numpy as np
import matplotlib.pyplot as plt
from typing import Dict, List, Optional, Tuple, Union
from dataclasses import dataclass
# 地层经验系数K值表
SOIL_K_VALUES = {
'clay': 0.5, # 黏性土
'sand': 0.3, # 砂性土
'soft_clay': 0.7, # 软黏土
'mixed': 0.45, # 复合地层
}
@dataclass
class SettlementResult:
"""沉降计算结果数据类"""
x_positions: np.ndarray # 水平位置数组(m)
settlements: np.ndarray # 对应沉降值(mm)
s_max: float # 最大沉降量(mm)
i: float # 沉降槽宽度系数(m)
influence_range: float # 影响范围(m)
tunnel_depth: float # 隧道埋深(m)
tunnel_diameter: float # 隧道直径(m)
volume_loss_rate: float # 土体损失率(%)
def get_k_value(soil_type: str, custom_k: Optional[float] = None) -> float:
"""
获取经验系数K值
Args:
soil_type: 地层类型
custom_k: 自定义K值,若提供则优先使用
Returns:
K值
"""
if custom_k is not None:
if not 0.2 <= custom_k <= 1.0:
raise ValueError("自定义K值应在0.2~1.0范围内")
return custom_k
if soil_type not in SOIL_K_VALUES:
raise ValueError(f"未知地层类型: {soil_type},可选: {list(SOIL_K_VALUES.keys())}")
return SOIL_K_VALUES[soil_type]
def calculate_settlement_curve(
tunnel_depth: float,
tunnel_diameter: float,
volume_loss_rate: float,
soil_type: str = 'clay',
custom_k: Optional[float] = None,
x_range: Tuple[float, float] = (-50, 50),
x_step: float = 0.5,
x_points: Optional[List[float]] = None
) -> SettlementResult:
"""
计算地表沉降槽曲线
Args:
tunnel_depth: 隧道轴线埋深(m)
tunnel_diameter: 隧道直径(m)
volume_loss_rate: 土体损失率(%)
soil_type: 地层类型
custom_k: 自定义K值
x_range: 计算水平范围(m)
x_step: 计算步长(m)
x_points: 指定计算点列表(m)
Returns:
SettlementResult: 计算结果对象
"""
# 参数校验
if tunnel_depth <= 0 or tunnel_diameter <= 0:
raise ValueError("隧道埋深和直径必须大于0")
if volume_loss_rate <= 0:
raise ValueError("土体损失率必须大于0")
# 获取K值
k = get_k_value(soil_type, custom_k)
# 计算沉降槽宽度系数
i = k * tunnel_depth
# 计算最大沉降量 (mm)
# S_max = Vl * D^2 / (4 * sqrt(2*pi) * i)
vl_decimal = volume_loss_rate / 100.0
s_max = (vl_decimal * tunnel_diameter ** 2) / (4 * math.sqrt(2 * math.pi) * i) * 1000
# 生成计算点
if x_points is not None:
x_positions = np.array(x_points, dtype=float)
else:
x_positions = np.arange(x_range[0], x_range[1] + x_step, x_step)
# 计算各点沉降 (Peck公式)
settlements = s_max * np.exp(-x_positions**2 / (2 * i**2))
# 影响范围 (2.5i)
influence_range = 2.5 * i
return SettlementResult(
x_positions=x_positions,
settlements=settlements,
s_max=s_max,
i=i,
influence_range=influence_range,
tunnel_depth=tunnel_depth,
tunnel_diameter=tunnel_diameter,
volume_loss_rate=volume_loss_rate
)
def plot_settlement_curve(
result: SettlementResult,
save_path: Optional[str] = None,
show_plot: bool = True,
title: Optional[str] = None
) -> None:
"""
绘制沉降槽曲线
Args:
result: 沉降计算结果
save_path: 保存路径
show_plot: 是否显示图形
title: 自定义标题
"""
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制沉降曲线
ax.plot(result.x_positions, result.settlements, 'b-', linewidth=2, label='沉降曲线')
# 标记最大沉降点
ax.plot(0, result.s_max, 'ro', markersize=8, label=f'最大沉降: {result.s_max:.2f}mm')
# 标记影响范围
ax.axvline(x=-result.influence_range, color='g', linestyle='--', alpha=0.7, label=f'影响范围: ±{result.influence_range:.1f}m')
ax.axvline(x=result.influence_range, color='g', linestyle='--', alpha=0.7)
# 设置标签和标题
ax.set_xlabel('距隧道中心线距离 (m)', fontsize=12)
ax.set_ylabel('地表沉降 (mm)', fontsize=12)
if title is None:
title = (f'盾构隧道地表沉降预测曲线\n'
f'埋深:{result.tunnel_depth}m 直径:{result.tunnel_diameter}m '
f'Vl:{result.volume_loss_rate}%')
ax.set_title(title, fontsize=13)
ax.legend(loc='upper right')
ax.grid(True, alpha=0.3)
ax.axhline(y=0, color='k', linewidth=0.5)
# 反转Y轴使沉降向下
ax.invert_yaxis()
plt.tight_layout()
if save_path:
plt.savefig(save_path, dpi=150, bbox_inches='tight')
print(f"图形已保存至: {save_path}")
if show_plot:
plt.show()
def print_result_summary(result: SettlementResult) -> None:
"""打印计算结果摘要"""
print("=" * 50)
print("沉降预测计算结果")
print("=" * 50)
print(f"隧道轴线埋深: {result.tunnel_depth:.2f} m")
print(f"隧道直径: {result.tunnel_diameter:.2f} m")
print(f"土体损失率: {result.volume_loss_rate:.2f} %")
print(f"沉降槽宽度系数 i: {result.i:.2f} m")
print(f"最大沉降量 S_max: {result.s_max:.2f} mm")
print(f"影响范围: ±{result.influence_range:.2f} m")
print("-" * 50)
print("关键位置沉降:")
for x, s in zip(result.x_positions, result.settlements):
if abs(x) in [0, 5, 10, 15, 20] or abs(x - result.influence_range) < 1:
print(f" x = {x:6.1f} m: S = {s:8.2f} mm")
print("=" * 50)
# CLI接口
if __name__ == '__main__':
import argparse
parser = argparse.ArgumentParser(description='盾构隧道地表沉降预测工具')
parser.add_argument('--depth', type=float, required=True, help='隧道轴线埋深(m)')
parser.add_argument('--diameter', type=float, required=True, help='隧道直径(m)')
parser.add_argument('--loss-rate', type=float, required=True, help='土体损失率(%)')
parser.add_argument('--soil-type', type=str, default='clay',
choices=list(SOIL_K_VALUES.keys()), help='地层类型')
parser.add_argument('--k-value', type=float, default=None, help='自定义K值')
parser.add_argument('--output', type=str, default=None, help='输出图片路径')
args = parser.parse_args()
result = calculate_settlement_curve(
tunnel_depth=args.depth,
tunnel_diameter=args.diameter,
volume_loss_rate=args.loss_rate,
soil_type=args.soil_type,
custom_k=args.k_value
)
print_result_summary(result)
if args.output:
plot_settlement_curve(result, save_path=args.output, show_plot=False)
else:
plot_settlement_curve(result, show_plot=True)

  • Peck公式为经验公式,预测精度受土体损失率取值影响显著
  • 建议结合类似工程实测数据反算土体损失率,而非直接采用经验值
  • 对于复合地层、穿越既有结构等复杂工况,建议采用有限元分析进行校核
  • 适用于圆形盾构隧道施工引起的地表沉降预测
  • 适用于均质或近似均质地层条件
  • 不适用于以下情况:
    • 明挖法施工
    • 顶管法施工(需修正)
    • 存在显著地下水渗流
    • 地层中存在大型障碍物

Q: 土体损失率如何确定? A: 优先采用类似工程实测数据反算;无数据时,正常盾构黏土地层可取0.5%~1.0%,砂层取0.8%~1.5%。

Q: 预测值与实测值偏差大怎么办? A: 检查K值和Vl取值是否合理;复核地层勘察资料;考虑是否发生异常工况(如涌水、超挖)。

Q: 如何考虑时间因素? A: Peck公式为最终沉降预测,施工期沉降发展可参考Attewell & Woodman的固结沉降公式进行修正。



#沉降预测 #Peck公式 #盾构施工 #地表沉降 #控制保护区 #监测预警 #Python工具 #RailWise


文档版本: 1.0.0 | 最后更新: 2026-06-10 | 作者: RailWise技术团队

引用与复核把知识带回真实工程判断

引用时保留页面与来源线索;涉及标准条文、阈值、频率和项目结论,请回到现行依据与责任人复核。

查看 Agent 使用规则