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/

posted @ 2024-09-14 06:51  chinagod  阅读(161)  评论(0编辑  收藏  举报