Link Search Menu Expand Document

dowps.sh

Table of contents

背景

  • WPS顧名思義就是WRF的前處理系統(WRF Pre-processing System),包括準備地理地形檔案的geogrid.exe、初始邊界檔案要讀取的觀測值準備ungrid.exe及網格化metgrid.exe等3支程式,而這三支程式共用同一個名單(namelist.wps demo)。
  • WPS要處理的數據包括
    • 地理地形等靜態數據
    • 再分析數據(如FNL)、
    • 海溫數據等等。
    • 其結果可以成為OBSGRID、及(或)real的輸入檔案,為每一WRF作業必須的步驟。
    • 詳細編譯、安裝、namelist.wps設定、VTable的設定等等,可由官網找到相關資源。此處著眼在批次操作、作業瓶頸、以及結果檢核等注意事項。
  • WPS相關程式有版本之對應關係。WRF4只會讀取WPS4產生檔案,會進行版本檢核。

WPS之全月執行方案

dowps.sh的執行

此處以批次檔dowps.sh做為處理全月之工具,則執行全年的迴圈為:

ROOT=/data/WRF4.1
for i in {0..11};do 
    ii=$(printf "%02d" $(( $i + 1 )) )
    mkdir -p $ROOT/WPS/$y$ii
    mkdir -p WPS$ii
    cd WPS$ii
    ln -s $ROOT/WPS/* .
    rm namelist.wps Vtable FILE* met_em* SST* PFILE* GRIBFILE*  
  sub dowps.sh $i
done
  • 其中sub為將程序放在背景執行之小工具bash=$1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11} ${12} ${13} ${14} ${15} ${16} ${17} ${18} ${19} ${20} &
  • dowps.sh的引數m為0~11的月份數。
  • 原本在WPS目錄中的檔案(namelist.wps, Vtable, FILE*, met_em*, SST*, PFILE*, GRIBFILE*等)會造成衝突,必須刪除工作目錄中的連結。

dowps.sh分段說明

  • 路徑定義
    • PATH1:WPS路徑,結果將會在此目錄下產生,每月一個目錄,名稱為YYYYMM
    • PATH2:FNL及SST共同路徑
       1  3#usage: dowps.sh m (m=0~11)
       2  PATH1=$PWD
       3  PATH2=/airappz/WRF4.1.3/NCEP
      
  • 模擬範圍、解析度等如有異動,要在ungrib前執行geogrid
       5  #cp -f $PATH1/namelist.wps.loop namelist.wps
       6  #./geogrid.exe
    
  • 時間管理
    • 定義起訖時間(前月YP/MP/15日到下月初YN/MN/05),
      • 這些變數將代入名單模版中,成為本次執行的名單。
      • 使用date指令進行日期的計算,可以有效避免潤年、大小月等問題。(詳Xuite)
    • 此範例運作年份為2019年
       8  yyyy=2019
       9  i=$1
      10    ym=$(date -ud "${yyyy}-01-01 + ${i} month" +%Y%m)
      11    YY=$(date -ud "${yyyy}-01-01 " +%y)
      12    MM=$(date -ud "${yyyy}-01-01 + ${i} month" +%m)
      13    YP=$(date -ud "${yyyy}-${MM}-01 - 1 month" +%y)
      14    YN=$(date -ud "${yyyy}-${MM}-01 + 1 month" +%y)
      15    MP=$(date -ud "${yyyy}-${MM}-01 - 1 month" +%m)
      16    MN=$(date -ud "${yyyy}-${MM}-01 + 1 month" +%m)
      
  • 因全月作業會涉及到前一個月及後一個月的部分檔案,須先將FNL彙集到NCEP下各個月份(覆蓋),以便整批一起使用./link_grib.csh連結到工作目錄,並完成更名備月。
      18    for pth in FNL SST;do
      19      cd ${PATH2}/$pth/
      20      mkdir -p $ym
      21      cd $ym
      22      ln -sf ../20$YP/*$YP${MP}1[5-9]* .
      23      ln -sf ../20$YP/*$YP$MP[23]* .
      24      ln -sf ../20$YY/*$YY$MM* .
      25      ln -sf ../20$YN/*$YN${MN}0[123456]* .
      26    done
    
  • 因同步運作,必須避免不同月份間檔案發生衝突。
  • 創建WPS??(??=01~12)目錄並移動到該目錄,以避免平行計算時覆蓋到其他作業的控制檔(Vtable及namelist.wps)。
      27    ii=$(printf "%02d" $(( $i + 1 )) )
      28    echo "ii:"$ii
      29    mkdir -p $PATH1/WPS$ii
      30    cd $PATH1/WPS$ii
    
  • 名單模版的應用
    • 從主目錄複製一份名單的模版namelist.wps.loop到工作目錄
      • namelist.wps.loop的起迄時間為此處要置換的變數
        start_date = '20YP-MP-15_00:00:00','20YP-MP-15_00:00:00','20YP-MP-15_00:00:00','20YP-MP-15_00:00:00'
        end_date   = '20YN-MN-05_00:00:00','20YN-MN-05_00:00:00','20YN-MN-05_00:00:00','20YN-MN-05_00:00:00'
        
      • 起迄小時都設為0點的必要性
        • WRF模式會另要求計算模擬日數、小時數,起迄小時皆0則不必須計算小時數。
        • CMAQ模式的起迄小時都必須為0時UTC
    • sed指令置換其中的起訖時間、檔案型態
      • 在腳本中執行一變數的置換必須注意雙引號的使用:不能將變數放在雙引號之內。
      • sed指令的使用可以參考說明
      • 此階段執行FNL檔案解讀,其結果檔之前綴為FILE
        31    cp -f $PATH1/namelist.wps.loop namelist.wps
        32    for cmd in "s/YN/"$YN/g  "s/YP/"$YP/g  "s/MN/"$MN/g  "s/MP/"$MP/g  ;do sed -i $cmd namelist.wps;done
        33    sed -i "s/PREWD/FILE/g" namelist.wps
        
  • 執行FNL檔案之解讀
    • 使用link_grib.csh腳本將FNL檔案連結到工作目錄
    • 執行ungrib.exe讀取FNL檔案
      34    ./link_grib.csh $PATH2/FNL/$ym/fnl* .
      35    ln -sf ./ungrib/Variable_Tables/Vtable.GFS Vtable
      36    ./ungrib.exe
      37
      
  • 同樣方式讀取grib格式之SST檔案。
      38    cp -f $PATH1/namelist.wps.loop namelist.wps
      39    for cmd in "s/YN/"$YN/g  "s/YP/"$YP/g  "s/MN/"$MN/g  "s/MP/"$MP/g  ;do sed -i $cmd namelist.wps;done
      40    sed -i "s/PREWD/SST/g" namelist.wps
      41    ./link_grib.csh  $PATH2/SST/$ym/rtg_sst* .
      42    ln -sf $PATH1/ungrib/Variable_Tables/Vtable.SST Vtable
      43    ./ungrib.exe
    
  • 如SST檔案非grib格式,則不需要執行此段,
  • 執行metgrid
    44
    45    ./metgrid.exe
    46
  • WPS??(??=01~12)下的成果彙整到$PATH1/年月目錄下,以備REALOBSGRID使用。
    47    mkdir -p $PATH1/$ym/met
    48    mkdir -p $PATH1/$ym/SST_FILE
    49
    50    cp met_em*nc $PATH1/$ym/met
    51    cp  FILE:20* $PATH1/$ym/SST_FILE
    52    cp  SST:20* $PATH1/$ym/SST_FILE

腳本出處

Reference

  • University of Waterloo, WRF Tutorial, 27 June 2019, at 14:53.
  • Andre R. Erler, WRF-Tools/Python/wrfrun/pyWPS.py, Commits on Nov 23, 2021.