当我在实验室第一次接触大气扩散模拟工具FLEXPART时,面对复杂的依赖关系和编译过程,整整两周时间都在反复折腾环境配置。这份手册记录了我从零开始搭建FLEXPART 10.4的全过程,特别针对Ubuntu 18.04系统进行了优化,所有步骤都经过实际验证。不同于官方文档的简略说明,这里会详细解释每个环节的技术细节,并标注可能遇到的"坑点"。
在开始前,请确保使用纯净的Ubuntu 18.04系统(物理机或VMware虚拟机)。WSL环境存在已知兼容性问题,不建议使用。首先更新软件源并安装基础开发工具:
bash复制sudo apt update && sudo apt upgrade -y
sudo apt install -y g++ gfortran autoconf libtool automake \
flex bison cmake python3-dev python3-pip git vim \
curl build-essential libbz2-dev libssl-dev \
libreadline-dev libsqlite3-dev tk-dev ruby
注意:Ubuntu 18.04默认Python版本为3.6,与后续某些库存在版本依赖关系,不要随意升级Python主版本
关键依赖安装清单:
验证环境:
bash复制gfortran --version # 应显示7.5.x版本
python3 --version # 应显示3.6.x版本
FLEXPART 10.4对以下库有严格的版本要求,版本不匹配会导致编译失败:
| 依赖库 | 必须版本 | 安装路径 | 验证命令 |
|---|---|---|---|
| jasper | 1.900.1 | /usr/local/jasper | jasper --version |
| grib_api | 1.28.0 | /usr/local/grib_api | grib_api_version |
| eccodes | 2.7.3 | /usr/local/eccodes | eccodes_version |
bash复制cd /usr/local
wget http://www.ece.uvic.ca/~mdadams/jasper/software/jasper-1.900.1.zip
unzip jasper-1.900.1.zip
mkdir jasper && cd jasper-1.900.1
CFLAGS="-fPIC" ./configure --prefix=/usr/local/jasper
make -j$(nproc)
make check # 验证测试通过
sudo make install
常见问题:
undefined reference to 'pow'错误,在configure前执行:bash复制export LDFLAGS="-lm"
bash复制cd /usr/local
wget https://people.freebsd.org/~sunpoet/sunpoet/grib_api-1.28.0-Source.tar.gz
tar xvzf grib_api-1.28.0-Source.tar.gz
mkdir grib_api && cd grib_api-1.28.0-Source
./configure --prefix=/usr/local/grib_api \
--with-jasper=/usr/local/jasper
make
[ -f bin/grib_api_version ] || echo "编译异常,检查jasper路径" # 关键检查点
sudo make install
配置环境变量:
bash复制echo 'export LD_LIBRARY_PATH=/usr/local/grib_api/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
由于apt安装的版本不符合要求,必须从源码构建:
bash复制cd /usr/local
wget https://confluence.ecmwf.int/download/attachments/45757960/eccodes-2.7.3-Source.tar.gz
tar xvzf eccodes-2.7.3-Source.tar.gz
mkdir eccodes && cd eccodes-2.7.3-Source
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/eccodes \
-DPYTHON_EXECUTABLE=/usr/bin/python3 ..
make -j$(nproc)
ctest # 运行测试套件
sudo make install
Python绑定验证:
python复制python3 -m eccodes selfcheck # 应显示Found: ecCodes v2.7.3
安装支持HDF5的NetCDF库:
bash复制# 安装zlib和szip
sudo apt install -y libnetcdf-dev libnetcdff-dev
wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4/zlib-1.2.8.tar.gz
tar -xf zlib-1.2.8.tar.gz && cd zlib-1.2.8
./configure --prefix=/usr/local
make && sudo make install
# 安装HDF5
wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4/hdf5-1.8.13.tar.gz
tar -xf hdf5-1.8.13.tar.gz && cd hdf5-1.8.13
./configure --enable-shared --enable-hl --prefix=/usr/local/hdf5
make -j$(nproc) && sudo make install
bash复制cd /usr/local
wget https://www.flexpart.eu/downloads/66 -O flexpart_v10.4.tar
tar xvf flexpart_v10.4.tar
cd flexpart_v10.4_3d7eebf
cp -r src src_backup # 建议先备份原始代码
编辑src/makefile,重点修改以下参数:
makefile复制ROOT_DIR = /usr/local
F90 = /usr/bin/gfortran
MPIF90 = /usr/bin/mpifort
# 包含路径设置
INCPATH1 = ${ROOT_DIR}/grib_api/include
INCPATH2 = ${ROOT_DIR}/jasper/include
# 库路径设置
LIBPATH1 = ${ROOT_DIR}/grib_api/lib
LIBPATH2 = ${ROOT_DIR}/jasper/lib
# 启用NetCDF输出
ifeq ($(ncf), yes)
NCOPT = -DUSE_NCF -lnetcdff -lnetcdf
else
NCOPT = -UUSE_NCF
endif
bash复制cd src
make ncf=yes # 启用NetCDF支持
# 处理常见链接错误
[ ! -f FLEXPART ] && \
export LD_LIBRARY_PATH=/usr/local/grib_api/lib:$LD_LIBRARY_PATH && \
make ncf=yes
# 验证生成的可执行文件
./FLEXPART --help | grep "FLEXPART MODEL"
获取ERA5数据的必要组件:
bash复制cd /usr/local
git clone --single-branch --branch master \
https://www.flexpart.eu/gitmob/flex_extract
cd flex_extract/Source/Fortran
# 修改makefile_local_gfortran中的路径
sed -i 's|ECCODES_INCLUDE_DIR=.*|ECCODES_INCLUDE_DIR=/usr/include|' \
makefile_local_gfortran
# 执行安装
./setup_local.sh
测试数据提取功能:
bash复制cd Testing/Installation/Calc_etadot
../../../Source/Fortran/calc_etadot
成功输出应包含STATISTICS和CONGRATULATIONS字样。
将以下内容添加到~/.bashrc文件末尾:
bash复制# FLEXPART环境配置
export FLEXPART_DIR=/usr/local/flexpart_v10.4_3d7eebf
export PATH=$FLEXPART_DIR/src:$PATH
export LD_LIBRARY_PATH=/usr/local/grib_api/lib:/usr/local/jasper/lib:$LD_LIBRARY_PATH
# NetCDF配置
export HDF5_DIR=/usr/local/hdf5
export NETCDF4_DIR=/usr/local
执行source ~/.bashrc使配置生效。现在可以尝试运行测试案例,建议从官网下载样例数据验证完整功能链。