util 后处理工具目录
路径
LMDZ.MARS\util
职责
util 存放一组离线工具程序,用于处理 LMDZ.MARS GCM 产生的 NetCDF 输出,例如 diagfi.nc、stats.nc、concat.nc、Xhistins.nc、startfi.nc 和 start_archive.nc。这些工具不参与 GCM 主积分,而是在模拟完成后完成拼接、坐标重映射、观测抽样、垂直坐标转换、列积分、诊断变量生成和初始场格式转换。
源码依据:util/README 明确说明本目录包含处理 LMD Mars GCM 输出文件的 utilities,并指出一个工具的输出通常还可以继续交给另一个工具处理。
跨工具串联顺序见 util-toolchain 主题。
目录内容
| 子目录/文件 | 类型 | 作用 |
|---|---|---|
compile |
shell 脚本 | 编译多数 .F90 工具,需用户配置 NETCDF_HOME、编译器和编译选项。aeroptical 会额外编译 aeropt_mod.F90。 |
concatnc.F90 / concatnc.def |
程序 + 输入样例 | 拼接连续 GCM 输出,生成 concat.nc,可选择变量并控制 sol/ls/adls 时间轴。 |
zrecast.F90 / zrecast.*.def |
程序 + 输入样例 | 把混合垂直坐标输出转换到压力、areoid 高度、本地地表高度或距行星中心半径坐标。 |
localtime.F90 / localtime.def |
程序 + 输入样例 | 将变量重分布到指定本地时刻,输出 *_LT.nc。 |
lslin.F90 / lslin.def |
程序 + 输入样例 | 将时间轴插值或平均到线性的太阳经度 Ls 坐标,可用于 GrADS 或观测分箱比较。 |
solzenangle.F90 / solzenangle.def |
程序 + 输入样例 | 按指定太阳天顶角反解晨侧/昏侧本地真太阳时,并将 3D/4D 变量插值到该几何条件。 |
hrecast.F90 / hrecast.def |
程序 + 输入样例 | 用格盒面积交叠权重将输出场重分配到新的规则经纬度水平网格。 |
extract.F90 / extract.*.def |
程序 + 输入样例 | 从已 zrecast 的文件中按点或廓线抽取四维变量,输出 ASCII .dat。 |
aeroptical.F90 / aeropt_mod.F90 / aeroptical.def |
程序 + 模块 + 输入样例 | 基于气溶胶质量混合比、有效半径、空气密度和光学性质表计算气溶胶消光/吸收不透明度。 |
gencol.F90 / gencol.def |
程序 + 输入样例 | 根据质量混合比、体积混合比或浓度计算柱密度,输出 *_col.nc。 |
check_co2cycle.F90 / check_co2cycle.def |
程序 + 输入样例 | 将 GCM 地表压力插值到 Viking 1/2 和 InSight 位置,计算 CO2 冰等效压力,并做日平均与谐波重建。 |
extractcolumnfor1D.F90 |
命令行程序 | 从 3D/4D 输出的指定经纬度与时间索引抽取垂直列,生成 profile_* 文件供 testphys1d 使用。 |
expandstartfi.F90 |
命令行程序 | 将 startfi.nc 的 physical_points 一维物理列展开到经纬度网格,便于可视化。 |
streamfunction.F90 |
程序 | 从 diagfi、stats 或 concat 类文件计算全时段平均的纬向流函数、角动量和纬向平均风/温度/密度诊断。 |
simu_MCS.F90 / simu_MCS.def |
程序 + 输入样例 | 将 GCM 场按 MRO/MCS 观测网格和分箱方式抽样,用于与 MCS 温度、尘埃、水冰廓线比较。 |
startarchive2icosa/ |
子目录 | 将 LMDZ start_archive.nc 转成 icosa_lmdz.exe 可用的 start_icosa.nc 与 startfi.nc。见 startarchive2icosa。 |
xvik/fit_Iceinertia_MONSicedepth.F |
子目录程序 | 基于四组 xvik 输出和 VL1 压力曲线拟合冰热惯量、冰深系数和总 CO2 inventory。 |
与其他目录的关系
| 相关目录 | 关系 |
|---|---|
LMDZ.MARS\libf\phymars |
phymars 运行产生诊断输出;util 读取这些 NetCDF 文件进行离线分析。 |
LMDZ.MARS\deftank |
deftank 中的运行脚本和配置决定输出变量、垂直坐标和示踪剂;这些设置直接影响 util 能否找到所需变量。 |
LMDZ.MARS\datadir |
aeroptical 需要气溶胶光学性质 ASCII 表,示例输入把这些文件放在 datadir 类目录。 |
LMDZ.MARS\startfiles |
expandstartfi 和 startarchive2icosa 处理物理初始场或 archive 初始场。 |
LMDZ.MARS\libf\dynphy_lonlat\phymars |
start2archive、start_archive 类输出可作为 startarchive2icosa 的输入。 |
推断:util 是连接“模式输出”和“科学诊断/观测比较/新初始场”的离线层;它不改变模式物理过程本身,但会决定后续图像、观测对比和再启动文件的坐标与变量契约。
关键文件
| 文件 | 原因 |
|---|---|
README |
提供工具职责、输入输出文件名、典型命令和可串联关系,是目录级说明的主要文档依据。 |
compile |
说明所有主工具的编译前提:NetCDF Fortran 库、编译器、库路径和运行时 LD_LIBRARY_PATH。 |
zrecast.F90 |
README 明确称其对可发表科学图像是必要步骤;源码中也列出压力、高度、地表高度和半径坐标四类输出。 |
concatnc.F90 |
后处理链常见第一步,把多段 diagfi、concat 或 stats 类文件按 Time 维拼成 concat.nc。 |
localtime.F90 / solzenangle.F90 / simu_MCS.F90 |
负责把模型输出变换到观测相关采样坐标。 |
aeroptical.F90 / aeropt_mod.F90 |
将模式示踪剂、有效半径和外部光学表转换成可比较的不透明度变量。 |
startarchive2icosa/README |
说明从 start_archive.nc 到 DYNAMICO/ICOSA 初始文件的完整流程和硬编码风险。 |
典型流程
主题级串联见 util-toolchain;本节保留目录页中的源码近邻说明。
1. 常规输出整理链
- GCM 输出多个
diagfi*.nc或stats*.nc。 - 用
concatnc.e < concatnc.def拼接变量与时间轴,生成concat.nc。 - 对需要垂直物理坐标的变量运行
zrecast.e < zrecast.auto.def或zrecast.e < zrecast.manual.def。 - 视分析目标继续运行:
localtime.e < localtime.def:统一到固定本地时;lslin.e < lslin.def:统一到线性Ls;solzenangle.e < solzenangle.def:统一到指定太阳天顶角;extract.e < extract.points.def或extract.e < extract.profile.def:抽点或抽廓线,见 extract.F90。
源码依据:util/README 给出的示例命令包括 concatnc.e < concatnc.def、zrecast.e < zrecast.def 和 extract.e < extract.points.def。
2. 观测比较链
- 对 Viking/InSight 地表压力比较,使用
check_co2cycle.e < check_co2cycle.def读取diagfi.nc、concat.nc或Xhistins.nc,输出站点压力、全球 CO2 库存、日平均和谐波重建文件。 - 对 MCS 比较,使用
simu_MCS.e < simu_MCS.def读取 GCM 文件和 MCS 分箱文件。源码注释说明它按 MCS 的经纬度、高度、Ls、昼夜与本地时分箱抽样 GCM 变量。 - 对任意观测点或廓线比较,先
zrecast到压力或几何高度坐标,再用extract在lon lat alt Ls LT上插值。
复现风险:这些比较链依赖输入文件坐标、时间覆盖和变量命名。simu_MCS.F90 的开头注释明确要求 GCM 文件覆盖完整观测时段,并且与 MCS 文件使用同类高度坐标。
3. 气溶胶与柱量诊断链
aeroptical.e < aeroptical.def读取 GCM 文件中的气溶胶质量混合比、有效半径和rho,再读取光学性质 ASCII 表,生成*_OPAext.nc或*_OPAabs.nc。- 如果需要柱积分光学厚度,在
aeroptical.def中选择yes。 gencol.e < gencol.def可对质量混合比、体积混合比或浓度变量计算柱密度,输出*_col.nc。
源码依据:aeroptical.F90 使用 use aeropt_mod,aeropt_mod.F90 的 read_optpropfile 从 ASCII 光学性质文件读入 wvl、radiusdyn、Qext、omeg。
4. 初始场与 1D 输入链
expandstartfi.e [infile.nc] [outfile.nc]将startfi.nc的物理列展开成经纬度网格,主要用于绘图检查。extractcolumnfor1D.e -i # -j # -l # -v list infile从 3D/4D 输出抽取某个水平格点和时刻的变量廓线,生成profile_*文件。startarchive2icosa/读取start_archive_nc4.nc、start_icosa_ref.nc、startphy_icosa_ref.nc、surface_nc4.nc和iodef.xml,输出start_icosa_prefinalize.nc与startfi_prefinalize.nc,再由icosa_finalize.bash生成start_icosa.nc和startfi.nc。
待确认:extractcolumnfor1D 生成的 profile_* 与 testphys1d 配置字段之间的完整映射尚需结合 dyn1d 页面追踪。
复现要点
- 编译前必须按本机环境修改
util/compile:NETCDF_HOME、COMPILER、COMPILER_OPTIONS和运行时库路径都不是自动探测的。 - 多数工具可交互回答问题,也可用同名
.def文件重定向标准输入;自动化复现时应保留实际使用的.def。 zrecast需要输入文件中有ps、temp、aps/bps或sigma,并需要phisinit;若输入文件没有,源码说明会尝试从diagfi.nc或phisinit.nc查找。zrecast对变量名前缀有特殊规则:README 和源码注释说明rho*、num_*一类变量应在 log-space 中垂直插值。aeroptical要求输入中存在气溶胶质量混合比、有效半径或用户给定的固定有效半径、空气密度rho,以及外部光学性质表。gencol对体积混合比转柱量时需要大气分子量;源码显示无法读取或计算局地分子量时会使用rgp/Rmean常数平均分子量。startarchive2icosa当前带有硬编码文件名和路径假设;README 明确标注该脚本仍在开发中,需要按本机环境谨慎修改。
待确认
lslin.F90页面中应进一步核实Ls_Linear.e、lslin.e、文件名拼写和实际可执行名之间的历史差异。fit_Iceinertia_MONSicedepth已确认硬编码读取xpsol1N/xprestotN,与当前xvik.F页面记录的ps_VL*_yearN/prestot_yearN命名不一致;复现时需确认历史输出命名或转换脚本。startarchive2icosa的 XIOS/MPI 编译链与现代环境兼容性需要实机验证。