WRF learning log

2023年8月18日老师给了机器账号之后,开始自主安装WRF模式。本文中所有操作仅供参考,具体看个人机器情况而定。

安装模式

主要参考网站:

Compiling WRF

最新WRF4.5手册网站 WRF Users Guide documentation

WRF4.4中文手册

WRF安装及运行——在服务器上_qq_40483871的博客-CSDN博客

超算入门笔记:大型机上如何运行WRF模式?一文总结(并行运算、Linux基础、作业调度、WRF运行)_什么都不会的张同学的博客-CSDN博客

安装包

安装包下载地址:

https://github.com/wrf-model/WPS/releases

https://github.com/wrf-model/WRF/releases

记录:

安装包的时候,最容易出问题的地方,就是环境。

  1. 在安装netcdf-fortran-4.5.2过程中,经验如下:

./configure 的时候是在检查环境,报错:C compiler cannot create executables

解决方法:

1
2
export LIBS=
export CFLAGS=

这时候会报新的错:netcdf.h could not be found. Please set CPPFLAGS

可以echo $CPPFLAGS查看一下对应的路径下面是否有netcdf.h文件,是没有的,那肯定找不到,解决方法

1
2
export CPPFLAGS=-I$NETCDF/include
export LDFLAGS=-L$NETCDF/lib

其中{NCDIR}是安装netcdf包的位置,比如笔者按照官网教程安装就是在/Build_WRF/LIBRARIES/netcdf

然后再configure就行

背景:后续,我发现使用ifort/icc编译更加稳定,机器上的版本也更合适,所以就换成了intel。

安装WRF

1
nohup ./compile em_real > log.compile 2>&1 &
  1. 在编译WRF的时候,总是无法生成exe文件

最新的WRF4.5.1/4.5/4.4,我编译的时候,总是报各种奇怪的错,还很多,我就一路版本降级,到WRF4.3的时候,比较正常,只有17个error在我的compile.log里面了。

报错如下:

1
2
3
4
5
6
ld: warning: libimf.so, needed by ../src/.libs/libhdf5.so, not found (try using -rpath or -rpath-link)
ld: warning: libsvml.so, needed by ../src/.libs/libhdf5.so, not found (try using -rpath or -rpath-link)
ld: warning: libirng.so, needed by ../src/.libs/libhdf5.so, not found (try using -rpath or -rpath-link)
ld: warning: libintlc.so.5, needed by ../src/.libs/libhdf5.so, not found (try using -rpath or -rpath-link)
......之类的
make[1]: [em_real] Error 1 (ignored)

总而言之就是libifport.so.5, libimf.so, libsvml.so,libintlc.so.5, libirng.so这几个文件找不到,说明这几个文件从LD_LIBRARY_PATH里面存储的路径中都找不到。

网上很多教程是直接加上intel的文件夹,但是很多不同版本和习惯安装的结果是这些包存在的文件夹对不同人来说是不一样的,所以我们需要手动寻找到在自己的机器上这些包存在哪里。

1
which ifort

寻找到自己目前环境里正在使用的intel安装在哪里,进去寻找这些文件存在的文件夹地址AAA,然后把这个地址加入到包环境路径中,这样在编译的时候,就不会存在这些文件找不到的现象,也就可以成功运行出exe文件了。

1
export LD_LIBRARY_PATH=AAA:$LD_LIBRARY_PATH

还可以使用

1
echo $LD_LIBRARY_PATH

命令输出当前的路径有哪里,检查这一条路径是否顺利加进去。

有的时候有的文件找不到,也可以echo检查自己是不是写错了什么字母。我有一次把grib2写成了gribs,哈哈哈。

安装WPS

  1. 安装WPS

先确定WRF_DIR:

1
export WRF_DIR=/public/home/Build_WRF/WRFV4.5.1

注意编译WPS之前要设置好jasper库的地址:

1
2
export JASPERLIB=$DIR/grib2/lib
export JASPERINC=$DIR/grib2/include

实际编译的命令:

1
2
3
4
./clean
./configure
./compile >& log.compile
或者nohup ./compile > log.compile 2>&1 &

运行模式

ERA5

  1. 使用ERA5数据驱动WRF

毕业实习笔记——WRF模式入门(Cygwin版)

下载ERA5等压面和地表数据,驱动WRF模式

WRF学习笔记之三:使用ERA5数据驱动并运行WRFV4.4(一层嵌套)

WRF学习之 ch3 WPS(三)WPS并行,检查WPS输出,WPS工具,输出到中间文件,运行WRF所需要的气象场,使用MPAS输出作为WRF初边界条件 - chinagod - 博客园

用WRF模型进行气象模拟入门(2)——WPS的配置与使用 - xg1990

GFS

使用GFS数据驱动WRF模式场—2层嵌套 全过程学习记录_gfs资料驱动wrf-CSDN博客

运行WPS

修改WPS目录下的namelist.wps文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
&share
wrf_core = 'ARW',#运行核心模块
max_dom = 1,#最大网格嵌套层数
start_date = '2000-01-24_12:00:00','2000-01-24_12:00:00',
end_date = '2000-01-25_00:00:00','2000-01-25_00:00:00',
interval_seconds = 21600 #前处理的两次分析时间之间的时间间隔,以s为单位,对于6小时在分析文件设为21600
io_form_geogrid = 2,#geogrid输出格式,一般为2,输入1时为binary,后缀是.int文件,当输入2时为NetCDF,后缀为.nc文件,当输入3时为GRIB1,后缀为.gr1文件
/

&geogrid
parent_id = 1, 1,#嵌套区域的母区域的标号。注意MOAD 本身没有母区域,因此PARENT_ID
的第一列总是设为1。第二列必须等于1。总列数必须等于NUM_DOMAINS
parent_grid_ratio = 1, 3,#嵌套时母网格与子网格之间的比例
i_parent_start = 1, 31,#嵌套网格的左下角(LLC)在上一级网格(母网格)中x方向的起始位置
j_parent_start = 1, 17,#嵌套网格的左下角(LLC)在上一级网格(母网格)中y方向的起始位置
e_we = 74, 112,#不同层网格x方向格点数
e_sn = 61, 97,#不同层网格y方向格点数
geog_data_res = '10m','2m',#区域所对应选择的地表面静态数据
dx = 30000,
dy = 30000,#x/y方向格距,单位m,
map_proj = 'lambert',#选择的投影方式'lambert', 'polar', 'mercator', and 'lat-lon'
ref_lat = 34.83,#中心纬度,即模式最外层中心位置纬度
ref_lon = -81.03,#中心经度,即模式最外层中心位置经度
truelat1 = 30.0,
truelat2 = 60.0,#标准经纬度,根据投影确定
stand_lon = -98.0,#标准经度,与中心经度保持一致
geog_data_path = '/opt/GEOG'#地表静态数据的路径
/

&ungrib
out_format = 'WPS',#输出文件的形式,有MM5,WPS和SI三种形式
prefix = 'FILE',#输出文件的前缀,默认为FILE形式
/

&metgrid
fg_name = 'FILE'
io_form_metgrid = 2,
/

运行WPS:

  • geogrid defines model domains and interpolates static geographical data to the grids;

  • ungrib extracts meteorological fields from GRIB-formatted files;

  • metgrid horizontally interpolates the meteorological fields extracted by ungrib to the model grids defined by geogrid.

  • The work of vertically interpolating meteorological fields to WRF eta levels is performed within the real program

1
2
3
4
5
6
7
./geogrid.exe >& log.geogrid
ln -sf ungrib/Variable_Tables/Vtable.ECMWF Vtable
./link_grib.csh /public/home/..../Build_WRF/DATA/era5/2013/*.grib
在另一个服务器上:
./link_grib.csh /public1/home/..../Build_WRF/DATA/2013/*.grib
./ungrib.exe >& log.ungrib
./metgrid.exe >& log.metgrid

sst_update=1:

1
2
3
4
5
6
7
8
9
10
11
12
13
./geogrid.exe >& log.geogrid
ln -sf ungrib/Variable_Tables/Vtable.ECMWF Vtable

ln -sf ungrib/Variable_Tables/Vtable.SST Vtable

./link_grib.csh /public/home/..../Build_WRF/DATA/era5/2013/*.grib
在另一个服务器上:
./link_grib.csh /public1/home/..../Build_WRF/DATA/2013/*.grib

/public1/home/sunguodong/liuhui/Build_WRF/DATA/2013

./ungrib.exe >& log.ungrib
./metgrid.exe >& log.metgrid

把以上内容写进一个shell文件:

1
nohup sh run_wps.sh > log.runwps 2>&1 &

查看嵌套区域:

1
2
先打开plotgrids_new.ncl文件,将type=x11注释,改为type=pdf
ncl util/plotgrids_new.ncl

会在WPS路径下生成:wps_show_dom.pdf文件。

运行WRF

先在WPS路径下:

1
ncdump -h met_em.d01.2016-07-03_00\:00\:00.nc >& ncinfo.log

查看预处理后的文件的信息,保证前后的设置一致。

修改WRF/run或者WRF/test/em_real(或者复制一下这两个文件夹)下namelist.imput文件。记得把namelist.input里num_metgrid_levels的值改为38。
WRF NAMELIST.INPUT FILE DESCRIPTION

WRF中namelist.wps与namelist.input参数详解

WRF Model Physics References

初始化的操作:an initialization program for either real-data (real.exe) or idealized data (ideal.exe),

数值积分迭代:a numerical integration program (wrf.exe),

其他:a program allowing one-way nesting for domains run separately (ndown.exe), and a program for tropical storm bogussing (tc.exe)

1
2
3
4
5
6
7
cd WRF/test/em_real2
ln -sf ../../../WPS-4.5/met_em* .
ln -sf ../../../WPS-4.4/met_em* .
./real.exe >& log.real
或者nohup ./real.exe >& log.real 2>&1 &
./wrf.exe >& log.wrfexe
或者nohup ./wrf.exe >& log.wrfexe 2>&1 &

生成wrfout文件即为运行成功!

1
ncdump -h wrfout_d01_2016-07-03_00\:00\:00 >& wrfout_info.log

设置sst_update=1

气象家园 毕业大甩卖 之 WRF 进行 SST update 的简要步骤

ARW OnLine Tutorial: Input SST Data into the Model

实践,不需要特别处理SST,原来处理的文件里就有

超算运行

查看机器配置情况——lscpu

qsub

呜呜呜好搞笑。

我和师姐说我模拟的一个月,已经跑了一天了,师姐说你肯定有问题,她只要算2-3小时。我就懵了哈哈哈。

原来是因为我是单核在算,师姐说要提交多核运算。

这里补充一些在超算上提交任务查看任务的学习。

PBS命令和使用 - yqsun - 博客园

qsub任务提交系统 - 简书

创建一个wrfpbs.pbs文件,将qsub命令需要的选项都存储在一个脚本里提交。只要输入:

1
qsub wrfpbs.pbs

输入以上命令就可以提交任务了。

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
#PBS -V
#PBS -q normal
#PBS -N wrf01
#PBS -j oe
#PBS -l nodes=4:ppn=20
#PBS -l walltime=500:00:00

cd $PBS_O_WORKDIR
mpirun -np 80 -machinefile $PBS_NODEFILE /public/home/../Build_WRF/WRFV4.5.1/test/em_real2/wrf.exe

-V : 表明qsub命令的所有环境变量都export到此作业。

-q destination

-N name: 作业名,限15个字符,首字符为字母,无空格。

nodes=N:ppn=M :请求N个结点,每个结点M个处理器。

以上设置4个结点,每个结点20个处理器,所以一共80个进程。

ppn:Processors Per Node

-j oe :输出标准输出信息与标准错误信息。

PBS -l walltime=500:00:00设置程序最大运行时间为500小时

其他的一些命令:

1
2
3
4
5
6
7
Job id 是给你提交的任务分配的任务号
S是任务状态,R表示正在运行,Q表示正在排队,E表示正在退出,
H表示挂起,C表示运行完毕
qstat -a (查看作业的状态)
qstat -n (查看作业使用的节点)
qstat -f 211 (查看有关作业运行具体信息)
qdel 作业号 (删除作业)

sbatch

分区信息查询-sinfo · 计算服务

1
2
3
4
5
6
7
8
9
#!/bin/bash
#SBATCH -J 12h-maria # job name
#SBATCH -p i01203share # queue (partition) -- normal, development,ect.
#SBATCH -n 64 # total number of mpi tasks requested
#SBATCH -N 3 ### 1 # number of nodes requested
#SBATCH -t 12:00:00 # run time (hh:mm:ss) - 1.5 hours
#SBATCH -o maria10 # out and error file name (%j expands to jobid)

mpirun -np 64 ./wrf.exe

sinfo-查看分区信息

PARTITION表示分区、NODES表示节点数、STATE表示节点运行状态、NODELIST表示节点列表。

状态一列中idle表示节点处于空闲状态,可接收新的作业;allocated表示节点已经分配了一个或者多个作业且所有核心用满,在作业释放前不能再被分配作业;mix状态为使用部分核心,仍可以被分配作业;drain状态表示对应节点已经下线;drng表示已下线但仍有作业在运行。

squeue-查看作业信息

其中JOBID表示任务ID编号,PARTITION表示作业所在队列(分区),NAME表示任务名称,USER为用户,ST为作业状态,TIME为已运行时间,NODES表示占用节点数,NODELIST(REASON)为任务运行的节点列表或者原因说明。

另外,状态列中R-Runing(正在运行),PD-PenDing(资源不足,排队中),CG-COMPLETING(作业正在完成中),CA-CANCELLED(作业被人为取消),CD-COMPLETED(作业运行完成),F-FAILED 作业运行失败,NF-NODE_FAIL节点问题导致作业运行失败,PR 作业被抢占,S 作业被挂起,TO 作业超时被杀。

scancel-删除作业

scancel <作业号>

如果需要删除当前用户下所有的任务

1
scancel -u 用户名

其它问题

自带的说明文件

在/WRF/run目录下,有几个README.*文件。

README.namelist 对namelist.input中的变量进行介绍。

README.tslist 对输出wrfout的一些变量进行介绍。

查找rsl中的问题

1
2
grep -i error rsl*
grep cfl rsl.*

forrtl: severe (174)

WRF运行wrf.exe出现forrtl: severe (174): SIGSEGV, segmentation fault occurred问题原因与解决合集_陆詟水栗的博客-CSDN博客

算得慢(血泪)

要注意,之前按照教程configure WRF的时候,选择的编译器选项都是13,如果要并行,要重新configure和compile,选择编译器15。

注意WPS也要重新configure,选择19.

还是算得很慢

把模式版本降低从4.5.1降低到4.2.1,计算时间从1h/天降低到30min/天。

但是还是很慢

把使用的结点和线程从4结点,80线程降低到2结点,40线程,计算速度大幅提高,达到6min/天。

老天爷,谁想到,用的结点和线程多了,反而会影响计算效率。

关于继续计算

可以打开namelist.input中restart按钮,就会使用保存到wrfrst开头文件进行继续计算。

1
restart   = .true.,

关于计算时长

1
2
3
echo "Job start time =" `date`
mpirun -machinefile $PBS_NODEFILE -np $NSLOTS ./wrf.exe
echo "Job end time =" `date`

补充安装hdf5

使用intel编译器编译WRF4.4_wrf编译不同intel编译器的区别_sdlyx2017的博客-CSDN博客

【WRF×HDF5】关于WRF利用netCDF4/HDF5特性以节省磁盘空间的讨论

1
2
3
4
5
6
7
8
./configure --prefix=$DIR/hdf5 
--with-zlib=/public1/home/..../Build_WRF/LIBRARIES/grib2
--enable-fortran
./configure --prefix=$DIR --with-zlib=$DIR --enable-fortran

make -j8
make test
make install

安装完hdf5之后,需要重新安装netcdf

1
2
3
export LDFLAGS=-L$DIR/hdf5/lib
export CPPFLAGS=-I$DIT/hdf5/include
./configure --prefix=$DIR/netcdf

如果想要使用python的wrf-python包对wrfout文件进行处理,还是不要安装hdf5模块了,虽然文件会压缩变小,但是格式会从nc变成hdf5,相应的wrf-python中那些方便的命令都无法使用了。

清理空间

查看当前用户空间

1
mmlsquota -u 用户名 --block-size G
1
rm -f rsl* wrfout* wrfrst* wrfbdy* met_em* wrflowinp*
1
rm -f FILE* GRIBFILE* met_em* PFILE*

修改文件名

1
mv a.txt a1.txt

远程传输文件

1
scp -rp 172.24.5.12:/home/wsupport /home/wsupport/

查看当前目录空间大小

查看当前目录总共占的容量,而不单独列出各子项占用的容量:

1
du -sh

单独列出各子项占用的容量,并且从大到小排序:

1
du -sh ./* .|sort -hr

wrf中的地形数据

存储在geo_em.文件/met_em.文件和wrfout文件中的HGT/HGT_M变量中。

拆解WRF源码

  1. 主目录结构

    • arch:包含不同计算平台的配置文件。
    • chem:化学模块,用于大气化学模拟。
    • dyn_em:ARW(Advanced Research WRF)动力核心。
    • dyn_nmm:NMM(Nonhydrostatic Mesoscale Model)动力核心。
    • external:外部库和工具。
    • frame:框架代码,包括时间步进和网格处理。
    • inc:包含头文件。
    • main:主程序和初始化代码。
    • phys:物理过程模块,包括辐射、微物理、边界层等。
    • run:运行时所需的配置文件和脚本。
    • share:共享代码和工具。
    • test:测试用例和验证代码。
    • tools:工具和实用程序。
  2. 主要文件

    • configure:配置脚本,用于设置编译选项。
    • Makefile:编译和链接的控制文件。
    • README:包含基本信息和使用说明。
  3. 动力核心

    • ARW(Advanced Research WRF):适用于研究和高分辨率模拟。
    • NMM(Nonhydrostatic Mesoscale Model):适用于操作性预报和较大尺度模拟。
  4. 物理过程模块

    • 微物理(Microphysics):模拟云和降水过程。
    • 辐射(Radiation):模拟大气中的辐射传输。
    • 边界层(Boundary Layer):模拟大气边界层过程。
    • 地表过程(Surface Processes):模拟地表与大气之间的能量和水分交换。