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/