亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        高分辨率全球非結(jié)構(gòu)網(wǎng)格生成實踐*

        2022-07-22 06:32:50劉壯黃小猛
        電子技術(shù)應(yīng)用 2022年6期
        關(guān)鍵詞:剖分球面進(jìn)程

        劉壯,黃小猛

        (清華大學(xué) 地球系統(tǒng)科學(xué)系,北京 100084)

        0 引言

        近年來,隨著計算機(jī)計算能力的提升與數(shù)值方法的發(fā)展,非結(jié)構(gòu)網(wǎng)格在地球系統(tǒng)模式中得到了越來越多的應(yīng)用[1-2]。不同于結(jié)構(gòu)網(wǎng)格,非結(jié)構(gòu)網(wǎng)格沒有極點(diǎn)附近網(wǎng)格收縮而出現(xiàn)奇異的問題;同時,非結(jié)構(gòu)網(wǎng)格可以更靈活地處理各種邊界條件、實現(xiàn)局部網(wǎng)格加密等。

        在各種非結(jié)構(gòu)網(wǎng)格中,球面質(zhì)心Voronoi 網(wǎng)格[3](Spherical Centroid Voronoi Tessellations,SCVT)因具備良好的性質(zhì)而得到廣泛應(yīng)用。生成SCVT 一般采用的Lloyd 算法[3]是一個不動點(diǎn)迭代算法,其計算量與生成的網(wǎng)格點(diǎn)數(shù)成正比。為應(yīng)對快速生成高分辨率SCVT 的挑戰(zhàn),Jacobsen等[4]提出了基于區(qū)域分解和球極投影的并行算法,并在GitHub 開源了其代碼(MPI-SCVT:https://github.com/douglasjacobsen/MPI-SCVT)。數(shù)值實驗顯示了MPI-SCVT 相對于串行算法的加速效果。

        盡管MPI-SCVT 可以很好地適用于一般分辨率下SCVT 的生成,當(dāng)所需網(wǎng)格的分辨率非常高(例如2 km 以下)時,MPI-SCVT 的使用會出現(xiàn)一系列問題。首先,MPI-SCVT 內(nèi)置的幾種網(wǎng)格初始化方法生成的網(wǎng)格點(diǎn)質(zhì)量較差,與最終的收斂結(jié)果距離較遠(yuǎn),這使得迭代步數(shù)過多,程序整體運(yùn)行時間長。其次,高分辨率導(dǎo)致迭代過程中通信的數(shù)據(jù)量大,MPI-SCVT 使用的boost MPI(http://www.boost.org) 單次通信數(shù)據(jù)量超過一定大?。s2 GB)時會出錯。再者,MPI-SCVT 調(diào)用外部庫Triangle[5]實現(xiàn)平面Delaunay 三角網(wǎng)格[4]的構(gòu)建,當(dāng)單次輸入網(wǎng)格點(diǎn)數(shù)超過約42 600 000時,Triangle 無法正常運(yùn)行。最后,高分辨率導(dǎo)致輸出變量較大,使用外部庫NetCDF-CXX 無法完成所需NetCDF 文件的輸出。

        本文針對以上問題,提出一套整體解決方案。首先,通過采用正二十面體二分加密的方法,提高初始網(wǎng)格質(zhì)量,減少收斂所需的迭代步數(shù)。其次,通過數(shù)據(jù)分段、多次通信,實現(xiàn)迭代過程中大數(shù)據(jù)的傳輸。再者,通過增加分片處理區(qū)域的數(shù)量,減少每次調(diào)用Triangle 時輸入的網(wǎng)格點(diǎn)數(shù),順利完成Delaunay 三角網(wǎng)格的構(gòu)建。最后,通過更換Paralell NetCDF 庫(后文簡稱PnetCDF),將大變量數(shù)據(jù)分塊,多次調(diào)用輸出接口進(jìn)行輸出,消除了原來單變量不能超過4 GB 大小的限制。

        1 SCVT 生成方法

        這里給出SCVT 的基本定義及生成算法,其詳細(xì)介紹可以參考文獻(xiàn)[3-6]。

        1.1 網(wǎng)格定義

        首先介紹Voronoi 單元。記d(x,y)為球面Ω 上兩點(diǎn)x和y 的測地線距離,給定球面上的一組點(diǎn),那么Vi={x ∈Ω:d(x,zi)<d(x,zj) for j=1,…,k,j ≠i}稱為點(diǎn)zi對應(yīng)的Voronoi 單元。

        (2)三角形內(nèi)部都不包含其他頂點(diǎn);

        (3)三角形兩兩不相交;

        Delaunay 三角剖分是滿足所有三角形的外接圓內(nèi)部都不包含其他頂點(diǎn)的三角剖分。

        下面給出Voronoi 單元與Delaunay 三角形的關(guān)系,其詳細(xì)證明可以參見文獻(xiàn)[6]。Voronoi 單元與Delaunay 三角形互為對偶:Voronoi 單元的邊是Delaunay 三角形邊的中垂線,Voronoi 單元的頂點(diǎn)是Delaunay 三角形的外心。因此,給定Delaunay 三角剖分,即可構(gòu)建出Voronoi 網(wǎng)格剖分。圖1 給出了Delaunay 三角剖分及其對應(yīng)的Voronoi剖分示意圖。

        圖1 Delaunay 三角剖分和Voronoi 剖分

        最后,給出SCVT 網(wǎng)格定義。給定Ω 上的密度函數(shù)ρ(x),Voronoi 單元Vi的質(zhì)心定義為:

        式中ProjΩ表示通過乘以一個常數(shù)因子將點(diǎn)投影到球面Ω 上。如果Ω 為單位球面,那么:

        1.2 Lloyd 算法及并行化

        生成SCVT 一般采用Lloyd 算法,如算法1[3]所述。

        算法1 生成單位球面SCVT 的Lloyd 算法

        輸入:密度函數(shù)ρ(x),網(wǎng)格點(diǎn)數(shù)k。

        Jacobsen 等[4]提出了基于區(qū)域分解和球極投影的并行算法,稱為MPI-SCVT,如算法2 所述。

        算法2 MPI-SCVT 并行算法

        輸入:密度函數(shù)ρ(x),網(wǎng)格點(diǎn)數(shù)k,MPI 進(jìn)程數(shù)N。

        (1)在球面均勻灑N 個點(diǎn),分別以這N 個點(diǎn)為圓心、以圓心到其鄰居點(diǎn)(與其同屬于一個Delaunay 三角形的點(diǎn))的距離的最大值為半徑做圓,得到N 個球面區(qū)域,將其分配給N 個進(jìn)程。

        (3)各進(jìn)程掃描落在本區(qū)域內(nèi)的網(wǎng)格點(diǎn),之后以本區(qū)域中心的球心對稱點(diǎn)為極點(diǎn)、以此區(qū)域中心處的切平面為投影平面,將本區(qū)域內(nèi)的網(wǎng)格點(diǎn)投影到切平面上(如圖2 所示)。這樣,區(qū)域內(nèi)每個球面網(wǎng)格點(diǎn)即可對應(yīng)于一個平面網(wǎng)格點(diǎn)。然后調(diào)用Triangle 生成平面Delaunay 三角網(wǎng)格。

        圖2 球極投影示意圖(t 為區(qū)域中心,f 為其球心對稱點(diǎn),p 為區(qū)域內(nèi)一點(diǎn),q 為p 的球極投影)

        (4)各進(jìn)程根據(jù)平面Delaunay 三角網(wǎng)格生成球面Delaunay 三角網(wǎng)格,利用球面Delaunay 三角網(wǎng)格計算Voronoi單元積分。計算方法是用三角形外心與三邊中點(diǎn)的連線將其分為三個子部分,之后計算各子部分的積分,將其累加到對應(yīng)頂點(diǎn)的Voronoi 單元積分,如圖3 所示。為避免重復(fù)計算,每個進(jìn)程只計算最靠近中心點(diǎn)為本進(jìn)程負(fù)責(zé)區(qū)域中心點(diǎn)的頂點(diǎn)的Voronoi 單元積分,如果某個頂點(diǎn)到兩個區(qū)域中心距離相等,那么選擇進(jìn)程號小的進(jìn)程計算。

        圖3 Voronoi 單元積分計算方法

        2 高分辨率網(wǎng)格生成解決方案

        2.1 初始點(diǎn)集生成

        如算法1 和算法2 所述,Lloyd 算法是一個不動點(diǎn)迭代算法,因此其收斂速度與初始點(diǎn)集密切相關(guān)。MPISCVT 內(nèi)置了三種網(wǎng)格點(diǎn)初始化方法:Monte Carlo 法、Generalized Spiral 法和Fibbonaci 法。然而,幾種方法生成的初始網(wǎng)格質(zhì)量并不好,與最終收斂結(jié)果距離較遠(yuǎn)。

        在此,采用球面正二十面體二分加密的方法,如圖4所示。首先給定球面正二十面體網(wǎng)格點(diǎn),形成球面Delaunay三角網(wǎng)格(G0 網(wǎng)格),然后連接各三角形三邊中點(diǎn),將原來一個三角形一分為四,得到右上網(wǎng)格(G1 網(wǎng)格)。接著將右上網(wǎng)格的每個三角形用同樣的方法一分為四,得到左下網(wǎng)格(G2 網(wǎng)格),依此進(jìn)行下去,即可逐步得到高分辨率網(wǎng)格。

        圖4 球面正二十面體二分加密方法

        表1 中展示了使用幾種初始化方法后達(dá)到相同收斂精度所需的迭代步數(shù)。此處判定收斂的變量為相鄰兩次迭代網(wǎng)格點(diǎn)變化量的l1范數(shù)的平均值,收斂參數(shù)分別為1×10-8、1×10-9和1×10-10??梢钥吹?,對于不同分辨率的網(wǎng)格,二十面體二分加密法(Icosahedron)所需的迭代步數(shù)都遠(yuǎn)少于其他幾種方法。值得注意的是,隨著收斂準(zhǔn)則變嚴(yán)格(即收斂參數(shù)變?。?,其他幾種初始化方法不能收斂的情況變得更多。當(dāng)網(wǎng)格分辨率較高時,只有二十面體二分加密法可以收斂。此測試結(jié)果表明使用二十面體二分加密的初始化方法可以獲得更好的初始網(wǎng)格。

        表1 相鄰兩次迭代格點(diǎn)變化量l1 范數(shù)達(dá)到收斂條件所需的迭代步數(shù)

        2.2 解決大變量問題

        2.2.1 MPI 通信問題

        MPI-SCVT 初始化及迭代過程中需要使用MPI broadcast 進(jìn)行數(shù)據(jù)廣播,當(dāng)數(shù)據(jù)大小超過一定量(約2 GB)時會出錯。因此,對broadcast 代碼進(jìn)行修改,設(shè)置傳輸數(shù)據(jù)數(shù)量上限。對于未超過上限的數(shù)據(jù)像原來一樣進(jìn)行一次通信,對于超過上限的數(shù)據(jù),將數(shù)據(jù)分段,進(jìn)行多次通信,即可解決此問題。

        具體地,MPI-SCVT 使用broadcast 廣播的大變量是points,其類型為vector<pnt>,pnt 為自定義的class 類型,單個實例所占用內(nèi)存空間為48 B。因此,設(shè)置傳輸數(shù)據(jù)數(shù)量上限參數(shù)num_pts_limit_bcast 為40 000 000。在通信前,主進(jìn)程將全部網(wǎng)格點(diǎn)數(shù)num_pts 廣播給其他進(jìn)程。之后在傳輸數(shù)據(jù)前進(jìn)行判斷,如果num_pts<=num_pts_limit_bcast,那么直接進(jìn)行一次通信;否則,將數(shù)據(jù)分段,進(jìn)行多次通信。此處需要注意的是,對于非源進(jìn)程,boost MPI的broadcast 函數(shù)對于未分配內(nèi)存的vector,可以根據(jù)源進(jìn)程vector 大小自動為其分配內(nèi)存并使用接收到的數(shù)據(jù)賦值;對于已分配內(nèi)存的vecotor,將自動覆蓋vector 里面的內(nèi)容。另一方面,對于多次通信的情況,因為每次通信一部分?jǐn)?shù)據(jù),所以需要指定points 向量的起始位置,此時非源進(jìn)程的points 必須是已經(jīng)分配過內(nèi)存的。因此,在進(jìn)行通信前為未分配內(nèi)存的points 分配內(nèi)存,即可保持代碼統(tǒng)一且簡潔。

        2.2.2 Triangle 調(diào)用問題

        Triangle 是生成平面Delaunay 三角網(wǎng)格的程序,當(dāng)輸入的網(wǎng)格點(diǎn)數(shù)超過約42 600 000 時無法正常運(yùn)行。為此,將球面分成更多的區(qū)域(即用更多進(jìn)程運(yùn)行),減少每個區(qū)域包含的網(wǎng)格點(diǎn)數(shù)量,即可解決此問題。

        2.2.3 NetCDF 格式問題輸出問題

        大變量NetCDF 格式文件輸出存在同樣的問題。MPI-SCVT 使用NetCDF-CXX 進(jìn)行輸出,除了最后一個變量,其余變量大小均不能超過4 GB。為支持更多大變量的輸出,將NetCDF-CXX 庫替換為PnetCDF庫,即可消除變量大小的限制。此處需要注意的是,因為PnetCDF單次輸出數(shù)據(jù)大小限制在2 GB 以內(nèi),所以對于超過2 GB大小的變量,需要將其分塊,進(jìn)行多次輸出。

        在進(jìn)行分塊輸出時,對于高維數(shù)據(jù),要確定在哪個維度方向進(jìn)行劃分。一般需要在與網(wǎng)格點(diǎn)數(shù)(或者三角形個數(shù))相關(guān)的維度進(jìn)行。如果此維度不是變化最慢的維度,那么需要分配一個臨時buffer 數(shù)組將每次要輸出的數(shù)據(jù)拷貝到相應(yīng)的位置上。這樣做的原因是,PnetCDF每次輸出的數(shù)據(jù)必須是一段連續(xù)內(nèi)存的數(shù)據(jù),如果不進(jìn)行拷貝,那么無法在對應(yīng)文件的位置寫入正確的數(shù)據(jù)。

        現(xiàn)以二維變量分塊輸出為例進(jìn)行說明。如圖5 所示,假設(shè)num_pts_limit_bcast=10,要輸出的二維數(shù)據(jù)大小為2×10,那么需要將大小為10 的維度劃分,分兩次進(jìn)行輸出,即每次輸出2×5 的數(shù)據(jù)塊。圖中給出了兩次調(diào)用PnetCDF 輸出接口時輸入的start 和count 數(shù)組。如果變量存儲順序符合C 語言習(xí)慣,即一行一行順序存儲,那么兩次輸出時,分別需要將數(shù)組的白色部分和灰色部分拷貝到一個連續(xù)數(shù)組,將此連續(xù)數(shù)組作為輸入?yún)?shù);如果變量符合Fortran 語言習(xí)慣,即一列一列順序存儲,則不需要拷貝到臨時數(shù)組,只需分別將兩次輸出的變量起始地址傳遞給PnetCDF 輸出接口。

        圖5 PnetCDF 二維數(shù)據(jù)分塊輸出示意圖

        3 結(jié)論

        本文介紹了生成高分辨率SCVT 的解決方案,重點(diǎn)包括初始點(diǎn)集生成方法以及應(yīng)對大變量問題的幾種方法。通過采用正二十面體二分加密的方法,顯著減少了收斂所需的迭代步數(shù);將大變量分塊處理,解決了MPI通信、Triangle 調(diào)用以及NetCDF 格式文件輸出的問題。通過采用這一整套方案,可順利生成全球1.9 km 分辨率網(wǎng)格。

        最后需要指出的是,本文介紹的正二十面體二分加密初始化方法應(yīng)用領(lǐng)域為生成全球準(zhǔn)均勻網(wǎng)格,即密度函數(shù)ρ(x)≡1 的情況。對于變分辨率網(wǎng)格(ρ(x)?1),此方法生成的網(wǎng)格與最終迭代收斂的網(wǎng)格之間的差距并不會比其他幾種方法小,因此不再有優(yōu)勢。對于ρ(x)?1時,如何生成相應(yīng)的初始網(wǎng)格,使其與迭代收斂網(wǎng)格差距盡可能小,是下一步的研究方向。

        猜你喜歡
        剖分球面進(jìn)程
        基于重心剖分的間斷有限體積元方法
        債券市場對外開放的進(jìn)程與展望
        中國外匯(2019年20期)2019-11-25 09:54:58
        球面檢測量具的開發(fā)
        二元樣條函數(shù)空間的維數(shù)研究進(jìn)展
        Heisenberg群上移動球面法的應(yīng)用——一類半線性方程的Liouville型定理
        一種實時的三角剖分算法
        復(fù)雜地電模型的非結(jié)構(gòu)多重網(wǎng)格剖分算法
        球面穩(wěn)定同倫群中的ξn-相關(guān)元素的非平凡性
        社會進(jìn)程中的新聞學(xué)探尋
        拉伸筋在球面拉伸件拉伸模具中的應(yīng)用
        河南科技(2014年6期)2014-02-27 14:06:32
        日本一区二区三区在线观看视频 | 国产欧美一区二区三区在线看| 极品成人影院| 欧美做受视频播放| 亚洲一区二区三区中文视频| 麻豆国产精品久久天堂| 久久精品免费中文字幕| 少妇激情一区二区三区视频| 男女18禁啪啪无遮挡| 亚洲成a人片在线观看中文!!!| 长腿丝袜在线观看国产| 久久在一区二区三区视频免费观看| 久久精品女人天堂av免费观看| 影音先锋每日av色资源站| 日本香蕉久久一区二区视频| 一区二区三区观看在线视频| 麻豆视频在线播放观看| 亚洲精品www久久久久久| 亚洲精品久久久无码av片软件| 亚洲AVAv电影AV天堂18禁| 网址视频在线成人亚洲| 久久久精品久久久久久96| 人人妻人人爽人人澡人人| 巨爆乳中文字幕爆乳区| 亚洲精品中文字幕乱码人妻| 国产一区二区三区av免费| av免费网址在线观看| 99精品视频在线观看免费| 2022AV一区在线| 久久精品国产熟女亚洲av麻豆| 呦系列视频一区二区三区| 国自产偷精品不卡在线| 天堂AV无码AV毛片毛| 美女被内射中出在线观看| 无码人妻一区二区三区免费看 | 国产一区二区三区中文在线| 色拍自拍亚洲综合图区| 国产精品一区二区韩国AV| 天堂av一区一区一区| 日本一区二区三区视频国产| 日本丰满熟妇videossex8k|