CAMx模式對其初始與邊界條件(IC/BC)並不是非常嚴格,包括污染物成分種類、與實質的內容數據等等,只要求時間與範圍必須對應。然而模擬結果是否合理、正確,顯然與ICBC的設定有密切的關係。
完整的資料處理過程可以參見CMAQ Model system -> 邊界條件之準備與初始條件之準備,此處僅針對CAMx模式差異之處進行說明。
CAMx.in ICBC檔案與路徑的設定
- 冷起動(Restart=false)
- 需要給定粗網格的ICBC檔案
- 熱起動(Restart=true)
- 需要前月最末小時模擬結果的瞬時檔、粗細網格的濃度、如有PiG設定,則需要煙流模擬結果(注意點源順序必須完全一致才能接續)。
- BC檔案仍然需要
- IC檔案不需給定,即使給定也不會讀取。
- 如給定的是相對目錄,根目錄指的是CAMx.in所在的位置
段落 | 關鍵字 | 範例 | 說明 |
---|---|---|---|
Model clock control | Restart | true/false, | 熱起動/冷起動 |
Start_Date_Hour | 2018,12,31,2000, | 前月最末日夜間開始 | |
End_Date_Hour | 2019,1,31,2000, | 當月最末日夜間結束,整點時間必須一致 | |
Input files | Initial_Conditions | ’./ICBC/bndextr_d2/base.grd02.1901.ic’, | 當月初始條件 |
Boundary_Conditions | ’./ICBC/bndextr_d2/base.grd02.1901.bc’, | 當月邊界條件 | |
Restart files | Master_Grid_Restart | ‘outputs/con00/1812baseB.inst’, | 前月粗網格模擬結果 |
Nested_Grid_Restart | ‘outputs/con00/1812baseB.finst’, | 前月細網格模擬結果 | |
PiG_Restart | ‘outputs/con00/1812baseB.pig’, | 前月點源pig模擬結果 |
初始條件
啟始時間的考量
- 08(00Z)雖然是氣象模式的整點開始,但是對光化模式而言,卻不是好的開始時間,個案的連接會發生斷層。
- 00(16Z)是local一天的開始,氣象模式也有輸出,但是mozart沒有初始值,無法(冷˙)啟動程式,必須另外冷啟動再restart。
- 02(18Z)compromize 上述2個觀點,但結束在02時又多跨一天local date
- 20(12Z)似乎是比較好的一個選擇,可以是一天的結束,也可以是cold start 或restart的好時刻
Warning: CAMx時間沒有硬性規定,而是在CAMx.in內設定。此處設定為-8(Taipei Time)
冷熱起動之考量
- 冷起動(RESTART=False)
- 基本上由全球模式模擬結果整理成的大尺度空品檔案,切出指定時間,即可作為模式的起始條件。
- 只需要最外層網格系統的初始濃度檔案(grd01)、其內層之初始值CAMx會自行內插求得。
- 熱起動(RESTART=True)
- 在連續、全年的模式作業中,前次模擬結果的瞬時紀錄檔案,可以作為模式的初始條件,不需另外再提供初始空品檔案。
- 包括粗、細每一層巢狀網格之瞬時檔都必須提供。
CAMx模擬結果做為冷起動的初始濃度條件
- airq.f這一個fortran程式用來讀取前一批次模擬結果濃度(ROOT.avrg.grd01)檔案的最末時間,來產生下一批次作業的起始濃度檔案(冷起動)。
- 因早期CAMx模式並不產生ncf格式的結果,必須循序讀到最後時間。這在ncf版本中已經可以完全不需要了。
- 程式下載:
Download: CAMx初始檔產生程式:airq.f
- 需要檔案
- 編譯時,會需要早期UAM程式的內含文件(PARAMS.CMD等等,可以在UAMIV-CMDs@FAQ找到這些檔案)
- 引數:前批作業的結果檔案(ROOT.avrg.grd01)
- 產出檔案:ROOT.avrg.grd01 M
ncf格式版本
ncks -d TSTEP,TLAST,TLAST+1 ROOT.avrg.grd01 ROOT.avrg.grd01M
ncatted -a SDATE,global,o,i,2019032 -a STIME,global,o,i,0 ROOT.avrg.grd01M
邊界條件
固定值之邊界濃度
- CAMx與CMAQ一樣,在測試階段可以一組單純的空氣品質觀測值作為邊界濃度條件,一方面可以測試檔案格式與操作是否正確,一方面也可以調適化學機制之反應平衡、模式邊界與起始條件的一致性等等課題。
- CAMx的邊界濃度檔案格式有別於其他所有格式,除了4筆表頭內容一致外,增加了第5~8筆表頭內容
- 時變部分,因邊界濃度為2維場,與uamiv之3維特性有所差異。CAMx的特性是以邊界序(西東南北)取代uamiv高度位置。而將每筆之2維濃度場設定為高度及水平向。
uamiv與lateral_boundary格式內容之比較
項目 | uamiv | lateral_boundary | 說明 |
---|---|---|---|
表頭1檔名標籤與起迄日期時間 | fname, note, NOSEG, NOSPEC,<p>NDATE, TTIME, NDLAST, TTLAST</p> | (same) | |
表頭2網格系統 | XUTM, YUTM, NZONE, <p>XORG, YORG, DELTAX, DELTAY, </p><p>NOXG, NOYG, NOZ,</p><p>idproj,istag,tlat1,tlat2,rdum</p> | (same) | |
表頭3 4個整數 | (Itmp(j), J=1,4) | (same) | |
表頭4污染物名稱 | ((SPNAME(I,J), I=1,10), J=1,NOSPEC) | (same) | |
表頭5~8 4個邊界的索引指標 | (無) | <p>DO 100 N=1,4</p><p> READ(11) NOSEG, NEDG, NCEL(N),((IND(N,J),i,i,i),J=1,NCEL(N))</p><p>100 CONTINUE</p> | 依序為西、東、南、北 |
時變部分逐時之啟迄日期時間 | jjj,btime, jjn,etime | (same) | |
時變部分之濃度場 | DO L=1,NOSPEC<p>DO K=1,NOZ</p><p> WRITE (12) NOSEG, (SPNAME(I,L),I=1,10), ((C(I,J,K,L),I=1,NOX),J=1,NOY)</p><p>enddo</p><p>enddo</p> | DO L=1,NOSPEC<p>DO NEDG=1,4</p><p> nc=NOYG</p><p> if(NEDG.gt.2)nc=NOXG</p><p> WRITE (12) NOSEG, (SPNAME(I,L),I=1,10), NDG,((BC(I,K,L), K=1,NOZ2), I=1,NC)</p><p>enddo</p><p>enddo</p> |
- 格式範例詳見
自空品濃度檔案截取邊界濃度
- CAMx官網提供了截取程式BNDEXTR,其使用方法詳見
邊界濃度檔案之處理程式
- bndaryM2J.f,其目的在將全月逐時的邊界濃度檔案,按照日期進行切割以進行逐日的CAMx模擬測試。
- 內含文件:見在UAMIV-CMDs@FAQ
- 輸入檔:全月之邊界濃度檔,由BNDEXTR所產生
Download: Fortran程式:bndaryM2J.f
逐月執行ICBC檔名之迭代
- 在逐月的執行過程中,每月CAMx.in會需要定義當月的ICBC檔名,如果以手工一一給定,不單費工,而且容易出錯。可以一簡單的批次檔(gen.cs)來執行。
- 事先將需要替換的名稱部分,以變數形式寫在CAMx.in模版裏
- 逐月以sed指令將當月分的時間值,替換模版內之特定位置、另存新檔。
CAMx.in.loop模版
- 模版以排放情境命名、建立目錄
- 注意ROOT之定義、排放檔案的指定
- ICBC部分內容如下
Restart = .RESTART.,
Start_Date_Hour = 20BY,BM,BD,BT00, !
End_Date_Hour = 20YY,MM,DD,TT00, !
...
Initial_Conditions = './ICBC/bndextr_d2/base.grd02.YYMM.ic',
Boundary_Conditions = './ICBC/bndextr_d2/base.grd02.YYMM.bc',
...
Master_Grid_Restart = 'outputs/conBM/BYBMbaseB.inst',
Nested_Grid_Restart = 'outputs/conBM/BYBMbaseB.finst',
PiG_Restart = 'outputs/conBM/BYBMbaseB.pig',
- 時間變數原則:
- 年月日時:Y/M/D/T
- 前一批次:B+Y/M/D/T
- 當批次:YY/MM/DD/TT
Download: CAMx.in 模版:CAMxR.in.loop
gen.cs
- 此處以date指令進行時間的計算。如為maxOS,指令略有不同。
- 當作業拆分給3台工作站執行時,第一次執行1/5/9月必須是冷起動。
- 此處以月份與此三者差值的乘積為0做為判別式。字串
$MM
改成10為底的整數$MM
:10#$MM
- 如果工作站數目多,會有更多冷起動,誤差機會比較多。
- 此處以月份與此三者差值的乘積為0做為判別式。字串
- sed指令的批次變數作業方式,特別留意引號的寫法。
kuang@114-32-164-198 /Users/camxruns/2016_v7
$ cat CAMxin_B/gen.cs
for MM in {01..12};do
nextM=$(date -d "2016${MM}01 +31day" +%m)
nextY=$(date -d "2016${MM}01 +31day" +%Y)
YY=$(date -d "$nextY${nextM}01 -1day" +%y)
DD=$(date -d "$nextY${nextM}01 -1day" +%d)
TT=20
BY=$(date -d "2016${MM}01 -1day" +%y)
BM=$(date -d "2016${MM}01 -1day" +%m)
BD=$(date -d "2016${MM}01 -1day" +%d)
BT=20
RESTART=true
#split to 3 machines:
a=$(( (10#$MM - 1)*(10#$MM - 5)*(10#$MM - 9) ))
# a=$(( (10#$MM - 1) ))
if [ $a -eq 0 ];then
RESTART=false
fi
echo $BY$BM$BD$BT $YY$MM$DD$TT
cp CAMxR.in.loop CAMx.in_$MM
for cmd in "s/MM/"$MM/ "s/DD/"$DD/ "s/TT/"$TT/ \
"s/BM/"$BM/ "s/BM/"$BM/ "s/BD/"$BD/ "s/BT/"$BT/ \
"s/YY/"$YY/ "s/BY/"$BY/ \
"s/RESTART/"$RESTART/ \
"s/YY/"$YY/ "s/MM/"$MM/ ;do
sed -i $cmd CAMx.in_$MM
done
done
exit 0