从零构建WRF4.3气象模型Ubuntu 22.04全流程编译指南当气象科研遇上高性能计算WRFWeather Research and Forecasting模型无疑是领域内的黄金标准。作为一款中尺度气象数值模拟系统WRF在天气预报、气候研究和大气环境分析中扮演着关键角色。但对于刚接触该模型的科研人员而言从源码编译WRF及其前处理系统WPS往往是一场充满挑战的冒险——依赖库版本冲突、环境变量配置错误、编译选项选择困难等问题层出不穷。本文将带你用最系统的方式在Ubuntu 22.04 LTS上完成WRF4.3和WPS的完整编译。不同于零散的网络教程我们不仅会详细说明每个步骤更会揭示背后的原理和最佳实践确保你能一次性成功搭建这个强大的气象模拟平台。1. 系统环境准备与基础检查在开始WRF编译之旅前我们需要确保系统具备所有必要的工具链。Ubuntu 22.04作为长期支持版本其软件仓库中的开发工具已经能够满足WRF4.3的编译需求。首先更新系统并安装基础开发工具sudo apt update sudo apt upgrade -y sudo apt install -y build-essential gfortran cpp gcc g git \ m4 cmake curl wget unzip libtool automake验证关键编译器版本WRF4.3要求gcc/gfortran ≥9.0gcc --version gfortran --version典型输出应类似gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 GNU Fortran (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0接下来创建专用工作目录结构mkdir -p ~/WRF_Build/{TESTS,LIBRARIES,WRF,WPS} cd ~/WRF_Build重要提示WRF编译对磁盘空间有较高要求建议工作目录所在分区至少有30GB可用空间。如果是云服务器环境可以考虑挂载额外的数据盘。2. 依赖库的精细配置WRF模型的运行依赖于多个科学计算库这些库的版本选择和配置直接影响最终编译结果。我们将采用源码编译方式安装所有依赖确保最佳兼容性。2.1 环境变量预设在~/WRF_Build目录下创建环境配置文件cat env.sh EOF export DIR~/WRF_Build/LIBRARIES export CCgcc export CXXg export FCgfortran export F77gfortran export FCFLAGS-m64 export FFLAGS-m64 export PATH$DIR/netcdf/bin:$DIR/mpich/bin:$PATH EOF source env.sh2.2 关键依赖库编译NetCDF库C和Fortran接口现代WRF版本需要分别安装netcdf-c和netcdf-fortrancd $DIR wget https://downloads.unidata.ucar.edu/netcdf-c/4.9.2/netcdf-c-4.9.2.tar.gz wget https://downloads.unidata.ucar.edu/netcdf-fortran/4.6.1/netcdf-fortran-4.6.1.tar.gz # 编译netcdf-c tar xzf netcdf-c-4.9.2.tar.gz cd netcdf-c-4.9.2 ./configure --prefix$DIR/netcdf --disable-dap make -j$(nproc) make install cd .. # 编译netcdf-fortran tar xzf netcdf-fortran-4.6.1.tar.gz cd netcdf-fortran-4.6.1 export CPPFLAGS-I$DIR/netcdf/include export LDFLAGS-L$DIR/netcdf/lib ./configure --prefix$DIR/netcdf make -j$(nproc) make installMPI环境MPICH即使不计划进行并行计算某些WRF功能仍需要MPI库cd $DIR wget https://www.mpich.org/static/downloads/4.1.2/mpich-4.1.2.tar.gz tar xzf mpich-4.1.2.tar.gz cd mpich-4.1.2 ./configure --prefix$DIR/mpich make -j$(nproc) make installGRIB2支持库Jasper/zlib/libpng这些库用于处理气象数据常用的GRIB2格式# zlib cd $DIR wget https://zlib.net/zlib-1.2.13.tar.gz tar xzf zlib-1.2.13.tar.gz cd zlib-1.2.13 ./configure --prefix$DIR/grib2 make -j$(nproc) make install # libpng cd $DIR wget https://download.sourceforge.net/libpng/libpng-1.6.39.tar.gz tar xzf libpng-1.6.39.tar.gz cd libpng-1.6.39 ./configure --prefix$DIR/grib2 make -j$(nproc) make install # Jasper cd $DIR wget https://github.com/jasper-software/jasper/releases/download/version-2.0.33/jasper-2.0.33.tar.gz tar xzf jasper-2.0.33.tar.gz cd jasper-2.0.33 mkdir build cd build cmake .. -DCMAKE_INSTALL_PREFIX$DIR/grib2 make -j$(nproc) make install2.3 依赖库兼容性验证下载测试套件并验证环境cd ~/WRF_Build/TESTS wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/Fortran_C_NETCDF_MPI_tests.tar tar xf Fortran_C_NETCDF_MPI_tests.tar # 基础FortranCNetCDF测试 cp ${DIR}/netcdf/include/netcdf.inc . gfortran -c 01_fortrancnetcdf_f.f gcc -c 01_fortrancnetcdf_c.c gfortran 01_fortrancnetcdf_f.o 01_fortrancnetcdf_c.o -L${DIR}/netcdf/lib -lnetcdff -lnetcdf ./a.out # MPI扩展测试 mpif90 -c 02_fortrancnetcdfmpi_f.f mpicc -c 02_fortrancnetcdfmpi_c.c mpif90 02_fortrancnetcdfmpi_f.o 02_fortrancnetcdfmpi_c.o -L${DIR}/netcdf/lib -lnetcdff -lnetcdf mpirun -np 2 ./a.out两个测试都应输出SUCCESS字样。如果遇到问题请检查环境变量设置和库文件路径。3. WRF核心模型编译现代WRF版本已迁移到GitHub托管我们可以直接克隆最新源码cd ~/WRF_Build git clone --branch release-v4.3 https://github.com/wrf-model/WRF.git cd WRF3.1 配置选项解析运行配置脚本./configure会出现交互式选择界面对于大多数x86_64系统推荐选择编译器组合34. (dmpar) GNU (gcc/gfortran/g)编译类型1. Basic注意如果你使用ARM架构处理器如AWS Graviton或Apple M系列需要选择对应的ARM64选项配置完成后系统会生成configure.wrf文件。我们可以进一步优化编译参数sed -i s/-O2/-O3 -marchnative/g configure.wrf3.2 并行编译技巧WRF编译过程可以充分利用多核CPU./compile -j$(nproc) em_real 21 | tee compile.log编译过程可能需要30-60分钟取决于硬件性能。完成后检查生成的可执行文件ls -ls main/*.exe应看到四个主要程序wrf.exe主程序real.exe初始数据处理ndown.exe嵌套降尺度tc.exe热带气旋模块3.3 常见问题排查如果编译失败首先检查日志文件grep -i error compile.log常见问题包括内存不足尝试减少并行编译线程数如-j4依赖库路径错误确认env.sh中所有路径正确Fortran模块不兼容确保gfortran版本≥9.04. WPS前处理系统编译WPSWRF Preprocessing System负责将各种气象数据转换为WRF可读格式cd ~/WRF_Build git clone --branch release-v4.3 https://github.com/wrf-model/WPS.git cd WPS4.1 环境变量配置确保设置正确的Jasper和WRF路径export JASPERLIB$DIR/grib2/lib export JASPERINC$DIR/grib2/include export WRF_DIR../WRF4.2 编译选项选择运行配置脚本./configure选择与WRF相同的编译器组合通常为选项3。成功后执行编译./compile 21 | tee wps_compile.log验证生成的可执行文件ls -ls *.exe应有三个关键程序geogrid.exe定义模拟区域ungrib.exe提取气象数据metgrid.exe水平插值4.3 地理数据准备WPS需要静态地理数据wget https://www2.mmm.ucar.edu/wrf/src/wps_files/geog_high_res_mandatory.tar.gz tar xzf geog_high_res_mandatory.tar.gz -C ~/WRF_Build在namelist.wps中设置geogrid geog_data_path ~/WRF_Build/geog /5. 系统验证与性能调优完成所有编译后建议运行测试案例验证系统cd ~/WRF_Build/WRF/test/em_real ./ideal.exe mpirun -np 4 ./wrf.exe监控运行状态tail -f rsl.out.0000性能优化建议对于大型模拟在configure.wrf中启用OpenMPexport OMP_NUM_THREADS$(nproc) ./compile -j$(nproc) em_real 21 | tee compile_omp.log针对特定CPU架构优化sed -i s/-marchnative/-marchznver3/g configure.wrf # AMD Zen3考虑使用Intel编译器组合选项15可能获得额外性能提升对于云服务器用户建议选择计算优化型实例如AWS的c5系列或阿里云的ecs.g7ne并配置适当的网络存储如NAS用于输出数据。
保姆级教程:在Ubuntu 22.04上从源码编译WRF4.3和WPS(附依赖库完整配置流程)
从零构建WRF4.3气象模型Ubuntu 22.04全流程编译指南当气象科研遇上高性能计算WRFWeather Research and Forecasting模型无疑是领域内的黄金标准。作为一款中尺度气象数值模拟系统WRF在天气预报、气候研究和大气环境分析中扮演着关键角色。但对于刚接触该模型的科研人员而言从源码编译WRF及其前处理系统WPS往往是一场充满挑战的冒险——依赖库版本冲突、环境变量配置错误、编译选项选择困难等问题层出不穷。本文将带你用最系统的方式在Ubuntu 22.04 LTS上完成WRF4.3和WPS的完整编译。不同于零散的网络教程我们不仅会详细说明每个步骤更会揭示背后的原理和最佳实践确保你能一次性成功搭建这个强大的气象模拟平台。1. 系统环境准备与基础检查在开始WRF编译之旅前我们需要确保系统具备所有必要的工具链。Ubuntu 22.04作为长期支持版本其软件仓库中的开发工具已经能够满足WRF4.3的编译需求。首先更新系统并安装基础开发工具sudo apt update sudo apt upgrade -y sudo apt install -y build-essential gfortran cpp gcc g git \ m4 cmake curl wget unzip libtool automake验证关键编译器版本WRF4.3要求gcc/gfortran ≥9.0gcc --version gfortran --version典型输出应类似gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 GNU Fortran (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0接下来创建专用工作目录结构mkdir -p ~/WRF_Build/{TESTS,LIBRARIES,WRF,WPS} cd ~/WRF_Build重要提示WRF编译对磁盘空间有较高要求建议工作目录所在分区至少有30GB可用空间。如果是云服务器环境可以考虑挂载额外的数据盘。2. 依赖库的精细配置WRF模型的运行依赖于多个科学计算库这些库的版本选择和配置直接影响最终编译结果。我们将采用源码编译方式安装所有依赖确保最佳兼容性。2.1 环境变量预设在~/WRF_Build目录下创建环境配置文件cat env.sh EOF export DIR~/WRF_Build/LIBRARIES export CCgcc export CXXg export FCgfortran export F77gfortran export FCFLAGS-m64 export FFLAGS-m64 export PATH$DIR/netcdf/bin:$DIR/mpich/bin:$PATH EOF source env.sh2.2 关键依赖库编译NetCDF库C和Fortran接口现代WRF版本需要分别安装netcdf-c和netcdf-fortrancd $DIR wget https://downloads.unidata.ucar.edu/netcdf-c/4.9.2/netcdf-c-4.9.2.tar.gz wget https://downloads.unidata.ucar.edu/netcdf-fortran/4.6.1/netcdf-fortran-4.6.1.tar.gz # 编译netcdf-c tar xzf netcdf-c-4.9.2.tar.gz cd netcdf-c-4.9.2 ./configure --prefix$DIR/netcdf --disable-dap make -j$(nproc) make install cd .. # 编译netcdf-fortran tar xzf netcdf-fortran-4.6.1.tar.gz cd netcdf-fortran-4.6.1 export CPPFLAGS-I$DIR/netcdf/include export LDFLAGS-L$DIR/netcdf/lib ./configure --prefix$DIR/netcdf make -j$(nproc) make installMPI环境MPICH即使不计划进行并行计算某些WRF功能仍需要MPI库cd $DIR wget https://www.mpich.org/static/downloads/4.1.2/mpich-4.1.2.tar.gz tar xzf mpich-4.1.2.tar.gz cd mpich-4.1.2 ./configure --prefix$DIR/mpich make -j$(nproc) make installGRIB2支持库Jasper/zlib/libpng这些库用于处理气象数据常用的GRIB2格式# zlib cd $DIR wget https://zlib.net/zlib-1.2.13.tar.gz tar xzf zlib-1.2.13.tar.gz cd zlib-1.2.13 ./configure --prefix$DIR/grib2 make -j$(nproc) make install # libpng cd $DIR wget https://download.sourceforge.net/libpng/libpng-1.6.39.tar.gz tar xzf libpng-1.6.39.tar.gz cd libpng-1.6.39 ./configure --prefix$DIR/grib2 make -j$(nproc) make install # Jasper cd $DIR wget https://github.com/jasper-software/jasper/releases/download/version-2.0.33/jasper-2.0.33.tar.gz tar xzf jasper-2.0.33.tar.gz cd jasper-2.0.33 mkdir build cd build cmake .. -DCMAKE_INSTALL_PREFIX$DIR/grib2 make -j$(nproc) make install2.3 依赖库兼容性验证下载测试套件并验证环境cd ~/WRF_Build/TESTS wget https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/Fortran_C_NETCDF_MPI_tests.tar tar xf Fortran_C_NETCDF_MPI_tests.tar # 基础FortranCNetCDF测试 cp ${DIR}/netcdf/include/netcdf.inc . gfortran -c 01_fortrancnetcdf_f.f gcc -c 01_fortrancnetcdf_c.c gfortran 01_fortrancnetcdf_f.o 01_fortrancnetcdf_c.o -L${DIR}/netcdf/lib -lnetcdff -lnetcdf ./a.out # MPI扩展测试 mpif90 -c 02_fortrancnetcdfmpi_f.f mpicc -c 02_fortrancnetcdfmpi_c.c mpif90 02_fortrancnetcdfmpi_f.o 02_fortrancnetcdfmpi_c.o -L${DIR}/netcdf/lib -lnetcdff -lnetcdf mpirun -np 2 ./a.out两个测试都应输出SUCCESS字样。如果遇到问题请检查环境变量设置和库文件路径。3. WRF核心模型编译现代WRF版本已迁移到GitHub托管我们可以直接克隆最新源码cd ~/WRF_Build git clone --branch release-v4.3 https://github.com/wrf-model/WRF.git cd WRF3.1 配置选项解析运行配置脚本./configure会出现交互式选择界面对于大多数x86_64系统推荐选择编译器组合34. (dmpar) GNU (gcc/gfortran/g)编译类型1. Basic注意如果你使用ARM架构处理器如AWS Graviton或Apple M系列需要选择对应的ARM64选项配置完成后系统会生成configure.wrf文件。我们可以进一步优化编译参数sed -i s/-O2/-O3 -marchnative/g configure.wrf3.2 并行编译技巧WRF编译过程可以充分利用多核CPU./compile -j$(nproc) em_real 21 | tee compile.log编译过程可能需要30-60分钟取决于硬件性能。完成后检查生成的可执行文件ls -ls main/*.exe应看到四个主要程序wrf.exe主程序real.exe初始数据处理ndown.exe嵌套降尺度tc.exe热带气旋模块3.3 常见问题排查如果编译失败首先检查日志文件grep -i error compile.log常见问题包括内存不足尝试减少并行编译线程数如-j4依赖库路径错误确认env.sh中所有路径正确Fortran模块不兼容确保gfortran版本≥9.04. WPS前处理系统编译WPSWRF Preprocessing System负责将各种气象数据转换为WRF可读格式cd ~/WRF_Build git clone --branch release-v4.3 https://github.com/wrf-model/WPS.git cd WPS4.1 环境变量配置确保设置正确的Jasper和WRF路径export JASPERLIB$DIR/grib2/lib export JASPERINC$DIR/grib2/include export WRF_DIR../WRF4.2 编译选项选择运行配置脚本./configure选择与WRF相同的编译器组合通常为选项3。成功后执行编译./compile 21 | tee wps_compile.log验证生成的可执行文件ls -ls *.exe应有三个关键程序geogrid.exe定义模拟区域ungrib.exe提取气象数据metgrid.exe水平插值4.3 地理数据准备WPS需要静态地理数据wget https://www2.mmm.ucar.edu/wrf/src/wps_files/geog_high_res_mandatory.tar.gz tar xzf geog_high_res_mandatory.tar.gz -C ~/WRF_Build在namelist.wps中设置geogrid geog_data_path ~/WRF_Build/geog /5. 系统验证与性能调优完成所有编译后建议运行测试案例验证系统cd ~/WRF_Build/WRF/test/em_real ./ideal.exe mpirun -np 4 ./wrf.exe监控运行状态tail -f rsl.out.0000性能优化建议对于大型模拟在configure.wrf中启用OpenMPexport OMP_NUM_THREADS$(nproc) ./compile -j$(nproc) em_real 21 | tee compile_omp.log针对特定CPU架构优化sed -i s/-marchnative/-marchznver3/g configure.wrf # AMD Zen3考虑使用Intel编译器组合选项15可能获得额外性能提升对于云服务器用户建议选择计算优化型实例如AWS的c5系列或阿里云的ecs.g7ne并配置适当的网络存储如NAS用于输出数据。