本文翻譯自https://www2.mmm.ucar.edu/wrf/users/FAQ_files/FAQ_wrf_runtime.html
Q1 我應該使用幾個處理器來運行wrf.exe?
A1 經驗法則是,使用的處理器數量最少應基於最大大小的那個domain,而使用的處理器數量最多應基於最小的domain。例如,假設您有2個domain,並且domain 01是200x200 grid spaces,而domain 02是300x300 grid spaces。您可以用來大致估計大量處理器的數學運算的公式:
最大處理器數量:
(200/25)*(200/25)= 64個處理器
最小處理器數量:
(300/100)*( 300/100)= 9個處理器
這意味着您應該在9到64個處理器之間使用此處理器。
使用過多處理器的問題在於,當您使用多個處理器時,將根據所使用的處理器數量將域划分為正方形。但是,這些正方形中的每個正方形也具有halo 區(或從每個邊界向內的一定數量的網格空間),可為靠近邊界的區域獲得相鄰的計算結果。如果使用過多的處理器,則每個平方會變得小於光環的大小,這會引起問題。
Q2 如果我想查看特定程序的執行方式,是否可以在該程序中添加“ stop”語句?
A2 終止模型的正確方法是使用對wrf_error_fatal的 WRF調用。如果將其“ grep”到目錄WRFV3 / phys中,則將看到其用法。這應該殺死所有處理器上的模型。
Q3 rsl *文件中的ims,jms,kms,ips,jps,kps等變量是什么意思?
NDOWN_EM V4.1.4 PREPROCESSOR
*************************************
Parent domain
ids,ide,jds,jde 1 751 1 721
ims,ime,jms,jme 577 632 678 726
ips,ipe,jps,jpe 584 625 685 721
*************************************
A3 im, jm是用於包含 communication domain(halo 區)的分解domain -"m" 表示每個分布式內存處理器上的內存大小。ip, jp是分解domain的物理尺寸,不包括halo區。"p" 僅是每個分布式存儲處理器上的計算domain的大小。
Q4 在使用嵌套網格運行“ hold-suarez”理想化案例時,我發現初始化域2時,domain 1的網格(XLONG和XLAT)在domain2所在的區域中發生了變化。為什么會這樣?
A4 造成這種情況的部分原因可能是,當您運行理想化案例時,沒有嵌套的輸入。因此,模型會插值從粗略域到嵌套的所有內容,包括緯度和經度。如果將feedback設置為1,則將導致嵌套數據覆蓋嵌套區域中的粗略域,包括XLAT和XLONG。這是必要的,因為從嵌套中計算出的值正在替換粗糙的域值(例如,由於輻射)。除非插值真的很差,否則奇數比應該做得很好,因為在嵌套域和粗糙域上存在重疊的網格。對於均勻比率,由於沒有同位網格,因此在打開反饋時將進行一些平均。
Q5 運行WRF的最低合理eta層次是多少?
A5 通常,第二完整層次應設置為0.993-0.996。
Q6 如何使用輔助文件輸出除wrfout中的變量以外的變量?
A6 您將需要在Registry.EM_COMMON中添加這些變量,然后通過添加以下示例選項來重新編譯和修改namelist.input:
auxhistN_outname =“ rainfall_d
auxhistN_interval = 10,
frames_per_auxhistN =
1000,1000 io_form_auxhistN = 2
注意:N為您的額外輸出變量的流號。
Q7 在WRF中設置'quilting'的目的是什么?
A7 在沒有quilting的情況下,使用常規的netCDF,頭處理器將收集並寫出數據。使用quilting時,將保留N個處理器以進行數據收集(在頭處理器寫入時)。對於大量網格點,這可以縮短牆鍾時間。
Q8 段錯誤的最常見原因是什么?
A8 段錯誤錯誤通常意味着存在內存問題。嘗試鍵入以下命令之一以查看是否有幫助:
- setenv MP_STACK_SIZE 64000000(OMP_STACKSIZE)
2.如果使用的是csh或tcsh,請嘗試以下操作:limit stacksize unlimited
3.如果使用的是sh或bash,請使用以下命令:ulimit -s unlimited
這可能無法解決您的問題,但是默認堆棧大小通常很小,並且可能由於內存不足而導致段錯誤。
如果模型在運行開始時就出現故障,則通常可能意味着輸入數據有問題。確保檢查您的met_em *文件以查看是否在各種變量中發現了奇怪的地方。
Q9 時間序列變量的輸出格式是什么?
A9 時間序列的默認輸出格式是一個簡單的文本文件,每個域一個站點。
Q10 由於非常大的垂直速度,我遇到了CFL錯誤。如何克服這些錯誤?
A10 首先嘗試減少時間步長。有時這可行,但並非總是如此。您可以嘗試的另一件事是在運行real之前,在namelist的&domains部分中添加smooth_cg_topo = .true.。如果CFL沿邊界區域發生,則可以平滑模型地形以匹配行駛數據隨附的低分辨率地形。如果CFL發生在復雜的地形附近,則可以嘗試將epssm = 0.2(最大為0.5)設置為無效。
Q11 運行real.exe時出現以下錯誤消息:
frame / module_domain.f:無法分配
grid%xkmhd(sm31:em31,sm32:em32,sm33:em33)
可能是什么原因?
A11 1)您的計算機沒有足夠的內存來在您的域上運行real.exe
2)如果您的計算機具有足夠的內存和多個CPU,但是單個CPU無法訪問所有內存,則需要使用dmpar(MPI)構建WRF選項並在多個處理器上運行它(mpirun -np N real.exe,其中N > 1)以利用更多的可用內存(請參閱問題1)。
Q12 我已經正確安裝了共享庫,但是計算機在運行時找不到它們。如何在運行時找到共享庫?
A12 Unix操作系統通常查看環境變量LD_LIBRARY_PATH來搜索庫路徑中的目錄。嘗試發出這些命令:
echo $LD_LIBRARY_PATH
如果路徑不包括在/ usr / local / lib目錄,然后(在KSH,例如),鍵入:
export LD_LIBRARY_PATH = “$ LD_LIBRARY_PATH:在/ usr / local / lib目錄”
你可以把這個在您的登錄腳本中,這樣您就不必每次都發出此命令。
Q13 如何在特定物理學中輸出局部變量?
A13 輸出例程將看不到局部變量。您將需要在wrfout文件中看到的變量聲明為注冊表中的狀態變量。然后,這些變量將可用於resolve_em.F,它調用microphysics_driver。您將需要將新變量傳遞給驅動程序,然后傳遞給驅動程序中調用的物理方案。這些狀態變量應聲明為“ OUT”變量,並按補丁尺寸(ime,jme)進行標注。然后,您需要使用需要輸出的字段來填充這些數組。看一下我們的WRF教程中的演講,您可能會發現一些更有用的信息:
Registry and Examples
Q14 嘗試運行理想化案例時,如何通過namelist關閉科里奧利力?
A14 不幸的是,namelist沒有為此設置的選項。但是,您可以在module_initialize_(ideal_case).F文件中設置grid%f = 0(使用該文件作為您選擇的理想情況。然后保存該文件並重新編譯代碼。您將不需要 'clean -a' 或需要在重新編譯之前重新configure。只需簡單地重新編譯即可,並且編譯應該很快,因為它只是在構建此例程。
Q15 我試圖以GRIB2格式寫入wrfout文件,但glibc檢測到損壞的內存錯誤。我該如何解決?
A15 此選項僅適用於32位系統。它在某些64位系統上失敗,不幸的是,這尚未開發。
Q16 我的濕度變量為負。我怎樣才能解決這個問題?
A16 您可以使用namelist選項mp_zero_out刪除負的潮濕變量。眾所周知,負水分不會影響模型集成。使用moist_adv_opt = 1選項將使濕度變量保持正值。
Q17 為什么在模型正常運行時沒有任何錯誤沒有生成我的wrfout和/或wrfrst文件?
A17 這可能是因為您的wrfout / wrfrst文件太大(即大於2GB)。在構建WRF之前,使用以下命令來啟用netCDF大文件支持(示例在csh中):
setenv WRFIO_NCD_LARGE_FILE_SUPPORT 1
Q18 在我的namelist中,用於打印obs信息的選項設置為true,但是當我檢查rsl文件時,找不到關於觀察性推擠的任何信息。為什么是這樣?
A18 嘗試在namelist的&time_control部分中添加以下內容:
auxinput11_interval_s =
180、180、180、180、180、180 auxinput11_end_h = 6,6,6,6,6
並更改適合您情況的值。這里的間隔應小於obs文件中的數據間隔。
Q19 如何更改自動分解,但使用自己的選項進行domain分解?
A19 該namelist選項nproc_x和nproc_y可以用來這樣做,如果你有dmpar編譯。如果使用OpenMP編譯,則可以使用numtiles選項。
Q20 當我運行real.exe時,我在grid%tmn中遇到了錯誤,但是可以正常運行。應該忽略嗎?
A20 檢查您的輸出,看看tmn是否用合理的值填充。這可能是由於tmn(在具有低分辨率[1度]數據的土工格柵中計算出的)與來自高分辨率數據(例如30秒)的地面掩模不匹配而觸發的。
Q21 如何定義小於1秒的時間步長?
A21 您將需要在&domains部分中使用以下所有三個namelist選項:
time_step = 0,
time_step_fract_num = 1,
time_step_fract_den = 3,
以上示例將時間步長設置為1/3秒。
Q22 我正在使用GFS輸入數據,並收到以下錯誤:
-----------------錯誤-------------------
>namelist:num_metgrid_soil_levels = 4
>輸入文件:NUM_METGRID_SOIL_LEVELS = 0(來自met_em文件)。
> --------------致命調用---------------
>從文件中致命調用: LINE:695
>名稱清單與全局屬性NUM_METGRID_SOIL_LEVELS不匹配
> -------------------------------------- -----
是什么原因引起的?
A22 如果您在WRFV3.6.1或更早版本中使用GFS初始條件,並且開始日期為2015年1月7日或更晚,那么您將需要使用新的Vtable,因為GFS從1/7/15開始更新了其所有數據。您可以在此處找到更新的Vtable 。有關GFS數據更新的其他信息,請單擊此處。
您將需要將此Vtable復制到WPS / ungrib / Variable_Tables /目錄中,並將其命名為Vtable.GFS(這將覆蓋以前的GFS Vtable)。之后,您需要返回WPS /目錄並重新運行ungrib.exe。在運行ungrib.exe之前,您需要鏈接到新的Vtable:
ln -sf ungrib / Variable_Tables / Vtable.GFS Vtable
一旦確定WPS /目錄中的“ Vtable”文件是* NEW * Vtable.GFS,就可以運行ungrib.exe,然后運行metgrid.exe,然后轉到WRFV3 /目錄,鏈接到您的met_em *文件並運行real.exe。您可以通過發出以下命令來驗證met_em *文件中的土壤含量是否為4:
ncdump -h met_em.d01 *
其中“ *”僅代表您的met_em文件之一。
您應該看到類別(朝下)NUM_METGRID_SOIL_LEVELS = 4 。
Q23 為什么即使啟用正定對流方案,QVAPOR仍為負?
A23 負值很小,四舍五入。正定方案無法擺脫如此小的值。
Q24 是什么引起以下錯誤:
ERROR: troubles, could not find trapping x locations
A24 當您的p_top_requested太高(即,大氣層太低)時,通常會看到這種情況。嘗試將其設置回默認值(= 5000),看看是否有幫助。如果您的域設置不佳,有時會經常看到此錯誤。有關設置您的域(和嵌套域)的
最佳實踐,請參閱我們的WRF教程:WRF中的最佳實踐嵌套中的這些講座。
Q25 是什么引起以下錯誤:
ERROR: dz above fixed eta levels is too large
A25 當您將p_top_requested設置得太低(即,大氣層太高)時,通常會看到這種情況。嘗試將其設置回默認值(= 5000),看看是否有幫助。
Q26 我正在嘗試使用與原始運行不同的歷史記錄間隔來運行重新啟動,但是在舊的間隔時間我仍會得到輸出。我該如何糾正?
A26 在namelist的&time_control部分中,添加以下行:
override_restart_timers = .true。
Q27 如何估算運行時間?
A27 在某些計算機上,您始終可以從輸出文件中找到作業所需的CPU和時鍾時間。在其他機器(例如Linux機器)上,您可以通過查看生成第一個和最后一個wrfout文件的時間來估計牆鍾時間。兩者之間的差異是對工作所需的牆鍾時間的粗略估計。
[Wrf-users] Max number of CPUs for WRF
http://mailman.ucar.edu/pipermail/wrf-users/2012/002670.html
