【X-STILT模型第二期】X-STILT 模型函数详解
X-STILT 模型函数详解-目录
- run_xstilt.r
- 2. 脚本执行流程详解
- run_xstilt_tccon.r
- 2. 脚本主要差异点分析
- run_sim_multi.r
- 2. 脚本功能模块详解
- 参考
X-STILT 模型的下载安装教程可参考另一博客-【X-STILT模型第一期】X-STILT 模型概述。
本博客详细解释 X-STILT 模型采用的主脚本。
| 特性/维度 | run_xstilt.r(通用卫星版) | run_xstilt_tccon.r(地面站点版) | run_sim_multi.r(多组分模拟版) |
|---|---|---|---|
| 主要定位 | 基础启动器:用于卫星观测的轨迹与足迹计算。 | 定制启动器:专为地面 TCCON 站点设计的物理模拟。 | 化学模拟器:将物理轨迹与排放清单结合,计算浓度。 |
| 核心作用 | 计算大气粒子运动路径 (Traj) 和地表贡献权重 (Footprint)。 | 针对地面观测站,修正太阳倾斜路径并计算高精度轨迹。 | 计算N O 2 NO_2NO2的化学衰减,并结合多种清单模拟X C O 2 , X C O XCO_2, XCOXCO2,XCO等浓度。 |
| 观测源支持 | OCO-2/3, TROPOMI, 或理想受体 (Ideal Run)。 | TCCON(地面高光谱), EM27/SUN。 | 综合 TROPOMI, OCO-3, TCCON 的观测进行后处理验证。 |
| 空间释放特性 | 垂直柱状释放 (0-3km),通常代表卫星观测路径。 | 斜柱路径 (run_slant = T),随太阳角度偏移。 | 基于已有的轨迹数据进行格点化积分。 |
| 化学处理 | 不涉及(仅考虑物理输送)。 | 不涉及(仅考虑物理输送)。 | 核心功能:计算N O x NO_xNOx随时间的化学寿命和消减。 |
| 排放清单集成 | 仅作为参数传入(如 ODIAC),不进行复杂耦合。 | 同左,主要为后续模拟准备足迹。 | 高度集成:EDGARv6, EPA, ODIAC, Vulcan 等多种清单。 |
| 典型分辨率 | 0.1 度 (约 10km)。 | 1/120 度 (约 1km),精度更高。 | 取决于输入足迹的分辨率(通常 1km - 10km)。 |
| 运行前提 | 需要气象数据 (GFS/HRRR)。 | 需要气象数据及站点观测坐标。 | 必须先运行前两个脚本之一,获取.rds轨迹文件。 |
核心差异点解析
物理 vs 化学:
run_xstilt.r和run_xstilt_tccon.r是“跑腿的”:它们告诉模型空气块从哪里来,经过了哪里。run_sim_multi.r是“算账的”:它根据空气块路过的排放源,“装载”污染物,并考虑化学反应,最后算出观测点应该看到多少浓度。
垂直 vs 倾斜:
- 卫星脚本 (
run_xstilt.r) 通常假设观测路径是垂直向上的柱子。 - TCCON 脚本 (
run_xstilt_tccon.r) 考虑到地基仪器是“盯着太阳看”的,所以模拟路径必须跟着太阳斜着走。
- 卫星脚本 (
建议的工作流建议
在实际研究中,通常需要按以下顺序配合使用:
第一步 (物理模拟):* 如果你研究卫星过境,运行
run_xstilt.r。- 如果你研究地面站数据,运行
run_xstilt_tccon.r。 - 产出:大量的轨迹文件 (
*.rds)。
- 如果你研究地面站数据,运行
第二步 (化学模拟):* 运行
run_sim_multi.r。- 它会读取第一步产生的轨迹,结合 EDGAR 或 ODIAC 排放清单。
- 产出:模拟的X C O 2 XCO_2XCO2或N O 2 NO_2NO2浓度值。
第三步 (对比验证):* 将
run_sim_multi.r算出的模拟值与卫星/地面站实际观测到的值进行对比,评估排放清单的准确性或进行通量反演。
一句话总结:前两个脚本解决“空气怎么流”,最后一个脚本解决“浓度怎么变”。
run_xstilt.r
作为X-STILT(Column-integrated Stochastic Time-Inverted Lagrangian Transport)模型运行的“配置中心”和“启动器”。
简单来说,该脚本负责设置大气传输模型的所有参数(如气象数据、观测卫星、模拟高度等),并将这些参数打包传递给底层的 X-STILT 核心函数来执行模拟。
以下是该脚本主要功能的详细分解:
1. 核心任务目标
根据代码中的A、AA1、B等注释,该脚本可以完成以下三类任务:
- 轨迹模拟 (Trajectories):计算大气粒子随时间向后运动的路径。
- 足迹计算 (Footprints):计算地表排放对大气观测点(受体)浓度的贡献权重(通常以 0.1 度为分辨率)。
- X C O 2 XCO_2XCO2模拟与误差分析:结合排放清单(如 ODIAC)计算二氧化碳浓度增加值,或评估由于风场、混合层高度(PBL)或排放清单偏差导致的模拟误差。
2. 脚本执行流程详解
第一步:环境初始化与依赖加载
- 设置工作目录并加载 X-STILT 所需的库文件(
dependencies.r)。 - 读取 Google API Key:用于通过地名自动获取经纬度坐标并绘图。
第二步:定义模拟站点与观测源
- 站点选择:用户输入站点名称(如城市名),脚本通过 API 获取中心坐标。
- 传感器选择 (
obs_sensor):* 支持OCO-2/3和TROPOMI卫星数据。- 如果设置为
NA,则执行“理想模拟(Ideal Run)”,即不依赖卫星观测,而是读取用户提供的receptor_demo.csv文件中的受体坐标。
- 如果设置为
- 时段选择 (
timestr):确定模拟的具体日期和过境时间。
第三步:设置运行开关 (Flags)
这是控制脚本行为的“仪表盘”:
run_trajec = T: 是否生成粒子运动轨迹。run_foot = T: 是否生成足迹文件。run_sim = F: 是否基于现有足迹计算X C O 2 XCO_2XCO2模拟值。run_hor_err / run_ver_err: 是否开启水平或垂直传输误差分析。
第四步:受体与气象参数配置
- 柱状释放 (Column Release):针对卫星观测,模拟从地面(0m)到 3000m 高度的垂直柱状空气。
- 粒子数量:
numpar = 3000,即在垂直柱内释放 3000 个随机粒子。 - 气象数据 (
met):支持加载 GFS、HRRR 或 WRF 气象驱动数据,并会自动调用download.met.arl下载缺失的数据。
第五步:足迹与权重设置
- 权重调节:设置是否使用平均核函数(
ak_wgt)和压力权重(pwf_wgt)。这是卫星柱浓度模拟的关键,用于匹配卫星传感器的垂直敏感度。 - 空间范围:定义足迹计算的覆盖范围(例如站点周围20 ∘ × 20 ∘ 20^\circ \times 20^\circ20∘×20∘)。
第六步:并行计算与资源管理 (SLURM)
- 脚本配置了SLURM并行计算参数(节点数、核心数、内存)。
- 这是为了在高性能计算集群(HPC)上大规模运行成千上万个粒子的轨迹模拟,以提高效率。
3. 关键变量含义表
| 变量名 | 作用 |
|---|---|
site | 模拟的研究站点名称(如 ‘Los_Angeles’) |
minagl / maxagl | 粒子释放的垂直高度范围(0-3000米) |
nhrs | 向后模拟的小时数(-12 表示向后追溯 12 小时) |
foot_res | 足迹的空间分辨率(如 1/10 即 0.1 度) |
odiac_path | 用于模拟 FFCO2(化石燃料 CO2)的排放清单路径 |
namelist | 汇总所有参数的列表,作为最终输入 |
4. 总结:如何使用此函数?
- 修改路径:需要根据服务器环境修改
homedir和input_path。 - 设置开关:根据是想跑“轨迹”还是跑“足迹”,调整
run_trajec和run_foot。 - 运行:在 R 终端执行
source('run_xstilt.r')。 - 结果:脚本最终会调用
config_xstilt(namelist),根据设置在指定的store_path生成.rds格式的轨迹文件、足迹网格图或X C O 2 XCO_2XCO2模拟结果。
该脚本实际上是把复杂的科学计算流程简化成了一个配置列表,方便研究人员快速切换不同的研究案例(Case Studies)。
run_xstilt_tccon.r
这个脚本run_xstilt_tccon.r是专门为TCCON(地面太阳直射高光谱观测网络)站点量身定制的 X-STILT 运行脚本。
与之前的通用版本相比,它的核心逻辑从“卫星过境观测”转向了“地面站点连续观测”。以下是该脚本的详细功能解释:
1. 核心定位:针对 TCCON 站点的定制模拟
TCCON 是通过地面的光谱仪追踪太阳光来测量大气柱浓度的。因此,这个脚本在地理定位、时间处理和物理计算上做了专门调整:
- 固定站点模拟:脚本直接硬编码了
site = 'Lamont'(位于美国俄克拉荷马州,最著名的 TCCON 站点之一)及其经纬度(-97.486, 36.604)。 - 斜柱路径计算 (
run_slant = T):这是一个关键区别。由于 TCCON 是追踪太阳的,观测路径是倾斜的(随太阳高度角变化)。开启此开关后,模型会根据观测时的太阳位置修正空气块的释放位置。
2. 脚本主要差异点分析
A. 时间序列处理 (Time Distribution)
不同于卫星一天只过境一次,TCCON 在白天可以连续观测。脚本中有一段专门处理时间逻辑的代码:
if(grepl('TCCON',obs_sensor)){dates=seq(as.POSIXct('2020-07-01 20:00:00',...),by='min')timestr=unique(format(dates,...,format='%Y%m%d%H'))}- 作用:它创建了一个从 UTC 20:00 到 22:59 的时间序列,并按小时(
%H)提取timestr。这意味着它旨在模拟某一天内连续几个小时的大气传输情况。
B. 输入/输出 (I/O) 路径
- 观测数据源:指向 TCCON 的标准格式数据(
GGG2020版本)。 - 具体文件:指定了具体的
.nc文件(oc20110416_20221022.public.qc.nc),这是 TCCON 的质量控制后公开发布的数据集。
C. 高精度足迹设置
foot_res = 1/120: 空间分辨率被设定为约1公里(1 / 120 1/1201/120度),这比通用版的 0.1 度要精细得多。- 目的:这种高分辨率通常用于研究站点附近的局地排放源对地面观测的影响。
D. 运行状态
run_trajec = T: 开启轨迹计算。run_foot = F: 脚本中暂时关闭了足迹生成,可能当前任务仅侧重于研究大气路径(Trajectories)。nhrs = -1: 这里的向后模拟时间仅设为1小时。这通常用于分析非常近距离的局地贡献,或者是作为测试运行。
3. 计算资源配置 (Local vs. HPC)
与之前的通用脚本不同,这里的 SLURM 配置为关闭状态:
slurm = Fn_nodes = 1, n_cores = 1
这表明该脚本目前被配置为在本地工作站或单核上运行,而不是提交到高性能计算集群的大规模作业。
4. 关键参数总结表
| 参数名 | 设置值 | 科学含义 |
|---|---|---|
obs_sensor | TCCON | 使用地面总碳柱观测网络数据 |
obs_ver | GGG2020 | TCCON 最新的标准检索算法版本 |
run_slant | T | 开启斜柱修正,考虑太阳高度角引起的路径偏移 |
minagl / maxagl | 0 - 3000m | 模拟从地面到 3 公里高度的大气柱 |
foot_res | 1/120 | 极高分辨率足迹(约 1km),用于精细化研究 |
stop() | (存在) | 注意:脚本在config_xstilt前加了stop(),说明目前仅用于生成namelist检查参数,不会实际执行模拟。 |
5. 总结:这个脚本是干什么的?
这个脚本是用于Lamont 站点 TCCON 观测的局地贡献分析。它通过模拟 2020 年 7 月 1 日 20:00-23:00 期间,从地面到 3km 高度释放的 3000 个粒子在过去 1 小时内的运动轨迹,并考虑了观测时的太阳倾斜路径。
使用建议:如果要实际开始计算,需要注释掉代码最后的stop()函数,并根据需要增加nhrs(向后追溯小时数)以获得更完整的大气来源信息。
run_sim_multi.r
这个脚本run_sim_multi.r是 X-STILT 体系中的多组分化学模拟器。
如果说前两个脚本(run_xstilt.r和run_xstilt_tccon.r)主要负责大气物理过程(空气粒子怎么跑、足迹长什么样),那么这个脚本则是“化学与排放的合体器”。
它的核心作用是将已经跑好的 STILT 轨迹(Trajectories)与各种排放清单结合,最终计算出大气中几种关键污染物的浓度。
1. 核心任务:从“路径”到“浓度”
该脚本的主要任务是模拟以下四种物质的浓度:
- 对流层N O 2 NO_2NO2:涉及复杂的化学消减(寿命计算)。
- 柱浓度C O COCO(X C O XCOXCO):示踪燃烧过程。
- 柱浓度C O 2 CO_2CO2(X C O 2 XCO_2XCO2):温室气体模拟。
- 柱浓度C H 4 CH_4CH4(X C H 4 XCH_4XCH4):甲烷模拟。
关键点:这个脚本不运行HYSPLIT 物理模型。它假设你已经运行了之前的脚本并生成了轨迹文件(.rds),它的工作是进行后处理模拟。
2. 脚本功能模块详解
A. 多源排放清单集成 (Emission Inventories)
这是该脚本最强大的地方,它集成了多种主流的排放数据源:
- EDGAR v6:全球最常用的排放清单,涵盖N O x , C O , C O 2 , C H 4 NO_x, CO, CO_2, CH_4NOx,CO,CO2,CH4。
- EPA (AMPD):美国环保局的电厂连续监测数据(针对点源)。
- ODIAC / Vulcan:高分辨率的化石燃料C O 2 CO_2CO2排放清单。
- Posterior Emissions:支持使用反演后的“后验”排放数据进行验证模拟。
B.N O x NO_xNOx化学动力学 (Chemistry)
不同于C O 2 CO_2CO2这种“长寿命”气体,N O 2 NO_2NO2在大气中会发生反应消失。脚本中:
ts_chem = NA&ts_fn:脚本不使用固定的寿命,而是调用了一个预设的N O x NO_xNOx衰减曲线(nox_curves)。它会根据大气环境计算每一条轨迹在每一个时间点的N O x NO_xNOx寿命。- 背景值 (
bg_nox):自动从 TROPOMI 的辅助数据中提取背景浓度。
C. 混合参数与扰动 (Mixing & Perturbation)
为了进行不确定性分析或为**协同反演(EnKF)**做准备:
mx_res&mx_hr:定义了空间(1km)和时间(1hr)上的混合尺度,模拟污染物在大气中的扩散。- 扰动开关 (
perturb_*):可以选择性地对排放、混合过程或化学寿命进行随机扰动,生成“集合模拟”来评估误差。
3. 关键变量解释
| 变量 | 含义 | 作用 |
|---|---|---|
aq_invent | 气溶胶/化学清单 | 设置N O x , C O NO_x, CONOx,CO使用哪个排放源(如 ‘edgar’) |
ghg_invent | 温室气体清单 | 设置C O 2 , C H 4 CO_2, CH_4CO2,CH4使用哪个排放源 |
eno_sf / eco_sf | 缩放因子 | 手动调整排放强度(例如设为 1.2 表示排放增加 20%) |
overwriteTF | 覆盖开关 | 如果设为T,会重新计算并覆盖已有的模拟结果 |
slurm | 并行作业 | 该脚本默认开启集群并行,极大提高多污染物同时计算的速度 |
4. 逻辑流程总结
- 定位:设定站点(如洛杉矶
LosAngeles)和时间点。 - 配对:寻找该站点对应的 TROPOMI(测N O 2 , C O NO_2, CONO2,CO)或 OCO-3(测C O 2 CO_2CO2)卫星观测数据。
- 化学处理:计算N O x NO_xNOx随时间流逝的氧化速率。
- 积分计算:模拟浓度 = 足迹 × 排放清单 × 化学衰减 + 背景浓度 \text{模拟浓度} = \text{足迹} \times \text{排放清单} \times \text{化学衰减} + \text{背景浓度}模拟浓度=足迹×排放清单×化学衰减+背景浓度
- 并行输出:通过
config_chemv2函数,在超算集群上并行生成所有受体点的模拟结果。
5. 为什么用这个脚本?
如果已经跑通了run_xstilt.r并拿到了物理轨迹,那么run_sim_multi.r就是你的**“成果收割机”**。
它能帮一次性把卫星看到的浓度通过模型“还原”出来,从而对比模型模拟值与卫星观测值之间的差距,进而评估排放清单是否准确。
参考
1、Github-X-STILT
