Link Search Menu Expand Document

WACCM模式結果之下載、讀取及應用

Table of contents

背景

WACCM的介紹

  • 官網敘述
    • 大氣社區氣候模型(Whole Atmosphere Community Climate Model, WACCM) 是一個NCAR社群綜合數值模型,涵蓋從地球表面到熱氣層的高度範圍。
    • WACCM 的開發是一項部門間合作,包括
      • HAO 高層大氣建模、
      • ACOM 中層大氣建模和
      • CGD 對流層建模之某些部分,
      • 使用 NCAR 社區地球系統模型 (NCAR Community Earth System Model CESM) 作為通用數值模型框架。
    • Marsh等人(2013)文中有對最新版本WACCM完整的描述。
    • WACCM-X 將 WACCM 擴展到上層熱層,並包括對電離層重要程序之模擬。
  • 目前以NASA/GMAO GEOS-5氣象預報進行實時全球空氣品質預報。
  • NCAR ACOM其他產品

WACCM與ECMWF空品預報的比較

項目ECMWF(CAMS)NCAR WACCM說明選擇
立場官方作業單位。服務會員國學術單位前者會較謹慎些 
預報時間5天10天  
模式IFS叢集預報學界整合模式  
delT3Hr6Hr  
dx,dy0.4度X0.4度1.25度X0.94度  

WACCM預報數據之下載

策略

  • 與載分析數據一樣,預報數據也是全球數據都在同一個檔案內,可以:
    1. 使用ACOM提供的切割介面,指定所要的範圍、日期、以及接收的電郵,按照系統給定的網址下載檔案。然此法不能應用在自動化作業系統。
    2. 下載全球檔案,再行切割。此法會浪費頻寬及下載時間。一天的檔案(~8G)需要約20~30min,10天需4個小時(node03負責下載)。
    3. 倘若一天執行一次,尚能以不同機器同步運作第2方案。

切割範圍之決定

  • WACCM或是MOZART模式輸出檔案都是經緯度系統,要裁切出足夠的範圍、同時又能有效降低檔案大小,會需要反覆試誤來達到最佳條件。
  • 可以先在ipython內以bisect模組挑出足以涵蓋CCTM模式之水平範圍
  • 執行mozart2camx
    • 如果範圍不足,程式會跳停。
    • 有超過換日線的部分,雖然mozart2camx會顯示出-179等類的低值,但基本上程式還是會解析其為東邊界線,直接調整lon指標的上限值即可。
  • 結果:$ncks -O -d lon,44,146 -d lat,87,150 $nc $YMD

批次檔腳本

#kuang@master /nas1/WACCM
#$ cat dl_tdy.cs
wget=/usr/bin/wget
ncks=/usr/bin/ncks
root=https://www.acom.ucar.edu/waccm/DATA/
fnroot=f.e22.beta02.FWSD.f09_f09_mg17.cesm2_2_beta02.forecast.002.cam.h3.
fntail='-00000.nc'

cd /nas1/WACCM
for i in {-1..9};do
  YMD=$(date -d "today +${i}days" +%Y-%m-%d)
  nc=${fnroot}${YMD}${fntail}
  $wget -q ${root}$nc
  test ! -e $nc && continue
  $ncks -O -d lon,44,146 -d lat,87,150 $nc $YMD
  test -e $YMD && rm -f $nc
done

自動執行排程

#kuang@node03 ~
#$ crontab -l|grep dl
10 20 * * * /nas1/WACCM/dl_tdy.cs

WACCM預報數據之處理

nc檔案格式之轉換

  • 執行NCF2IOAPI,即為nc2m3.cs片段(如下)
    • 因執行檔為Fortran,因此如在不同工作站執行,需重新編譯,以下為master、node01~03版本。
export EXECUTION_ID=CAM-chem2m3.job
export PROMPTFLAG=N
export IOAPI_ISPH=20
export EXE=/cluster/src/CAMx/mozart2camx_v3.2.1/ncf2ioapi_waccm/NCF2IOAPI
for i in {-3..7};do
  YMD=$(date -d "today +${i}days" +%Y-%m-%d)
  export INFILE=$YMD
  export OUTFILE3D=${YMD}.m3.nc
  $EXE
  test -e ${YMD}.m3.nc && rm -f $YMD
done

網格、污染物系統轉換的策略考量

氣象檔案(模版)之準備

CAMx 方案

  • 此處仍以wrfcamx4.6版執行轉換
  • 因僅為模版(只執行一次),隨機選取任意日期進行轉換。
  • 座標參數取自d01 mcip之GRIDDESC結果。
kuang@master /nas1/WACCM/d01_met
$ cat wrfcamx.job
#!/bin/csh

set PATH = "."
set OUT  = "."

if (! -d $OUT) mkdir $OUT

#yymmddhh(UTC+8)
set START = "22112408"
set FIN   = "22112507"

foreach DOM ( 1 )
if ( $DOM == 1 ) then
   set GridS = "218,126,24"
   set DxDy  = "45.,45."
   set OrigP = "-4905.0, -2835.0, 120.00, 25.00, 10., 40."
endif
set OUTNM = $OUT"/2211d"$DOM
set DOMYR = $DOM"_2022"

/nas1/WRF3.7/wrfcamx_v4.6/src/wrfcamx << ieof
Diagnostic Fields  |T
KV Method          |OB70
Minimum Kv         |0.1
Project            |LAMBERT
Subgrid convecton  |DIAG
Subgrid stratiform |T
Start/end date     |$START $FIN
WRF output freq    |60
Grid time zone     |-8
CAMx grid size     |$GridS
CAMx Grid spacing  |$DxDy
CAMx orig & params |$OrigP
Layer mapping      |1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24
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
Make pre-6.3 snow? |T
v6.3+ In snow age  |
v6.3+ Init snow age|
v6.3+ Out snow age |
WRF filename       |$PATH/wrfout_d0$DOMYR-11-24_00:00:00
ieof

end

mcip 方案

  • MOZART2CAMx的cmaq選項需要將mcip結果檔案設定成環境變數,而不是std input
  • 需要2格檔案,分別是METCRO3D與METCRO2D
  • 同樣地,程式並不是真的讀取變數,而是讀取與網格系統有關的氣象項目。

CAMx方案之執行腳本

mz2camx.job

  • 注意事項
    • 執行檔有2個工作站版本,要注意選取。
    • cshell的變數置換方式與bash略有不同(bash:YMD=${YMD1//-}、csh:YMD = $YMD1:as/-//)
    • 全球檔案如未經切割,會發生問題
      • mz2camx不允許含有南北極,需先去除
      • 處理速度會很慢(全球1個小時的數據約需2個小時處理、經ncks裁減後可降為20分鐘)
kuang@master /nas1/WACCM
$ cat mz2camx.job
#!/bin/csh -f
setenv PROMPTFLAG N
setenv IOAPI_ISPH 20
setenv LD_LIBRARY_PATH /opt/netcdf4/lib:/opt/hdf5/lib:/cluster/intel/compilers_and_libraries_2016.1.150/linux/compiler/lib/intel64_lin
#set EXE = /nas1/camxruns/src/mozart2camx_v3.2.1/src/mozart2camx_CB6r4_CF__WACCM #devp version
set EXE = /cluster/src/CAMx/mozart2camx_v3.2.1/src/mozart2camx_CB6r4_CF__WACCM

set YMD1 = `echo $1|cut -c1-10`
set t    = `echo $1|cut -c11-12`
set YMD = $YMD1:as/-//
set MET = /nas1/WACCM/d01_met/2211d1

# DEFINE OUTPUT FILE NAMES
setenv EXECUTION_ID mz2camx.job
echo $1
set NINFILE = 1
setenv OUTFILEIC ${YMD}${t}".ic"
setenv OUTFILEBC ${YMD}${t}".bc"
setenv INFILE ../../$YMD1
setenv INFILE1 ../../$YMD1
echo $OUTFILEIC

$EXE << IEOF
CAMx5,CAMx6,CMAQ   |CAMx 6
ProcessDateYYYYMMDD|$YMD
Output BC file?    |.true.
Output IC file?    |.true.
If IC, starting hr |$t
Output TC file?    |.false.
Max num MZRT files |$NINFILE
CAMx 3D met file   |$MET.3d
CAMx 2D met file   |$MET.2d
IEOF

cmaq.job

kuang@master /nas1/WACCM
$ cat cmaq.job
#!/bin/csh -f
setenv PROMPTFLAG N
setenv IOAPI_ISPH 20
setenv LD_LIBRARY_PATH /opt/netcdf4/lib:/opt/hdf5/lib:/cluster/intel/compilers_and_libraries_2016.1.150/linux/compiler/lib/intel64_lin
set EXE = /nas1/camxruns/src/mozart2camx_v3.2.1/src/mozart2camx_CB6r4_CF__WACCM #devp version
set EXE = /cluster/src/CAMx/mozart2camx_v3.2.1/src/mozart2camx_CB6r4_CF__WACCM

set YMD1 = `echo $1|cut -c1-10`
set t    = `echo $1|cut -c11-12`
set YMD = $YMD1:as/-//
set MET = /nas2/cmaqruns/2022fcst/grid45/mcip/METCRO
setenv INFILEMET3D ${MET}3D.nc
setenv INFILEMET2D ${MET}2D.nc
# DEFINE OUTPUT FILE NAMES
setenv EXECUTION_ID mz2camx.job
setenv OUTFILEBC ${YMD}${t}".bc"
set NINFILE = 1

setenv OUTFILEIC ${YMD}${t}".ic"
setenv INFILE today_mz.m3.nc
setenv INFILE1 today_mz.m3.nc
echo $OUTFILEIC $t $YMD
set BCFLAG = .false.
if ( $t == "00" ) then
  set BCFLAG = .true.
endif

$EXE << IEOF
CAMx5,CAMx6,CMAQ   |CMAQ
ProcessDateYYYYMMDD|$YMD
Output BC file?    |$BCFLAG
Output IC file?    |.true.
If IC, starting hr |$t
Output TC file?    |.false.
Max num MZRT files |$NINFILE
IEOF

camx2ioapi

  • 這支程式較為舊版,2016迄今尚未更新。然經過測試,轉檔結果進入CCTM執行並無問題。
  • job檔較單純,併入前述mz2camx.job之後執行
  • 注意事項
    1. Sigma Levels可以由WRF之namelist.input檔案(NLAYS+1)、抑或由一個標準ICON檔案的全域屬性(NLAYS)中讀取。
    2. 不同工作站執行檔與程式庫路徑各有不同,要注意設定。
    3. 產生之ICON結果需真正進行CCTM以測試其內容與格式完全正確。
setenv IOAPI_OUT ICON
rm -f $IOAPI_OUT

$EXE << EOF
Input CAMx filename|OUTFILEIC
Data Type          |AVRG
Sigma Levels       |0.995,0.990,0.980,0.960,0.930,0.910,0.890,0.850,0.816,0.783,0.751,0.693,0.637,0.537,0.449,0.372,0.304,0.245,0.194,0.131,0.082,0.046,0.019,0.000,
EOF

BCON之產生

  • 策略上
  • 此處無法使用run_bcon.csh(bcon.exe)將ICON之外圍切割出邊界濃度,因為BCON的實質位置還較ICON大一圈。
  • fil_rean.py有類似的功能,可以從此點開始(待發展)。

CAMx方案之自動執行腳本(dl_tdy.cs)

...
  for it in {0..3};do
    t=${ts[$it]}
    s=${st[$it]}
    mkdir -p ${YMD0}/$t
    cd ${YMD0}/$t
    if [ $it -eq 00 ];then
      ln -sf ../../$YMD today_mz.m3.nc
    else
      $ncks -O -d TSTEP,$it ../../$YMD today_mz.m3.nc
      $ncatted -a STIME,global,o,i,$s today_mz.m3.nc
    fi
    ~/bin/sub csh ../../mz2camx.job $YMD$t >& out
    cd ../../
  done
...

直接轉成cmaq方案之執行腳本

mz2cmaq.job

  • 此處同樣顧及Fortran的執行效率,需要按照bc/ic,區分成各日期、各個小時分別進行轉檔。
  • 策略上
    • BCON:每日產生一個BCON(4個timeframe)即可,不需要拆成4筆BCON檔案->工作目錄設定在日期/00。每批次最後一小時需要延長,可以待所有檔案都轉檔完成、經ncrcat連成11天的大檔案後再延長。
    • ICON:
      • 每批次產生一個ICON已經足夠執行CCTM。
      • 逐6小時轉成ICON檔案,可以用本地的earth套件將WACCM數據予以展現。工作目錄設定在日期/06、12、18等3個目錄。這項工作應該與$fcst/grid45/cctm.ic相同。(待發展)
  • 注意事項
    1. BCON一定是從0時開始,不會隨著初始時間而變動。(因此在00目錄下執行)
    2. ICON可以接受非0的STIME,因此可以將逐日檔案按小時予以切割(修改STIME值)、平行計算,以爭取時效。
cat mz2cmaq.job

cmaq方案之dl_tdy.cs

  • 與前述CAMx方案差異
    • 4個timeframe差異處理
      • 00:執行全日之轉檔(BCON and ICON)
      • 06~18:只執行該小時內容之轉檔(ICON only)
...
  for it in {0..3};do
    t=${ts[$it]}
    s=${st[$it]}
    mkdir -p ${YMD0}/$t
    cd ${YMD0}/$t
    if [ $it -eq 00 ];then
      ln -sf ../../$YMD today_mz.m3.nc
    else
      $ncks -O -d TSTEP,$it ../../$YMD today_mz.m3.nc
      $ncatted -a STIME,global,o,i,$s today_mz.m3.nc
    fi
    ~/bin/sub csh ../../mz2cmaq.job $YMD$t >& out
    cd ../../
  done
...