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)
- 使用Ramboll公司提供的ncf2ioapi,詳全球模式結果檔案的轉換(nc2m3),轉換結果為ioapi之nc檔(
$jj.m3.nc
、不必保留)。 - 主要進行nc檔案的格式轉換,座標、網格、化學物質種類等內容並無差異。
#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)
- 主要轉換項目
- 座標與網格系統成為直角座標系統
- 化學物質之對照
- 單位轉換
- 逐月執行之批次檔如下。處理結果為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模式成分對照如下表:
整併與轉換結果
$ 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 &
- cbin.py引用PseudoNetCDF的uamiv模組存取檔案
#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.