RaymondHuang
RaymondHuang
发布于 2023-10-17 / 405 阅读
0
0

WRF与WRF-Hydro耦合版本安装与测试

前言

· 上一次我们安装了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天,期间换版本,各种重新编译真的非常折磨。

· 希望大家能从这篇博客找到自己踩的坑的解决方案!!


评论