WRF WPS多核并行运行
WRF运行前,需要利用WPS程序先对数据进行预处理,包括ungrib,geogrid和metgrid。其中,ungrib和geogrid可以独立运行。metgrid的运行依赖ungrib和geogrid的输出结果。
geogrid和megrid可以多核并行运行,生成的文件将按照并行数目N进行拆分,每个时次N个文件;ungrib是单核运行,每个时次仅一个文件。此后,的WRF程序运行时,需要CPU的核数需要与之前metgrid并行数目一致(即WRF程序real.exe, wrf.exe并行数目和拆分的metgrid文件数一致)。
geogrid和metgrid不一定都要并行,比如geogrid可以串行执行,但metgrid的运行必须多核运行(如果后面WRF也想开启分布式运行的话)。
具体步骤:
1. 修改namelist.wps,以下选项进行设置
io_form_geogrid = 102,
io_form_metgrid = 102,
然后并行运行ungrib,geogrid和metgrid
./ungrib.exe
mpirun -np 64 ./geogrid.exe
mpirun -np 64 ./metgrid.exe
分别将geogrid和metgrid进行拆分。
由于metgrid.exe有bug,在并行运行是,对于每个时次拆分的的met_em.d*文件,只有拆分的第一个文件的属性NUM_LAND_CAT为正确值,其他文件的NUM_LAND_CAT为0,这将造成后续运行real.exe出现错误,所以,需要先用nco命令,将met_em.d*文件的NUM_LAND_CAT属性的值设置成一致
#!/bin/bash
for fname in met_em.d0*
do
echo "Working on $fname"
ncatted -O -a NUM_LAND_CAT,global,o,i,28 $fname
done
其中上面的28要改成实际文件的NUM_LAND_CAT数目。
ls met*_.nc_0000| ncdump -h |grep -i NUM_LAND_CAT
2. 修改namelist.input
io_form_auxinput1 = 102
运行real.exe
mpirun -np 64 ./real.exe
运行wrf.exe
mpirun -np 64 ./wrf.exe
注意上述的红色数字为并行的数目,需要保持一致。
参考:https://forum.mmm.ucar.edu/threads/pnetcdf-capability-for-wps.12607/#post-30170
https://forum.mmm.ucar.edu/threads/mismatch-between-namelist-and-wrf-input-files-for-dimension-num_land_cat.13541/
https://forum.mmm.ucar.edu/threads/cannot-support-split-netcdf-option-for-real-exe.19038/