Link Search Menu Expand Document

mcip程式執行腳本

Table of contents

背景

  • mcip程式是WRFCMAQ程式之間的橋樑,mcip程式結果也是許多程式包括bconcombine等都會讀取的重要檔案,建構CMAQ模式模擬應優先進行mcip程式。
  • CMAQ整體的時間、空間架構、範圍等等,都是在mcip腳本中決定,因此如果後續執行模擬發現必須更動模擬的時空範圍,必須回到此處重新設定。
    • 時間範圍:主要發生在雨量等等相關變數的累積特性。建議將WRFmcipCMAQ等等的執行批次設定成完全一樣,可以避免很多錯誤。WRFmcip程式的結束時間可以更長,但起始時間必須一致。
    • 空間範圍:因為濃度邊界需要一定寬度,因此mcip的範圍會比WRF略小一些。
  • 版本的相依性:mcip程式對WRF程式的版本有相依性。CMAQmcip程式版本也有相依性。這些程式必須同時更新。

腳本程式說明

執行方式

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

基本定義

  • 引數、網格系統、資料與家目錄
    • 為了讓同一個腳本應用在不同月份、不同批序(批次序號)、不同模擬範圍,讓腳本可以更換執行的條件。
    • APPL個案應用標籤:加上批序會更方便與WRF對照。
    • 此處沒有d03的選項,因為d02已經足夠產生d04的邊界條件。
    • 網格系統名稱、編號與細節見網格系統詳細定義
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_81kd00WRFd01之1~57內縮1格虛擬系統,為產生d01邊界
 sChina_81ki(連結到EAsia81K)d013格53,53相當於WRF之d01
 sChina_27kd022格65,65相當於WRF之d02
 TWN_3X3d048格83, 137相當於WRF之d04
單獨CWBWRF_15kd003格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格式檔案,可以用VERDIMeteoInfo開啟
  • 使用pr_tflag.py亦能快速檢查結果檔案的時間標籤

腳本下載

Reference