共计 1261 个字符,预计需要花费 4 分钟才能阅读完成。
为什么选择 Calpuff 模型?
- 复杂地形适应性强 :能精确处理山区、海岸线等非均匀下垫面的扩散问题
- 多尺度模拟能力 :从厂区级(百米)到区域级(百公里)均可覆盖
- 法规认可度高 :被 HJ2.2-2018 等国内外标准列为推荐模型
高斯烟团 vs 点源模型核心差异

– 扩散形态 :
– 烟团模型:瞬时释放的污染物呈三维椭球体扩散
– 点源模型:连续排放形成稳定烟羽
– 计算维度 :
– 烟团:时间 + 空间四维计算(x,y,z,t)
– 点源:稳态三维计算(x,y,z)
– 适用场景 :
– 烟团:事故排放、间歇性污染源
– 点源:持续运行的烟囱、排气筒
核心实现三步走
气象数据预处理
- 风速修正 :
# 将 10m 高度风速修正到排放高度 u_z = u_10 * (z/z_10)**0.15 # 幂律公式 - 稳定度分类 :
- 使用 Pasquill-Gifford 分类法
- 中国地区需特别关注 D 类(中性)稳定度
Python 浓度场计算(矢量化优化)
import numpy as np
def gauss_plume(Q, u, sig_y, sig_z, H, x, y, z=0):
"""
Q: 源强 (g/s)
H: 有效排放高度 (m)
sig_y/sig_z: 横向 / 垂直扩散参数 (m)
"""
term1 = Q / (2*np.pi*u*sig_y*sig_z)
term2 = np.exp(-0.5*(y/sig_y)**2)
term3 = np.exp(-0.5*((z-H)/sig_z)**2) + np.exp(-0.5*((z+H)/sig_z)**2)
return term1 * term2 * term3 # 浓度 (g/m³)
# 受体点矩阵计算示例
x_grid, y_grid = np.meshgrid(np.linspace(0,1000,100), np.linspace(-500,500,100))
C = gauss_plume(Q=100, u=3, sig_y=50, sig_z=20, H=80, x=x_grid, y=y_grid)
地形数据处理技巧
- DEM 归一化 :
- 统一采用 WGS84 坐标系
- 网格间距建议取模拟区域边长的 1 /50~1/100
- 高程修正 :
H_eff = H_stack + (h_receptor - h_stack) * 0.5 # 地形抬升修正
生产环境避坑指南
网格分辨率选择
- 城市区域:100-500m
- 农村区域:500-2000m
- 计算量估算公式:
内存占用 ≈ 网格数 × 气象场数 × 8 字节
中国地区参数推荐
| 参数 | 东部城市 | 西部高原 |
|---|---|---|
| 混合层高度 (m) | 800-1200 | 1500-2000 |
| 表面粗糙度 (m) | 0.5-1.0 | 0.1-0.3 |
可视化常见误区
- 等值线锯齿 :
- 优先使用 griddata 插值
- 避免直接使用 matplotlib 的 contourf
- 颜色标尺 :
- 建议采用对数刻度
- 超标区域用红色醒目标注
留给读者的思考题
- 如何验证模型在 CBD 建筑群中的适用性?建议尝试:
- 对比实测站数据
- 引入城市冠层参数化方案
- 长期模拟时需特别注意:
- 边界层高度的日变化
- 污染物化学转化模块
- 对比 CFD 的优势场景:
- 大区域计算效率
- 法规符合性要求
延伸学习建议
推荐结合《大气污染控制工程》教材 +EPA 官方文档实操,下次可以聊聊如何用 WRF-Calm 耦合提升气象场精度~
正文完
