WRF4.0安装教程
I、获取安装WRF需要的相关的软件包
批量解压压缩包到特定文件夹中
1 | |
如果已经有所有的离线安装包里可以直接解压安装,如果没有可以通过wget指令获取安装包。另外这里安装可以灵活一些,如果有sudo权限的可以使用apt-get或者yum指令安装某些依赖库,会省去很多麻烦。
II、安装编译器(intel系列或者gcc系列)
这里选择安装gcc编译器,注意一定要使用合适版本的编译器(WRF4.0对应大概是gcc-7.3.0),可以避免很多错误(如果环境里已经有了gcc也建议重新装一个兼容性好的编译器,并在bashrc中指定编译器,这样能避免很多由于版本不兼容造成的编译错误)
首先需要安装依赖,运行
1 | |
创建build文件夹并进入
前面的操作还是老一套configure ,make ,make install三步走
1 | |
安装成功后添加环境变量到bashrc
1 | |
之后可以使用gcc -v来确定是否安装成功以及是否是你刚刚安装的路径
出现问题
1、由于在运行configure时出现问题,发现问题的根源来自之前设置的环境变量LIBS,以下是AI的解释:
LIBS 环境变量是什么?
LIBS 是一个专门用于编译和链接程序的便利贴(环境变量)。
它的名字 LIBS 是 “Libraries”(库)的缩写。
当这个变量被设置时,它会告诉 configure 脚本、make 工具链或编译器(如 gcc):“嘿,当你要把程序链接(Link)成一个可执行文件时,除了你正常需要链接的库之外,务必也要把我便利贴上写的这些库(比如 -lgeotiff, -ltiff)一起链接进去。”
可使用 unset LIBS\LDFLAGS\CFLAGS指令先把环境变量去除
2、其次,conda环境下也会导致编译出现问题(需要c语言环境),因此需要退出conda环境,使用conda deactivate退出conda,首次退出当前环境会退回到base环境,需要再退出一次
III、按顺序安装其他依赖
这里可以专门创建一个目录用来存放所有软件的bin,lib,include,方便后续指定路径,比如在根目录下创建目录app,后续安装路径全都指定到这个目录
1、安装zlib
2、安装szip软件,配置时加上 –enable-shared
3、hdf5的安装需要上面个两个作为依赖
1 | |
时间会比较久
4、安装udunits2
如果有管理员权限,可以直接使用apt(unbuntu)命令下载 expat* 所有相关库
如果没有管理员权限,可以使用conda安装,执行
1 | |
安装完成后,配置环境变量:
1 | |
环境变量的配置很重要,注意不要写错
注意这一步要在conda环境下进行,否则无法找到conda路径
之后老套路安装,不过依然要加上动态库
5、安装netcdf-c
1 | |
tips: 运行configure时,–是程序自己的选项,其他的类似CPPFLAGS是给变量赋值,因此不用加–
又报错了,这次是说缺少m4这个工具,依旧用conda安装
1 | |
成功安装后即可顺利安装netcdf-c
6、安装netcdf-fortran
1 | |
首先设置环境变量,告诉系统找依赖的libary都去这个路径下去找
后续步骤同上,不过 –enable-netcdf4 要删除
7、安装netcdf-cxx
安装步骤同上,不再赘述
8、安装libpng
基本操作,连接上动态库即可
9、安装jasper
同上
10、安装mpich
装到最后才发现少装了一个,本来是写在后面的,怕影响后续的安装,放到前面来了
加入了环境变量
1 | |
虽然笔者是按这段命令安装的,但是这是由于笔者的gcc版本太高造成的版本冲突,CFLAGS=”-fcommon” CXXFLAGS=”-fcommon” 这一行版本合适的话大概率不需要,因此仅供参考。
1 | |
11、后处理软件的安装,不影响WRF的安装,可以先跳过(cdo.ncview,nco)
本来笔者也想是下载源码包编译安装这些后处理软件,但是由于配置各种依赖,还要解决版本冲突的问题,这里不如直接使用conda安装这些软件,并不影响软件的使用。
不过这里尽量建立独立的虚拟环境安装这些软件,不要一股脑全部安装到base环境中,建立独立conda环境的操作这里不再赘述。
进入你的conda环境,运行
1 | |
conda会自动下载所有相关的依赖
12、安装WRF
安装需要在conda环境下
在.bashrc中加入环境变量
1 | |
之后执行 source ./.bashrc 使得环境变量生效
为WRF的安装指定依赖路径
然后开始安装WRF
直接执行 ./configure
会弹出很多选项:
不同列代表不同的并行模式,一般使用第三列(dmpar)
不同行代表不同编译器,在这里我们使用的时GUN,因此选择34
之后会出现
1 | |
直接回车,这里会测试编译器和netcdf是否兼容
之后执行
1 | |
这里由于执行了 >& compile.log 因此输出和报错不会出现在屏幕上,而是被保存成日志文件,这是由于在编译大型文件时由于信息太快不易发现错误,因此保存日志方便查找error出现的位置
解决方案:
1、退出conda环境,configure时会出现报错说找不到m4,这里是因为当初是把m4安装到了conda下,所以说在安装依赖时一定不要在多个环境下安装,而且不建议全部都在conda中安装
使用wget下载m4源码包即可下载
wget http://ftp.gnu.org/gnu/m4/m4-1.4.19.tar.gz
之后还按之前的步骤安装
2、修改configure.wrf以下几行
1 | |
版本问题很容易遇到,这里可以在涉及到gcc,gfortran编译器的变量后面全部加上这个忽略语句,可以避免因为版本不兼容造成的编译失败
最后出现
Executables successfully built
即说明安装成功
可以打开run目录ls查看文件,如果是生成的exe是红色的仍代表编译失败,程序不可用,如果是蓝色的就说明编译成功了
可以尝试运行生成的可执行程序来测试是否安装成功:
1 | |
当然运行是不可能成功的,但是证明成功安装了
13、WPS的安装
注意,虽然作为WRF的前处理系统,但是WPS是要放在WRF之后安装的,因为WPS安装时需要找到WRF的位置
首先依旧是运行
1 | |
依旧会有选项,跟WRF一样,按实际情况选择,这里选择3
这里果不其然出现了报错,查了一圈发现还是gcc版本太高了,所以建议一开始一定要用合适版本的编译器
当然还有一个错误就是找不到WRF,这个比较好改,改一下configure.wps里WRF的路径就行,或者直接按configure里WRF的路径修改自己WRF的路径(一般是跟WPS在同目录下,命名为WRF/WRFV3)
之后继续修改configure.wps文件,让gcc忽略版本差异造成的错误
修改下面两行成:
1 | |
当然还没有结束,因为又报错了,这次是ungrib无法正常编译,其他两个exe都编译出来了。错误是版本过高导致有些错误无法忽略,因此要修改源码,不过不复杂。
打开 ungrib/src/ngl/g2/intmath.f
1 | |
找到172行和207左右的
1 | |
修改为
1 | |
保存之后清理编译缓存:
1 | |
之后重新编译即可,笔者这里是直接成功了,还是一样,可以看到WPS根目录下生成了三个exe程序就说明编译成功了,也可以尝试运行测试一下
OK,到这里就完成了WRF的安装全流程。