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

        ?

        基于STL快速重構(gòu)平面有限元網(wǎng)格邊界

        2012-08-27 06:47:12王家林張德立
        關(guān)鍵詞:鍵值環(huán)線字符串

        王家林,張德立,何 琳

        (重慶交通大學(xué)土木建筑學(xué)院,重慶400074)

        在有限元分析中,有時需要找出模型的邊界進行某些特殊的處理,如對于多連通截面的扭轉(zhuǎn)問題,需要在外邊界上施加應(yīng)力函數(shù)為零的約束條件,在內(nèi)邊界上施加應(yīng)力函數(shù)相等的約束條件[1]。如果基于幾何來建立有限元網(wǎng)格,則邊界是預(yù)先已知的;如果直接從其它有限元軟件中導(dǎo)入網(wǎng)格數(shù)據(jù),則邊界需要根據(jù)網(wǎng)格數(shù)據(jù)分析得到。所以,快速、高效率地根據(jù)有限元網(wǎng)格數(shù)據(jù)找出模型邊界成為算法優(yōu)化的一部分。

        筆者針對多連通截面的平面有限元網(wǎng)格,靈活應(yīng)用C++標準模板庫(簡稱 STL)中的 vector、list、set和map容器,研究了快速分析模型邊界的方法,并成功地應(yīng)用于多連通截面扭轉(zhuǎn)問題的有限元分析中。

        1 C++STL中基本容器的特點

        C++標準模板庫STL是C++的組成部分,提供了大量的可復(fù)用軟件組件,包含了vector、list、set、map等容器及算法,其實現(xiàn)速度和內(nèi)存利用方面都是高效的[2]。充分利用STL技術(shù)能夠極大地提高應(yīng)用程序的開發(fā)效率,殷際英[3]將STL技術(shù)用于邊界元程序設(shè)計中,解決大量數(shù)據(jù)的動態(tài)存儲和內(nèi)存分配問題;李余江,等[4]運用STL技術(shù)以向量模板類的特化繼承對象為變?nèi)萘繑?shù)據(jù)容器編制了面向?qū)ο蟮挠邢拊绦?唐麗玉,等[5]和吳小平,等[6]將 STL 技術(shù)用于Delaunay三角形網(wǎng)格的高效構(gòu)建。

        vector是一種連續(xù)存放、可根據(jù)序號隨機訪問數(shù)據(jù)元素的容器,在所有容器中具有最高的元素訪問效率。不過在插入和刪除元素時會產(chǎn)生內(nèi)存塊的拷貝,當(dāng)內(nèi)存空間不夠時,需要重新申請一塊足夠大的內(nèi)存并進行內(nèi)存的拷貝,導(dǎo)致執(zhí)行時間增加。

        list是STL提供的雙向鏈表,它的數(shù)據(jù)元素在內(nèi)存空間不必連續(xù)存放,插入和刪除數(shù)據(jù)元素的效率高。list數(shù)據(jù)結(jié)構(gòu)只具有順序訪問數(shù)據(jù)元素的能力,不能通過序號直接訪問一個指定的數(shù)據(jù)元素。

        set容器使用一種稱為紅黑樹的平衡二叉檢索樹結(jié)構(gòu)來組織泛化的元素數(shù)據(jù),其每個節(jié)點包含一個取值紅色或黑色的顏色域來進行樹的平衡處理,不會將重復(fù)的鍵值插入容器,也不需要指定具體的插入位置,而按元素在樹中的關(guān)聯(lián)關(guān)系,進行位置檢索和插入,元素的刪除亦然。元素數(shù)據(jù)的檢索,使用的是二叉檢索樹的中序遍歷算法,檢索的效率高于vector、deque 和 list等容器。

        map映照容器由一個鍵值和其它若干數(shù)據(jù)(映照數(shù)據(jù))組成,鍵值和映照數(shù)據(jù)之間,可建立一個數(shù)學(xué)上的映照關(guān)系。容器的數(shù)據(jù)結(jié)構(gòu)同樣是采用紅黑樹進行管理,插入的元素鍵值不允許重復(fù),所使用的節(jié)點元素的比較函數(shù),只對于元素的鍵值進行比較,元素的各項數(shù)據(jù)可通過鍵值檢索出來。故它能快速查找、插入、刪除元素。

        2 網(wǎng)格邊界的分析方法

        2.1 單元節(jié)點編號的存儲方式

        對于一個確定的有限元網(wǎng)格,單元個數(shù)及每類單元的節(jié)點個數(shù)是已知的,因此為了提高數(shù)據(jù)訪問效率,對于每個單元采用了vector<int>數(shù)據(jù)類型存儲各節(jié)點編號。

        2.2 邊界的判別方法

        在平面有限元網(wǎng)格中,一條邊如果只在一個單元中出現(xiàn),則該邊為邊界上的邊,一條邊如果被兩個單元共有則不是邊界。例如,對于簡單網(wǎng)格(圖1),只屬于單元1的邊(2 7 4)是邊界。既屬于單元1又屬于單元2的邊(4 8 5)就不是邊界。

        圖1 平面有限元網(wǎng)格示例Fig.1 Plane finite element mesh

        2.3 利用set容器分析邊界

        在查找模型邊界的過程中,約定單元的每個邊采用該邊上節(jié)點編號按逆時針方向組成的字符串表示。例如,對于圖1的平面有限元網(wǎng)格,單元1的邊為“2 7 4”、“4 8 5”和“5 6 2”,單元2的邊為“4 9 3”、“3 10 5”和“5 8 4”。很顯然,不在模型邊界上的邊會以相反的節(jié)點順序出現(xiàn)兩次,如單元1的邊“4 8 5”和單元2的邊“5 8 4”。于是,可以采用下面步驟來實現(xiàn)邊界的快速識別:

        1)建立一個存儲字符串的set,用以保存分析過程中識別出來的邊界。

        2)對于單元的每一個邊,按單元順時針方向?qū)⑦吷系墓?jié)點編號組成字符串,用該字符串在set中查找有無該字符串:①如果在set中找到該字符串,說明此字符串表示的邊為第2次出現(xiàn),不是模型邊界,則從set中將該字符串刪除;②如果在set中找不到該字符串,表明此字符串表示的邊為第1次出現(xiàn),可能是模型邊界,則將該邊上的節(jié)點的編號按單元逆時針方向組成字符串后加入set中。

        3)當(dāng)全部單元的所用邊均按照步驟2)分析處理完畢后,則set中的字符串標記出的邊為模型的邊界。

        按照上述算法,set中不是模型邊界的邊能夠及時從set中刪除,使set容器中的元素個數(shù)盡可能少,從而提高查詢效率。

        2.4 利用map容器分析邊界環(huán)線

        盡管set容器中的字符串標記了模型的邊界,但各個邊處于散亂狀態(tài),沒有連接成邊界環(huán)線,扭轉(zhuǎn)分析需要能識別出每一個邊界環(huán)線。在圖1中,處于單元1的邊界(2 7 4)和處于單元2中的邊界(4 9 3)是相連接的??梢妰蓷l相連的邊界,其中一條的末尾節(jié)點號正好是另一條的首節(jié)點號?;诖颂攸c,即可建立形成邊界環(huán)線的算法。

        2.4.1 生成邊界map

        從前述set中取出各邊界邊組成的字符串,以首節(jié)點號為關(guān)鍵字、字符串為數(shù)據(jù)形成map,具體算法步驟為:

        1)建立一個以整數(shù)為鍵值,數(shù)據(jù)為字符串的map。

        2)按順次遍歷的方式訪問set中的每個元素(即表示每個邊的字符串),獲得第1個節(jié)點編號,以第1個節(jié)點編號為鍵值、以字符串為映照數(shù)據(jù)生成一個元素添加到map中。例如,對于單元2中的邊(3 10 5),在 set存放為字符串“3 10 5”,就以“3”為鍵值、“3 10 5”為映照數(shù)據(jù)插入map中。

        對set中每個元素執(zhí)行完畢后,map中每個元素的鍵值表示了一個邊的起始節(jié)點,其數(shù)據(jù)字符串表明了該邊上的各個節(jié)點。

        3)清空set容器以節(jié)省內(nèi)存。

        2.4.2 利用邊的連接性生成邊界環(huán)線

        基于map中邊的連接性即可形成各條邊界環(huán)線,具體算法步驟為:

        1)新增一個list<int>類型的鏈表表示一個環(huán)線,用于存放一個環(huán)線上的各個節(jié)點的編號。

        2)從map中取出第一個元素(即獲得該元素的數(shù)據(jù)字符串,并從map中將該元素刪除)作為當(dāng)前分析邊。

        3)從當(dāng)前分析邊的字符串中取得各個節(jié)點編號,除最后一個節(jié)點外,將其余節(jié)點的編號順次加入到環(huán)線鏈表中。不加入最后一個節(jié)點是為了避免環(huán)線上節(jié)點編號重復(fù),例如:對于圖1中的邊界“2 7 4”,將邊界存入環(huán)線時只存放節(jié)點號2、7。

        4)當(dāng)前分析邊的最后一個節(jié)點的編號指出了與之相連的下一個邊的起始節(jié)點,因此以其作為鍵值在map中查找相連邊:①如果在map中找到了與當(dāng)前分析邊相連的下一邊,則將該邊從map中取出(即獲得該元素的數(shù)據(jù)字符串,并從map中將該元素刪除)作為新的分析邊,回到步驟3);②如果在map中找不到相連的邊,則表明環(huán)線已閉合,保存當(dāng)前邊界環(huán)線。

        5)查看map中是否還有未分析邊:①如果map非空,則表明邊界環(huán)線還沒有分析完畢,回到步驟1);②如果map已空,則表明邊界環(huán)線已經(jīng)分析完畢,結(jié)束邊界環(huán)線的分析。

        上述算法中,從map中逐步取出邊的措施及時刪除了已經(jīng)分析過的邊,使map中元素個數(shù)遞減,此策略有助于提高map中元素的查找效率。

        3 算法示例

        用ABAQUS有限元軟件建立一個含兩個孔洞的平面區(qū)域,采用三角形單元進行網(wǎng)格劃分后得到如圖2的有限元網(wǎng)格,寫入inp文件。

        圖2 ABAQUS劃分的平面有限元網(wǎng)格Fig.2 Finite element mesh in ABAQUS

        ABAQUS的inp文件是關(guān)于有限元模型的文本文件,文獻[7-8]對其具體信息進行了介紹。筆者編寫了從inp文件讀取到網(wǎng)格數(shù)據(jù)并分析邊界的程序,找出了網(wǎng)格邊界并連成了環(huán)線,其結(jié)果如下:

        與圖2對比可見,成功地獲得了圖中網(wǎng)格的3條邊界,驗證了前述算法的正確性。

        4 結(jié)語

        本文方法利用了set和map容器能夠快速查找數(shù)據(jù)的特點,能達到快速、高效地從網(wǎng)格中找出邊界并將邊界連成環(huán)線。程序量小、簡單、適用,解決了基于平面有限元網(wǎng)格快速分析模型邊界的問題。

        [1] 崔振山,劉國燕,劉才.多連通任意截面桿件扭轉(zhuǎn)問題的有限元法[J].燕山大學(xué)學(xué)報,2001,25(4):297-300.

        Chui Zhenshan,Liu Guoyan,Liu Cai.Finite element method for torsional bar with arbitrary shaped and multiple-connected crosssections[J].Journal of Yanshan University,2001,25(4):297-300.

        [2] 葉至軍.C++STL開發(fā)技術(shù)導(dǎo)引[M].北京:人民郵電出版社,2007.

        [3] 殷際英.STL技術(shù)在邊界元離散化過程中的運用[J].北方工業(yè)大學(xué)學(xué)報,2001(1):64-67.

        Yin Jiying.Application of STL technique to discretion by boundary element method[J].Journal of North China University of Technology,2001(1):64-67.

        [4] 李余江,殷際英,賴錫煌,STL技術(shù)在面向?qū)ο笥邢拊绦蛑械膽?yīng)用[J].應(yīng)用力學(xué)學(xué)報,2005,22(1):146-149,170.

        Li Yujiang,Yin Jiying,Lai Xihuang.STL C++in finite element programming with applications[J].Chinese Journal of Applied Mechanics,2005,22(1):146-149,170.

        [5] 唐麗玉,朱泉鋒,石松.基于STL的Delaunay TIN構(gòu)建的研究與實現(xiàn)[J].遙感技術(shù)與應(yīng)用,2005(3):40-43.

        Tang Liyu,Zhu Quanfeng,Shi Song.Research and implementation of constructing delaunay TIN based on STL[J].Remote Sensing Technology and Application,2005(3):40-43.

        [6] 吳小平,許天會,趙文光.高效構(gòu)建Delaunay三角網(wǎng)算法研究及應(yīng)用解決方案[J].水電能源科學(xué),2009(1):96-98,108.

        Wu Xiaoping,Xu Tianhui,Zhao Wenguang.Research on effective construction of delaunay TIN algorithm and its solution[J].Water Resources and Power,2009(1):96-98,108.

        [7] 莊茁.基于ABAQUS的有限元分析和應(yīng)用[M].北京:清華大學(xué)出版社,2009.

        [8] 劉展.ABAQUS6.6基礎(chǔ)教程與實例詳解[M].北京:水利水電出版社,2008.

        猜你喜歡
        鍵值環(huán)線字符串
        世界首個沙漠鐵路環(huán)線建成啦
        軍事文摘(2022年18期)2022-10-14 01:33:10
        非請勿進 為注冊表的重要鍵值上把“鎖”
        行紀阿里大環(huán)線
        中國公路(2017年6期)2017-07-25 09:13:58
        一鍵直達 Windows 10注冊表編輯高招
        電腦愛好者(2017年9期)2017-06-01 21:38:08
        一種新的基于對稱性的字符串相似性處理算法
        西咸北環(huán)線高速公路
        依據(jù)字符串匹配的中文分詞模型研究
        一種針對Java中字符串的內(nèi)存管理方案
        注冊表值被刪除導(dǎo)致文件夾選項成空白
        小改字符串讓殺毒軟件閉嘴
        国产午夜激情视频在线看| 亚洲高清在线视频网站| 极品美女销魂一区二区三| 日韩精品一区二区三区av| 亚洲国产区中文在线观看 | 国产亚洲精品90在线视频| 亚无码乱人伦一区二区| 国产综合精品| 久久精品娱乐亚洲领先| 91精品一区国产高清在线gif| 毛片免费在线播放| 国产精品系列亚洲第一| 亚洲国产成人av第一二三区 | 亚洲一区二区三区厕所偷拍| 亚洲视频专区一区二区三区| 精品香蕉99久久久久网站| 曰韩亚洲av人人夜夜澡人人爽| 精品午夜福利无人区乱码一区| 久久永久免费视频| 亚洲成AV人片在一线观看| 91久久国产精品综合| 国产天堂av在线一二三四| 中国无码人妻丰满熟妇啪啪软件| 麻豆果冻传媒在线观看| 麻豆第一区MV免费观看网站| 91亚洲欧洲日产国码精品| 国产一区二区一级黄色片| 色婷婷久久精品一区二区| 亚洲高清乱码午夜电影网| av无码久久久久久不卡网站| 中文字幕巨乱亚洲| 国产目拍亚洲精品二区| 国产一级内射视频在线观看| 一本久道综合在线无码人妻| 成年女人毛片免费视频| 国产一区二区三区精品久久呦| 久草视频在线视频手机在线观看| 久久女人精品天堂av影院麻| 国产精品多人p群无码| 亚洲男人av香蕉爽爽爽爽| 日韩不卡av高清中文字幕|