CMAQ零基础实战Linux环境ISAT.M排放清单转换全流程解析第一次在Linux环境下操作ISAT.M工具时我盯着终端里不断跳出的报错信息深刻理解了从入门到放弃的真正含义。作为CMAQ模型预处理的关键环节排放清单转换本应是空气质量管理研究的起点却往往成为新手的第一道技术壁垒。本文将彻底拆解ISAT.M在Linux系统中的完整工作流程从Python 2.7环境配置到最终生成CMAQ可读的NetCDF文件每个步骤都经过真实项目验证。1. 环境准备避开Python 2.7的兼容性陷阱在Ubuntu 20.04 LTS系统中配置ISAT.M运行环境时首要挑战是搭建稳定的Python 2.7工作环境。由于现代Linux发行版已默认移除对Python 2的支持我们需要手动构建隔离环境# 安装Python 2.7基础环境 sudo apt-get update sudo apt-get install python2.7 python2.7-dev # 创建虚拟环境需先安装virtualenv python2.7 -m pip install virtualenv python2.7 -m virtualenv py2_env source py2_env/bin/activate关键依赖库的安装需要特别注意版本兼容性库名称推荐版本安装命令兼容性说明numpy1.16.6pip install numpy1.16.6最后支持Python 2的版本pandas0.24.2pip install pandas0.24.2需配合numpy 1.16使用netCDF41.5.8pip install netCDF41.5.8需要先安装hdf5开发库pyproj1.9.6pip install pyproj1.9.6地理坐标转换核心依赖提示在Ubuntu系统中需先执行sudo apt-get install libhdf5-dev确保netCDF4库正常编译常见环境问题排查ImportError: No module named pandas检查虚拟环境是否激活netCDF4 undefined symbol尝试重新安装hdf5开发库后编译numpy.dtype size changed强制降级numpy到1.16.6版本2. 文件结构解析与配置优化ISAT.M的标准目录结构包含三个核心组件ISAT.M/ ├── src/ # 源数据目录 │ ├── emissions/ # 排放量数据CSV格式 │ ├── speciate/ # 物种分配参数 │ ├── temporary/ # 时间分配参数 │ └── met/ # 气象网格文件 ├── creat_smoke_to_cmaq.ini # 主配置文件 └── ISATM.csh # 自动化运行脚本2.1 配置文件深度定制creat_smoke_to_cmaq.ini是转换过程的中枢神经其关键参数组解析[model] model CMAQinline # 在线模式直接耦合气象数据 [inputtype] inputtype month # 输入排放量为月总量可选year [runtime] runtime 745 # 模拟时长小时 [gridcro2d] gridcro2d ./src/met/GRIDCRO2D.nc # 必须与MCIP输出匹配 [speciate] speciate ./src/speciate/speciate_AR.csv # 居民源物种分配 speciate_groups ./src/speciate/speciate_IN.csv # 工业源分配 [emissions] emissions ./src/emissions/area/AR.csv # 面源排放文件路径 stack_groups ./src/emissions/point/STACK_GROUP_IN.csv # 点源数据实际项目中容易出错的配置项路径分隔符Linux下必须使用正斜杠(/)文件编码所有CSV需保存为UTF-8无BOM格式时间参数runtime需与CMAQ模拟时长严格一致2.2 排放数据文件规范面源CSV文件必须包含以下字段示例LON,LAT,SO2,NOx,VOC,CO,PM25,PM10,NH3 116.4,39.9,12.5,8.7,25.3,4.2,6.8,9.1,2.4 116.5,39.9,10.2,7.1,20.8,3.5,5.2,7.6,1.9注意NOx字段在文件中需标注为NO2但实际代表NOx总量点源数据额外需要烟囱参数LON,LAT,STKDM,STKHT,STKTK,STKVE,STKFLW,SO2,NOx 116.4,39.8,2.5,80,400,12,30,45.6,32.13. 脚本调试与自动化运行ISAT.M的核心转换逻辑通过ISATM.csh脚本驱动需根据实际环境修改#!/bin/csh # 清空历史输出 mv -f *.nc /tmp/ # 创建输出目录 mkdir -p EMISSIONS # 进入处理目录 cd ./processing/ # 并行执行转换根据CPU核心数调整mpirun参数 mpirun -np 4 /path/to/py2_env/bin/python area_inlinenew.py mpirun -np 4 /path/to/py2_env/bin/python point_em_inline.py # 合并输出文件 /path/to/py2_env/bin/python addnc_v1.py mv -f out.nc ../EMISSIONS/area.nc典型运行错误及解决方案Shell兼容性问题ERROR: Unable to proceed: no support for sourcing from [dash|sh] shell解决方法确保脚本首行为#!/bin/csh并使用csh ISATM.csh执行Python路径错误ImportError: No module named netCDF4检查虚拟环境路径是否正确建议使用绝对路径文件权限不足Permission denied: ./EMISSIONS执行chmod 755 ISATM.csh并确保输出目录可写4. 结果验证与CMAQ对接成功运行后在输出目录将生成以下关键文件area.nc面源排放NetCDFpoint.nc点源排放数据emis.log转换过程日志使用ncdump验证输出文件结构ncdump -h area.nc预期输出应包含以下维度变量dimensions: TSTEP UNLIMITED ; DATE-TIME 2 ; LAY 1 ; VAR 10 ; ROW 网格行数 ; COL 网格列数 ;最后将生成的NetCDF文件放置于CMAQ的EMIS目录在CTRL文件中配置EMISFILE path/to/area.nc, EMIS_MAP SO2SO2; NONO; NO2NO2; ...在测试案例中某京津冀区域项目从原始排放数据到最终CMAQ可用的NetCDF转换完整流程耗时约23分钟Intel Xeon 16核服务器。期间最大的时间消耗其实不是计算本身而是反复调试配置文件格式和路径设置——这也正是本文详细列出每个配置细节的原因。