1. 环境准备Ubuntu系统与基础依赖在开始FLEXPART 10.4的安装之前我们需要确保系统环境满足基本要求。我强烈推荐使用Ubuntu 18.04 LTS版本这个版本经过大量用户验证兼容性最好。虽然新版本Ubuntu也能运行但可能会遇到更多依赖库冲突问题特别是grib_api和eccodes这类气象专用库。首先更新系统软件源并安装基础编译工具sudo apt-get update sudo apt-get upgrade -y sudo apt-get install -y g gfortran autoconf libtool automake flex bison cmake接下来安装Python相关工具FLEXPART的某些组件需要Python支持sudo apt-get install -y python3-dev python3-pip python3-numpy pip3 install --upgrade pip这里有个小技巧我习惯先安装python3-numpy系统包再用pip安装其他Python库这样可以避免二进制兼容性问题。曾经有一次直接全部用pip安装结果导致运行时出现奇怪的segmentation fault排查了好久才发现是numpy版本冲突。2. 关键依赖库安装与避坑指南2.1 Jasper库的编译安装Jasper是处理气象GRIB格式数据必需的基础图像库安装时需要特别注意编译选项wget http://www.ece.uvic.ca/~mdadams/jasper/software/jasper-1.900.1.zip unzip jasper-1.900.1.zip cd jasper-1.900.1 CFLAGS-fPIC ./configure --prefix/usr/local/jasper make -j$(nproc) sudo make install这里有个大坑一定要加-fPIC编译选项否则后续链接grib_api时会报错。我曾经因为漏掉这个选项导致make时出现relocation R_X86_64_PC32 against symbol错误白白浪费两小时排查。2.2 grib_api的版本选择与安装grib_api现在已经被eccodes取代但FLEXPART 10.4仍然依赖它。必须使用1.28.0版本新版本会导致兼容性问题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 cd grib_api-1.28.0-Source ./configure --prefix/usr/local/grib_api --with-jasper/usr/local/jasper make sudo make install安装后务必设置环境变量export LD_LIBRARY_PATH/usr/local/grib_api/lib:$LD_LIBRARY_PATH3. 现代替代库eccodes的安装虽然FLEXPART依赖grib_api但建议同时安装eccodes因为flex_extract工具需要它。这里推荐使用2.7.3版本wget https://confluence.ecmwf.int/download/attachments/45757960/eccodes-2.7.3-Source.tar.gz tar xvzf eccodes-2.7.3-Source.tar.gz cd eccodes-2.7.3-Source mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX/usr/local/eccodes .. make -j$(nproc) sudo make install验证安装是否成功python3 -m eccodes selfcheck如果看到Found: ecCodes v2.7.3就说明安装正确。我遇到过python找不到eccodes模块的情况原因是系统有多个Python版本需要用python3 -m pip install eccodes明确指定。4. NetCDF库全家桶安装FLEXPART支持NetCDF格式输出需要完整安装NetCDF工具链# 安装zlib 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 # 安装szip wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4/szip-2.1.tar.gz tar -xf szip-2.1.tar.gz cd szip-2.1 ./configure --prefix/usr/local/szip 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安装过程中最容易出错的是hdf5的版本选择。有次我用了新版本hdf5结果netcdf编译时报错最后发现是hdf5 1.10版本API有变动。所以强烈建议使用1.8.x这个稳定分支。5. FLEXPART 10.4源码编译终于来到主角环节下载和解压源码wget https://www.flexpart.eu/downloads/66 -O flexpart_v10.4.tar.gz tar xvf flexpart_v10.4.tar.gz cd flexpart_v10.4_3d7eebf修改Makefile关键参数ROOT_DIR /usr/local F90 /usr/bin/gfortran INCPATH1 ${ROOT_DIR}/grib_api/include LIBPATH1 ${ROOT_DIR}/grib_api/lib NCOPT -DUSE_NCF -lnetcdff -lnetcdf开始编译make ncfyes O_LEV2编译过程可能会遇到两个常见错误cannot find -lgrib_api_f90检查LD_LIBRARY_PATH是否包含/usr/local/grib_api/libnetcdf.inc: No such file需要安装libnetcdf-dev包6. flex_extract工具安装与测试flex_extract是准备输入数据的重要工具安装步骤如下git clone --single-branch --branch master https://www.flexpart.eu/gitmob/flex_extract cd flex_extract/Source/Fortran修改makefile_local_gfortran中的路径ECCODES_INCLUDE_DIR/usr/local/eccodes/include ECCODES_LIB_DIR/usr/local/eccodes/lib执行安装./setup_local.sh测试是否安装成功cd Testing/Installation/Calc_etadot ../../../Source/Fortran/calc_etadot如果看到CONGRATULATIONS输出说明全部环境配置正确。7. 常见问题解决方案在实际安装过程中我遇到过几个棘手问题问题1import eccodes时报错libz.so.1: cannot open shared object file 解决方案wget https://sourceforge.net/projects/libpng/files/zlib/1.2.9/zlib-1.2.9.tar.gz tar -xvf zlib-1.2.9.tar.gz cd zlib-1.2.9 ./configure make sudo make install sudo ln -sf /usr/local/lib/libz.so.1.2.9 /lib/x86_64-linux-gnu/libz.so.1问题2flex_extract编译时报错undefined reference to emospu_ 这是因为缺少EMOS库安装方法wget https://confluence.ecmwf.int/download/attachments/3473472/libemos-4.5.9-Source.tar.gz tar -xzf libemos-4.5.9-Source.tar.gz cd libemos-4.5.9-Source mkdir build cd build cmake .. -DCMAKE_INSTALL_PREFIX/usr/local/emoslib make sudo make install问题3运行FLEXPART时出现segmentation fault 这通常是因为内存不足可以尝试修改Makefile中的-mcmodelmedium为-mcmodellarge增加系统swap空间使用ulimit -s unlimited解除栈大小限制8. 系统优化与使用建议为了让FLEXPART运行更稳定我推荐进行以下系统配置将关键环境变量写入.bashrcecho export LD_LIBRARY_PATH/usr/local/grib_api/lib:/usr/local/eccodes/lib:$LD_LIBRARY_PATH ~/.bashrc echo export ECCODES_DEFINITION_PATH/usr/local/eccodes/share/eccodes/definitions ~/.bashrc对于长期运行任务建议使用tmux或screensudo apt-get install tmux tmux new -s flexpart # 在tmux会话中运行任务监控内存使用情况watch -n 1 free -h使用并行编译加速make -j$(nproc) ncfyes最后提醒一点所有安装路径最好保持默认的/usr/local不要随意更改。我曾经为了整洁把库都安装到/opt下结果各种路径问题接踵而至最后还是回归标准路径最省心。