Link Search Menu Expand Document

初始時段濃度模擬結果之均勻化

Table of contents

背景

  • 在每日(或更小時距)的模擬作業結果中,初始時段的結果是一個尷尬的課題。
    1. 更新起始濃度有其必要性
    2. 新模擬結果與上一次舊的模擬結果之間一定存在有落差,導致在顯示時發生明顯的突兀變化
  • 解決方案
    1. 將部分模擬結果納入起始濃度,以降低突變程度。(起始濃度的客觀性議題)
    2. 縮短作業時距。(要看電腦的速度。ECMWF的空品預報時距為12小時一次)
    3. 均勻化模擬結果,以使顯示流暢一些。(濃度與流場會出現落差)
  • 均勻化作業插入點
    1. 風場進行均勻化(會對系統的守恒造成問題,似應加入舊模擬結果作為FDDA依據)
    2. ACONC及APMDIAG進行均勻化,join_nc.py版本,說明如下(會有儲存的問題,需備份大量數據,更動不必要的項目,非最後使用版本)
    3. 只修改繪圖的json檔。因目前earth套件顯示時距為3小時。僅需修改cmaq_json3.py將00及03等2筆結果進行修改即可,在寫入前進行均勻化,無需備份。(最後版本)

join_nc.py版本

程式說明

  • 類似程式應用在cpuff模式預報系統中(nt=24)
for v in V[3]:
  for t in range(nt):
    var0=nc0[v][t,:,:,:]*(nt-t)/nt
    var1=nc[v][t,:,:,:]*t/nt
    nc[v][t,:,:,:]=var0+var1

fcst.cs中插入作業

  • (deprecated)
path=$fcst/grid$ii/cctm.fcst/daily
for NAM in CONC PMDIAG;do
  id=0
  nc=$path/CCTM_A${NAM}_v532_intel_${DOM[$i]}_${dates[$id]}.nc
  $fcst/join_nc.py $nc
  id=1
  nc=$path/CCTM_A${NAM}_v532_intel_${DOM[$i]}_${dates[$id]}.nc
  /usr/bin/ncks -O -d TSTEP,0,5 $nc ${nc}_bak
done

cmaq_json3.py版本

作業方式與預期結果

程式因應修改

  • 將輸出部分寫成副程式
  • 判別式
    1. 模擬首日
    2. 0、3小時
    3. 如果已經有同樣檔名存在,即為舊模擬結果
  • 予以線性內插。注意:
    1. json檔案的[‘data’]是個list,無法進行四則運算,必須先改成array才能計算。
    2. 最後儲存時:json檔案不接受array的型態,必須改成list,否則會破壞原來的json檔案而造成錯誤。
def wrtjson(day,t,fnameO,jsn):
  if day==0 and t in [0,3] and os.path.isfile(fnameO):
    with open(fnameO,'r+') as f:
      bkp=json.load(f)
    for i in range(len(bkp)):
      data=np.array(bkp[i]['data'])*(6-t)/6+np.array(jsn[i]['data'])*(t)/6
      jsn[i]['data']=list(data)
  with open(fnameO,'w') as f:
    json.dump(jsn,f)
  return 'OK'

程式下載