mcip程式執行腳本
Table of contents
背景
- mcip程式是WRF與CMAQ程式之間的橋樑,mcip程式結果也是許多程式包括
bcon
、combine
等都會讀取的重要檔案,建構CMAQ模式模擬應優先進行mcip程式。 - CMAQ整體的時間、空間架構、範圍等等,都是在mcip腳本中決定,因此如果後續執行模擬發現必須更動模擬的時空範圍,必須回到此處重新設定。
- 時間範圍:主要發生在雨量等等相關變數的累積特性。建議將WRF和mcip、CMAQ等等的執行批次設定成完全一樣,可以避免很多錯誤。WRF或mcip程式的結束時間可以更長,但起始時間必須一致。
- 空間範圍:因為濃度邊界需要一定寬度,因此mcip的範圍會比WRF略小一些。
- 版本的相依性:mcip程式對WRF程式的版本有相依性。CMAQ對mcip程式版本也有相依性。這些程式必須同時更新。
腳本程式說明
執行方式
- 以
csh
環境執行腳本,呼叫run_mcipMM_RR_DM.csh
foreach M (`seq 1 12`)
set mon=`printf '%02d' $M`
foreach DM ( 'd01' 'd02' 'd04')
foreach RUN (`seq 5 12`)
cd /data/cmaqruns/2019base
source run_mcipMM_RR_DM.csh $mon $RUN $DM # ${JOB}_$mon$RUN$DM 1>&2
end
end
end
基本定義
- 引數、網格系統、資料與家目錄
kuang@114-32-164-198 /Users/cmaqruns/2016base/old_scripts
$ diff ~/GitHub/cmaq_relatives/mcip/run_mcipMM_RR_DM.csh run_mcip.csh
122,144c124,130
< #argv[1]: month in 2 digit, 01~12
< #argv[2]: run 1~12
< #argv[3]:domain: d2 or d4
< source $CMAQ_HOME/../CMAQ_Project/config_cmaq.csh gcc
< set APPL_YR = `echo $CMAQ_HOME|cut -d'/' -f4|cut -c3-4`
< set MO = $argv[1]
< set RUN = $argv[2]
< set DM = $argv[3]
< set APPL = $APPL_YR${argv[1]}_run${argv[2]}
< set CoordName = TWN_PULI # 16-character maximum
< if ( $DM == 'd00' ) then
< set GridName = sChina_81k # 16-character maximum
< else if ( $DM == 'd01' ) then
< set GridName = sChina_81ki # 16-character maximum
< else if ( $DM == 'd02' ) then
< set GridName = sChina_27k # 16-character maximum
< else if( $DM == 'd04' ) then
< set GridName = TWN_3X3 # 16-character maximum
< else
< echo "Error input d01~d04"
< exit 1
< endif
< set CMAQ_DATA = $CMAQ_HOME/data
---
>
> source $CMAQ_HOME/config_cmaq.csh
>
> set APPL = 160702
> set CoordName = LamCon_40N_97W # 16-character maximum
> set GridName = 2016_12SE1 # 16-character maximum
>
- IO目錄之設定(使用sed將_換成/)
146,152c132,135
< echo $APPL
< set ApplRun = `echo ${APPL} | sed -e 's/_/\//g'` #replace _ with /
< echo $ApplRun
< set InMetDir = $DataPath/wrfout/$ApplRun
< set InGeoDir = $DataPath/wrfout
< set OutDir = $DataPath/mcip/$APPL/$GridName
< set ProgDir = $CMAQ_HOME/../CMAQ_Project/PREP/mcip/src
---
> set InMetDir = $DataPath/wrf
> set InGeoDir = $DataPath/wrf
> set OutDir = $DataPath/mcip/$GridName
> set ProgDir = $CMAQ_HOME/PREP/mcip/src
wrfout
之連結引用- 此處沒有使用
wrfout
的全名,而是在bash
腳本中執行連結(see ln_YYMM.cs),因為全月的WRF模擬主要是以bash
腳本控制,有較多的範本可以引用。 - 使用連結還有一個好處,可以對日期較為自由(事實上
bcon
會比WRF批次多要求向後1個小時、mcip
則會要求向前1個小時。)。
- 此處沒有使用
154,155d136
< echo 'DataPath='$CMAQ_DATA
< echo 'InMetDir='$InMetDir
176,182c157,159
< set InMetFiles = ( \
< $InMetDir/wrfout_${argv[3]}_1 \
< $InMetDir/wrfout_${argv[3]}_2 \
< $InMetDir/wrfout_${argv[3]}_3 \
< $InMetDir/wrfout_${argv[3]}_4 \
< $InMetDir/wrfout_${argv[3]}_5 \
< $InMetDir/wrfout_${argv[3]}_6 )
---
> set InMetFiles = ( $InMetDir/subset_wrfout_d01_2016-07-01_00:00:00 \
> $InMetDir/subset_wrfout_d01_2016-07-02_00:00:00 \
> $InMetDir/subset_wrfout_d01_2016-07-03_00:00:00 )
- 是否提供
geo_em
檔案
184,185c161,162
< set IfGeo = "T"
< set InGeoFile = $InGeoDir/geo_em.${DM}.nc
---
> set IfGeo = "F"
> set InGeoFile = $InGeoDir/geo_em_d01.nc
- 是否輸出垂直速度。
CCTM_ACONC
也會輸出一份,其實沒有必要在這個階段輸出。
202c179
< set LWOUT = 1
---
> set LWOUT = 0
- 起始日期的計算,參考批次的定義
212,217c189,190
< set BEGD = `date -ud "20${APPL_YR}-${MO}-15 +-1months" +%Y-%m-%d`
< @ A = $RUN - 1; @ DD = $A * 4 ; @ ED = $A * 4 + 5
< set START = `date -ud "$BEGD +${DD}days" +%Y-%m-%d`
< set ENDDT = `date -ud "$BEGD +${ED}days" +%Y-%m-%d`
< set MCIP_START = ${START}:01:00.0000 # [UTC]
< set MCIP_END = ${ENDDT}:00:00.0000 # [UTC]
---
> set MCIP_START = 2016-07-02-00:00:00.0000 # [UTC]
> set MCIP_END = 2016-07-03-00:00:00.0000 # [UTC]
- 手動個別設定邊界內縮網格數,不需要另外再設定
BTRIM
243c216
< set BTRIM = -1
---
> set BTRIM = 0
網格系統詳細定義
- 各層網格系統的起始位置、網格數
- 為WRF各子網格系統)內縮之結果
- d00選項為產生最外層邊界濃度時所需用,或為單獨網格系統使用。
- 名稱定義詳對照表
巢狀/單獨網格 | 網格名稱 | 網格編號 | 內縮格數 | 網格數 | 說明 |
---|---|---|---|---|---|
巢狀 | sChina_81k | d00 | WRFd01之1~57 | 內縮1格 | 虛擬系統,為產生d01邊界 |
sChina_81ki(連結到EAsia81K) | d01 | 3格 | 53,53 | 相當於WRF之d01 | |
sChina_27k | d02 | 2格 | 65,65 | 相當於WRF之d02 | |
TWN_3X3 | d04 | 8格 | 83, 137 | 相當於WRF之d04 | |
單獨 | CWBWRF_15k | d00 | 3格 | 665,389 |
-note:CWBWRF_15k網格系統定義之參考,詳見中央氣象局opendata數值預報模式-區域預報模式(WRF-15公里)之說明。
260,280d232
< if ( $DM == 'd00' ) then
< set X0 = 1
< set Y0 = 1
< set NCOLS = 57
< set NROWS = 57
< else if ( $DM == 'd01' ) then
< set X0 = 3
< set Y0 = 3
< set NCOLS = 53
< set NROWS = 53
< else if ( $DM == 'd02' ) then
< set X0 = 2
< set Y0 = 2
< set NCOLS = 65
< set NROWS = 65
< else if ( $DM == 'd04' ) then
< set X0 = 8
< set Y0 = 8
< set NCOLS = 83
< set NROWS = 137
< endif
281a234,237
> set X0 = 13
> set Y0 = 94
> set NCOLS = 89
> set NROWS = 104
- 蘭伯特投影參考緯度:照個案實際值代入
300c256
< set WRF_LC_REF_LAT = 23.61
---
> set WRF_LC_REF_LAT = 40.0
警訊及執行
- 這段是為避免執行過程的警訊,不影響結果。
475,481d430
< #add by kuang
< setenv IOAPI_CHECK_HEADERS F
< setenv IOAPI_OFFSET_64 T
< setenv IOAPI_CFMETA YES
< setenv IOAPI_CMAQMETA NONE
< setenv IOAPI_SMOKEMETA NONE
< setenv IOAPI_TEXTMETA NONE
482a432
> setenv IOAPI_CHECK_HEADERS T
- 執行方式:與編譯方式有關。
514c464
< mpirun -np 1 $ProgDir/${PROG}.exe
---
> $ProgDir/${PROG}.exe
Mac版本日期設定與計算方式之差異
- Mac 與一般的UNIX有很大的差異,輸入格式
-f
在引數之前設定,日期的加減也是在引數之前。一般(如centos)是在引數之後。 - run批序之起始日:前月15日
kuang@114-32-164-198 /Users/cmaqruns/2016base
$ diff mac_mcipMM_RR_DM.csh run_mcipMM_RR_DM.csh
212c212
< set BEGD = `date -v-1m -j -f "%Y-%m-%d" "20${APPL_YR}-${MO}-15" +%Y-%m-%d`
---
> set BEGD = `date -ud "20${APPL_YR}-${MO}-15 +-1months" +%Y-%m-%d`
BEGD
後的DD
日與ED
日
214,215c214,215
< set START = `date -v+${DD}d -j -f "%Y-%m-%d" "${BEGD}" +%Y-%m-%d` #> Convert YYYY-MM-DD to YYYYMMDD
< set ENDDT = `date -v+${ED}d -j -f "%Y-%m-%d" "${BEGD}" +%Y-%m-%d` #> Convert YYYY-MM-DD to YYYYMMDD
---
> set START = `date -ud "$BEGD +${DD}days" +%Y-%m-%d`
> set ENDDT = `date -ud "$BEGD +${ED}days" +%Y-%m-%d`
mcip轉檔結果的確認
mcip
的結果都是m3.nc
格式檔案,可以用VERDI或MeteoInfo開啟- 使用pr_tflag.py亦能快速檢查結果檔案的時間標籤
腳本下載
Reference
- USEPA, run_mcip.csh, github