NTU-WTM v1.0-beta
課程作業
協力完成兩個小型的系集模擬
全班分成兩組,分別針對一個颱風個案和一個梅雨個案進行3層巢狀網格的模擬,系集各個成員差異來自於分析場以及積雲和微物理參數化方案的不同,其他如巢狀網格設計、邊界層參數化等等皆參考本教程的設定,颱風個案選擇的是蘇迪勒(SOUDELOR 2015),梅雨個案選擇的是2017年06月初的梅雨。颱風個案(TY01-16)模擬自2015-08-06 1200 UTC至2015-08-09 1200 UTC止,梅雨個案(MY01-16)模擬自2017-06-01 1200 UTC至2017-06-04 1200 UTC止,模式設定及分組結果如下:
數值天氣預報2023春季課程實習題目
學生姓名
模式成員編號
全球模式分析場
積雲參數化方案
微物理參數化方案
b09209012 張*中
TY01
NCEP FNL
KF
Lin
b09209013 黃*薰
TY02
NCEP FNL
KF
WSM6
b09209016 許*華
TY03
NCEP FNL
KF
WSM5
b09209024 劉*傑
TY04
NCEP FNL
KF
Goddard
b09209017 謝*儒
TY05
NCEP FNL
BMJ
Lin
ST06
TY06
NCEP FNL
BMJ
WSM6
b09209007 邱*凱
TY07
NCEP FNL
BMJ
WSM5
b09209015 陳*翔
TY08
NCEP FNL
BMJ
Goddard
b09209025 郭*
TY09
ECMWF ERA5
KF
Lin
b08209047 張*瑜
TY10
ECMWF ERA5
KF
WSM6
b09209020 楊*祥
TY11
ECMWF ERA5
KF
WSM5
b09209044 陳*
TY12
ECMWF ERA5
KF
Goddard
40944005s 施*瀴
TY13
ECMWF ERA5
BMJ
Lin
b09209022 廖*翰
TY14
ECMWF ERA5
BMJ
WSM6
b09209038 陳*葦
TY15
ECMWF ERA5
BMJ
WSM5
b09209035 許*杰
TY16
ECMWF ERA5
BMJ
Goddard
b09209023 高*天
MY01
NCEP FNL
KF
Lin
b09209010 顏*緯
MY02
NCEP FNL
KF
WSM6
b10209028 姚*宸
MY03
NCEP FNL
KF
WSM5
40944017s 蔡*勛
MY04
NCEP FNL
KF
Goddard
b08209010 傅*正
MY05
NCEP FNL
BMJ
Lin
ST22
MY06
NCEP FNL
BMJ
WSM6
b09209028 李*彤
MY07
NCEP FNL
BMJ
WSM5
b09209001 馮*安
MY08
NCEP FNL
BMJ
Goddard
b09209018 陳*儒
MY09
ECMWF ERA5
KF
Lin
b09209009 林*勳
MY10
ECMWF ERA5
KF
WSM6
b08208009 傅*
MY11
ECMWF ERA5
KF
WSM5
ST28
MY12
ECMWF ERA5
KF
Goddard
b09209019 葉*辰
MY13
ECMWF ERA5
BMJ
Lin
b09209008 賴*豪
MY14
ECMWF ERA5
BMJ
WSM6
b09209043 陳*鳴
MY15
ECMWF ERA5
BMJ
WSM5
b09209002 胡*嘉
MY16
ECMWF ERA5
BMJ
Goddard
作業繳交以本表為主,如有想要更換系集成員請附上雙方同意的email給助教。
作業繳交
最後請同學交出5張預報第52小時(model time = 52h)domain 03的圖,經緯度範圍自訂,需包含整個臺灣本島,不限制使用任何繪圖程式軟體,評分標準如下:
1. 三層巢狀網格domain設定圖(3%)+模式第52小時wrfout檔案的檔頭資訊(3%)
2. 台灣的24小時累積雨量(到model time = 52h止,所累積的24hr雨量;海上資料去除不著色)著色等值線(10%)+其他(6%)
3. 雷達迴波CV著色等值線(10%)+其他(6%)
4. 850hPa風場向量(或wind barbs)(10%)+地形高度著色等值線(10%)+其他(6%)
5. 700hPa相對溼度場著色等值線(10%)+風場向量(或wind barbs)(10%)+高度場等高線(10%)+其他(6%)
備註事項:
其他是指繪圖結果是否完整:標題/單位/座標標示/colorbar是否標示(3%)、文字/色彩/海岸線是否易於判讀(3%)。
圖檔5張,請製作成pdf繳交,一頁一張圖,檔名以「姓名_WRF.pdf」命名。
程式檔4份(2-5),檔名以「姓名_WRF_題號.py」(如果以python繪圖)命名。
程式檔及pdf檔請加至壓縮檔中,檔名以「姓名_WRF.zip/rar/tar.gz...」命名,上傳NTU COOL。
Step 1 國網iService平台註冊

1-1 進入iService平台網頁,點選右上「註冊」,註冊平台帳號。

1-2 台大學生請使用@ntu.edu.tw信箱,師大學生請使用@ntnu.edu.tw信箱註冊。

1-3 點選同意使用規範。

1-4 設定iService平台密碼及個人資料。

1-5 設定臺灣杉系列主機的帳號及密碼。

1-6 收信驗證信箱。

1-7 發送手機驗證碼。

1-8 填寫手機簡訊驗證碼進行驗證。

1-9 驗證成功,帳號即建立完成,完成後請發信給助教(yaochuwu@ntu.edu.tw),分配個人計算資源。助教設定成功之後,可以在上方選單列的「會員中心>>計劃管理>>我的計畫」找到「學術計畫:2023年春季數值天氣預報課程」。
Step 2 臺灣杉一號(Taiwania 1)簡介

臺灣杉一號(Taiwania 1)概況說明。臺灣杉一號的架構主要由前端伺服器、計算叢集、高速儲存系統、網路系統儲存組成,各個設備以乙太網路或高速網路系統互相連接。本圖取自臺灣杉一號使用者手冊。
前端伺服器 - 登入節點
臺灣杉一號的前端伺服器包含登入節點(login nodes)和傳輸節點(data transfer nodes)等等,只允許臺灣IP登入。登入前請先下載SSH連線軟體(如PuTTY或MobaXterm),文字介面的登入節點有兩個,請則一登入即可,因為用戶的資料不是儲存在登入節點的磁碟上,而是統一存放掛載於各節點上的高速儲存系統。
登入節點的連線資訊如下:
clogin1.twnia.nchc.org.tw port:22 (140.110.148.11 port:22)
clogin2.twnia.nchc.org.tw port:22 (140.110.148.12 port:22)
在登入節點上可以執行以下工作:
1. 提交/管理HPC的計算工作
2. 全權存取高速儲存系統上的檔案
3. 編譯HPC相關應用程式(如:編譯WRF/WPS)
4. 繕打程式碼
養成良好的HPC習慣!!!千萬不可以在登入節點上執行編譯以外的任何計算/分析/畫圖工作!!!
養成良好的HPC習慣!!!千萬不可以在登入節點上執行編譯以外的任何計算/分析/畫圖工作!!!
養成良好的HPC習慣!!!千萬不可以在登入節點上執行編譯以外的任何計算/分析/畫圖工作!!!
登入節點的技術規格簡要如下:
CPU:Intel® Xeon® Gold 6148 CPU (20核心、2.40GHz) *2顆
單節點總核心數:40核
記憶體:384GB
前端伺服器 - 資料傳輸節點
資料傳輸節點可讓用戶的資料從外部網路傳出/傳入高速運算系統。每一節點藉由40Gbps HCA介面卡連接外部網路,並由OPA介面卡連接高速儲存系統。資料能在您的來源電腦與高速儲存系統之間傳輸
資料傳輸節點的連線資訊如下:
xdata1.twnia.nchc.org.tw port:22 (140.110.148.21 port:22)
xdata2.twnia.nchc.org.tw port:22 (140.110.148.22 port:22)
Unix/Linux作業系統使用者可使用sftp或scp,windows系統使用者請下載連線軟體FileZilla或WinSCP。
可用計算資源
臺灣杉一號共有750個計算節點(1500個處理器與30000個核心),整體效能可達約1.49兆次浮點運算(PFLOPS)。750個計算節點由雙CPU插槽組成,每個插槽具有Intel® Xeon® Gold 6148 CPU (20核心、2.40GHz)。750個節點可細分為瘦節點(Thin Node)及胖節點(Fat Node),差異在於記憶體大小。瘦節點供大多數HPC應用程式使用,胖節點供需大量記憶體的HPC應用程式使用。

臺灣杉一號各個計算節點的計算資源表,本圖取自臺灣杉一號使用者手冊。
可用儲存資源
臺灣杉一號可用的高速儲存系統資源,掛載為lustre檔案系統,可透過高速OPA網路從所有前端伺服器與運算節點進入使用。

臺灣杉一號可用的高速儲存系統資源及掛載位置,本圖取自臺灣杉一號使用者手冊。
- 家目錄 /home/${user}
每位使用者預設有100GB的免費空間額度,可儲存私人檔案,編輯或備份小型程式。計畫到期後,儲存於/home/${user}之檔案將於用戶提出刪除要求後,系統管理員才會手動刪除。
- 工作目錄 /work1/${user}
工作目錄主要是做為儲存用戶計算過程中的暫時資料。每個帳號在/work1下皆預設有1.5TB的空間額度。此叢集上的空間係設計給計算工作儲存而非長期儲存用。為了維持/work1穩定且高效的狀態,國網將定期執行自動清除的工作。本系統無對/work1的資料進行備份,請自行備份資料。因資料無法復原(含因系統當機或硬體故障而損失的資料),請定期備份您重要的資料。在28天內,未存取的檔案將被清除,因此強烈建議您定期清除/work1下的資料以增加使用效能,並定期備份所需保留的資料。
本課程進行的計算結果請透過資料傳輸節點(140.110.148.21/22)傳至私人的儲存設備或私人雲端空間
Step 3 測試登入臺灣杉一號
登入臺灣杉一號
首先開啟iService平台並登入平台帳號。

3-1 點選上方導覽列的「會員中心>>會員資訊>>主機帳號資訊」。

3-2 可以在畫面看到主機帳號、主機密碼修改及一次性密碼(OTP/One-Time Password)的資訊,一次性密碼為30秒有效。

3-3 接著,從PC端開啟SSH客戶連線軟體如PuTTY或MobaXterm,輸入臺灣杉一號的登入資訊:
clogin1.twnia.nchc.org.tw port:22 (140.110.148.11 port:22)
clogin2.twnia.nchc.org.tw port:22 (140.110.148.12 port:22)
連線類型請選擇SSH,點選Open。

3-4 第一次登入系統時會彈出金鑰指紋視窗,請選擇yes並繼續。

3-5 先輸入密碼,enter送出後會再要求填入OTP(一次性密碼)。

3-6 登入成功會進入到臺灣杉一號的進場畫面。進場畫面有提供一些實用的排程指令及注意事項停機公告等等,並請同學記得登入節點不能進行計算及加密貨幣挖礦,以免帳號遭停權。
Step 4 WRF及WPS編譯安裝
WRF環境設定
詳細的環境設定流程請參考系統環境測試、建立函式庫、函式庫兼容性測試。為了讓同學更快速進入狀況,這邊提供較速成的方式建立環境(把前人的設定拿來用)。
首先開始建立WRF和WPS的libraries。我們需要依序安裝「NetCDF」、「MPICH」、「zlib」、「libpng」、「JasPer」。這邊要注意的是,編譯libraries和WRF/WPS都必須在相同的環境設定下編譯安裝,不然過程中是會出錯的。第一步是先建立libraries的資料夾和安裝NCL,由於國網的/home/${user}資料夾下是不會定時刪除的,所以建議國網使用者在/home/${user}下,建一個WRF專用的libraries資料夾安裝,名稱可以隨意,本文件使用 WRF_LIB。
本次課程助教已經設定好群組ACL(Access Control List),修課同學可以直接執行以下指令將前人的函式庫和NCL超連結到自己的/home目錄資料夾下:
$ cd
$ ln -sf /work1/u2797418/NWP_course/WRF_Lib WRF_LIB
$ ln -sf /work1/u2797418/NWP_course/NCL .
接著,在/home/${user}資料夾下進入「.bashrc」文件:
$ cd
$ vi .bashrc
.bashrc檔案第一次打開來應該會長成下方的樣子
# .bashrc
 
# Source global definitions
if [ -f /etc/bashrc ]; then
  /etc/bashrc
fi
 
# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=
 
# User specific aliases and functions
#module load gcc
使用 vi 編輯,在.bashrc的後續接著額外輸入環境設定如下:(DIR和NCARG_ROOT變數的路徑要改喔)
module load intel/2018_u1
export DIR=/home/${user}/WRF_LIB
export PATH=$DIR/netcdf/bin:$PATH
export NETCDF=$DIR/netcdf
export NCARG_ROOT=/home/${user}/NCL
export PATH=$NCARG_ROOT/bin:$PATH
export JASPERLIB=$DIR/grib2/lib
export JASPERINC=$DIR/grib2/include
export LDFLAGS=-L$DIR/grib2/lib
export CPPFLAGS=-I$DIR/grib2/include
export CC=icc
export CXX=icpc
export CFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CXXFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export F77=ifort
export FC=ifort
export F90=ifort
export FFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export FCFLAGS='-O3 -xHost -ip -no-prec-div -static-intel'
export CPP='icc -E'
export CXXCPP='icpc -E'
vi編輯結束,存檔離開(Esc後輸入:wq)。這邊要注意各家電腦的編譯器不同,環境設定需要依照編譯器的類型等等做調整。由於「.bashrc」讀取的時間再再登入的時候,所以修改完之後要被執行一次,不然環境是不會修改的。 指令如下:
$ source .bashrc
執行後就完成環境變數的更新。這樣環境設定的工作就算是完成啦!
WRF的系統流程

WRF模擬流程的示意圖。本圖取自WRF User's Home
WRF的模擬分成兩大類,真實個案(real case)模擬以及理想(ideal case)模組模擬,流程不太一樣,主要是真實個案模擬需要多一個前處理的步驟。因此理想模組模擬是不需要下載WPS(WRF前處理系統)的。要注意二維的理想實驗不能做跨節點的平行化(Always pick a single–threaded, no–nesting option)。
Real case 流程:
WPS處理初始資料 → 模式參數設計 → WRF模擬 → 後處理(分析/診斷/視覺化)
Ideal case 流程:
模式初始環境條件、邊界條件、參數設計 → WRF模擬 → 後處理(分析/診斷/視覺化)
這次課程會示範真實個案的模擬,讓同學除了知道基礎且比較完整的WRF模擬流程。另外請同學思考一下什麼是模擬,什麼又是預報?兩者差在哪裡?
WRF安裝
前一段提到,進行ideal case模擬時只需要使用WRF,而進行real case模擬時需要先用WPS建立網格、地形和靜態地表資料資料、解碼後(再)分析場資料、切割大氣資料後與網格和地形靜態地表資料結合,最後利用WRF進行模擬。但在安裝上,必須先安裝WRF後才能安裝WPS,因為WPS在安裝的過程中會使用到WRF裡面用來讀取資料的副程式(subroutine)。
首先要取得WRF的安裝程式,為了節省網路傳輸的時間,助教已經將WRF相關的程式上傳至臺灣杉一號並開分享,請同學複製一份至自己的/home/${user}資料夾下。
$ cd
$ ln -sf /work1/u2797418/NWP_course/TAR_File .
先進入到要安裝的資料夾中(安裝在work1/${user}下),注意!不管是對流與降水實驗室的使用者或是國網使用者,都不可以在/home/${user}/資料夾下安裝WRF進行模擬。國網使用者請在/work1/${user}/下建立資料夾安裝,並將WRF的tar.gz檔解壓縮。
$ cd /work1/${user}/
$ tar -zxvf /home/${user}/TAR_File/WRFV3.9.TAR.gz
解壓縮完,會在/work1/${user}下看到WRFV3的資料夾。進入WRFV3資料夾之後,下一步是執行configure建立WRF編譯的設定檔(configure.wrf),這個設定檔會因為各家機器不同而有不同的選擇。
$ cd /work1/${user}/WRFV3
$ ./configure
螢幕會輸出不同計算策略和compiler的組合:
...(略)...
Please select from among the following Linux x86_64 options:
1. (serial) 2. (smpar) 3. (dmpar) 4. (dm+sm) PGI (pgf90/gcc)
5. (serial) 6. (smpar) 7. (dmpar) 8. (dm+sm) PGI (pgf90/pgcc): SGI MPT
9. (serial) 10. (smpar) 11. (dmpar) 12. (dm+sm) PGI (pgf90/gcc): PGI accelerator
13. (serial) 14. (smpar) 15. (dmpar) 16. (dm+sm) INTEL (ifort/icc)
17. (dm+sm) INTEL (ifort/icc): Xeon Phi (MIC architecture)
18. (serial) 19. (smpar) 20. (dmpar) 21. (dm+sm) INTEL (ifort/icc): Xeon (SNB with AVX mods)
22. (serial) 23. (smpar) 24. (dmpar) 25. (dm+sm) INTEL (ifort/icc): SGI MPT
26. (serial) 27. (smpar) 28. (dmpar) 29. (dm+sm) INTEL (ifort/icc): IBM POE
30. (serial) 31. (dmpar) PATHSCALE (pathf90/pathcc)
32. (serial) 33. (smpar) 34. (dmpar) 35. (dm+sm) GNU (gfortran/gcc)
36. (serial) 37. (smpar) 38. (dmpar) 39. (dm+sm) IBM (xlf90_r/cc_r)
40. (serial) 41. (smpar) 42. (dmpar) 43. (dm+sm) PGI (ftn/gcc): Cray XC CLE
44. (serial) 45. (smpar) 46. (dmpar) 47. (dm+sm) CRAY CCE (ftn $(NOOMP)/cc): Cray XE and XC
48. (serial) 49. (smpar) 50. (dmpar) 51. (dm+sm) INTEL (ftn/icc): Cray XC
52. (serial) 53. (smpar) 54. (dmpar) 55. (dm+sm) PGI (pgf90/pgcc)
56. (serial) 57. (smpar) 58. (dmpar) 59. (dm+sm) PGI (pgf90/gcc): -f90=pgf90
60. (serial) 61. (smpar) 62. (dmpar) 63. (dm+sm) PGI (pgf90/pgcc): -f90=pgf90
64. (serial) 65. (smpar) 66. (dmpar) 67. (dm+sm) INTEL (ifort/icc): HSW/BDW
68. (serial) 69. (smpar) 70. (dmpar) 71. (dm+sm) INTEL (ifort/icc): KNL MIC
72. (serial) 73. (smpar) 74. (dmpar) 75. (dm+sm) FUJITSU (frtpx/fccpx): FX10/FX100 SPARC64 IXfx/Xlfx
Enter selection [1-75] :
在臺灣杉一號上,我們使用intel compiler,所以請選擇15。
[serial] - Single processor
使用單顆CPU模擬
[smpar] - Symmetric Multi-Processing / Shared Memory Parallel (OpenMP)
單節點多線程共享記憶體
[dmpar] - Distributed Memory Option (MPI)
分散式記憶體計算(可以跨機器)
[dm+sm] - Distributed Memory with Shared Memory (for example, MPI across nodes with openMP within a node)
跨節點分散式記憶體+節點內多線程共享記憶體計算
選項中會標明機器平台、Fortran/C語言編譯器的種類,請依照實際狀況選用,臺灣杉一號使用者請選擇13-16的選項。如果要跑Ideal Case,三維理想模式(如斜壓波)可以選dmpar,二維理想模式建議用serial或smpar。
接著,configure會詢問巢狀(nesting)網格的設置選項,請依照實際需求選擇。
Compile for nesting? (1=basic, 2=preset moves, 3=vortex following) [default 1]:
請選擇1,本次教學使用固定巢狀網格。
程式將產生一個名為configure.wrf的安裝設定檔。若不知道實驗室的編譯器類型,或是不確定該怎麼設定,除了嘗試錯誤之外,也可以複製自己實驗室學長姐已經確定可以執行WRF的configure.wrf檔來用。
確定WRF環境設定檔出來之後,就可以進行WRF的編譯。執行compile並在後方加上不同的編譯模組。這步很有可能出錯,也是多數新手卡關的地方,尤其未來有機會修改程式碼重新編譯的時候,所以建議將螢幕輸出的編譯訊息同步輸出到logfile檔案中,方便後續編譯失敗時可以尋找編譯錯誤的地方。因為這步通常需要等待30分鐘以上的時間阿!
WRF在新增CLM模組後,編譯的時間增加很多,可以修改configure.wrf檔案中的flag將CLM模組跳過編譯,但如果要使用到CLM模組就不能跳過,只能等久一點了。
ARCH_LOCAL = -DNONSTANDARD_SYSTEM_FUNC -DWRF_USE_CLM
這邊提供一個只限本課程內的檢查方式,使用diff去比較自己生成的configure.wrf和助教提供的configure.wrf是否一致(除了個人資料夾路徑不同外,其他應該要一致):
$ diff /work1/${user}/WRFV3/configure.wrf /home/${user}/TAR_File/configure.wrf
diff的結果應該只有第251行和第258行因為帳號名稱不同而有差異。這樣前面的步驟就是正確的。接下來的編譯除了花時間,應該會順利結束。
編譯WRF的指令如下:(真實個案選用em_real,>表示將螢幕輸出資訊存到logfile檔案中,&則表示背景執行)
$ cd /work1/${user}/WRFV3
$ ./compile em_real >& logfile
WRF有很多理想模組和真實個案的編譯模組,如果是真實個案模擬請使用em_real,如果是做理想模擬,請把em_real替換成適當的模組名稱,例如:
em_quarter_ss (3d ideal case)
em_b_wave (3d ideal case)
em_les (3d ideal case)
em_heldsuarez (3d ideal case)
em_tropical_cyclone (3d ideal case)
em_hill2d_x (2d ideal case)
em_squall2d_x (2d ideal case)
em_squall2d_y (2d ideal case)
em_grav2d_x (2d ideal case)
em_seabreeze2d_x (2d ideal case)
em_scm_xy (1d ideal case)
檢查編譯是否成功,可以使用以下兩個方法:
$ grep Error /work1/${user}/WRFV3/logfile
$ ls -l /work1/${user}/WRFV3/run/*.exe
第一行grep指令是尋找編譯輸出的logfile有沒有Error出現,有的話就是編譯失敗了,請vi打開logfile去看看Error出現在編譯到什麼程式的時候,依照logfile的指示去除錯。第二行指令是去看編譯完的執行檔是否都有出現在run資料夾底下,應該要出現:
ndown.exe -> ../main/ndown.exe
real.exe -> ../main/real.exe
tc.exe -> ../main/tc.exe
wrf.exe -> ../main/wrf.exe
理想模式的話,第二行指令則會出現:
ideal.exe -> ../main/ideal.exe
wrf.exe -> ../main/wrf.exe
編譯失敗就要先到logfile中尋找Error的地方,接著執行./clean –a清除編譯的資料,再從WRFV3下的configure開始修正錯誤重新來過。兩個檢查都通過的話,恭喜你。WRF已經安裝完成囉,已經可以進行理想模式模擬,真實個案模擬/預報就接著下一步開始安裝WPS了。
WPS安裝
先進入到要安裝的資料夾中,建議WPS的資料夾要跟WRFV3資料夾同一層,否則後續要在編譯設定檔中重新設定WRFV3的資料路徑(預設是相對路徑)
$ cd /work1/${user}
$ tar -zxvf /home/${user}/TAR_File/WPSV3.9.0.1.TAR.gz
WPS 的安裝流程因為要使用到NetCDF、zlib、libpng、JasPer這四個函式庫,所以比WRF還要複雜ㄧ些,很容易出錯。其實安裝WPS和WRF的流程大同小異,首先要產出編譯設定檔configure.wps,再進行編譯。這邊困難的部分就是如果環境設定不正確,需要手動增加函式庫的路徑。進入WPS資料夾之後,下一步是執行configure建立WRF環境設定檔(configure.wrf),這個設定檔一樣會因為各家機器不同而不同。
$ cd /work1/${user}/WPS
$ ./configure
執行完畢之後螢幕會出現不同計算策略和compiler的組合:
Please select from among the following supported platforms.
1. Linux x86_64, gfortran (serial)
2. Linux x86_64, gfortran (serial_NO_GRIB2)
3. Linux x86_64, gfortran (dmpar)
4. Linux x86_64, gfortran (dmpar_NO_GRIB2)
5. Linux x86_64, PGI compiler (serial)
6. Linux x86_64, PGI compiler (serial_NO_GRIB2)
7. Linux x86_64, PGI compiler (dmpar)
8. Linux x86_64, PGI compiler (dmpar_NO_GRIB2)
9. Linux x86_64, PGI compiler, SGI MPT (serial)
10. Linux x86_64, PGI compiler, SGI MPT (serial_NO_GRIB2)
11. Linux x86_64, PGI compiler, SGI MPT (dmpar)
12. Linux x86_64, PGI compiler, SGI MPT (dmpar_NO_GRIB2)
13. Linux x86_64, IA64 and Opteron (serial)
14. Linux x86_64, IA64 and Opteron (serial_NO_GRIB2)
15. Linux x86_64, IA64 and Opteron (dmpar)
16. Linux x86_64, IA64 and Opteron (dmpar_NO_GRIB2)
17. Linux x86_64, Intel compiler (serial)
18. Linux x86_64, Intel compiler (serial_NO_GRIB2)
19. Linux x86_64, Intel compiler (dmpar)
20. Linux x86_64, Intel compiler (dmpar_NO_GRIB2)
21. Linux x86_64, Intel compiler, SGI MPT (serial)
22. Linux x86_64, Intel compiler, SGI MPT (serial_NO_GRIB2)
23. Linux x86_64, Intel compiler, SGI MPT (dmpar)
24. Linux x86_64, Intel compiler, SGI MPT (dmpar_NO_GRIB2)
25. Linux x86_64, Intel compiler, IBM POE (serial)
26. Linux x86_64, Intel compiler, IBM POE (serial_NO_GRIB2)
27. Linux x86_64, Intel compiler, IBM POE (dmpar)
28. Linux x86_64, Intel compiler, IBM POE (dmpar_NO_GRIB2)
29. Linux x86_64 g95 compiler (serial)
30. Linux x86_64 g95 compiler (serial_NO_GRIB2)
31. Linux x86_64 g95 compiler (dmpar)
32. Linux x86_64 g95 compiler (dmpar_NO_GRIB2)
33. Cray XE/XC CLE/Linux x86_64, Cray compiler (serial)
34. Cray XE/XC CLE/Linux x86_64, Cray compiler (serial_NO_GRIB2)
35. Cray XE/XC CLE/Linux x86_64, Cray compiler (dmpar)
36. Cray XE/XC CLE/Linux x86_64, Cray compiler (dmpar_NO_GRIB2)
37. Cray XC CLE/Linux x86_64, Intel compiler (serial)
38. Cray XC CLE/Linux x86_64, Intel compiler (serial_NO_GRIB2)
39. Cray XC CLE/Linux x86_64, Intel compiler (dmpar)
40. Cray XC CLE/Linux x86_64, Intel compiler (dmpar_NO_GRIB2)
Enter selection [1-40] :
選項中會標明機器平台、Fortran/C語言編譯器的種類,請依照實際狀況選用。國網使用者請選擇 17-20 的選項,請選擇17。
第一次安裝或是第一次到新平台安裝的使用者,我建議先跳過這個步驟直接進行編譯,如果編譯成功就不用到這一步修改編譯設定檔。如果是國網使用者,先前有將環境設定存在.bashrc檔中,也有按部就班正確安裝函式庫,應該不需要進行這一步就能順利完成WPS編譯。檢查WPS是否安裝成功的指令如下:
$ cd /work1/${user}/WPS
$ ./compile >& logfile
這一步編譯的過程大概進行約15-20分鐘,檢查編譯是否成功,可以使用以下兩個方法:
$ grep Error /work1/${user}/WPS/logfile
$ ls -l /work1/${user}/WPS/*.exe
第一行grep指令是尋找編譯輸出的logfile有沒有Error出現,有的話就是編譯失敗了,請vi打開logfile去看看Error出現在編譯到什麼程式的時候,依照logfile的指示去除錯。第二行指令是去看編譯完的執行檔是否都有出現在WPS資料夾底下,應該要出現:
geogrid.exe -> geogrid/src/geogrid.exe
metgrid.exe -> metgrid/src/metgrid.exe
ungrib.exe -> ungrib/src/ungrib.exe
三個超連結,只要缺其中一個就是編譯失敗。編譯失敗就要先到logfile中尋找Error的地方,接著執行./clean –a清除編譯的資料,再從WPS的configure開始修正錯誤重新來過。
Step 5 WPS系統設定
WPS簡介
WPS為WRF Preprocessing System之縮寫,是三支程式(geogrid、ungrib、metgrid)的集合,其目的是準備好WRF可以使用的輸入資料。每執行一支程式執行就完成一個階段的準備工作:geogrid定義WRF模式的domain範圍並將靜態地理數據插值到網格上;ungrib從GRIB格式檔案中提取氣象場;metgrid將ungrib提取的氣象場水平插值到geogrid定義的WRF模式網格上。

WPS的資料處理流程圖。每個WPS程式都從一個共同的namelist.wps文件中讀取參數。這個namelist.wps文件中&share區段的參數會被WPS的三支程式(geogrid、ungrib、metgrid)讀取使用,而&geogrid、&ungrib、&metgrid區段的參數則是被對應的程式使用。
事前準備
從WPS流程圖上可以得知我們需要準備靜態地理資料和氣象場資料,這兩份資料助教已經幫忙整理好,請同學設置連結到自己的資料夾下。GEOG資料夾存放的是靜態的地形資料,ANALYSIS資料夾則是存放氣象分析場資料。
$ cd
$ ln -sf /work1/u2797418/NWP_course/GEOG/ .
$ ln -sf /work1/u2797418/NWP_course/ANALYSIS/ .
我們要修改一支使用NCL來繪製我們所設計好的巢狀網格(Nested domain)的繪圖程式,將程式的輸出圖檔格式改成pdf,再使用傳輸節點將pdf檔案下載下來看。使用MobaXterm的同學則是可以直接開啟pdf檔案。
$ cd /work1/${user}/WPS
$ vi util/plotgrids_new.ncl
在NCL的程式中,「;」代表註解的意思,看20-25行可以把輸出格式設定的x11那行註解掉,並將pdf的那行取消註解。修改完的檔案如下:
...(略)...
; We generate plots, but what kind do we prefer?
; type = "x11"
type = "pdf"
; type = "ps"
; type = "ncgm"
wks = gsn_open_wks(type,"wps_show_dom")
...(略)...
GEOGRID-生成地表靜態資訊
geogrid的目的是定義模擬的domain網格,並將各種地表數據資料插值到模式網格上。模擬的domain網格是使用namelist.wps文件中的&geogrid區段指定的參數來定義的。除了計算每個網格點的緯度、經度和地圖比例因子(投影方法)之外,geogrid還預設進行土壤類別、土地利用類別、地形高度、年均深層土壤溫度、月份植被比例、月份反照率、最大雪反照率和坡度類別等等資訊插值到模式網格上,這些地表靜態資料是時間不變的(以區域模式能預報的角度而言)。部分靜態資料只有提供一種解析度可用,另一部分的資料有提供30"、2'、5'和10'的分辨率提供;這裡,“表示弧秒,“表示弧分,使用接近模式網格間距的資料,進行插值通常會更具代表性。
進階內容:關於靜態資料的插植方法,一般而言我們使用geogrid時都使用默認設定,即可以將大多數連續和分類資料插值到網格中。GEOGRID.TBL定義了default設定下geogrid如何利用不同數值方法處理每個地表靜態資料,以及該靜態資料的位置。所以通過GEOGRID.TBL,可以將新的/附加的/自製的資料插值到模式網格中。
接著我們要來設計區域模式的巢狀網格位置,namelist.wps是用來更改WPS的設定用,分為三支程式共用的&share區段、以及各程式專用的區段(如geogrid專用的&geogrid區段)。
$ cd /work1/${user}/WPS
$ vi namelist.wps
第一步設計domain我們只要注意&share和&geogrid這兩個區段。執行geogrid.exe之前要調整的重點我用紅字標起來。
...(略)...
&share
wrf_core = 'ARW',
max_dom = 3,
start_date = '2015-08-06_12:00:00','2015-08-06_12:00:00','2015-08-06_12:00:00',
end_date = '2015-08-09_12:00:00','2015-08-06_12:00:00','2015-08-06_12:00:00',
interval_seconds = 21600
io_form_geogrid = 2,
/
&geogrid
parent_id = 1, 1, 2,
parent_grid_ratio = 1, 3, 3,
i_parent_start = 1, 121, 51,
j_parent_start = 1, 75, 101,
e_we = 301, 301, 331,
e_sn = 241, 301, 301,
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!
! The default datasets used to produce the HGT_M, GREENFRAC,
! and LU_INDEX/LANDUSEF fields have changed in WPS v3.8. The HGT_M field
! is now interpolated from 30-arc-second USGS GMTED2010, the GREENFRAC
! field is interpolated from MODIS FPAR, and the LU_INDEX/LANDUSEF fields
! are interpolated from 21-class MODIS.
!
! To match the output given by the default namelist.wps in WPS v3.7.1,
! the following setting for geog_data_res may be used:
!
! geog_data_res = 'gtopo_10m+usgs_10m+nesdis_greenfrac+10m','gtopo_2m+usgs_2m+nesdis_greenfrac+2m',
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT NOTE !!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
geog_data_res = 'default','default','default',
dx = 18000,
dy = 18000,
map_proj = 'lambert',
ref_lat = 23.50,
ref_lon = 120.00,
truelat1 = 20.00,
truelat2 = 40.00,
stand_lon = 120.00,
geog_data_path = '請填入正確的靜態地形資料路徑可以是相對也可以是絕對路徑,要記得加上前後引號'
/
...(略)...
習慣上先決定好投影,設定好靜態資料的路徑,才開始設計網格,下面先解說投影的相關參數:
[map_proj]
地圖投影方式。
[ref_lat/ref_lon]
表示往個間距最粗domain 01的中心經緯度座標。
[truelat1/truelat2]
為投影面與地球相割/切的緯度,Lambert conformal projection可有一或兩個, Mercator and polar stereographic projections只有一個。
[stand_lon]
這條經線會平行於y軸(僅適用於Lambert conformal and polar stereographic projections)。
[geog_data_path]
靜態地形資料的路徑。
來解釋一下巢狀網格的設計

[max_dom]
巢狀網格總數量。
[parent_id]
父母網格編號。
[parent_grid_ratio]
子網格和父母網格的網格間距比例(要奇數,建議3,頂多5)。
[i_parent_start]
子網格的西側邊界和父母網格的西側邊界相距幾個父母網格長(左右平移,單位是父母網格個數)。
[j_parent_start]
子網格的南側邊界和父母網格的南側邊界相距幾個父母網格長(上下平移,單位是父母網格個數)。
[e_we]
子網格的東西格數(注意數量要為kn+1,k是parent_grid_ratio的值,n會是一個小於父母網格的e_we-i_parent_start的數字,單位是子網格個數)。
[e_sn]
子網格的南北格數(注意數量要為kn+1,k是parent_grid_ratio的值,n會是一個小於父母網格的e_sn-j_parent_start的數字,單位是子網格個數)。
[dx/dy]
最外層網格的網格間距(單位是公尺)。
設定完之後,存檔離開(:wq),執行繪圖程式來看看結果吧!
$ cd /work1/${user}/WPS
$ ncl util/plotgrids_new.ncl
$ ls *.pdf
輸出的pdf檔可以使用WinSCP程式透過傳輸節點下載,MobaXterm可以直接開啟查看。看看domain的設定是否符合需求,但本次作業請同學按照教學統一設計domain範圍。自行設計domain的訣竅就是先製作最外層的domain和調整投影,確定好之後再設計調整內層的domain,另外同學要記住計算資源是有限的,巢狀網格的目的就是要節省計算資源,如果網格隨便開到800或1000以上那就沒有意義了,未來做研究時同學還要思考這類問題。
設定完我們就可以執行geogrid.exe囉(./geogrid.exe),但這邊要注意不可以在控制/登入節點執行計算,以免違反規定。我們要寫一支PBS的script來提交我們的計算工作。
$ cd /work1/${user}/WPS
$ vi PBS_geogrid.sh
PBS_geogrid.sh中請輸入下方內容,註解建議要刪掉
#!/bin/bash
#PBS -P ACD11***8 #請填iService上的計畫代碼
#PBS -N WPS_TY #自己隨便自己知道的工作名
#PBS -l select=1:ncpus=1:mpiprocs=1 #使用1個節點1個核心1個執行緒
#PBS -q serial #單核的工作請排serial群組,短時間30分鐘內結束的工作也可以試試ctest群組排隊
#PBS -M user@ntu.edu.tw #填自己的email信箱
#PBS -m abe #什麼時候會寄信通知,a = abort; b = begin; e = end
module load intel/2018_u1
cd /work1/${user}/WPS #填寫geogrid.exe所在的資料夾路徑
export I_MPI_HYDRA_BRANCH_COUNT=-1
./geogrid.exe
編輯完後存檔離開(:wq),接著我們送出工作並查看送出的工作狀態
$ cd /work1/${user}/WPS
$ qsub PBS_geogrid.sh
$ qstat -u ${user}
螢幕會印出(S欄位代表狀態,Q表示工作排隊中,R表示工作執行中。):
srvc1:
Req'd Req'd Elap
Job ID Username Queue Jobname SessID NDS TSK Memory Time S Time
--------------- -------- -------- ---------- ------ --- --- ------ ----- - -----
5607402.srvc1 ${user} ctest WPS_TY 138534 1 1 -- 00:30 R 00:00
如果執行結束自己的email應該會收到完成執行的通知喔。可以ls -l檢查一下geogrid.exe有沒有確實生成geo_em.d01.nc、geo_em.d02.nc、geo_em.d03.nc的檔案。
UNGRIB-氣象資料分割
ungrib程式讀取GRIB文件,提取數據,並將數據寫入一種簡單的格式,稱為中介格式。GRIB文件包含隨時間變化的氣象場,通常來自另一個區域或全球模式,例如NCEP的GFS(Global Forecast System)或是ECMWF的IFS(Integrated Forecasting System)。GRIB檔案中通常包含比初始化WRF所需的資料更多。GRIB格式的文件使用各種代碼來識別檔案中的變數和層場。Vtables又稱作「變數表」,它定義了要從GRIB檔案中提取哪些資料片段並寫入中介格式中。
進階內容:AFWA的AGRMET地表模式輸出、海洋模式輸出SST等等的Vtables在ungrib裡面都有提供,如果需要使用一些下墊面資訊驅動WRF模式,可以利用它們,但要注意不同資料的ungrib要分開做,檔頭(prefix)要稍微調整一下,不要把上一步驟的中介檔案給覆蓋掉了。
將先前準備好的氣象場資料(FNL/ECMWF)連結至此,並執行link_grib.csh來連結資料:[./link_grib.csh 分析場資料路徑/*],成功後會出現GRIBFILE.AAA、GRIBFILE.AAB、GRIBFILE.AAC、GRIBFILE.AAD….會以這樣的排序排下去,若失敗會出現紅底,此時請確認你的資料路徑是否正確。
$ cd /work1/${user}/WPS
$ ./link_grib.csh /home/yaochuwu1118/ANALYSIS/TY_FNL/* .
為了解碼grib資料,我們要提供變數表,請連結適當的變數表到WPS下並命名為Vtable,不確定要連結哪一個的話可以看ungrib/Variable_Tables資料夾下的README的文件
$ cd /work1/${user}/WPS
使用NCEP FNL分析場:
$ ln -sf ungrib/Variable_Tables/Vtable.GFS Vtable
使用ECMWF ERA5再分析場:
$ ln -sf ungrib/Variable_Tables/Vtable.ECMWF Vtable
接著打開namelist.wps:
$ cd /work1/${user}/WPS
$ vi namelist.wps
這一步就會跟時間有關了,&ungrib區段就用預設的輸出檔案會是FILE開頭(prefix預設的),&share區段裡面時間就很重要囉,請把時間調成模擬的時間。另外要注意一點,最外層的domain 01我們要製作初始條件還有邊界條件,但是內層的domain 02和domain 03我們只需要提供初始條件即可,不需要提供邊界條件,因為內層網格的邊界條件會由父母網格提供。interval_seconds是指分析場的時間間格,一般習慣都使用6小時,請換算成秒為單位。
&share
wrf_core = 'ARW',
max_dom = 3,
start_date = '2015-08-06_12:00:00','2015-08-06_12:00:00','2015-08-06_12:00:00',
end_date = '2015-08-09_12:00:00','2015-08-06_12:00:00','2015-08-06_12:00:00',
interval_seconds = 21600
io_form_geogrid = 2,
/
...(略)...
&ungrib
out_format = 'WPS',
prefix = 'FILE',
/
&metgrid
fg_name = 'FILE'
io_form_metgrid = 2,
/
設定完之後,存檔離開(:wq),接著就是執行ungrib.exe囉。一樣要注意不可以在控制/登入節點執行計算,以免違反規定。所以要寫一支PBS的script來提交我們的計算工作。
$ cd /work1/${user}/WPS
$ vi PBS_ungrib.sh
PBS_ungrib.sh中請輸入下方內容:
#!/bin/bash
#PBS -P ACD11***8
#PBS -N WPS_TY
#PBS -l select=1:ncpus=1:mpiprocs=1
#PBS -q serial
#PBS -M user@ntu.edu.tw
#PBS -m abe
module load intel/2018_u1
cd /work1/${user}/WPS
export I_MPI_HYDRA_BRANCH_COUNT=-1
./ungrib.exe
編輯完後存檔離開(:wq),接著我們送出工作並查看送出的工作狀態
$ cd /work1/${user}/WPS
$ qsub PBS_ungrib.sh
$ qstat -u ${user}
如果執行結束自己的email應該會收到完成執行的通知喔。可以ls -l檢查一下ungrib.exe有沒有確實生成時間正確的FILE:的檔案。
METGRID-地表與氣象資訊結合
metgrid程式會把透過ungrib提取的中介格式氣象數據在geogrid定義的模式網格上進行水平插值。插值後的metgrid輸出場可以被WRF程式下的real.exe使用。在namelist.wps的&share區段控制metgrid插值的日期範圍。
進階內容:這個步驟跟geogrid一樣都在進行內插,METGRID.TBL這份檔案就記錄了不同的氣象場在default的預設下使用什麼水平空間內插的數值方法,也可以去修改METGRID.TBL檔案指定其他數值方法的選項。
原則上,這一步一般不用調整任何設定,直接執行即可,一樣要寫成script來執行。
$ cd /work1/${user}/WPS
$ vi PBS_metgrid.sh
PBS_metgrid.sh中請輸入下方內容:
#!/bin/bash
#PBS -P ACD11***8
#PBS -N WPS_TY
#PBS -l select=1:ncpus=1:mpiprocs=1
#PBS -q serial
#PBS -M user@ntu.edu.tw
#PBS -m abe
module load intel/2018_u1
cd /work1/${user}/WPS
export I_MPI_HYDRA_BRANCH_COUNT=-1
./metgrid.exe
編輯完後存檔離開(:wq),接著我們送出工作並查看送出的工作狀態
$ cd /work1/${user}/WPS
$ qsub PBS_metgrid.sh
$ qstat -u ${user}
如果執行結束自己的email應該會收到完成執行的通知喔。可以ls -l檢查一下metgrid.exe有沒有確實生成時間正確的met_em.d0x...nc的檔案,內層domain只會有初始場的時間。
Step 6 WRF模式設定
製作WRF初始場及邊界條件
首先先切換到WRF/run的資料夾下。將剛由WPS製作出來的met_em檔link至此。
$ cd /work1/${user}/WRFV3/run
$ ln -sf ../../WPS/met_em.* .
編輯namelist.input,real這一步會將met_em*的檔案進行垂直內插,並製作邊界條件。real.exe執行時會讀取namelist.input檔案的&time_control和&domains這兩個區段。要注意的是,&domains區段的的水平網格設定,需要和WPS設定完全一致。
$ cd /work1/${user}/WRFV3/run
$ vi namelist.input
參考範例如下:
&time_control
run_days = 0,
run_hours = 72,
run_minutes = 0,
run_seconds = 0,
start_year = 2015, 2015, 2015,
start_month = 08, 08, 08,
start_day = 06, 06, 06,
start_hour = 12, 12, 12,
start_minute = 00, 00, 00,
start_second = 00, 00, 00,
end_year = 2015, 2015, 2015,
end_month = 08, 08, 08,
end_day = 09, 09, 09,
end_hour = 12, 12, 12,
end_minute = 00, 00, 00,
end_second = 00, 00, 00,
interval_seconds = 21600
input_from_file = .true.,.true.,.true.,
history_interval = 180, 60, 60,
frames_per_outfile = 1, 1, 1,
restart = .false.,
restart_interval = 720,
io_form_history = 2
io_form_restart = 2
io_form_input = 2
io_form_boundary = 2
debug_level = 0
/
&domains
time_step = 60,
time_step_fract_num = 0,
time_step_fract_den = 1,
max_dom = 3,
e_we = 301, 301, 331,
e_sn = 241, 301, 301,
e_vert = 40, 40, 40,
p_top_requested = 5000,
num_metgrid_levels = 32 for NCEP GFS, 38 for ECMWF ERA5
num_metgrid_soil_levels = 4 for NCEP GFS, 0 for ECMWF ERA5
dx = 18000, 6000, 2000,
dy = 18000, 6000, 2000,
grid_id = 1, 2, 3,
parent_id = 0, 1, 2,
i_parent_start = 1, 121, 51,
j_parent_start = 1, 75, 101,
parent_grid_ratio = 1, 3, 3,
parent_time_step_ratio = 1, 3, 3,
feedback = 1,
smooth_option = 0,
/
...(以下略)...
以下說明namelist.input中&time_control區段的相關參數
[run_*]
執行real.exe和wrf.exe會使用到這個參數加總起來的時間(days+hours)。
[start_*]
執行real.exe和wrf.exe的起始日期和時間,要包含在WPS產出的met_em檔案的時間內,wrf.exe和real.exe的日期時間應一致。
[end_*]
執行real.exe和wrf.exe的中止日期和時間,要包含在WPS產出的met_em檔案的時間內,wrf.exe的日期時間應等於或小於real.exe設定的日期時間。
[interval_seconds]
使用者提供的邊界條件(met_em檔案)時間間隔,單位要算成秒。
[input_from_file]
調整domain的input(也就是初始場跟邊界條件)是否從real.exe製作的檔案提供。
[history_interval]
調整模式的輸出週期,單位是分鐘。
[frames_per_outfile]
調整一個output檔案有幾個時間點的輸出,一般選1。
[restart]
這次計算是否是restart。
[restart_interval]
調整產出restart檔案的週期,單位是分鐘。如果遇到停電,可以從restart檔案(wrfrst開頭的輸出檔)的時間開始執行,不用從最初始場開始。亦或是實驗需求,從中途改變模式參數,甚至是模式內的計算過程。
[io_form_*]
輸入輸出檔案的格式設定,一般習慣選2檔案會是netCDF格式。
以下說明namelist.input中&domains區段的相關參數
[time_step]
模式最外層domain積分的時間步長,單位是秒。
[time_step_fract_num]
積分時間步長的小數位(但因為計算機的浮點數精度問題要用分數表示)的分子,單位是秒。
[time_step_fract_dem]
積分時間步長的小數位(但因為計算機的浮點數精度問題要用分數表示)的分母,單位是秒。
[parent_time_step_ratio]
父母網格和子網格時間步長的比值,可以跟WPS設定parent_grid_ratio不一樣,但一般會先設定一樣,如果實際執行發生計算不穩定(俗稱模式爆掉,經驗上多是因為垂直速度),再來調整time_step或是parent_time_step_ratio,以模擬單位時間內所有domain加總計算次數少的設定優先,這時候完成實驗也要考量計算成本和時間成本。
[feedback]
子網格的(物理)訊號會回饋到父母網格。
[e_vert]
設定WRF模式中的垂直層數,WRF模式採用地形追隨座標(eta座標),避免地形所產生的邊界條件問題,所有巢狀網格的垂直層數量會是一致的(寫一個就好)。
[p_top_requested]
設定模式層頂高度的氣壓值,單位是Pa,注意不是hPa喔。
[eta_levels (optional)]
手動設定地形追隨座標(eta座標)的數值由1至0,若不手動設定,WRF會自動給你一組計算友善(computational-friendly)且安全的垂直分佈,缺點是在邊界層甚至是700-hPa高度以下層數過少,垂直加密反而把計算資源耗費在相對次要的中層而忽略低層;同樣地,邊界層加密雖然能夠讓模式更好的描述低層的水氣,通常能讓劇烈降水的現象有正面的反應,但對於細網格的時間步長也會更要求。
[num_metgrid_levels]
從WPS系統輸出的垂直層有幾層,可以使用ncdump -h指令去檢查還沒垂直內插到WRF模式地形追隨座標的met_em檔案。
[num_metgrid_soil_levels]
從WPS系統輸出的土壤層有幾層,可以使用ncdump -h指令去檢查met_em檔案。
部份跟WPS系統的參數一樣的,就不贅述。
編輯完後存檔離開(:wq),接著我們執行real.exe製作初始場跟邊界條件。
$ cd /work1/${user}/WRFV3/run
$ vi PBS_real.sh
PBS_real.sh中請輸入下方內容:
#!/bin/bash
#PBS -P ACD11***8
#PBS -N REAL_TY
#PBS -l select=1:ncpus=1:mpiprocs=1
#PBS -q serial
#PBS -M user@ntu.edu.tw
#PBS -m abe
module load intel/2018_u1
cd /work1/${user}/WRFV3/run
export I_MPI_HYDRA_BRANCH_COUNT=-1
./real.exe
編輯完後存檔離開(:wq),接著我們送出工作並查看送出的工作狀態
$ cd /work1/${user}/WRFV3/run
$ qsub PBS_real.sh
$ qstat -u ${user}
如果執行結束自己的email應該會收到完成執行的通知喔。可以ls -l檢查一下real.exe有沒有確實生成的總domain數量的wrfinput_d0*和一個wrfbdy的檔案。
執行WRF模擬
及物理參數設定,而關於namelist的詳細說明以及物理參數化法請參考手冊,或是README.namelist檔
參考範例如下:
&time_control
run_days = 0,
run_hours = 72,
run_minutes = 0,
run_seconds = 0,
start_year = 2015, 2015, 2015,
start_month = 08, 08, 08,
start_day = 06, 06, 06,
start_hour = 12, 12, 12,
start_minute = 00, 00, 00,
start_second = 00, 00, 00,
end_year = 2015, 2015, 2015,
end_month = 08, 08, 08,
end_day = 09, 09, 09,
end_hour = 12, 12, 12,
end_minute = 00, 00, 00,
end_second = 00, 00, 00,
interval_seconds = 21600
input_from_file = .true.,.true.,.true.,
history_interval = 180, 60, 60,
frames_per_outfile = 1, 1, 1,
restart = .false.,
restart_interval = 720,
io_form_history = 2
io_form_restart = 2
io_form_input = 2
io_form_boundary = 2
debug_level = 0
/
&domains
time_step = 60,
time_step_fract_num = 0,
time_step_fract_den = 1,
max_dom = 3,
e_we = 301, 301, 331,
e_sn = 241, 301, 301,
e_vert = 40, 40, 40,
p_top_requested = 5000,
num_metgrid_levels = 32 for NCEP GFS, 38 for ECMWF ERA5
num_metgrid_soil_levels = 4 for NCEP GFS, 0 for ECMWF ERA5
dx = 18000, 6000, 2000,
dy = 18000, 6000, 2000,
grid_id = 1, 2, 3,
parent_id = 0, 1, 2,
i_parent_start = 1, 121, 51,
j_parent_start = 1, 75, 101,
parent_grid_ratio = 1, 3, 3,
parent_time_step_ratio = 1, 3, 3,
feedback = 1,
smooth_option = 0,
/
&physics
mp_physics = 6, 6, 6,
cu_physics = 1, 0, 0,
ra_lw_physics = 1, 1, 1,
ra_sw_physics = 1, 1, 1,
bl_pbl_physics = 1, 1, 1,
sf_sfclay_physics = 91, 91, 91,
sf_surface_physics = 1, 1, 1,
radt = 30, 30, 30,
bldt = 0, 0, 0,
cudt = 5, 5, 5,
icloud = 1,
num_soil_layers = 4,
num_land_cat = 21,
sf_urban_physics = 0, 0, 0,
do_radar_ref = 1,
/
&fdda
/
&dynamics
w_damping = 0,
diff_opt = 1, 1, 1,
km_opt = 4, 4, 4,
diff_6th_opt = 0, 0, 0,
diff_6th_factor = 0.12, 0.12, 0.12,
base_temp = 290.
damp_opt = 0,
zdamp = 5000., 5000., 5000.,
dampcoef = 0.2, 0.2, 0.2,
khdif = 0, 0, 0,
kvdif = 0, 0, 0,
non_hydrostatic = .true., .true., .true.,
moist_adv_opt = 1, 1, 1,
scalar_adv_opt = 1, 1, 1,
gwd_opt = 1,
/
&bdy_control
spec_bdy_width = 5,
spec_zone = 1,
relax_zone = 4,
specified = .true., .false.,.false.,
nested = .false., .true., .true.,
/
&grib2
/
&namelist_quilt
nio_tasks_per_group = 0,
nio_groups = 1,
/
以下說明namelist.input中&physics區段的相關參數
這邊先說明為什麼模式需要導入物理參數化?主要是因為模式的網格不能有效的解析這類現象或是物理過程的不確定等因素,這類屬於次網格尺度的現象,只能透過使用經驗式或經驗模型等等方式描述物理過程。
[mp_physics]
設定雲微物理參數化方案,描述水氣的相態變化以及透過不同微物理過程描述雲水/雲冰/雨滴/雪花/軟雹/冰雹等等分類,又分成單矩量/雙矩量/多矩量/bin model等等,每個方案預報得到的降水粒子種類或是是用的環境都有不同的地方。
[cu_physics]
設定積雲參數化方案,要注意gray-zone的問題,一般建議網格間距(注意!網格間距並不等於網格解析度)要大於10-km以上才開啟;5-km至10-km屬於gray zone的灰色地帶,可開可不開;5-km以下會關閉積雲參數化,讓網格透過模式的動力和熱力去生成對流。
[ra_lw_physics]
設定長波輻射參數化方案。
[ra_sw_physics]
設定短波輻射參數化方案。
[bl_pbl_physics]
設定邊界層參數化方案。
[sf_sfclay_physics]
設定表面層(約邊界層內最下方的10%高度以下)參數化方案。
[sf_surface_physics]
設定表面層跟陸地之間的模式(land-surface model)。
[do_radar_ref]
設定是否計算(診斷)波長10-cm(S波段)雷達回波,需注意雲矀物理參數化方案是否支援。
不同的參數化方案在不同情境各有優勢,且各個參數化之間也會有交互作用(例如雲和長短波輻射的關係),雖然不一定需要到打開程式碼去了解整個參數化細節,但是要了解自己所使用的參數化是否合適或能達成目的,沒有依循策略,盲目挑選任意組合會有很高的時間和計算成本
以下說明namelist.input中&dynamics區段(主要控制diffusion/damping/advection)的相關參數
[rk_ord]
調整WRF動力核心中平流項計算所採用的數值方法,預設使用3階RK,可調整成2階RK。
[diff_opt]
調整亂流(turbulence)和混合(mixing)的選項。
[km_opt]
調整eddy的係數的選項,著名的K-theory或其他TKE閉合方法。
[damp_opt]
調整damping的選項,模式高層的damping,防止模式中的各種波動在模式層頂回彈。
接著我們要準備送出執行wrf.exe的工作啦,先編寫wrf.exe的工作script,使用2個nodes,一共80顆CPU核心。
$ cd /work1/${user}/WRFV3/run
$ vi PBS_wrf.sh
PBS_wrf.sh中請輸入下方內容:
#!/bin/bash
#PBS -P ACD11***8
#PBS -N WRF_TY
#PBS -l select=2:ncpus=40:mpiprocs=40
#PBS -q ct160
#PBS -M user@ntu.edu.tw
#PBS -m abe
module load intel/2018_u1
cd /work1/${user}/WRFV3/run
export I_MPI_HYDRA_BRANCH_COUNT=-1
mpirun ./wrf.exe
編輯完後存檔離開(:wq),接著我們送出工作並查看送出的工作狀態
$ cd /work1/${user}/WRFV3/run
$ qsub PBS_wrf.sh
$ qstat -u ${user}
如果開始執行的時候,自己的email應該會收到開始執行的通知。這時候可以ls -l檢查一下有沒有確實生成wrfout*的檔案。wrfout的輸出檔就是NetCDF格式的模式輸出結果啦,拿題目需要的時間進行診斷、分析、畫圖就可以完成了。
Step 7 後處理過程
重要說明與提醒
這部分的工具很多,只要可以讀取 netCDF資料、可以合適的畫圖的軟體工具都可以使用。例如:GrADS、ARWPost、RIP4、NCL、Matlab、python...等等。只要你會使用都是好工具。這邊我提供部分轉檔工具的簡單教學供大家參考。
交錯網格與垂直內插
注意 WRFtoGrADS / ARWPost version 3.1/ RIP version 4.7 / NCL 以上這四種軟體都會幫你做好垂直內插,但是Matlab/Python是直接讀出netCDF數據,Python也可以使用一些package輔助水平和垂直內插,如wrf-python或,pyNGL/pyNIO 。WRF的U/V/W和重力位等等都在eta坐標的交錯網格上,而不是在z或p坐標的質量網格上!這部分需要自己內插!

WRF的網格配置使用Arakawa staggered C-grid,很多計算需要水平垂直內插到質量網格。
WRF特別的輸出變數
WRF模式的預報方程中,有一些變數是有分基本場跟擾動場的,因此要透過下方的定義重建這些氣象變數
[total geopotential] [m2 s-2]
= [PH] + [PHB]
[total geopotential height] [m]
= ( [PH] + [PHB] ) / 9.81
[total potential temperature] [K]
= [T] + 300
[total pressure] [mb]
= ( [P] + [PB] ) * 0.01
[accumulated total precipitation] [mm]
= [RAINNC] + [RAINSH] + [RAINC]
WRFtoGrADS
本段落由Cypresslin 提供
解壓縮
$ tar –zxf WRFtoGrADS.tar.gz
修改 Makefile 並編譯
$ make
依據電腦狀況修改 makefile,首先是找到你電腦的系統(linux, sun, Compaq...etc)將該基本設定區塊註解掉的部分取消註解,再修改如編輯器、NETCDF 位置等等,要注意的是這裡面的 NETCDF路徑是預先寫好的,出錯的話很有可能就是因為機器上的 NETCDF 位置不在該處,編譯時會看到跟NETCDF 檔案相關的錯誤訊息,如:make: *** [module_wrf_to_grads_netcdf.o] Error 2,此時只要把Makefile 裡面的 NETCDF 路徑改成正確的,或者是採用.bashrc 檔裡面所 export 的變數(如$(NETCDF)也可以)就 ok。成功後會出現 wrf_to_grads 執行檔。
修改 control file,首先修改其資料夾下 control_file 裡面的參數(請參考 README),先是輸入時間,再來是選定輸出的參數,參數是前面空一格就可以略過,要看檔案裡面的說明,接著是輸入檔案位置(WRF 輸出的資料),再選定你是用 real case 還是 ideal case,最後是設定垂直座標。
$ ./wrf_2_grads control_file
轉檔輸出檔案名稱(不用加副檔名),程式就會開始幫你把檔案轉成給 GrADS 讀取的格式。
ARWPost
本段落由Cypresslin 提供
解壓縮
$ tar –zxf ARWPost.tar.gz
執行 configure
$ ./configure
這裡請依據編譯器種類來選擇,實驗室機器是 PGI 所以選 1,國網是 intel。
編譯
$ ./compile
如果都沒問題的話,應該會產生 ARWpost.exe 這個連結,一般來說最可能遇上的問題是NETCDF 的位置不對,若不幸遇上請修改你的環境變數。
修改 namelist.ARWpost
這裡跟 WRF2GrADS 一樣,可以選擇要輸出的場,以及想要內插的高度(可以是壓力場也可以是高度場)。