一般來說,要計算全球的網格,大家最早的想法都是由經緯度作切割而來,但經緯度作切割最大的缺點就是周期性邊界條件的問題,還有南北極點資料處理部分(如果是作海洋模式的人,有時候會避免處理極點的問題,而把地球北極作人工調整到陸地上,通常是格陵蘭的地方)。
第二個問題就是,當要做大量計算的時候,必須用平行化處理,而平行化有幾個原則,像是左右相鄰的網格點必須能銜接,另外如果要達到最有效率的平行化計算,基本上cpu之間的落差也不能太大,而所處理的資料量也必須相仿,如此一來才不會出現cpu互相等候對方的狀況。
基本上幾個meshgrid的方式,在Matlab裡面都可以看到,最常見的戒是經緯度切法,但如果要單一網格覆蓋面積差不多,則必須採用Hexagon or Pentagon的切法,或者是三角形(非矩形之四邊形)的切法。
底下是幾個Matlab的實作+
(1)一般經緯度的切法,低緯形變較少,高緯度形變嚴重
(2)2D的三角形切法,平面的話邊界變形較嚴重,但如果切割叫細則形變較少
(3)為了讓平形化計算更快,第一個想到的是類似富勒烯的網格點
(4)利用Matlab仿NICAM所作的(四邊形or三角形)的grid point
--------------------------------------------------------------------------------------------------------------------------------
接下來對它基本網格切割有概念的話,來看看平行化的部分怎麼分配?
基本上NICAM model網格密度計算有一個通識
Ngrid=10*4^(glevel) glevel是它其中一個參數,決定全球網格密度而使用的。
delt_x=(4*pi*R^2/Ngrid)^0.5。delt_x就是決定glevel後所得的解析度
EX: glevel 全球網格點數 解析度
5 10240 223.2km
6 40960 111.6km
7 163840 55.80km
.... .... ....
以此類推。(最底下會附圖)
以此類推。(最底下會附圖)
第二個要引進的參數是rlevel,rlevel代表的是cpu的loading
其實算法也跟glevel一樣
EX: rlevel # of regions
0 10
0 10
1 40
2 160
至於這是甚麼意思呢?假設今天glevel=5 代表總共有10240個網格點,但rlevel=0代表全球分十個區域,則每科cpu所需負責的就是1024個網格點。
第三個要引進的參數稱作beta,他決定了最大網格點和最小網格點之間的比例,在正常狀況下,我們希望每顆cpu處理的面積大小都一樣(全球domain),因此beta=1大家的比例都一樣;但是如果想看特定區域的部分,我們可以先移動他匯合中心到你所關注的區域,再調整beta的大小(如底下的第三圖),如此有甚麼好處呢?一般的模式最害怕的部分就是邊界效應可能damp或者是generate一些奇怪的東西出來,但如果吃進去的是全球網格資料,就不會有此問題。而NICAM在吃全球網格資料之虞,還能調整所關注區域的解析度,這是十分驚人的突破。
beta=lmax/lmin
g-level決定了全球網格密度
r-level決定了平行化後每顆cpu所要負責的網格數量
beta決定了最大間距和最小間距的比例
移動網格集中中心之後再調整beta值,你就可以對所關注的區域一覽無遺,又不用擔心處理邊界條件的問題了。
-------------------------------------------------------------------------------------------------------------------------
在這次研討會之後,只能說日本人太令人讚歎了,不管是所擁有的工具,或者是數理的思考能力,在亞洲上也都是數一數二的。



幫你挑個錯字XD
回覆刪除" (2)2D的三角形切法,平面的話邊界變形較嚴重,但如果切割叫細則形變較少"
叫細 → 較細
太感動了Q^Q竟然有人在看
回覆刪除