TEDS排放處理相關程式
除了準備光化模式所需要的排放檔案,此處也介紹排放數據的展示、檢視等等經驗。
背景
相依性處理策略原則及目標
由於環保署提供數據僅有年度總量,並非光化模式所需之逐時數據,因此須考慮各細類污染源的時間特性,而該特性也有行政區的空間性質,因此資料庫維度之間有著非常高的相依性,需逐一展開。
- 考慮因素:電腦記憶體限制。如果資料太長(全年處理)將會使電腦停擺無法計算。
- 計算效率:應用矩陣將可啟動平行計算減少計算時間,資料越長越省事
- 檔案儲存:減少檔案存取的次數及規模。此處以一月儲存一檔為原則(直接適用CAMx模式)。
解決方案比較
目前可行、營運中之系統方式包括使用SMOKE(fortran
)、自行撰寫fortran
、與python
程式等系統方式,比較如下:
- 程式可讀性、模組化、長遠發展可維護性:
fortran
不如python
- 平行運作:理論上
fortran
應有最好的平行計算特性,但目前尚未發展這一方面,反倒是python
可以啟動單機之平行計算(smp
)。 - TEDS適應性:SMOKE為美國系統,編碼方式修改、適應不易、事倍功半,如遇改版將遭遇困難。
處理程序總綱
- 資料庫轉檔,
dbf
tocsv
。 - 應用資料表與矩陣的互換工具,整理全年時間變化係數(時變係數)矩陣、存檔備用。
- 讀取排放總量檔案、污染項目之彙總、展開形成總量
TPY[nSP, nCNTY,nNSC, nYX]
矩陣 - 時間之展開:總量
X
時間係數(numpy.tensordot
) - 空間之整併:按照模式的網格系統進行加總(
pandas.pivot_table
) - 填入nc檔案
numpy/scipy的平行運作
- 基本上numpy使用“BLAS”(基本線性代數副程式)來獲得優化。這通常是一個經過精心調整的程式庫,通過利用個別電腦高速緩存和組合,實現計算速度的提升。
- 現在許多電腦架構本身都有自己的 BLAS,它會利用了多核機器。如果 numpy/scipy 是使用其中之一編譯的,則矩陣計算(如
dot
)將採平行計算(如果速度確實更快),使用者無需執行任何操作。 - 類似的其他矩陣運算,如反矩陣、張量內積、奇異值分解、行列式等。
- 此外如開源庫 ATLAS 允許在編譯時選擇平行級別(線程數)。英特爾專有的 MKL 庫亦提供了在運行時選擇並行級別的可能性。還有 GOTO 庫,允許在運行時選擇並行級別。這些有部分是商業產品,但向學術界可免費提供程式碼。
Reference
- 行政院環保署, 空氣污染排放清冊, air.epa.gov, 網站更新日期:2021-12-1
- National Institute for Environmental Studies, Regional Emission inventory in ASia (REAS) Data Download Site, nies, 29-October-2020
- AMArchibald, Unknown[153], Unknown[154], Unknown[155], MartinSpacek, Pauli Virtanen, Parallel Programming with numpy and scipy, scipy-cookbook, 2015-10-30