前言
1. 作为开始,在这里先简单介绍一下WRF-Hydro:
WRF-Hydro是一个基于WRF(Weather Research and Forecasting Model)陆面过程部分独立发展起来的分布式水文模型,主要用于模拟大气和水文相互作用及过程。该模型采用FORTRAN90开发,具有良好的扩展性和支持大规模并行计算的能力,广泛应用于洪水预报、水资源管理、生态水文研究等多个领域。
2. 笔者使用的系统是Oracle VM VirtualBox软件创建的Ubuntu(64-bit)版本的Linux虚拟机。
系统配置是1 CPU,内存大小为3025 MB。
3. 在编译和安装过程中尽量保持并使用超级用户(root)权限。运行下述指令并输入密码。
su
当然你也可在需要权限的命令前添加sudo,但笔者建议保持root权限进行编译和安装过程。
一、简单准备工作
1. 准备存储文件的目录文件夹
一个sources存放压缩包等源文件,另一个hydro用于安装WRF-Hydro和依赖包等,可以再将它们放在同一个目录wrf中。
2. 准备依赖库的压缩包
本次安装需要依赖库mpich, zlib, hdf5, netcdf-c, netcdf-fortran,
其中netcdf-c,和netcdf-fortran分别是c和fortran版本的netcdf,
这些依赖库的安装源文件压缩包,可在如下网址中下载:
mpich:
https://www.mpich.org/static/downloads/4.1.2/mpich-4.1.2.tar.gz
zlib:
https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compile_tutorial/tar_files/zlib-1.2.7.tar.gz
hdf5:
https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.12/hdf5-1.12.2/src/hdf5-1.12.2.tar.gz
netcdf4-c:
https://downloads.unidata.ucar.edu/netcdf-c/4.9.2/netcdf-c-4.9.2.tar.gz
netcdf4-fortran:
https://downloads.unidata.ucar.edu/netcdf-fortran/4.6.1/netcdf-fortran-4.6.1.tar.gz
1)通过wget命令下载到sources文件夹中
wget -P ./wrf/sources URL
使用命令时将URL改成相应的下载网址即可。
2)当然你也可以直接通过网址链接直接下载下来到sources文件夹中
3)如果使用虚拟机的话你也可以通过原机下载再通过共享文件夹传到虚拟机中,最后再转移至sources文件夹
博主在这里是通过第一种方式用wget命令将压缩包下载下来的。
过程较长,这里只展示了下载mpich的。
二、检查编译所需软件的安装
1. WRF-Hydro的环境部署需要在编译器gcc,g++,gfortran下进行。
用which software_name命令检查是否安装了gcc g++ gfortran。
which gcc
which g++
whhich gfortran
1)若已安装则会显示文件路径,如下图所示:
2)若未安装则无显示,可用apt-get install xxx(在超级用户(root用户)的权限下)或直接用sudo apt-get install xxx命令安装。
sudo apt-get install gcc g++ gfortran
2.期间还需使用make和编辑器vim。需我们进行如上面的操作,先用which xxx命令进行检查,若未安装则用apt-get install xxx命令进行安装。
apt-get install make vim
三、安装依赖库
主要是对mpich和netcdf4的安装,zlib和hdf5是netcdf4的依赖库。
前面已经将所需依赖库的安装包下载到sources文件夹,下面对压缩包逐个进行解压安装。
1. 安装mpich
1)解压缩后进入对应目录
tar zxvf mpich-4.1.2.tar.gz
cd ./mpich-4.1.2
2)设置安装路径(一般要用绝对路径)
./configure --prefix=/home/king/wrf/hydro/mpich
3)make编译
make
运行部分截图
4)make install安装
make install
运行部分截图
5)利用vim添加环境变量(最好用绝对路径)
vim ~/.bash_profile
按i进入编辑模式,添加如下内容,再按Esc键,接着按:wq保存退出
export PATH=/home/linjunming/wrf-hydro/libraries/mpich/bin:$PATH
6)source 更新环境变量
source ~/.bash_profile
2. 安装zlib
与前面的操作相似:
解压缩进入对应文件目录
设置安装路径
./configure --prefix=/home/king/wrf/hydro/zlib
make编译
make install安装
3. 安装hdf5
解压缩进入对应文件目录
设置安装路径
./configure --prefix=/home/king/wrf/hydro/hdf5 --with-zlib=/home/king/wrf/hydro/zlib --enable-fortran --enable-cxx
make编译
make install安装
利用vim添加环境变量
vim ~/.bash_profile
--添加如下内容,保存并退出
source 更新环境变量
source ~/.bash_profile
4. 安装netcdf-c
解压缩进入对应文件目录
然后需要设置一些必须的临时环境变量,
export LD_LIBRARY_PATH=/home/king/wrf/hydro/zlib/lib:/home/king/wrf/hydro/hdf5/lib:$LD_LIBRARY_PATH
export CPPFLAGS="-I/home/king/wrf/hydro/zlib/include -I/home/king/wrf/hydro/hdf5/include"
export LDFLAGS="-L/home/king/wrf/hydro/zlib/lib -L/home/king/wrf/hydro/hdf5/lib"
再接着进行配置,编译安装。
设置安装路径
./configure --prefix=/home/king/wrf/hydro/netcdf --disable-dap --enable-netcdf-4 --enable-netcdf4 --enable-shared
----期间如缺少某些库,比如libxml2库,m4,libcurl等,会有显示提示缺失的库,使用apt-get install xxx命令安装即可。直到出现如下输出即安装路径设置成功。
make编译
make install安装
5. 安装netcdf-fortran
解压缩进入对应文件目录
然后需要设置一些必须的临时环境变量,
export LD_LIBRARY_PATH=/home/king/wrf/hydro/netcdf/lib:/home/king/wrf/hydro/zlib/lib:/home/king/wrf/hydro/hdf5/lib:$LD_LIBRARY_PATH
export CPPFLAGS="-I/home/king/wrf/hydro/netcdf/include"
export LDFLAGS="-L/home/king/wrf/hydro/netcdf/lib"
再接着进行配置,编译安装。
设置安装路径
./configure --prefix=/home/barbedcotton/wrf/libraries/netcdf
make编译
make install安装
利用vim添加环境变量
vim ~/.bash_profile
#进入编辑模式后,在最后一行输入:
export NETCDF=/home/king/wrf/hydro/netcdf
export PATH=/home/king/wrf/hydro/netcdf/bin:$PATH
export LD_LIBRARY_PATH=/home/king/wrf/hydro/netcdf/lib:$LD_LIBRARY_PATH
#保存后退出
source 更新环境变量
source ~/.bash_profile
至此,所有所需的依赖包安装完毕:
1)检查一下hydro目录应包含如下内容
若缺失哪个,需重新安装成功。
2).bash_profile文件中应包含如下环境变量
四、安装WRF-Hydro
1. 下载WRF-Hydro的源码(这里笔者下载的是5.2.0版本的WRF-Hydro)
cd /home/king/wrf/sources
wget https://codeload.github.com/NCAR/wrf_hydro_nwm_public/tar.gz/refs/tags/v5.2.0
改下文件名并解压,进入到解压目录下的trunk/NDHMS。
mv v5.2.0 wrf-hydro-5.2.0.tar.gz
tar zxvf wrf-hydro-5.2.0.tar.gz
cd wrf_hydro_nwm_public-5.2.0/trunk/NDHMS
2. 复制环境变量并进行环境变量的修改与更新
cp template/setEnvar.sh ./
vim setEnvar.sh
#按i进入编辑模式后,在后面输入:
export WRFIO_NCD_LARGE_FILE_SUPPORT=1
#保存退出后,再更新一下环境变量
source setEnvar.sh
----在setEnvar.sh文件添加的指令的意思是“允许大于2GB的NetCDF输入输出文件”
----当然,你也可以找到对应文件进行手动拷贝和修改
3. 编译和安装
1)
./configure
运行上述命令后出现:
这里是因为在编译和安装netcdf过程中缺少了对NETCDF_INC环境变量的定义,进行下述操作即可:
vim ~/.bash_profile
#进入编辑模式后,可在已定义的NETCDF下面添加:
export NETCDF_INC=/home/king/wrf/hydro/netcdf/include
#保存后退出,再更新一下环境变量
source ~/.bash_profile
重新运行:
./configure
选择选项2
2) 最后进行安装
运行:
./compile_offline_NoahMP.sh setEnvar.sh
出现如下内容则安装成功:
可在当前目录的Run目录看到生成的文件:
至此,WRF-Hydro安装完毕。
五、其他遇到的一些问题
编译和安装过程一般是不会那么一帆风顺的,除了过程中缺少一些库和一些环境变量外,笔者安装过程还遇到了一些其他小问题。
1. 其实,刚开始博主使用的Ubuntu虚拟机不是上面的虚拟机,在利用wget命令下载依赖包的压缩包时,显示“无法建立SSL连接”。
经过一番思考和查找资料,发现是博主在装这个虚拟机时,没有把较完整的功能成功安装,相当于没有建立真正完整的Ubuntu系统虚拟机。重新细致地装新的虚拟机后成功解决问题。
2. 另一个遇到的问题是,博主在编译安装zlib依赖包过程中,编写设置安装路径时尝试没有用绝对路径(其实博主知道应使用绝对路径,但好奇心作祟,想看看不是绝对路径会怎么样,行不行),运行编译安装没有,显示出现什么问题。
但在编译安装netcdf时出现无法将文件进行连接的错误,一番思考回想后意识到是在编译安装其依赖包zlib时没有用绝对路径的问题,导致没有将zlib真正成功装到想要的目录里。用绝对路径重装后解决了问题。