前言
· 上一次我们安装了WRF-Hydro并运行了其官方测试集模型。
· 这次我们需要同时安装WRF与WRF-Hydro,后者是前者的水文扩展包。
· 本次实验环境依然是Ubuntu-22.04。
· 为了实验的完整性,我把上次安装的WRF-Hydro删除了,只保留了所有的依赖库。
· 现在的项目目录是HOME目录下有一个wrf文件夹,里面只有一个libraries文件夹存放依赖。
· 本文参考官方文档。
· 本文所有的文件可以在我的仓库里面找到。
准备
· 首先我们需要准备WRF、WRF-Hydro、WPS的源代码。
· 注意:本文所用的包和数据集的版本不一定是最新版也不一定和官方一致,别问,问就是踩坑踩出来的QAQ
· 创建一个src文件夹,并在里面下载这5个包:
mkdir src && cd src
# WRF-Hydro包
wget https://files.raymondhqr.top/hpc/wrf_hydro_nwm_public-5.1.1.tar.gz
# WPS包
wget https://files.raymondhqr.top/hpc/WPS-4.4.tar.gz
# WRF包
wget https://files.raymondhqr.top/hpc/WRF-4.5.1.tar.gz
# 官方耦合数据集
wget https://files.raymondhqr.top/hpc/example_case_coupled.tar.gz
# WPS地理数据集,这个因为太大了需要使用脚本来分批下载
# 脚本里面也是从官方下载,速度非常慢,建议用其他方式获取数据集
wget https://files.raymondhqr.top/hpc/geog_data_download.sh
sh geog_data_download.sh
· 解压:
tar -zxvf example_case_coupled.tar.gz
tar -zxvf WPS-4.4.tar.gz
tar -zxvf WRF-4.5.1.tar.gz
tar -zxvf wrf_hydro_nwm_public-5.1.1.tar.gz
· 为了使用方便,改个名:
mv WPS-4.4 WPS
mv WRFV4.5.1/ WRF
mv wrf_hydro_nwm_public-5.1.1 wrf_hydro
· 把WPS地理数据集移动到WPS文件夹下:
mv ./geog ./WPS
· 至此,编译前准备工作完成,你的src目录应该看起来是这样的:
编译WRF
· 首先,进入WRF文件夹:
cd WRF
· 把WRF中的老版本hydro更换为WRF-Hydro中的新源码:
rm -r hydro
cp -r ../wrf_hydro/trunk/NDHMS/ hydro
· source一下环境变量:
source ./hydro/template/setEnvar.sh
· 配置:
./configure
· 如果出现找不到NETCDF的报错,则需要添加一个环境变量,指向你按照NETCDF的路径:
export NETCDF=/home/huangqirui/wrf/libraries/netcdf
· 然后再次执行./configure即可。
· 出现选项,我们选择35,因为上次配的环境是gfortran和gcc:
· 然后它还问你是否嵌套编译,我们选择选项1:
· 如果没出现ERROR那证明问题不大,我们执行编译指令:
./compile em_real >& compile.log
· 控制台没有输出是正常的,因为输出都被写到compile.log下了,可以再开启一个终端,然后使用以下指令来监听日志文件的变化:
tail -f compile.log
· 编译时间会比较久,需要耐心。
· 出现这个即为编译成功:
编译WPS
· 在编译WPS之前,我们需要先安装一个新的依赖JasPer,此处我回到了libraries目录下安装:
踩坑点:之前我用的是最新4.0版本的JasPer,然后后面一直装不上,换老版本就好了!!!!!这个故事告诉我们,别用最新版!!!
wget https://files.raymondhqr.top/hpc/jasper-version-2.0.33.tar.gz
tar -zvxf jasper-version-2.0.33.tar.gz
· 然后新建一个用于编译的文件夹,并进行编译:
mkdir build-jasper && cd build-jasper
cmake ../jasper-version-2.0.33/ -DCMAKE_INSTALL_PREFIX=/home/huangqirui/wrf/libraries/jasper # 后面的参数是指定安装路径
make
make install
· 安装完成后,添加一些环境变量并source一下:
vim ~/.bash_profile
# 添加下面三行,记得换成自己的jasper路径:
# export JASPERLIB=/home/huangqirui/wrf/libraries/jasper/lib
# export JASPERINC=/home/huangqirui/wrf/libraries/jasper/include
# export LD_LIBRARY_PATH=$JASPERLIB:$LD_LIBRARY_PATH
source ~/.bash_profile
· 接下来就是编译WPS了,我们回到WPS目录下。
· 首先,我们需要修改一个编译选项,进入下面的文件,在下图后面添加一个选项:
vim ./arch/preamble
· 保存退出后,在WPS文件夹下执行:
./configure
· 在弹出的选项中,我们选择3:
· 然后我们就可以开始编译了:
./compile >& compile.log
· 这里也需要注意,控制台不会有显示,因为log都被写入到compile.log文件里面了。
· 编译完成后,我们看看WPS文件夹下有没有这几个.exe文件,如果有就是编译成功了:
ls -als *.exe
运行WPS
· 在src文件夹下新建run/WPS文件夹,在该文件夹下运行WPS。
mkdir run && cd run
mkdir WPS && cd WPS
运行WPS geogrid必要文件
· 然后我们复制和链接一些必要的文件:
cp ../../WPS/geogrid.exe .
cp ../../WPS/geogrid/GEOGRID.TBL .
ln -sf ../../WPS/geog .
cp ../../example_case_coupled/namelist.wps .
· 然后我们就可以开始运行了:
./geogrid.exe >& geogrid.log
· 等待运行完成,查看log,如果出现下面的即运行成功:
运行WPS ungrid必要文件
· 继续在run/WPS文件夹下操作。
· 复制和链接一些必要文件:
cp ../../WPS/ungrib.exe .
cp ../../WPS/link_grib.csh .
cp ../../WPS/ungrib/Variable_Tables/Vtable.NAM Vtable
./link_grib.csh ../../example_case_coupled/WRF_FORCING/*
· 然后就可以开始运行了:
./ungrib.exe >& ungrib.log
· 最后查看log里面最后显示这个就是成功:
运行WPS metgrid必要文件
· 继续在run/WPS文件夹下操作。
· 复制和链接一些必要文件:
cp ../../WPS/metgrid.exe .
cp ../../WPS/metgrid/METGRID.TBL .
· 然后开始运行:
./metgrid.exe >& metgrid.log
· 查看log最后出现这个就是成功:
运行WRF与WRF-Hydro耦合模型
准备
· 接下来我们回到run文件夹下。
· 然后我们把WRF目录下的run目录复制到run目录下:
cp -RL ../WRF/run WRF
· 进入WRF目录进行后续操作:
cd WRF
· 复制和链接一些必要文件:
cp ../../WRF/hydro/template/HYDRO/*TBL .
cp ../../example_case_coupled/namelist.input .
cp ../../example_case_coupled/hydro.namelist .
ln -sf ../../example_case_coupled/DOMAIN .
ln -sf ../WPS/met_em* .
ln -sf ../WPS/geo_em* .
运行必要文件
· 我们先运行WRF real utility:
mpirun -np 2 ./real.exe >& real.log
· 这个log里面没什么好看的,在运行完成之后需要检查当前目录下有没有生成wrfinput开头和wrfbdy开头的文件:
运行耦合模型
· 最后激动人心的时刻,运行耦合模型:
mpirun -np 2 ./wrf.exe >& wrf.log
· 这个log也没啥好看的,运行完成之后检查目录下有没有生成rsl.out开头的文件和rsl.error开头的文件:
· 至此,耦合模型运行完成!!!!
后记
· 这个复现前前后后弄了2天,期间换版本,各种重新编译真的非常折磨。
· 希望大家能从这篇博客找到自己踩的坑的解决方案!!