- 积分
- 1265
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2013-5-7
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 半_两_蘑_菇 于 2023-12-22 17:47 编辑
前言:近期重拾数值模式知识,结合单位的实际情况,centos已经不适宜作为平台来部署WRF,只能采用Ubuntu系统,多年前安装的时候失败过,饶是心有余悸,这次安装翻阅了一些材料,结合NCAR的官网教程,以及本站最新的帖子(那位老师也是用的Ubuntu安装且帖子时间为今年),经过一段时间的小小尝试,利用所有离线包安装并成功编译WRF,有一些技术细节怕以后遗忘(可能也是各位站友可能碰到的问题),故记录本贴,希望能对大家(本人)有所帮助。
软件概况(版本):
系统:Ubuntu LTS 2204
fortran: GNU fortran
C: GCC 、G++
zlib: 1.2.11
libpng: 1.6.37
jasper: 1.900.1
hdf5: 1.10.5
mpich: 3.3.2
netcdf-c: 4.7.4
netcdf-f: 4.5.3
WRF: 4.5
按以上版本的离线安装包安装是一次成功,顺序如下:
1. zlib→libpng→jasper→hdf5 ,编译过程老三样:configure、 make(make check)、 makeinstll
(注1:此处参考了一个博主的手法,在configure的时候所有的--prefix指向同一个目录,例“/xxxx/netcdf/",以前我不是这么干的,但是这次尝试确实这样做可以,而且还省事。)
(注2:环境变量提前预设:
*** ”XXX“为主目录 ***
export DIR=/XXX/Build_WRF/LIBRARIES
export CC=gcc
export CXX=g++
export FC=gfortran
export FCFLAGS="-m64"
export F77=gfortran
export FFLAGS="-m64"
export JASPERLIB=$DIR/netcdf/lib
export JASPERINC=$DIR/netcdf/include
export LDFLAGS="-L$DIR/netcdf/lib"
export CPPFLAGS="-I$DIR/netcdf/include"
export PATH=$DIR/netcdf/bin:$PATH
export NETCDF=$DIR/netcdf
export PATH=$DIR/mpich/bin:$PATH
export LD_LIBRARY_PATH=${NETCDF}/lib:$LD_LIBRARY_PATH
)
(注3:zlib不带除--prefix以外的参数;libpng加--prefix和LDFLAGS=-L$DIR/netcdf/lib、CPPFLAGS=-I$DIR/netcdf/include参数;jasper不带除--prefix以外的参数;hdf5加--prefix和--with-zlib=$DIR/netcdf参数)
2.netcdf-c → netcdf-f
*** 请再次核对NC库版本 ***
重要:首先做GCC、G++、GFORTRAN降级(2204版本的Ubuntu出厂自带版本是11.x),为什么要做降级以及不做降级如何安装请看后文。
第一步:先换软件包更新源
sudo vim /etc/apt/source.list
末尾加入两行:
deb http://dk.archive.ubuntu.com/ubuntu/ xenial main
deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe
:wq!
更新,终端输入:
sudo apt update
此时会出现错误,终端会显示两串密钥 NO_PUBKEY xxxxxxxxxxxxxx NO_PUBKEY xxxxxxxxxxxxxx
记录这两串key,并分别在终端执行以下两句命令
sudo apt-key adv --kevserver kevserver.ubuntu.com --recv-keys xxxxxxxxxxxxxx
sudo apt-key adv --kevserver kevserver.ubuntu.com --recv-keys xxxxxxxxxxxxxx
再次更新,终端输入:
sudo apt update
此时不报错误即已经把更新源设置好。(注:其实不做这一步是否可以降级我没尝试过,感兴趣可以跳过试试直接降级)
第二步:安装旧版编译器并启用,为保险起见,我降了两个大版本。
分别安装三个编译器的9.5版本,终端输入:
sudo apt-get install gcc-9
sudo apt-get install gfortran-9
sudo apt-get install g++-9
检验是否安装成功(非必要),终端输入以下命令:
ls /usr/bin/gcc* (此处会返回该系统安装好的所有GCC软件,末尾带版本号,如"GCC-11”)
ls /usr/bin/g++* (同上)
ls /usr/bin/gfortran* (同上)
安装完毕后调整默认编译器优先级(可以理解为降级),终端分别输入:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 2
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 1
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 2
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 1
sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-9 2
sudo update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-11 1
解释: 上述命令是指将系统默认的相关编译器的优先级进行更改,注意命令行末尾的参数(即“2”和“1”),此处含义为,该值范围为1~50,数值越大,优先级越高,系统默认从最高的优先级调用编译器,上面的例子就是将11.x版本的各编译器优先级改为1,将9.x版本的各编译器优先级改为2,那么系统默认就会用9.x的编译器,从而完成编译器的降级。
检验编译器是否为旧版,终端输入:
gcc --version
g++ --version
gfortran --version
返回值应该均为9.x版本
第三步:安装netcdf库的C版本
编译命令:
./configure --prefix=$DIR/netcdf LDFLAGS=-L$DIR/netcdf/lib CPPFLAGS=-I$DIR/netcdf/include --disable-dap
make
make check
make install
第四步:安装netcdf库的fortran版本
编译命令:
​./configure --prefix=$DIR/netcdf CPPFLAGS=-I$DIR/netcdf/include LD_LIBRARY_PATH=$DIR/netcdf/lib:$LD_LIBRARY_PATH LDFLAGS=-L$DIR/netcdf/lib
make
make check
make install
3.MPICH
如果已经完成降级和NC库的安装,此处的MPI编译会非常简单。
./configure --prefix=$DIR/mpich
make
make check
make install
4.编译WRF
这里就不赘述了,选并行版本,GUN FORTRAN + GCC编译器。
补充:
1.不降级编译器会怎么样?
答:会在安装netcdf库的fortran版本的make checke环节(强行make install可以安装成功)、安装MPICH的环节分别出现ERROR,造成这个ERROR的原因是4.5.3版本的fortran版nc库有一个f90程序里包含了一个小BUG,具体来说是主程序的参数定义为了real型,而子程序传参的参数定义为了integer型,实际操作中其实是可以传进去的只不过数值精度会有变化(个人理解),但是11.x版本的gfortran编译器不允许有这种不匹配的现象(从返回的error信息获知),同样,3.3.2版的MPICH在configure的时候会做系统编译器检查,会检测11.x版本的gfortran编译器“是否接受数值精度不匹配”的选项,而此处会过不了导致MPI无法安装,所以降级是从根源上解决这个问题,同时GCC\G++为了保险起见也一同降级。
MPICH错误信息参考:
checking whether gfortran allows mismatched arguments.no
configure: error: The Fortran compiler gfortran will not compile files that call
2.我是铁头娃不降级怎么说?
答:彦祖你太调皮了,也不是没有办法,但是具体包含的隐患无法估量,主要步骤如下:1,在安装fortran版的NC库的时候,不要make check或者无视该error,直接make install,完成NC库的安装;2.编译MPICH的时候,configure命令改用./configure --prefix=$DIR/mpich FFLAGS=" -std=legacy -hopefully",这样可以跳过 gfortran的规则检查(个人理解),还有一种奇淫巧计是用./configure --prefix=$DIR/mpich --disable-fortran,也能跳过检查,但是咱装这玩意就是为了跑fortran啊,把fortran关了我跑毛线。
3.NCAR的指南怎么样?
答:我个人感觉依托答辩,首先各个库软件的版本不太对(不展开讲),同时最受不鸟是每个库的安装它下面都留一句:
*Note: If XXXX fails to build, you will need to talk to a systems administrator at your institution to resolve the problem. We are not able to support XXXX.
但是它的检验程序还是非常有意义的,编译他们赠送的几个C和FORTRAN的程序,能快速验证你的环境变量、并行计算、两个NC库等是否正常,到这一步返回的都是绿色的"SUCCESS",就确保了后面编译WRF和WPS的畅通无阻。
测试程序样例:
来自群组: 成于大气 信达天下 |
评分
-
查看全部评分
|