WRF模擬結果的轉接

 

背景

  • CAMx可以使用wrf、mm5、rams等多種氣象動力模式的結果。此處介紹WRF結果檔案的轉接(後2者皆已自官網下架,mm5camx在backup目錄下還有一個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模擬結果

*: [2022-08-30-fcst.cs#mcip之執行]

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][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][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

執行成果檢查

  • 不論是[uamiv][uamiv]格式或者是nc格式,都可以用VERDI來檢視

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