因建物外牆的阻檔,地表漫地流會被阻隔於建物外,當建物外部水位超過建
圖 3-1 建物網格示意圖
圖 3-2 建物進水體積之相對面積比示意圖
建物進水面積比之示意如圖 3-2,若忽略建物外牆厚度及建物高程下的蓄水
空間,之值介於 0 到0之間,若建物外淹水高度尚未超過建物門檻值時,建物
進水面積比為 0,建物若全部進水時,建物進水面積比為0。
若地形高程z、曼寧糙度值n和進流量 q 已知,則(3-8)、(3-2) 及 (3-3) 式含有 三個因變數 d 、u及v。此含三因變數的偏微分聯立方程式,須利用數值方法求解 之。
3-1-2 數值方法
假若地表於初始時刻為無水狀態,洪流傳遞之前緣與乾地表接觸之交界鋒線 將隨時間向下游推進,為簡易處理這種移動邊界水流流況,本文採用交替方向顯 式差分法(Alternating Direction Explicit Method, ADE)建立數值模式。依標示網格 (Marker And Cell, MAC)差分觀念,若將(3-8)、(3-2)及(3-3)式中任意變量以差分式 f 表示,其中 f 可代表d、 q 、u或v等變量,採用之差分型式如(3-9)式所示:
1212
12
3-1-3 地表曼寧糙度修正
式中,n為受建物阻力影響之曼寧糙度值,將(3-28)式及(3-29)式代入(3-26)
2 2
1. 閉合邊界 of Engineers, 1998),依降雨量及集水區之面積、形狀、坡度等特性計算出逕流歷線 後,提供為都市淹水模式中山區逕流入流點之邊界條件。
防災應變的重點,使用都市淹水模式進行淹水模擬時,可將全模擬區粗網格內部 結合局部區域細網格進行模擬,加速計算時間並維持局部細化區域之模擬精度。
局部細化網格淹水模式是採用兩種不同尺度的模擬網格,分別為全模擬區使 用之間距較大之粗網格,與局部模擬區所使用之間距較小之細網格,粗網格之大 小及高程是由細網格平均而得,即粗、細網格間距有一定比例關係,且局部細化 區包含於全模擬區之內,如圖 3-3 所示。細網格具較高之解析度,能夠有較精確之 淹水模擬資料,針對人口密集或重要機關之地區,將所涵蓋之粗網格區域進行網 格細化,針對此一細網格區域進行淹水模擬,其邊界條件由周邊之粗網格模擬結 果提供,則可縮短演算時間便取得高解析度之淹水資訊。
若模擬區內受到高度開發,根據不同目的要求模擬區內許多處需要高解析度 之淹水模擬結果,都市淹水模式能針對全模擬區內複數局部細化地區進行同步模 擬的工作。
圖 3-3 粗細網格邊界關係示意圖
3-2-1 演算時距
此即所謂的可蘭條件(Courant-Friedrichs-Lewy, CFL)。由於可蘭數的選取不當會造 成計算的誤差,因此數值解之穩定條件要求為0Cn 1,根據(3-35)式這個條件限
此,細網格模擬區域之邊界條件須由粗網格模擬結果提供,在細網格的邊界條件 上,選擇使用流量歷線,本文將細網格邊界所交疊之粗網格內部邊界流量作為細 網格模擬區之開放邊界條件。首先將粗網格淹水深度d乘上粗網格寬度a則可獲得 通水斷面積;再將通水斷面積乘上通過此斷面之速度U ,則可求得每一粗網格邊 界上個別之流量 Q ,示意圖參見圖 3-4,粗細邊界流量可表示為:
Q d a U (3-36)
式中, Q 為單一粗網格之流量[m3/s];d 為粗網格水深[m];a為粗網格間距 [m];U 為粗網格速度[m/s],即代表流動速度 u 或 v 。
細網格邊界之流量,是粗網格流量分配而得,若粗細網格解析度分別為a及 b ,一個粗網格的邊界上會涵蓋( a b )個細網格邊界,示意圖如圖 3-5,以此圖為例
( a b )=5,故將邊界單一粗網格之流量分配至( a b )個細網格作為細網格計算之邊界 條件,其分配權重關係為:
i i
q K Q (i1 ~a b) (3-37)
式中,qi為分配予細網格之流量[m3/s];Ki為分配權重係數,
Ki 1; a b 為細網格之數目。圖 3-4 網格邊界個別流量示意圖
圖 3-6 粗細網格邊界斷面示意圖
平行演算法早期受限於電腦技術發展,需大型高速電腦或串接多台個人電腦 才能進行,而隨著科技日新月異,近年電腦處理器普遍朝向多核心(multi-core)及多 執行緒(multi-thread)發展,平行計算之研究也廣泛普及應用於各領域發展,舉凡硬 體設計、程式語言發展、演算法及平行技術的應用,均有許多相關的研究發展。
圖 3-7 平行處理架構示意圖 3-3-1 OpenMP(Open Multi-Processing)
目前平行演算法之訊息傳輸語言平台眾多,諸如 MPI、OpenMP、CUDA 等,
各種平行演算平台各有其優勢,如 MPI 主要用於撰寫多電腦架構之平行程式、
OpenMP 方便用於撰寫多核心處理器架構之平行程式等。都市淹水模式中主網格與 多個細化網格之計算為 Fortran 程式不同迴圈下之計算流程,故本文使用 OpenMP 語法進行平行化演算架構之撰寫,以多核心多執行緒進行模擬計算。OpenMP 目前 官方支援的程式語言包括 C 語言、C++以及 Fortran 語言,其提供了平行演算法高 層之抽象敘述,並在各平行演算銜接之處加入通信以及同步互斥。在進行平行化 之程式撰寫時,可在原始程式中加入原始程式是否進行平行化計算編譯之定向資 料,若在設定中選擇忽略定向資料或當編譯器不支持 openMP 語法時,程式又可讀
取為通常之程序,程式碼仍可以正常非平行化之序列方式執行,僅不能利用多執 行緒平行化加速程序演算。也就是 OpenMP 使用了特殊之敘述或註解來引導編譯 器將程式特定之區塊轉為平行處理,不須重新撰寫程式本身之架構即可修改建置 出平行化之程式。
3-3-2 平行演算法於多重尺度網格方法
在局部細化淹水模擬當中,模式中粗、細網格演算流程必須互相配合,如圖 3-8,模式在每一時距的計算中,必須等待粗網格與所有局部細化模擬區域循序演 算完畢後才能進行下一時距之演算,因此當局部細化網格區域越多,則需更多之 等待時間,累積下來將會耗費更多之演算時間。本文以平行演算法進行粗網格及 不同局部細化網格之同時計算,如此模式不會因局部細化區域增加而耗費更多演 算時間,降低運算效率。
本文將都市淹水模式之程式碼,利用 OpenMP 語法修改成平行化,以多核心 處理器進行粗細網格之平行同步演算,其平行化流程如圖 3-9 所示。
圖 3-8 多重尺度法局部細化架構示意圖
圖 3-9 平行處理修改研究流程圖
首先,在平行演算架構中,要將所有平行化之計算分配到不同記憶體及處理 器,因此需先針對程式本身進行獨立化修正,將程式中之變數獨立化,讓程式變 數符合平行演算之需求。
完成變數之平行化架構後,再以 openMP 語法進行局部細化網格平行化之修 改,如圖 3-10 所示。程式架構以粗網格先獨立進行第一時距演算後,將演算結果 輸出給局部細化網格作為邊界條件,再讓多區局部細化網格進行同步之平行演 算。待局部細化網格第一時距平行演算完畢後,粗網格再獨立進行第二時距之演 算,演算結果再交由局部細化網格平行演算,以此類推至模擬演算結束。
完成局部細化網格區域平行演算後,再進一步建置不同尺度粗、細網格演算 之平行化。因局部細化網格之邊界條件須由粗網格所提供,因此要建立粗、細網 格之間之平行演算,粗網格與局部細化網格需以不同演算時距(time step)進行同步 化,如圖 3-11 所示,也就是在模式的架構中,當粗網格先進行第一時距tc之演算
第一時距(0 至tc)演算的同時,粗網格也能繼續進行第二時距(tc至2tc)之演 算。即兩種尺度演算相差一個粗網格時距,細網格皆為進行前一粗網格演算時距 之演算。利用粗網格與局部細化網格之一個粗網格時距差,可讓模式能同時進行 粗、細網格之平行演算,都市淹水模式整體計算流程如圖 3-12。
圖 3-10 局部細化網格平行演算架構示意圖
圖 3-11 粗細網格平行演算架構示意圖
圖 3-12 都市淹水模式演算流程圖