進行模擬
MM5.tar.gz 這個檔案就是 MM5 數值模式的骨幹了,它最早是根據 Anthes 與 Warner 兩位學者在美國賓州州立大學所發展出的靜力模式為依據(Anthes 與 Warner,1978; Anthes 等人,1987)到了第二版的 MM5 已進展成一個可以選用靜力或非靜力的有限區域模式(Dudhia,1993)。在第三版中,甚至是發展成能夠自動判斷系統尺度的大小來決定該使用哪種方程式,當系統較大時使用靜力方程以避免浪費時間,反之當系統尺度較小時則採用非靜力平衡以防模式無法計算。模式中採用包含了雲微物理過程,還有一系列的積雲參數化、邊界層參數化、輻射參數化等物理過程。
模式設定
- 解壓縮:
tar –zxvf MM5.tar.gz
- 修改 configure.user:
- Section 1~2 是一些系統設定,基本上是不用動到這些。
- Section 3 是編譯器所用的設定樣板,請依照你的環境跟編譯器把對應段落的註解拿掉,像我們的 Linux + PGI 的組合就是要用段落 3i1 中的設定。有需要的話可以進一步調整這些設定。
- Section 4 是一些指令的進階設定,基本上也是沒有修改的必要。
- Section 5 是模擬網域的基本設定,要修改的東西如下(其餘設定要跟 TERRAIN、INTERPF 中設定的一樣):
# MAXNES (integer) - 網域數量 MAXNES = 1 # MIX,MJX (integer) - 網格點數的最大值 MIX = 301 MJX = 301 # MKX (integer) - 模式垂直層數(half σ levels,所以是 INTERPF 中所設定的 Full-σ 層數減 1) MKX = 31
- Section 6 則是設定各種物理過程的地方,有些選項是以陣列表示不同網域所用的設定,另外如果只有三個網域,那麼只有前三個數值有效:
# IMPHYS – 雲微物理選項(整數陣列) IMPHYS = "7,4,1,1,1,1,1,1,1,1" # 1: dry, 2: stable, 3: warm rain, 4: simple ice, 5: mix phase, # 6: graupel(gsfc), 7 : graupel(reisner2), 8: schultz MPHYSTBL = 0 # 0: do not use look-up tables for moist physics # 1: use look-up tables for moist physics # (currently only simple ice and mix phase are available) # ICUPA – 積雲參數化選項(整數陣列) # 1: None, 2: Kuo, 3: Grell, 4: AS, 5: FC, 6: KF, 7: BM, 8: KF2 ICUPA = "1,3,1,1,1,1,1,1,1,1" # IBLTYP – 行星邊界層參數化選項(整數陣列) # 0: no PBL fluxes, 1: bulk, 2: Blackadar, 3: Burk-Thompson, # 4: Eta M-Y, 5: MRF, 6: Gayno-Seaman, 7: Pleim-Xiu IBLTYP = "5,5,2,2,2,2,2,2,2,1" # FRAD – 大氣輻射參數化選項(整數陣列) #- Radiation cooling of atmosphere # 0: none, 1: simple, 2: cloud, 3: ccm2, 4: rrtm FRAD = "2,0,0,0,0" # IPOLAR - (integer) for polar model used only if ISOIL=1 # 0: not polar (5-layer soil model) # 1:polar (7-layer snow/soil model) IPOLAR = 0 # ISOIL - for multi-layer soil temperature model (integer) # 0: no, 1:yes (only works with IBLTYP=2,5) # 2: Noah land-surface scheme (IBLTYP=4,5 only) # 3: Pleim-Xiu LSM (IBLTYP=7 only) ISOIL = 1 # ISHALLO - 淺對流選項(整數陣列) # 1: shallow convection, 0: No shallow convection ISHALLO = "0,0,0,0,0,0,0,0,0,0"
- 編譯:
make
修改完後即可進行編譯(每次修改 configure.user 後,欲使其生效就得重新編譯) - 製作並修改 mm5.deck:
make mm5.deck
- 首先是基本模擬設定
&OPARAM ; ************* FORECAST TIME AND TIME STEP ****************** TIMAX = 5040., ; 模擬到第幾分鐘 TISTEP = 6., ; 模擬時間步長,通常為 3*DX ; ************** OUTPUT/RESTART OPTIONS *************** IFREST = .FALSE., ; 本次模擬是否為 RESTART Run IXTIMR =1800 , ; 若是,則是從第幾分鐘開始 IFSAVE = .TRUE., ; 是否儲存供 Restart 用之相關資訊 SVLAST = .FALSE., ; T: 僅存最後一筆時間的 Restart File ; F: 存成多個時間的 Restart File SAVFRQ = 720., ; 幾分鐘存成一筆 Restart File IFTAPE = 1, ; 是否儲存模式輸出 0: False 1: True TAPFRQ = 60., ; 幾分鐘輸出一次 BUFFRQ = 360., ; 幾分鐘將檔案切成一個檔案,若其小於 TAPFRQ 則此設定將被忽略 INCTAP = 1,1,1,1,1,1,1,1,1,1, ; 紀錄係數,可以讓各網域用不同的時間間隔來進行輸出,這裡的數字會乘上 TAPFRQ IFSKIP = .FALSE., ; whether to skip input files - DO NOT use this for restart CDATEST = '2001-09-15_12:00:00', ; 模式起始日期、時間 IFPRT = 0, ; sample print out: =1, a lot of print PRTFRQ = 720., ; Print frequency for sample output (in minutes) MASCHK = 99999, ; mass conservation check (KTAU or no. of time steps) IFTSOUT = .FALSE., ; output time series (default 30 points) TSLAT = 0.0,0.0,0.0,0.0,0.0, ; latitudes of time series points (S is negative) TSLON = 0.0,0.0,0.0,0.0,0.0, ; longitudes of time series points (W is negative) &END
- 接著是物理過程細節的設定,要怎麼改就看你的實驗怎麼設計了
; 以下為開放使用者自行修改的區塊 ; &LPARAM RADFRQ = 30., ; 幾分鐘計算一次大氣輻射影響 IMVDIF = 1, ; moist vertical diffusion in clouds - 0, 1 (IBLTYP=2,5 only) IVQADV = 1, ; vertical moisture advection uses log interpolation - 0, linear - 1 IVTADV = 1, ; vertical temperature advection uses 0: theta interpolation, 1: linear ITHADV = 1, ; advection of temp. uses 1: potential temperature, 0: standard ITPDIF = 1, ; diffusion using perturbation temperature - 0,1 ICOR3D = 1, ; 3D Coriolis force - 0, 1 IFUPR = 1, ; upper radiative boundary condition - 0, 1 ; ; 以下是邊界條件的設定,檔案裡面寫著不要動它 ; IBOUDY = 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, ;boundary conditions ; ; 以下的變數是進行敏感度實驗用,一般模擬中毋需更動 ; IFDRY = 0, ; 假的「乾實驗」(無潛熱作用) - 0, 1 ; 僅於 IMPHYS = 2,3,4,5,6,7 時有效(條件為 ICUPA = 1) ISSTVAR= 0, ; 海溫隨時間變動 - 1, 不隨時間變動 - 0 IMOIAV = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ; bucket soil moisture scheme. 0 - not used ; 1 - used w/o extra input, 2 - user w/ soil m input IZ0TOPT= 0, ; thermal roughness option in IBLTYP = 2,5. ; 0 - old option, 1 - Garratt, 2 - Zilitinkevich IFSNOW = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ;考慮雪覆蓋之影響- 0, 1 (略)
- 再來是各網域的設定
&NPARAM ; ************** NEST AND MOVING NEST OPTIONS *************** LEVIDN = 0,1,2,1,1,1,1,1,1,1, ; 網格編號 NUMNC = 1,1,2,1,1,1,1,1,1,1, ; 母網格編號 NESTIX = 301, 49, 31, 46, 46, 46, 46, 46, 46, 46, ; i 方向格點數 NESTJX = 271, 52, 31, 61, 61, 61, 61, 61, 61, 61, ; j 方向格點數 NESTI = 1, 10, 8, 1, 1, 1, 1, 1, 1, 1, ; i 方向起始點 NESTJ = 1, 17, 9, 1, 1, 1, 1, 1, 1, 1, ; j 方向起始點 XSTNES = 0., 0.,900., 0., 0., 0., 0., 0., 0., 0., ; 模式起始時間 XENNES =5040.,1440.,1440.,720.,720.,720.,720.,720.,720.,720.; 模式結束時間
- 這裡的起始、結束時間是指這個 domain 是在第幾分鐘才開始進行模擬。根據以上的設定,這次的模擬將會由第 0 分鐘開始(也就是 2001-09-15_12:00:00)然後模擬到第 5040 分鐘,模式每一小時會輸出一次,然後六小時的輸出會放在同一個檔案中,此外每 720 分鐘將會輸出一份 RESTART 檔(倘若將 IFREST 改為.TRUE. 的話,那就是一個 RESTART Run,會變成從第 1800 分鐘開始模擬到第 5040 分鐘)。
- 要注意這裡輸出的 RESTART 檔沒有辦法作切割,他會把所有的 RESTART 資料都塞在同一個檔案裡,如果你的檔案系統無法處理超過 2GB 的檔案,程式可能會中止。在此例中五個時次的 RESTART 檔大小大概 1.6GB,建議在開始模擬前先測試一下檔案大小,然後來推斷存檔的間隔大概要設定為多少。不然就是不要一口氣模擬完所有的時間,以免程式自己跳掉。
- 首先是基本模擬設定
- 連結模擬所需輸入之資料:
- 設定好之後,請到 MM5/Run 資料夾中,用
ln –sf
指令將經由 INTERPF 所產生,或是來自其他地方的 MMINPUT_DOMAIN#、LOWBDY_DOMAIN#、BDYOUT_DOMAIN# 連結到此,這三個檔案為必備資料! - 若使用了 IOVERW=2 的選項,則需要由 TERRAIN 程式產生的嵌套地形高度檔(TERRAIN_DOMAIN#)同樣也是要在 MM5/Run 資料夾中建立連結。
- 如果這次模擬為 RESTART Run 則會需要一個叫做 RESTART_DOMAIN# 的檔案,這個檔案是來自於先前進行模擬時 MM5 所存出來的暫存檔 SAVE_DOMAIN#,只要把他更名為 RESTART_DOMAIN# 即可。
- 若要使用地面分析資料來執行 FDDA,則檔案來自於 RAWINDFDDA 的地面分析資料:SFCFDDA_DOMAIN#。
- 如果執行測站資料同化,則檔案來自於由使用者所提供的 FDDA 4D 測站文件:MM5OBS_DOMAIN#。
- 設定好之後,請到 MM5/Run 資料夾中,用
- 開始模擬:
./mm5.deck
當一切準備就緒後,就可以開始進行模擬了,要進行模擬的話只要到 MM5/ 下輸入./mm5.deck 即可。 但是由於模擬所需的時間可能較久,若僅僅是輸入 ./mm5.deck 的話,一旦關掉終端機視窗可能就會讓工作終止,所以最好將它丟入背景來執行,方法如下:- 執行
nohup ./mm5.deck &
- 或是也可以利用 "GNU Screen" 來做這件事。首先輸入
screen
,此時將會切入 gnu screen 下,然後在這裡工作,例如直接執行./mm5.deck
接著按下 Ctrl+A 再按下 d,就會看到 detach 的字樣並且回到一般的畫面下(若要切回去則是下screen -r
,在 Screen 下要離開請打exit
。記得用完要乖乖的 exit 不然會越開越多 XD) - 或者也可以利用 PBS Torque 來將工作丟進排程,首先是編寫一個內容如下的 PBS Script(job.sh):
再從 Server 上用#PBS -N MM5_CTL1800 - 這是工作名稱 #PBS -l walltime=300:00:00 - 設定若多久後工作還沒結束則強制終止 #PBS -l nodes=cn8:ppn=1 - 這是設定採用 cn8 一顆 cpu 來模擬 cd /path/to/your/mm5 ./mm5.deck
qsub job.sh
來丟工作。 用qstat
可以查詢現在工作狀況,若有可用的 CPU 則其狀態將會顯示 R 表示執行中,不然程式將會自動把他設定為排隊中。採用這個方法的好處是可以標明每個工作的名稱,尤其是在跑多項模擬時管理上容易一點。萬一模擬開始後臨時想終止它來修改設定就不用擔心砍錯工作,用qdel JOBID
即可終止該工作。
- 執行
模擬時若輸入的檔案有問題而造成程式終止的話,則相關錯誤訊息會出現在 MM5/Run/mm5.print.out 中(例如所選用的 RESTART 檔沒有模式所需的時間)模擬開始後將會依據你的設定於 MM5/Run 輸出模式模擬資料 MMOUT_DOMAIN# 以及 SAVE_DOMAIN#。到此模擬就告一段落,可以將輸出檔拿來畫圖囉!
建議在進行一組模擬後,若確定有要把 RESTART 檔留下,則可將模擬完成的檔案(SAVE_DOMAIN#)移到同一個資料夾集中管理,並把名稱加上較易辨識的標籤,例:CTL_RESTART_DOMAIN1_3960to5040_dt360(Control Run 的 RESTART File,可用的時間是從 3960 分鐘開始,每 360 分鐘一筆這樣)在要使用時下 ln –sf 的指令連結,並將其更名為 RESTART_DOMAIN1 即可。
如此一來可以節省空間又易於管理檔案。當然檔案命名的規則沒有一定,不過盡量以自己能夠簡單好辨識為主,以免東西越來越多時發生不知道這個 SAVE_DOMAIN#是不是所要的時間的問題。而且這個檔案在下次模擬時是會被新的 SAVE_DOMAIN# 給覆蓋掉的。
同樣的,若進行的模擬可以共用同一組輸入資料,也是建議將那些輸入資料放到一個地方然後用 ln –sf
來節省硬碟空間。