WRF WPS多核並行執行

chinagod發表於2024-09-14

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/

相關文章