由于研究工作需要,我在实验组的服务器上已经安装过了WRF“全家桶”,这里参考了文章
此外需要安装Flexpart-WRF来搭配使用。但是也许是因为Flexpart-WRF相比Flexpart来说比较小众,在互联网上Search了一圈也没找到几篇相关的内容,有几个比较细节的坑也就只能自己填了。这里就记录了我在安装Flexpart-WRF的过程以及遇到的部分问题,以起到抛砖引玉之效。
一,下载和安装
从官网上下载源码包并解压(下面的是zip包链接)即可:
https://git.nilu.no/flexpart/flexpart-wrf/-/archive/master/flexpart-wrf-master.zip
此后你会看到一个文件夹名为“flexpart-wrf-master”, 执行命令进入这个文件夹:
cd flexpart-wrf-master
编译过程的规则文件(Makefile)是makefile.mom,我们要根据情况手动修改它(我用的文本编辑器是vim):
vim makefile.mom
注意提供netcdf库的位置。
SHELL = /bin/bash
## name of the executable
EXECNAME = flexwrf33
#
############## NETCDF library path #################
#NETCDF = /wrk/d0/jbrioude/netcdf-3.6.2/lib
NETCDF = ‘这里是你的netcdf库的路径’
# NetCDF library version 3 or 4. Version 4 is much better for compression
NETCDFVERSION=3
不要受上面的这条注释误导,这个路径一般就是"/.../.../netcdf"这样的形式,下面有bin、lib、include等文件夹,一般最后不带“/lib” 。比如我之前照着教程安装过WRF,这里我写的是
NETCDF = ~/Build-WRF/LIBRARIES/netcdf
接下来注意你安装的netcdf库时的要求:是否启用了netcdf4格式的支持,如果是,则NETCDFVERSION一行写4,否则写3。
接下来是选择编译器,根据自己情况来选,注意要和你编译netcdf等的编译器系列一致!
############### Specify the compiler you want
# COMPILER options --- gnu, pgi, intel
COMPILER = gnu
文件后面的部分就非必要不修改了。但是遇到了问题需要debug,就得动手修改一些东西了。
接下来开始编译,根据说明文档:
make -f makefile.mom mpi for MPI+OPENMP hybrid run
make -f makefile.mom omp for OPENMP parallel run
make -f makefile.mom serial for a serial run
选择并行还是串行。我选的是GNU编译器+串行。编译完成后会在当前路径生成一个文件: “flexwrf33_gnu_serial”(文件名会由于编译器和运行形式有所不同)。这就是最终需要的可执行文件了。
二,可能遇到的问题
我安装的netcdf库是分成两个部分:netcdf-c (版本4.7.2) 和netcdf-fortran(版本4.5.2)是比较新的版本,而且由于我用的是GNU编译器,而且版本较新(GNU Fortran (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
)在编译一些Fortran文件时会有些许问题。
1,即使NETCDF库路径正确也提示报错:找不到“netcdf.mod”文件。推测是因为netcdf库版本导致的问题。因此这个需要在GNU_GNU_LDFLAGS一行最后增加“-lnetcdf”,使其能正常导入.。
2,“Rank mismatch” 开头的一类报错
出现此类报错,是由于gfortran版本较新导致(如果要深究可以参考这里)。需要在GNU_FFLAGS一行最后增加“-fallow-argument-mismatch”,使其忽略报错。
3,“BOZ literal constant”开头的一类报错
出现此类报错,需要在GNU_FFLAGS一行最后再增加“-fallow-invalid-boz”,使其忽略报错。