Link Search Menu Expand Document

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系統的氣象前處理程式

項目CAMxCMAQ說明
主程式版本6+5+ 
前處理程式wrfcamxmcip 
目前最新版本4.8/5.25 
垂直層合併不可CMAQ垂直網格設定需與WRF完全相同
降雨量不累積累積批次時間如不相符,需重新計算累積雨量
水平邊界內縮>1層>1層 
水平網格數3N+2不限CAMx上下層格數要求較為嚴格。N為上層網格在下層之格數
自粗網格內插細網格功能mcip必須每層都有wrfout模擬結果
時間框架LSTUTC要注意時差問題
起始時間夜間即可00ZCAMx需多準備一天

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 MethodKV方法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 file3D變數結果檔名$OUTNM.3d.nc 
CAMx 2D file2D變數結果檔名$OUTNM.2d.nc 
CAMx Kv fileKv結果檔名$OUTNM.kv.nc 
Input snow age是否輸入雪齡  
Initial snow age初始雪齡36 
Output snow age輸出雪齡  
WRF filenamewrfout路徑檔名$PATH /wrfout_d0$DOMYR-10-31_00:00:00檔案日期時間不可缺少或重疊

新舊版本差異

  • 因同時存在新版(wrfcamx5.2)與舊版(wrfcamx4.8)2個版本,二者輸入變數的差異比較如下:
項次項目4.85.2說明
1結果檔案格式uamivnc雖然nc檔也能符合ioapi協定,然而與mcip結果還是有很大差異,不能直接用在CMAQ
2Run 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格式或者是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