WRF模擬結果的轉接
Table of contents
背景
- CAMx可以使用wrf、mm5、rams等多種氣象動力模式的結果。
- 此處介紹WRF結果檔案的轉接
- 後2者皆已自官網下架,mm5camx在backup目錄下還有一個mm5camx_v5.1的備份,官網目前只有wrfcamx版本。
- wrfcamx程式與mm5camx有很高的相似性,差異最大的部分就是wrf_out是nc檔,需要連結netCDF程式庫,和其他CAMx前處理程式的執行方式也很相似,是以一個C shell腳本控制輸入內容,將wrf_out留在腳本的最後段。
- wrfcamx和CMAQ系統的mcip異同條列如下
比較CAMx和CMAQ系統的氣象前處理程式
項目 | CAMx | CMAQ | 說明 |
---|---|---|---|
主程式版本 | 6+ | 5+ | |
前處理程式 | wrfcamx | mcip | |
目前最新版本 | 4.8/5.2 | 5 | |
垂直層合併 | 可 | 不可 | CMAQ垂直網格設定需與WRF完全相同 |
降雨量 | 不累積 | 累積 | 批次時間如不相符,需重新計算累積雨量 |
水平邊界內縮 | >1層 | >1層 | |
水平網格數 | 3N+2 | 不限 | CAMx上下層格數要求較為嚴格。N為上層網格在下層之格數 |
自粗網格內插細網格功能 | 有 | 無 | mcip必須每層都有wrfout模擬結果 |
時間框架 | LST | UTC | 要注意時差問題 |
起始時間 | 夜間即可 | 00Z | CAMx需多準備一天 |
wrfout跨批次整合
- 著手準備執行網格模式,最先遇到的問題就是網格範圍與解析度的定義。因為牽動到氣象模式的定義,因此需要優先執行,在嘗試錯誤過程中避免大幅度的修正。
- 由於CAMx及wrfcamx並沒有累積之氣象變數,因此不需要考慮跨批次的問題,可以順利進行全月wrfout的整合,只要在正確處理跨批次重複的日期(後批次覆蓋前一批次結果)。
- 跨批次重複日期,以下一批次之起始日優先使用。
- 以下列批次檔、在YYYY/wrfout目錄下連結同月份run1~run20(如果存在)等各批次結果:
kuang@114-32-164-198 /Users/WRF4.1
$ more WRFv4.1.3/ln_wrfout.cs
DOM=`grep max_dom ../namelist.input.loop |awkk 3|cut -d',' -f1`
for i in {1..20};do
if [ -e ../run$i ];then
d=1
while [ $d -le $DOM ];do
for f in $(ls ../run$i/wrfout_d0$d*|tail -n5|head -n4);do
if [ -e $f ]; then ln -f $f . ;fi
done
d=$(( $d + 1 ))
done
fi
done
程式下載編譯
- 因應CAMx輸入檔格式的進版,wrfcamx版本也有所對應,如下表所示:
wrfcamx版本與下載點
CAMx版本 | 重要改變 | wrfcam版本及下載點 |
---|---|---|
v6.3-v7+ | 改成統一的uamiv格式 | wrfcamx_v4.8.1.14Dec20.tgz |
v7+ | nc格式 | wrfcamx_v5.2.10Jan22.tgz |
編譯
- 使用Makefile
- 3種編譯器可供選擇
FC = pgf90
FLGS = -O2 -Mnoframe -Mextend -Bstatic_pgi
###FC = ifort
###FLGS = -O2 -align dcommons -extend_source -ipo -static_intel
###FC = gfortran
###FLGS = -O2 -fno-align-commons -frecord-marker=4 -ffixed-line-length-0
- 連結netCDF程式庫與內含文件
LIBS = -L/usr/local/netcdf/lib
INC = -I/usr/local/netcdf/include
執行腳本
- 程式本身並沒有設定平行化或多工處理的方式。
- 作業方式為按月分目錄處理,不同月份不會重疊,可以同步進行。
執行選項
- (都包括在標準輸入、無額外環境變數)
輸入變數內容
變數 | 內容 | 範例 | 說明 |
---|---|---|---|
Run note | Sample WRFCAMx run | ||
CAMx nested grid | 是否為次網格 | F | 自從4.8+以後,wrfcamx可以從粗網格進行內插,不必每層都執行WRF。CAMx本身也可以只提供粗網格氣象不必每一層都提供,會在程式內自行內插。這使得CAMx執行多個細網格分析,有其方便性。 |
Diagnostic fields | 產出診斷場 | T | |
Seaice adjustment | 海冰調整 | F | 也可不必指定 |
KV Method | KV方法 | CMAQ | 對夜間惰性物質的垂直擴散模擬結果有很大的影響,選項有: CMAQ、YSU(不能用USGS、NLCD、IGBP等3種土地使用)、MYJ (Mellor-Yamada-Janjic,WRF必須使用TKE之行星邊界層選項) |
Minimum Kv | 最低Kv值 | 0.1 | 單位為m2/s |
Projection | 投影方式 | LAMBERT | 與CAMx.in一致 |
Subgrid Convection | 次網格對流 | DIAG | |
Subgrid Stratiform | 次網格成層 | T | |
Start/end date | 起迄日期時間 | $START $FIN | 包含CAMx.in範圍 |
WRF output freq | 輸出頻率(分鐘) | 60 | |
Grid time zone | 時區(分日線前後) | -8 | 與CAMx.in一致 |
CAMx grid size | 網格間距 | $GridS | 與CAMx.in一致 |
CAMx Grid spacing | 間距Km | $DxDy | |
CAMx orig & params | 原點Km | $OrigP | |
Layer mapping | 垂直層數對照 | 1,2,3,4,5,6,7,8,9, 11,13,16,19,27,40 | 可合倂 |
CAMx LU file | 土地使用結果檔名 | $OUTNM.lu.nc | |
CAMx 3D file | 3D變數結果檔名 | $OUTNM.3d.nc | |
CAMx 2D file | 2D變數結果檔名 | $OUTNM.2d.nc | |
CAMx Kv file | Kv結果檔名 | $OUTNM.kv.nc | |
Input snow age | 是否輸入雪齡 | ||
Initial snow age | 初始雪齡 | 36 | |
Output snow age | 輸出雪齡 | ||
WRF filename | wrfout路徑檔名 | $PATH /wrfout_d0$DOMYR-10-31_00:00:00 | 檔案日期時間不可缺少或重疊 |
新舊版本差異
- 因同時存在新版(wrfcamx5.2)與舊版(wrfcamx4.8)2個版本,二者輸入變數的差異比較如下:
項次 | 項目 | 4.8 | 5.2 | 說明 |
---|---|---|---|---|
1 | 結果檔案格式 | uamiv | nc | 雖然nc檔也能符合ioapi協定,然而與mcip結果還是有很大差異,不能直接用在CMAQ |
2 | Run note | 無 | 有 | 以此辨識新舊版本 |
3 | 是否為次網格 | 無 | 有 | 如只提供粗網格氣象CAMx內會進行內插 |
4 | 是否開啟海冰調整 | 需指定 | 不需指定 | 新版如不進行海冰調整,其後有關雪齡的變數留空白即可。 |
5 | 雲量檔 | 獨立 | 併入3d檔 | 新版不必再指定cr檔名 |
腳本內容
- 讀取所在目錄($PWD)中的年月訊息
- 用date指令來計算起迄日期
- 使用環境變數陣列取代if…set一一指定
- WRFOUT為一漸增的陣列
- 每層網格執行
- 因所有環境變數都轉成std input讀入程式內,其他IO檔案也不會重疊,可以將程式放在背景執行,以節省時間。
#kuang@master /nas1/WRF4.1/WRFv4.3
#$ cat wrfcamx.job
#!/bin/csh
set YRMO = `echo $PWD|cut -d'/' -f6|cut -c3-`
set PATH = $PWD
set OUT = $PWD
#yymmddhh(UTC+8)
set START = `date -d "${YRMO}01 -1 day" +"%y%m%d"`20
set FIN = `date -d "${YRMO}01 +1 month" +"%y%m%d"`23
set GridS = ("59,59,15" "65,65,15" "47,65,15" "83,137,15" "83,164,15")
set DxDy = ("81.,81." "27.,27." "9.,9." "3.,3." "1.,1.")
set OrigP = ("-2389.5, -2389.5, 120.99, 23.61, 10., 40." \
"-877.5, -877.5, 120.99, 23.61, 10., 40." \
"-211.500, -292.500, 120.99, 23.61, 10., 40." \
"-124.500, -205.500, 120.99, 23.61, 10., 40." \
"-95.500, -176.500, 120.99, 23.61, 10., 40.")
foreach DOM ( 1 2 3 4 )
set OUTNM = $OUT"/"${YRMO}'d'$DOM
set i = 1
set WRFOUT =
foreach fl ( $PWD/wrfout_d0${DOM}* )
set WRFOUT = ( $WRFOUT $fl )
@ i++
end
# max num=47
while ( $i < 48 )
set WRFOUT = ( $WRFOUT $fl )
@ i++
end
#cat << ieof
/cluster/src/CAMx/wrfcamx/wrfcamx_v4.8.1/src/wrfcamx << ieof &
Diagnostic fields |T
Seaice adjustment |F
KV Method |CMAQ
Minimum Kv |0.1
Projection |LAMBERT
Subgrid Convection |DIAG
Subgrid Stratiform |T
Start/end date |$START $FIN
WRF output freq |60
Grid time zone |-8
CAMx grid size |$GridS[$DOM]
CAMx Grid spacing |$DxDy[$DOM]
CAMx orig & params |$OrigP[$DOM]
Layer mapping |1,2,3,4,5,6,7,8,9,11,13,16,19,27,40
CAMx LU file |$OUTNM.lu
CAMx 3D file |$OUTNM.3d
CAMx 2D file |$OUTNM.2d
CAMx Kv file |$OUTNM.kv
CAMx Cld/rain file |$OUTNM.cr
Input snow age |
Initial snow age |36
Output snow age |
WRF filename |${WRFOUT[1]}
WRF filename |${WRFOUT[2]}
WRF filename |${WRFOUT[3]}
...
WRF filename |${WRFOUT[47]}
ieof
end
執行成果檢查
Reference
- akuox(2009), linux date 指令用法@ 老人最愛碎碎念:: 隨意窩Xuite日誌, Xuite, 2009-04-06
- NeutronStar(2013), C Shell Array Declaration Syntax, () vs {}, Unix & Linux, asked Jun 27, 2013 at 20:02