Link Search Menu Expand Document

CAM-chem模式結果之讀取及應用

Table of contents

下載

逐日、全球模擬結果檔案之下載

  • CAM-chem有段時間提供全年、全球範圍的模擬結果檔案下載。
    • 網址為:https://www.acom.ucar.edu/cam-chem/DATA/${Y}/fmerra.2.1003.FCSD.f09.qfedcmip.56L.001.cam.h1.${YMD}-${tail}.nc
    • (當時)可使用批次檔下載全球數據,再以ncks進行切割。
kuang@master /nas1/CAM-chem
$ cat ./2010/gg2010.cs
BEG=2009-12-31
ENDD=2011-01-01
tot_days=367
for ((j=0;j<=$tot_days;j+=1));do
  if [ $HOSTNAME == 'node03' ] ||  [ $HOSTNAME == 'master' ];then
    YMD=$(date -ud "${BEG}+${j}days" +%Y-%m-%d)
    Y=$(date -ud "${BEG}+${j}days" +%Y)
  elif [ $HOSTNAME == 'Mac-mini.local' ] ||  [ $HOSTNAME == '114-32-164-198.HINET-IP.hinet.net' ];then
    YMD=$(date -v+${j}d -j -f "%Y-%m-%d" "${BEG}" +%Y-%m-%d)
    Y=$(date -v+${j}d -j -f "%Y%j"  "${BEG}" +%Y)
  fi
  echo 'YMD= '$YMD
  path=https://www.acom.ucar.edu/cam-chem/DATA/${Y}/
  tail='00000'
  test $Y -eq '2017' && tail='21600'
  file=fmerra.2.1003.FCSD.f09.qfedcmip.56L.001.cam.h1.${YMD}-${tail}.nc
  wget -q ${path}${file}
  if [ -e $file ];then
    ncks -O -d lon,64,128 -d lat,94,145 ${file} tmp
    mv tmp ${file}
  fi
  if [ $YMD == $ENDD ];then break;fi
done

下載政策的改變

  • 2021年後因管理政策改變(可能受限於頻寬負荷),鼓勵使用者直接上機檢視模擬結果,甚至鼓勵在本地工作站自行模擬。
    • 因此再沒有提供全年、全球檔案的直接下載。
    • 切割與部分日期的下載界面,則仍舊繼續服務。
  • 界面與前述MOZART一樣,下載網址略有不同,提供2001/1 ~ 半年前的模擬(再分析)結果。

下載檔案管理

  • 時間
    • 與Mozart一樣,CAM模式模擬結果為每6小時一筆,一日的起始時間為06Z,最後一筆為00Z。
    • 下載時以10天為原則,每檔案約在3.1~3.4G範圍,尚能在傳輸的負荷之內。
    • 使用mozart模擬結果之下載方案中之5個檔案方案,讓檔案的起迄完全不重疊,以利ncrcat銜接。
  • 空間
    • lev = 56 ; lat = 52 ; lon = 65 ;
    • ncks -d lat,-2.0,47.0 -d lon,80.0,160.0(按經緯度值)
    • ncks -O -d lon,64,128 -d lat,94,145 ${file} tmp(按經緯度index、頭尾都算)
  • 其餘等候ucar網站寄來email與信件內網址之處理、更名等過程,詳見mozart模擬結果之下載

檔案處理

檔案管理

  • 下載檔案名稱不含有時間資訊,需自nc檔內之歷史訊息(如下)中,將其讀出
  • "Thu Aug 6 20:02:09 2020: /usr/local/nco-4.7.9/bin/ncks -d lat,-2.0,47.0 -d lon,80.0,160.0 /data14a/CAM-Chem/2010/fmerra .2.1003.FCSD.f09.qfedcmip.56L.001.cam.h1.2010-01-31-00000.nc /net/web3/webt/cam-chem/temp-test/20200806200209164866-20100131.nc" ;
kuang@master /nas1/CAM-chem
$ cat mvv.cs
for nc in $(ls cam*nc);do i=$(ncdump -h $nc|grep ncks|cut -d/ -f10|cut -d . -f11|cut -c -10);mv $nc $i.nc;done
  • 將下載檔案放在指定月份之目錄,方便後續逐月處理。
kuang@master /nas1/CAM-chem
$ cat ln_yy.cs

for y in 200{0..6};do for m in {01..12};do mkdir -p $y/$y$m;done;done
for y in 200{0..6};do for m in {01..12};do cd $y/$y$m;ln -s ../${y}-${m}-[12]1.nc .;cd ../..;done;done
for y in 200{0..6};do for m in {01..12};do cd $y/$y$m;yy=$(date -d "${y}-${m}-01 -1 days" +%Y);mm=$(date -d "${y}-${m}-01 -1 days" +%m);dd=$(date -d "${y}-${m}-01 -1 days" +%d);ln -sf ../../$yy/${yy}-${mm}-${dd}.nc .;cd ../..;done;done

下載檔案轉成ioapi之nc檔(nc2m3)

#kuang@master /nas1/CAM-chem
#$ cat nc2m3.cs
export EXECUTION_ID=CAM-chem2m3.job
export PROMPTFLAG=N
export IOAPI_ISPH=20
EXE=/cluster/src/CAMx/mozart2camx_v3.2.1/ncf2ioapi_waccm/NCF2IOAPI
for i in $(ls $1/*/????.nc) ;do
  jj=${i/.nc/}
  export INFILE=$i
  export OUTFILE3D=$jj.m3.nc
  echo $i
  $EXE|tail -n5
done

ioapi檔案之轉檔(mz2camx)

  • 主要轉換項目
    1. 座標與網格系統成為直角座標系統
    2. 化學物質之對照
    3. 單位轉換
  • 逐月執行之批次檔如下。處理結果為uamiv格式檔案
#kuang@master /nas1/CAM-chem
#$ cat do_job.csh
set YR = $argv[1]
foreach mm (`seq 1 12`)
    set mon=`printf '%02d' $mm`
    cd /nas1/CAM-chem/20$YR/20$YR$mon
    source ../../mz2camxN3.job $YR$mon >& $YR$mon.txt &
end
cd /nas1/CAM-chem
  • mz2camxN3.job之內容重點如下,注意
    • 化學物質的對照版本(CB6r4_CF__WACCM)
    • 座標及網格系統參照檔:1709d4(uamiv格式)
    • 檔案管理
      • 輸入檔即為前述m3.nc檔
      • 因逐6小時處理,結果檔案會很多,放在output目錄下
#kuang@master /nas1/CAM-chem
#$ cat  mz2camxN3.job
...
set EXE = /nas1/camxruns/src/mozart2camx_v3.2.1/src/mozart2camx_CB6r4_CF__WACCM
...
set MET = /nas1/camxruns/2017/met/mm09/1709d4
...
setenv OUTFILEIC ./output/$DATE$t"d4.ic"
foreach INFILE ($YYMM.m3.nc)
...

CAM-chem的成分

CAM模式與CMAQ模式成分對照如下表:

整併與轉換結果

  • 利用shrink進行uamiv格式檔案的污染物質壓縮,以產生PM2.5、PM10及VOC項目。
  • 逐日結果合併成為逐月檔
  • 進行月均值之計算(tmavrg)
$ cat ic2grd04.cs
for m in {01..12};do 
  cd *$m/output
  for i in $(ls *ic);do 
    ln -s $i $i.avrg.grd04
    shk $i.avrg.grd04
  done
  cbin_all "*.S.grd04" $y${m}IC.S.grd04 >&/dev/null
  tmavrg  $y${m}IC.S.grd04 >&/dev/null
  cd ../../
done

逐月檔案整併成全年

  • 因每月檔案並不小,使用cbin_all策略雖然簡單卻不是很有效益,改採python進行。
  • 執行批次檔腳本如下
kuang@master /nas1/CAM-chem
$ cat cb.cs
for y in {07..13};do cd 20$y;for m in {01..12};do cd *$m/output;python ../../../cbin.py $y${m};cd ../../;done;cd ..;done &
#kuang@master /nas1/CAM-chem
#$ cat cbin.py
import sys,os,datetime
from PseudoNetCDF.camxfiles.Memmaps import uamiv

fname=sys.argv[1]+'IC.S.grd04L'
nc=uamiv(fname,'r+')
V=[list(filter(lambda x:nc.variables[x].ndim==j, [i for i in nc.variables])) for j in [1,2,3,4]]
nt,nlay,nrow,ncol=nc.variables[V[3][0]].shape
delH=6
nc.TSTEP=delH*10000
nn=24/delH
yr=2000+int(sys.argv[1][0:2])
mn=int(sys.argv[1][2:4])
date0=datetime.datetime(yr,1,1)
bdate=datetime.datetime(yr,mn,1)
nc.STIME=0
nc.SDATE=yr*1000+(bdate-date0).days+1
for v in ['PM10','PM25']:
  nc.variables[v].units='ug/m**3'
for t in range(nt):
  nc.variables['TFLAG'][t,:,1]=[ t%nn*nc.TSTEP for i in range(len(V[3]))] #utc
  tdate=bdate+datetime.timedelta(days=t*delH/24)
  if tdate.month != mn:continue
  fn_t=tdate.strftime("%Y%m%d%H")+'d4.ic.S.grd04'
  nc_t=uamiv(fn_t,'r')
  for v in V[3]:
    nc.variables[v][t,0,:,:]=nc_t.variables[v][0,0,:,:]
  nc_t.close
nc.close

Reference

  • WEG Administrator, Welcome to the CAM-chem Wiki,wiki.ucar,13 Jun 2021
  • wiki, MOZART (model), wikipedia,last edited on 6 May 2021
  • acom.ucar, Mozart Download, ucar.edu, 2013-08-30.