更全的杂志信息网

基于无锁原子操作的多线程并行Delaunay三角化算法*

更新时间:2009-03-28

1 引言

计算机科学与技术发展迅速,如今数值模拟的需求日益渐增,以有限元方法为代表的数值计算方法,已广泛应用于机械、电子、水利、土木建筑、热传导及电磁学等工程领域[1]。而这对网格生成提出了新的挑战。对用户而言,要生成复杂区域的网格,通常意味着需要生成一系列渐进加密的中间网格,以满足特定的设计要求[2]。如今大型并行计算机不断普及,生成上亿单元网格的需求已不再罕见。尤其是在计算流体力学等领域,如直接数值模拟DNS(Direct Numerical Simulation)、大涡模拟LES(Large-Eddy Simulation)、分离涡流模拟DES(Detached-Eddy Simulation)等算法,通常需要数亿甚至数十亿(108~109)的网格单元,现有的串行算法在时间与内存上都难以胜任[1,3,4]。因此,如何用并行的算法快速生成大规模的网格逐渐成为当今研究的一个热点。

将一门课程分解渗透入专业课讲解的过程当中,高职院校所有开设的课程中专业课占了大部分比例,若在每门课讲授知识的同时,将相关职业素养带入到课堂中讲解,会使课堂气氛有所转换,在连续讲解的专业课当中做个中断,插入职业素养,丰富了课堂内容,插入点可选取相关知识点讲解的同时,或者采用某种教学方法的同时。让学生体会到职业素养时时刻刻都在我们身边,处处都涉及职业素养,教师将生动有趣的职场事件以各种形式渗透到课堂当中,让学生能够轻松自在的完成课堂的内容,不仅掌握了专业知识,同时还提高了职业素养。教师需要在课前做好整门课程的教学计划,制定详细的职业素养渗透点。

Delaunay三角化方法因具备数学基础好、快速有效,且生成的单元质量较好等独特的优势,引起了来自如计算几何、计算工程等领域的众多研究者的关注,并逐渐成为网格生成领域的主流方法之一[5]。本文旨在Remacle等[2;6]提出的多线程并行Delaunay三角化算法基础上,分析其不足之处,提出基于无锁原子操作的改进算法,确保所生成的网格为严格Delaunay三角化,且生成算法效率更高。

下一步,我们将拓展应用算法于Delaunay细分算法的内部点插入,以及网格优化过程;最终结合现有的基于MPI(Message Passing Interface)的分布式并行网格生成算法[7],研发一套面向E级计算的多级并行网格生成算法。

2 Delaunay已有算法回顾

2.1 Delaunay三角化的基本概念

考虑n个点的点集S={p1,…,pn}⊂R2nN*,其三角化{△pipjpk|0<i<j<k<n}为无相互交叠的三角形集,且恰好覆盖由S的所有点组成的凸包Ω(S),S为待三角化的点集。令S的一个三角化满足:∀τT(S),τ=△p1p2p3;设q为其外接圆,∀pS(pp1pp2∧≠p3),都有p不在·q内。这样的T(S)称为S的Delaunay三角化(Delaunay Triangulation)。R3内Delaunay三角化的定义同上,需将其中的三角形换作四面体,外接圆换作外接球。不失一般性,下文中的“三角”通指二维中的三角形或三维中的四面体,“外接圆”通指二维中的外接圆或三维中的外接球。

2.2 Delaunay增量插点串行算法

令每一个四面体单元τ都附一个M位的数组ατ[M]。将数组初始化为ατ={0,0,…,0},若线程i的点在τ的外接圆内,那么置ατ[i]位为1,置τ的每一邻元τατ[i]位为1。noOverlap函数负责确保只有当数组的ατ[0],…,ατ[i-1]位皆为0时,该点才被插入,否则延后至下一步。每次迭代结束后该数组被重置为0[2]

DTk为点集Sk={p1,…,pk}⊂Rd的Delaunay三角化。增量插点算法将为给定点pk+1Ω(Sk)插入DTk以建立点集Sk+1={p1,…,pk,pk+1}的Delaunay三角化DTk+1的增量算法,可抽象地描述为:

DTk+1=DTk-C(DTk,pk+1)+B(DTk,pk+1)

其中,Delaunay空腔(Delaunay Cavity)C(DTk,pk+1)为外接圆包含新插入点pk+1的三角集(如图1所示,空腔中的三角不属于DTk+1),从DTk中移除C(DTk,pk+1)后将出现一个多面体空腔,而Delaunay球(Delaunay Ball)B(DTk,pk+1)则为填充上述多面体空腔所需的三角集。

算法1给出了串行算法伪码,它在诸如Tetgen 1.5[8]、Gmsh[6]、DTIso3D[9 - 11]等程序中都已有较成熟的实现。

  

Figure 1 Delaunay triangulation DTk and Delaunay cavity of pk+1图1 Delaunay三角化DTk和pk+1的Delaunay空腔

算法1 Delaunay增量插点迭代串行算法

DelaunaySerial(DTk,pk+1)

Inputs:网格DTk,点集Sk,待插入点pk+1

Outputs:插入点pk+1之后的网格DTk+1

Step 1 置所有单元的访问标记为false,置C(DTk,pk+1)为空,置栈T为空。

Step 2 找到包含pk+1的三角单元t0,将其加入C(DTk,pk+1),并压入栈T中。

}

(1) 从栈T弹出一个三角单元τ,置其访问标记为true;

(2) 对τ的每一个邻元τj,若τj的访问标记为false,且pk+1τj的外接圆内:

将τj加入C(DTk,pk+1),并压入栈T中。

本文着重以绿色施工管理为目的,介绍BIM技术在本项目的节地、节水、节材、节能及环境保护方面的实践应用。

系统设计中电源管理模块提供对系统各模块的电源支撑,电源监控模块监控系统各路电源电压电流,避免突发异常损毁设备,而电压参考模块对各级运放提供参考电压,以用于信号多级放大处理。系统通过中央处理单元MPU完成对各模块的控制及实时的数据采集与处理,通过RS422与上位机或上级控制系统进行通信处理。针对系统信号调理模块的设计,其方案如下:

《长江口综合整治开发规划》北支整治的思路仅仅是缩窄北支中下段的河宽,中段新河港北延伸段建造水闸的条件已基本成熟。新河港北闸的建设,对打通北排河道、提高崇明岛北部地区防汛排水和水资源调度能力十分必要,因此,需要市级层面统一协调,相关职能部门简化审批流程,让项目建设早日发挥功效。

Step 5 置B(DTk,pk+1)为空。

Step 6 对C(DTk,pk+1)的每一个边界元f

(1) 以pk+1f建立新的三角单元τ

二是次要关系。旅游危机事件网络舆情系统中的主客系统与外围因素之间的互动形成了除主客关系外的次要关系。旅游危机事件网络舆情系统中的外围因素虽然没有显著作用于系统内的舆情主体、舆情客体以及传播媒介,但起到了重要的环境变量的作用,从而形成了外围因素与主客系统之间的互动关系,构成了旅游危机事件网络舆情系统中的次要关系。由政治、经济、文化、制度以及技术等因素共同形成的环境从宏观层面影响着旅游危机事件网络舆情的发展与演化,因此,不能忽略外围环境因素在旅游危机事件网络舆情系统中发挥的作用。主要关系与次要关系都是客观存在的,且二者相辅相成,共同构成旅游危机事件网络舆情系统。

(2) 将τ加入B(DTk,pk+1)中。

Step 7pk+1的Delaunay球为B(DTk,pk+1)。

Step 8DTk+1=DTk-C(DTk,pk+1)+B(DTk,pk+1)。

2.3 Delaunay增量插点并行算法

2.3.1 并行方法总述

现有的粗粒度并行算法一般采用文献[5,7]中提到的基于区域分解、分而治之的策略,适用于分布式内存模型。由于不可预知各区域最终生成的网格规模,因而很有可能出现负载不平衡的现象。一种最常见的解决策略则是过度分解区域(即区域分解的数目远大于进程数),并由管理进程负责任务调度。然而,由于所用的投影策略,区域分解得越细,越容易出现区域分解失败、或是很难修正的情况,因此该算法可扩展性能有限。

另一类细粒度并行算则如文献[2]中提到的基于空腔互斥的并行插点策略,及文献[12,13]中提到的非耦合区域分解并行策略等。

基于空腔互斥的并行插点策略的基本思路是:将点集作Hilbert排序,然后将其等分予各线程,各线程再并行插点。插点过程中,当且仅当两点的Delaunay空腔无交叠互斥——即无公共三角与公共交界边时(三维下为公共四面体与公共交界面),才可同时插点,否则其中一个线程(通常为线程编号较大的线程)将放弃本次插点,将其置于任务列表的队尾中。在寻找空腔及更新相邻关系后,加入两次OpenMP Barrier操作,则可保证无冲突。

后一种基于非耦合区域分解的并行策略的基本思路是:将空间划分为若干个区域(zone),每个线程负责插入其中一个或多个区域内的点,若某点插入后有单元的外接圆超越区域边界,则将其置为边界单元。最后再合并各线程所得的子网格,并去除重复的交界单元,只保留顶点位于最小编号区域的副本。由于该方法在插点完成后须合并子网格,不适用尺寸场驱动的内部点生成与插入模块,本文的工作是在文献[2]的基础上展开的,下面将详细介绍其实现方法。

2.3.2 基于OpenMP Barrier操作的并行插点方法

首先对点集作Hilbert排序,使相邻点在几何上亦相邻,并将其等分予各线程,即可最大程度地降低空腔交叠的概率。在算法的开始阶段,空腔单元数量较小,发生空腔交叠的概率较大,可预先串行插入20×M个点,以避免这一阶段的额外空腔交叠,剩下的点再用并行方法插入[2]

给定点集的Delaunay三角化算法有很多:分而治之法、基于凸包法、扫描线法、Gift Wrapping法和增量插点法(Incremental Insertion Algorithm)等[5]。其中最简单快捷的方法则是增量插点算法[2]

算法具体实现如下:

}// end of omp parallel

例如:在进行小学语文的教学过程中,教师对于全班的学生都要做到一视同仁,这也是尊重学生的表现。比如,在进行一个语文考核之后,成绩公布的时候,老师对于成绩较好的学生要说:“表现得很棒”,对于成绩稍微不太理想的学生要说:“不错,有进步,继续加油”。这样的鼓励式教学可以激励学生进行学生,同时也做到了尊重学生。又或者老师将成绩稍差的学生叫到办公室进行辅导,让全班的每一位学生都可以被顾及到。这些都是尊重学生的表现,也是加强师德建设的有效途径。

算法2 Delaunay增量插点并行算法

void delaunayParallel(vector 〈Vertex〉&v,vector 〈Tetrahedron〉&t,const int M) {

sortPoints(v,M);

Tetrahedron tau[M];

const int n=v.size();

for (int i=0;i < M;i++) tau[i]=t[0];

(最新消息:经过作者修订的第四版《养生三记》,增补了很多精彩篇章,新版已由黑龙江科技出版社出版发行,各地新华书店将陆续到货。办理邮购的地点为:哈尔滨市南岗区人和街93号,收款人:彭祖补品屋。勿寄私人,以免延误。书价40元,免收邮费。免费联系电话:400-609-2883,汇款单附言请写明您的详细地址和电话,以便给您寄书。)

#pragma omp parallel num_threads(M)

{

int i=omp_get_thread_num();

}

int index=k+i * n / M;

Tetrahedron t=walk(tau[i],v[index]);

vector 〈Tetrahedron〉 cavity=delaunayCavity(t,v[index]);

#pragma omp barrier

if (noOverlap(cavity)) {

vector 〈Tetrahedron〉 ball=delaunayBall(cavity,v[index]);

tau[i]=ball[0];

for (int k=0;k < n / M;k++) {

#pragma omp barrier

1) 建造过程遭遇连续暴雨天气,未及时对地下车库底板和顶板进行回填土,并停止部分基坑降水导致地下水位过高是工程发生抗浮失效的主要原因.

Step 3 当栈T不为空时执行:

堤防是指沿江、河、湖等修建的挡水建筑物,大多为土堤,是重要的防洪工程。然而,一些地方在河道里、在滩地上、在护堤地、在堤身,到处都种上了树。那么,堤防上究竟能不能种树?种树对堤防安全和管理有何影响?堤防周围哪些地方可以种树?哪些地方不可以种树?笔者根据堤防管理工作的要求及实践,对堤防种树从工程管理、防汛安全、法律的角度进行了分析。

}

测试结果如表1所示[2]。其中理论最大加速比由

 

式计算,单次同步开销(不计等待时间)τbarrier由文献[14]中的微基准测试测出,同步总开销由

 

式计算。

Step 4pk+1的Delaunay空腔为C (DTk,pk+1)。

 

Table 1 Gmshs results of 106 random points for the parallel Delaunay kernel.Tested on a 32-core Intel® Xeon® CPU E5-4610 v2 @ 2.30 GHz,with GiB memory表1 Gmsh并行Delaunay内核用于三角化106点集(均布)的测试结果测试平台为32核Intel® Xeon®CPU E5-4610 v2 @ 2.30 GHz内存128 GiB

  

测试项目线程数M12481632理论最大加速比Smax-1.662.865.038.6915.7理论并行效率Smax/M-0.830.710.620.540.49单次同步开销τbarrier/(μs)-0.20.42.03.510同步总开销tbarrier/s-0.20.20.50.430.62空腔交叠次数Nmiss-81542184392实际加速比S-1.632.764.606.629.33实际并行效率S/M-0.810.690.570.410.29三角化总时间t/s11.26.844.052.431.691.20

3 基于无锁原子操作的多线程Delaunay算法

鉴于以上方法的负载平衡性能不好,导致同步时所需等待时间较长,因此本文试图在其基础上提出一种基于无锁原子操作的实现方法。基本思路是:令每一个四面体单元τ都附一个原子变量lock_及一个占位标志occupied_。初始化l=0,p=-1,表示该单元不被任何线程占领(且每当某单元的占位标志被清空时,都需重置为l=0,p=-1)。在计算Delaunay空腔的过程中,线程i将其空腔中所有单元及边界外一层单元的原子变量l置1,占位标记p=i。若有多个线程同时试图将某个变量l置1,则使用如算法3 无锁原子操作的竞争机制接口所示的竞争机制保证有且仅有一个线程成功置位占位变量。因此,去掉第一个同步操作仍能保证程序正确。

在更新相邻关系的过程中,由于Delaunay空腔及其界外一层单元都被占位(即l=1),而此操作仅仅涉及修改局部区域中的单元,因此去掉第二个同步操作也能保证程序正确。改良后的算法如算法3和算法4所示。

算法3 无锁原子操作的竞争机制接口

class OccupiedInterface {

以SPSS22.0统计软件处理实验数据,计量资料成长经历量表评分、认知成套测试评分用(±s)表示,t检验;计数资料以%表示,用X2检验,P<0.05为差异有统计学意义。

public:

政府财政救助机制和市场保险赔偿机制在农业救灾中都能发挥重要的作用。市场补偿和风险的再保险机制拥有良好的激励效应,但是不能完全解决灾害补偿问题。原因在于,一是风险管理的公共属性。灾害管理一般具有公共性质,许多政策会对社会的福利和风险水平具有较大影响,只有政府才能发挥协调与控制作用。二是保险市场不完善。在商业保险中,部分灾害并不属于可保风险。因此,在农业灾害风险的管控与救助中,应将政府与市场主体救助结合起来,发挥市场的激励机制与政府的协调和控制机制,形成对农业巨灾补偿的合力,建立多层次的巨灾补偿联动机制。

OccupiedInterface():occupied_(-1),lock_(false) {}

/*Set it occupied by thread @myThread.It returns true if successfully,else false.*/

王老师:一线教师写出来的论文,和你们的理论研究文章真的没法比,我们的文章普遍质量较差,缺乏理论深度,而且很多教师都是被逼无奈,被迫去写文章、发文章的,怎么可能写出高质量的论文来。

然而,前泽友作能够再次使用肯尼迪的措辞,因为SpaceX公司正在做的事情本质上就是NASA在半个世纪之前实现的成就。如果说有什么区别的话,那么就是NASA早已去过月球,完成过登月壮举。所以,我们最好还是引用肯尼迪讲话中的另一句话。“但有些人问,为什么选择登月?”他问道,“为什么选择登月作为我们的目标?”肯尼迪的疑问振聋发聩,其他段落里提出了问题的解答:头一个登月,确立和平的目标,选择登月是因为它很困难,而选择去月球是因为月球就在那儿。但到了如今,这成了个越加复杂的问题,有着复杂的答案。

bool setOccupiedBy(const int myThread) {

bool oldLock=false;

#pragma omp atomic capture

{

oldLock=lock_;

lock_=true;

}

if (!oldLock)

occupied_=myThread;

return occupied_ == myThread;

}

/*Test whether it is occupied by any thread except @myThread*/

bool occupiedByOthers(const int myThread) const {

return lock_ && occupied_ != myThread;

}

// Test whether it is occupied by thread @myThread

bool occupiedBySelf(const int myThread) const {

return occupied_ == myThread;

}

// Clear its occupying mark by thread @myThread

void clearOccupied(const int myThread) {

if (occupied_ == myThread) {

occupied_=-1;

#pragma omp atomic write

lock_=false;

}

}

protected:

volatile int occupied_;

volatile bool lock_;

}

算法4 基于无锁原子操作的Delaunay增量插点并行算法

void delaunayParallel(vector 〈Vertex〉 &v,vector 〈Tetrahedron〉 &t,const int M) {

sortPoints(v,M);

Tetrahedron tau[M];

const int n=v.size();

for (int i=0;i < M;i++) tau[i]=t[0];

#pragma omp parallel num_threads(M)

{

int i=omp_get_thread_num();

for (int k=0;k < n / M;k++) {

int index=k+i * n / M;

Tetrahedron t=walk(tau[i],v[index]);

// It might fail

vector 〈Tetrahedron〉 cavity=delaunayCavity(t,v[index]);

/*If it fails,the cavity will be empty and the insertion will be canceled.*/

if (!cavity.empty()) {

vector 〈Tetrahedron〉 ball=delaunayBall(cavity,v[index]);

tau[i]=ball[0];

}

}

} // end of omp parallel

}

4 数值实验结果与分析

4.1 并行效率分析

在16核Intel® Xeon® CPU E5-2640 v3 @ 2.60 GHz,内存64 GiB的平台上,107的随机点集的并行效率随线程数增加的情况如表2所示。其中,原子操作次数由空腔总尺寸最大的线程数决定,即:

 

单次原子操作捕获(capture)τcapt与写入(write)τwrite的开销由文献[14]中的微基准测试测出,原子操作的总开销由

tatom=natom(τcapt+τwrite)

式算出。理论时间为总时间除去原子操作开销。理论加速比即为除去原子操作所用时间后所计算出的加速比。

该平台的架构为双CPU,每CPU有8个计算核心,共享64 GiB的内存。从表2中可以看出,在8线程内,原子操作总时间占算法总时间均不超过20%,并能获得较好的并行性能;但在16线程下,由于涉及跨CPU操作,原子操作时间占比显著增加。因此,该算法较适用于单CPU下原子操作开销较小的场合,在16核下的实际加速比也与理论加速比相差较大。

 

Table 2 Results of 107 random points for the new kernel based on lock-free atomic operations.Tested on 16-core Intel® Xeon® CPU E5-2640 v3 @ 2.60 GHz,with 64 GiB memory表2 基于无锁原子操作的Delaunay并行算法用于三角化107点集(均布)的测试结果测试平台为16核Intel® Xeon® CPU E5-2640 v3 @ 2.60 GHz内存64 GiB

  

测试项目线程数M124816原子操作次数natom2.1×1081.1×1085.5×1072.9×1071.5×107空腔交叠次数noverlap-2503517671855单次原子捕获τcapt/(μs)0.0100.0400.0520.0690.23单次原子写入τwrite/(μs)0.00740.00780.0170.0260.021原子操作总开销tatom/s3.645.123.762.753.78实际加速比S-1.692.984.657.06实际并行效率S/M-0.840.740.580.44理论加速比Smodel-1.853.435.5411.87理论并行效率Smodel/M-0.930.860.690.74三角化总时间t/s60.4035.8020.3013.008.56理论总时间tmodel/s56.7630.6816.5410.254.78原子操作时间占比/%6.014171844

4.2 与同步操作实现方法的比较

为排除机器性能的干扰,本文按文献[2]中的描述实现了其算法,并在同一平台上测试,其结果如表3所示。加速比与线程数的关系如图2所示。测试平台同表2。

相比文献[2],本文对空腔交叠互斥的准则有所改动(文献[2]中要求两空腔无公共三角单元则不交叠,而本文除此要求外,还要求两空腔边界无交叠),因此空腔交叠次数约增大一个数量级(由于文献[2]中指出空腔交叠次数与点集规模无关,故本文将测试点集提高一个数量级,保持空腔交叠次数占总点集数量之比一定,以排除空腔交叠次数的影响)。从表3中可以看出,去除同步额外开销后,与理论最大并行效率仍有一定差距。但是,从串行算法效率上看,其性能好于Gmsh。而串行算法中

 

Table 3 Results of 107 random points for the parallel Delaunay kernel based on barriers表3 基于同步操作的并行Delaunay内核用于三角化107点集(均布)的测试结果

  

测试项目线程数M124816理论最大加速比Smax-1.662.824.848.50Smax/M理论最大并行效率-0.830.710.610.53单次同步开销τbarrier/(μs)0.390.420.480.572.38同步总开销tbarrier/s7.874.482.511.422.90空腔交叠次数Nmiss-56135255886实际加速比S-1.612.293.144.53实际并行效率S/M-0.800.570.390.28理论加速比Smodel-1.592.202.935.07理论并行效率Smodel/M-0.790.550.370.32三角化总时间t/s57.1035.5024.9018.2012.60理论总时间tmodel/s49.2331.0222.3916.789.70同步额外开销占比/%1413107.823

  

Figure 2 Results of speedup with the number of threads图2 加速比与线程数的关系

同步操作的额外开销较大,对测试结果也有较大的影响(当M≤8时,理论加速比Smodel小于实际加速比S)。因此,在此平台上并行效率不能进一步提高可能跟机器本身性能有关。通过比较表2与表3的结果,仍可以发现此基于无锁原子操作的算法性能优于同步操作的实现方法。

5 结束语

本文在Gmsh基于同步操作的并行插点算法基础之上提出了基于无锁原子操作的空腔互斥方法,旨在去除负载不平衡所引起的同步等待。与Gmsh相比,虽然原子操作额外开销与同步操作相当,但是,因减少了等待时间而使并行效率提升。但由于实验条件有限,结果受机器性能影响,有待进一步验证。

下一步计划将本算法应用于尺寸场趋动的内部点生成与插入部分,串连边界恢复、网格优化程序,开发一套完整的网格生成软件。再结合已经实现的基于区域分解的多进程粗粒度并行算法,形成多级并行架构,为解决超大规模网格并行生成的技术难题做好技术储备。

参考文献:

[1] Zhang Yu-feng, Zhu Yi-wen. Review for typical methods of finite element mesh automatic generation and research topics in future[J].Journal of Wuhan University(Technology),2005,38(2):54-59.(in Chinese)

[2] Remacle J F, Bertrand V, Geuzaine C.A two-level multithreaded delaunay kernel[J].Procedia Engineering,2015,124:6-17.

[3] Wang Lei, Nie Yu-feng, Li Yi-qiang. Advances of research on parallel delaunay tetrahedral mesh generation[J].Journal of Computer-aided Design & Computer Graphics,2011,23(6):923-932.(in Chinese)

[4] Chen Jian-jun. Researches on the problems about unstructured mesh generation and its parallelizaion[D].Hangzhou:Zhejiang University,2006.(in Chinese)

[5] Zheng Yao, Chen Jian-jun. Unstructured mesh generation:Theories,algorithms and applications[M].Beijing:Science Press,2016.(in Chinese)

[6] Geuzaine C,Remacle J F.Gmsh:A 3-D finite element mesh generator with built-in pre-and post-processing facilities[J].International Journal for Numerical Methods in Engineering,2009,79(11):1309-1331.

[7] Chen J,Zhao D,Huang Z,et al.Improvements in the reliability and element quality of parallel tetrahedral mesh generation[J].International Journal for Numerical Methods in Engineering,2012,92(8):671-693.

[8] Si H. TetGen, a Delaunay-based quality tetrahedral mesh generator[J].ACM Transactions on Mathematical Software (TOMS),2015,41(2):11.

[9] Chen Jian-jun, Huang Zheng-ge, Yang Yong-jian,et al.Unstructured tetrahedral mesh generation for complex configurations[J].Acta Aerodynamica Sinica,2010,28(4):400-404.(in Chinese)

[10] Chen J, Zhao D, Huang Z, et al.Three-dimensional constrained boundary recovery with an enhanced Steiner point suppression procedure[J].Computers & Structures,2011,89(5):455-466.

[11] Chen J J, Zheng Y.Redesign of a conformal boundary recovery algorithm for 3D Delaunay triangulation[J].Journal of Zhejiang University-Science A,2006,7(12):2031-2042.

[12] Zhang Xiao-meng, Lu Zhong-hua, Zhang Jian. 3D parallel Delaunay mesh generation algorithm and its implementation based on OpenMP[J].Application Research of Computers,2016,33(12):3658-3662.(in Chinese)

[13] Lo S H.Parallel Delaunay triangulation in three dimensions[J].Computer Methods in Applied Mechanics and Engineering,2012,237-240:88-106.

[14] Bull J M,Reid F,Mcdonnell N.A microbenchmark suite for OpenMP tasks[C]∥Proc of International Workshop on Openmp,2012:271-274.

附中文参考文献:

[1] 张玉峰,朱以文.有限元网格自动生成的典型方法与研究前瞻[J].武汉大学学报(工学版),2005,38(2):54-59.

[3] 王磊,聂玉峰,李义强.Delaunay 四面体网格并行生成算法研究进展[J].计算机辅助设计与图形学学报,2011,23(6):923-932.

[4] 陈建军.非结构化网格生成及其并行化的若干问题研究[D].杭州:浙江大学,2006.

[5] 郑耀,陈建军.非结构网格生成:理论、算法和应用[M].北京:科学出版社,2016.

[9] 陈建军,黄争舸,杨永健,等.复杂外形的非结构四面体网格生成算法[J].空气动力学学报,2010,28(4):400-404.

[12] 张晓蒙,陆忠华,张鉴.基于 OpenMP 的三维并行 Delaunay 网格生成算法及实现[J].计算机应用研究,2016,33(12):3658-3662.

 
王俊吉,朱朝艳,陈建军,郑澎,徐权
《计算机工程与科学》2018年第05期文献

服务严谨可靠 7×14小时在线支持 支持宝特邀商家 不满意退款

本站非杂志社官网,上千家国家级期刊、省级期刊、北大核心、南大核心、专业的职称论文发表网站。
职称论文发表、杂志论文发表、期刊征稿、期刊投稿,论文发表指导正规机构。是您首选最可靠,最快速的期刊论文发表网站。
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有
如有不愿意被转载的情况,请通知我们删除已转载的信息 粤ICP备2023046998号