专利名称:一种无数据共享冲突的二维流线并行放置方法
技术领域:
本发明涉及一种基于流线的流场并行可视化方法,特别涉及一种无数据共享冲突的二维流线并行放置方法,属于科学计算可视化中基于流线的流场可视化技术领域。
背景技术:
流场可视化在流体力学和空气动力学等领域有着广泛而重要的应用,其目的是将不可见的流场数据转换为可见的流场图像,以便揭示流场的流动模式和流场特征。流线是流场可视化的基本方式之一。为了建立流场流线图,需要在流场的适当位置放置适当数量的流线。针对二维流场的流线放置问题,国内外学者提出了很多流线放置方法,例如=Turk和Banks提出的由图像引导的流线放置方法(参见G. Turk and D. Banks. Image-guided streamline placement. Proc. ACM SIGGRAPH,96,1996 :453-460.)、Jobard 和 Lefer 提出的临近点流线放置策略(参见 B. Jobard and ff. Lefer. Creating evenly-spacedstreamlines of arbitrary density. Proc. 8th EG Workshop on Visualization inScientific Computing, 1997 (7) :43-56.)、Mebarki等人提出的最远点流线放置策略(参见 A. Mebarki, P. Alliez, and 0. Devillers. Farthest point seeding for efficientplacement of streamlines. Proc. IEEE Visualization’05, 2005 :479-486.),等等。这些方法都能建立分布比较均匀的流线图,取得比较好的流场可视化效果。然而不足的是,这些方法都是串行算法,并不适合于并行处理。也就是说,这些方法都只能在流场中逐一放置流线,而不能同时放置多条流线。其原因在于新放置的流线必须考虑流场中已有流线的分布情况,才能有效地控制流线之间的间隔。如果在并行模式下,采用这些方法同时放置多条流线,会因为流线之间的相互干扰而使结果流线图出现“伪边界”或者是“视觉混乱”的现象(参见张文耀,宁建国,王义.一种适用于二维流场的并行流线放置方法.申请号201110452884. O,申请日2011 年 12 月 29 日·)。为了解决“伪边界”和“视觉混乱”问题,张文耀等人提出了一种基于虚拟拓扑区域的并行流线放置方法(参见张文耀,宁建国,王义.一种适用于二维流场的并行流线放置方法.申请号201110452884. 0,申请日2011年12月29日.)。该方法在流场定义域上叠加一个正交控制网格,为每个网格单元设置一个计数器,记录各个网格单元内的流线数,同时设定计数器的上限值,限定每个网格单元内所允许的流线数目;初始时刻每个网格单元都是空白的,相应计数器的计数值为0,如果某个网格单元的计数器值不为0,则表示该网格单元是非空的;然后,将流场中由流线、临界点或流场边界所包围的封闭区域定义为虚拟拓扑区域VTA (Virtual Topological Area),并用该区域所包含的空白网格单元来描述VTA ;开始时整个流场被当作一个VTA,在其中放置流线,将其分割成不同的VTA ;并行处理就是将不同的VTA指派给不同的处理部件PE(Processing Element),由各个PE在各自的VTA内同时放置新流线;在放置新流线的过程中,如果新流线延伸到计数器值已达计数上限的网格单元时,该流线的计算过程就终止,同时将该流线所触及的网格单元的计数器值增加I。
基于虚拟拓扑区域的并行流线放置方法有效地加速了二维流场的流线放置过程,并成功避免了 “伪边界”和“视觉混乱”问题,可以提高大规模流场的可视化效率。然而不足的是该方法的并行处理结果存在一定的不确定性,即对于同样的流场,在相同输入和参数设置条件下,前后两次运行的结果可能不一样。其原因是该方法的并行处理存在数据共享冲突;为了解决共享冲突,必须对共享数据进行互斥访问;而共享数据的互斥访问顺序是随机的、不确定的,从而导致最终结果的不确定性。为说明这种情况,下面给出一个具体实例。图I是在某测试流场放置流线的中间结果。从图I可以看到,该流场目前只有一条流线,即图中蓝色的线,其中红色小圆点是该流线的种子点。图I的蓝色流线以及该流线所触及的黄色的非空网格将整个流场分割成两个区域VTA1和VTA2,其中黄色的非空网格单元是VTA1和VTA2共享的区域边界。按照既定的并行处理策略,可以在VTA1和VTA2内同时放置新流线。假设处理部件PE1和PE2分别负责VTA1和VTA2的流线放置工作,且每个网格单元所允许的流线数目为2,那么PE1和PE2会因为同时写同一个非空网格单元的计数器值而出现数据共享冲突。冲突的结果是计数器的计数值出现错误,使最终的流线放置结果异 常,例如某个网格单元拥有的流线可能多余2条。为了解决共享冲突,必须对共享数据进行互斥访问。对于图I所示的实例,共享数据就是图中非空网格单元的计数器值。不失一般性,考察某个共享的非空网格单元,例如图2所示的网格单元Ctl,在只有并行处理部件PEJPPE2的情况下,对Ctl的互斥访问存在两种情况I) PE1先访问Ctl,然后PE2访问;2) PE2先访问
C。,然后PE1再访问。实际运行时,到底出现哪种情况是不确定的。如果如图2所示,PE1在VTA1的P1处放置一条流线,与此同时PE2在VTA2的p2处放置一条流线,那么当PE1和PE2都访问到Ctl时,会因为PE1和PE2的访问顺序不同而出现两种不同的结果。如果PE1先访问Ctl,那么PE1会读到Ctl计数器值为I (Ctl只包含一条流线)而让新的流线S1经过Ctl继续延伸,同时把Ctl的计数器值增加到2。之后等到PE2访问Ctl时,PE2会读到Ctl的计数器值为2,由于每个网格单元最多只能有2条流线,此时PE2不会让新的流线S2进入网格单元Ctl,因此流线S2在Ctl处被截断,如图2所示。与此相反,如果PE2先访问Ctl,那么流线S2将通过Ctl得以延伸,而S1将在Ctl处被截断,其结果如图3所示。显然图2和图3的结果是不一样的。这种不一致性是由并行处理中的数据共享冲突造成的,在实际应用中会引起不必要的误会和混淆。为了避免并行流线放置结果的不确定性,必须设法解决并行处理存在的数据共享冲突问题,并由此发展新的并行流线放置方法,在加速流线放置过程的同时确保并行流线放置结果的唯一性。
发明内容
本发明的目的是提供一种适用于二维流场的无数据共享冲突的并行流线放置方法,在不损害流线放置质量的前提下,通过并行处理加速流线放置过程,并确保并行流线放置结果的唯一性。本发明的目的是通过以下技术方案实现的一种无数据共享冲突的二维流线并行放置方法,包括以下步骤步骤I、对于给定的二维流场,按照下述方式构造两个覆盖该流场定义域的正交控制网格,其中一个网格用于控制流线种子点的选取,令其为Gs,另一个网格用于控制流线的追踪,令其为Gt。不失一般性,令Gs和Gt的网格单元都是正方形的,Gs的网格单元边长为Y,Gt的网格单元边长为λ。Υ和λ可以根据实际需要设定,但是两者之间必须满足约束条件Y =η* λ,其中η是大于等于3的正整数。这一约束使控制网格Gs和Gt之间存在如下嵌套关系一个Gs网格单元包含多个Gt网格单元;每个Gt网格单元都属于一个Gs网格单元;已知Gs网格单元,可以找到其内部的Gt网格单元;已知Gt网格单元,也可以找到与之对应的Gs网格单元。构造好控制网格Gs和Gt之后,将两个网格的所有网格单元都标记为空白状态,与此同时,将控制网格Gs中的空白四联通区域定义为有效播种区域VSA(Valid SeedingArea),将控制网格Gt中的空白四联通区域定义为局部追踪区域LTA (Local TracingArea)。
步骤2、将控制网格Gs初始化为一个VSA,令其为VSAtl ;将控制网格Gt初始化为一个LTA,令其为LTA。。由于控制网格Gs和Gt的嵌套关系,一个LTA可能包含一个或多个VSA,或者是不包含任何VSA。如果一个LTA不包含任何VSA,则认为该LTA是无效的,否则就是有效的。本步骤中的LTAtl包含且仅包含一个VSA,即VSA。。步骤3、启动一个处理部件,令其为PEtl,将步骤2中的LTAtl指派给PEtl,由PEtl执行步骤4-10,完成LTAtl的流线放置以及相关处理工作。这里的处理部件是指逻辑上能够独立运行的计算装置,可以是计算机、CPU、CPU内核、进程或者是线程,包括但不限于这些内容。步骤4、令处理部件当前处理的LTA为CurLTA,在CurLTA内选取一个流线种子点。理论上流线种子点可以是CurLTA内的任意点,但是流线种子点的选取会影响流线放置效果。在实际应用中,可以有多种流线种子点选取方法,例如在CurLTA内随机选取一点,或者是选取CurLTA中某个角点网格单元的中心点,等等。优先的,本发明采取的流线种子点选取方法为在CurLTA所包含的VSA中选取一个面积最大的VSA(VSA的面积用其所包含的网格数目来衡量,如果存在多个满足条件的VSA,则任选其一),令其为VSAmax ;计算VSAmax内所有网格单元的中心坐标的平均值,将其作为一个新的坐标点;如果该点位于VSAmax内,则选择该点为流线种子点,否则分别计算过新坐标点的水平直线和垂直直线与VSAmax相交的线段,选取其中最长线段的中点作为流线种子点;如果所选取的流线种子点在控制网格Gt中对应的网格单元被标记为填充状态(即非空白状态),则将其调整为该点在控制网格Gs中对应网格单元的中心点。按照这一方法选取流线种子点,可以使流线分布比较均匀。步骤5、根据步骤4得到的流线种子点,计算并得到经过该点的流线。在计算流线的过程中,如果流线延伸到流场边界、速度为零的临界点、或者是控制网格Gt中被标记为填充状态的网格单元时,该流线的计算过程就终止。按照这一流线终止策略,流线的计算过程被完全限制在CurLTA内部,不会延伸到别的LTA中,因此可以在不同LTA内同时放置流线而互不干扰。流线的计算方法包括但不限于中点算法、欧拉算法和龙格-库塔算法等。
步骤6、将步骤5得到的流线作为新流线放置到流场中,为该流线设置饱和带和隔离带,以便控制流线之间的最大间隔距离和最小间隔距离。设置流线饱和带的方法是在控制网格Gs中将该流线所触及的所有网格单元标记为填充状态。设置流线隔离带的方法是在控制网格Gt中将该流线所触及的所有网格单元标记为填充状态;然后扫描这些已填充的网格单元,将每个网格单元上下左右的相邻网格单元也标记为填充状态,其中已标记为填充状态的网格单元不做重复标记。步骤7、在CurLTA内,查找有效的LTA,即至少包含一个VSA的LTA ;如果没有找到有效的LTA,则转向步骤9。在判断某个LTA是否包含VSA时,做如下规定
一个空白的Gs网格单元只属于一个LTA,即包含该Gs网格单元中心点的那个LTA。也就是说,如果某个LTA包含了某个空白Gs网格单元的中心点,那么该空白的&网格单元就属于该LTA,否则就不属于该LTA。由于VSA是由空白的Gs网格单元组成的,按照上述规定,如果某个LTA没有任何空白的Gs网格单元,也就不会包含任何VSA,从而是一个无效的LTA。步骤8、根据步骤7得到的LTA的数目,启动相应数量的处理部件,并将步骤7得到的LTA,分别指派给不同的处理部件,由这些处理部件并行执行步骤4-10,完成各自所负责的LTA的流线放置以及相关处理工作。步骤9、结束CurLTA的流线放置以及相关处理工作,释放CurLTA。步骤10、处理部件进入等待状态,直到被指派新的LTA而转向步骤4,或者是因其他处理部件的处理工作都结束了而转向步骤11。步骤11、最后,结束整个并行流线放置过程,完成所有流线放置工作。有益效果本发明与一般流线放置方法相比,具有以下几个方面的优点(I)本发明通过并行处理加速了流线放置过程,有利于大规模流场的可视化。(2)本发明实现了基于LTA的流场自适应分解,即将整个流场当作一个LTA,在其中放置流线,然后利用所放置的流线将该LTA逐层分解为一系列新的LTA。各个LTA之间通过流线的隔离带完全隔离。在一个LTA内放置的流线不会跨越隔离带而延伸到别的LTA。因此,可以在不同LTA内同时放置流线而互不干扰。一般的流场分解,比如规则分解,并不具备这样的特性。(3)本发明涉及的并行处理不存在数据共享冲突。其原因在于本发明的并行处理是基于LTA的,不同LTA之间的流线放置工作是完全独立的。负责不同LTA的处理部件,在各自的LTA内部放置新流线时,除了读取边界上的隔离带网格单元的状态信息外,不需要该LTA之外的其他任何信息。边界上的隔离带网格单元虽然可能被不同的LTA共享,但是这种共享是读取共享,不涉及到写操作,因此不存在冲突。其结果是并行处理部件之间不存在数据共享冲突,从而不存在因共享冲突而导致的流线放置结果的不确定性。(4)本发明的并行流线放置方法不存在“伪边界”和“视觉混乱”问题。(5)对于任何二维流场,本发明的方法都可顺利实施。
图I在某测试流场放置流线的中间结果;图2在图I中并行放置流线的结果之一;图3在图I中并行放置流线的另一种结果;图4 二维示例流场TF ;图5为示例流场TF设置的控制网格Gs ;图6为示例流场TF设置的控制网格Gt ;图7在示例流场TF中放置第一条流线Ltl后控制网格Gs的状态;
图8在示例流场TF中放置第一条流线Ltl后控制网格Gt的状态;图9在示例流场TF中并行放置流线L1和L2后控制网格Gs的状态;图10在示例流场TF中并行放置流线L1和L2后控制网格Gt的状态;图11示例流场TF最终的并行流线放置结果;图12示例流场TF的控制网格Gs的最终状态;图13示例流场TF的控制网格Gt的最终状态;图14按照本发明方法建立的某复杂流场的流线图;图15作为对照的某复杂流场的流线图之一;图16作为对照的某复杂流场的流线图之二。
具体实施例方式下面结合附图,具体说明本发明的优选实施方式。对于定义在区域D= [xmin, XmaJ X [ymin, ymax]中的二维流场i7 : (u0 B 0,v),其定义域通常被离散成矩形网格单元Ci, j(i = 1,…M,j=l,…,N),在每个网格单元的中心(Xi,Pyi,P,有一个表示该点流速的矢量(uM,Vi,P。这种离散化的二维流场就是本发明在具体实施过程中所要处理的客体对象。作为示例,图4通过矢量箭头展示了一个离散化的二维流场。该流场的定义域为[-2,2] X [2,2],其中任意一个采样点(x,y)处的矢量(u,V)定义为
权利要求
1.一种无数据共享冲突的二维流线并行放置方法,其特征在于,包括以下步骤 步骤I、对于给定的二维流场,按照下述方式构造两个覆盖该流场定义域的正交控制网格,其中一个网格用于控制流线种子点的选取,令其为Gs,另一个网格用于控制流线的追踪,令其为Gt ;不失一般性,令Gs和Gt的网格单元都是正方形的,Gs的网格单元边长为Y,Gt的网格单元边长为λ ;γ和λ可以根据实际需要设定,但是两者之间必须满足约束条件γ=η*λ,其中η是大于等于3的正整数;构造好控制网格Gs和Gt之后,将两个网格的所有网格单元都标记为空白状态,与此同时,将控制网格Gs中的空白四联通区域定义为有效播种区域VSA,将控制网格Gt中的空白四联通区域定义为局部追踪区域LTA ; 步骤2、将控制网格Gs初始化为一个VSA,令其为VSAtl ;将控制网格Gt初始化为一个LTA,令其为 LTAtl; 步骤3、启动一个处理部件,令其为PEtl,将步骤2中的LTAtl指派给PEtl,由PEtl执行步骤4-10,完成LTAtl的流线放置以及相关处理工作; 步骤4、令处理部件当前处理的LTA为CurLTA,在CurLTA内选取一个流线种子点;步骤5、根据步骤4得到的流线种子点,计算并得到经过该点的流线;在计算流线的过程中,如果流线延伸到流场边界、速度为零的临界点、或者是控制网格Gt中被标记为填充状态的网格单元时,该流线的计算过程就终止; 步骤6、将步骤5得到的流线作为新流线放置到流场中,为该流线设置饱和带和隔离带,以便控制流线之间的最大间隔距离和最小间隔距离; 步骤7、在CurLTA内,查找有效的LTA,即至少包含一个VSA的LTA ;如果没有找到有效的LTA,则转向步骤9 ; 步骤8、根据步骤7得到的LTA的数目,启动相应数量的处理部件,并将步骤7得到的LTA,分别指派给不同的处理部件,由这些处理部件并行执行步骤4-10,完成各自所负责的LTA的流线放置以及相关处理工作; 步骤9、结束CurLTA的流线放置以及相关处理工作,释放CurLTA ; 步骤10、处理部件进入等待状态,直到被指派新的LTA而转向步骤4,或者是因其他处理部件的处理工作都结束了而转向步骤11 ; 步骤11、最后,结束整个并行流线放置过程,完成所有流线放置工作。
2.根据权利要求I所述的一种无数据共享冲突的二维流线并行放置方法,其特征在于,步骤3中所述的处理部件是指逻辑上能够独立运行的计算装置,可以是计算机、CPU、CPU内核、进程或者是线程,包括但不限于这些内容。
3.根据权利要求I所述的一种无数据共享冲突的二维流线并行放置方法,其特征在于,步骤4中所述流线种子点选取方法为在CurLTA所包含的VSA中选取一个面积最大的VSA,令其为VSAmax ;计算VSAmax内所有网格单元的中心坐标的平均值,将其作为一个新的坐标点;如果该点位于VSAmax内,则选择该点为流线种子点,否则分别计算过新坐标点的水平直线和垂直直线与VSAmax相交的线段,选取其中最长线段的中点作为流线种子点;如果所选取的流线种子点在控制网格Gt中对应的网格单元被标记为填充状态,S卩非空白状态,则将其调整为该点在控制网格Gs中对应网格单元的中心点。
4.根据权利要求I所述的一种无数据共享冲突的二维流线并行放置方法,其特征在于,步骤5中流线的计算方法包括但不限于中点算法、欧拉算法和龙格-库塔算法等。
5.根据权利要求I所述的一种无数据共享冲突的二维流线并行放置方法,其特征在于,步骤6中设置流线饱和带的方法是在控制网格Gs中将该流线所触及的所有网格单元标记为填充状态。
6.根据权利要求I所述的一种无数据共享冲突的二维流线并行放置方法,其特征在于,步骤6中设置流线隔离带的方法是在控制网格Gt中将该流线所触及的所有网格单元标记为填充状态;然后扫描这些已填充的网格单元,将每个网格单元上下左右的相邻网格单元也标记为填充状态,其中已标记为填充状态的网格单元不做重复标记。
全文摘要
本发明涉及一种无数据共享冲突的二维流线并行放置方法,属于科学计算可视化技术领域。该方法的基本过程是针对给定的流场,构造两个覆盖流场定义域的正交控制网格GS和GT,将GS的空白四联通区域定义为VSA,将GT的空白四联通区域定义为LTA;将GS初始化为一个LTA,在其中选取一个种子点,放置一条新流线,并在GT和GS中分别设置新流线的隔离带和饱和带,将该LTA分割成一个或多个小LTA;然后以同样的方式在各个小LTA内同时选取种子点、放置流线、设置流线隔离带和饱和带,直到GS中不存在VSA为止。本发明避免了数据共享冲突,有效地加速了流线放置过程,有利于大规模流场的可视化。
文档编号G06T13/80GK102930587SQ20121032639
公开日2013年2月13日 申请日期2012年9月5日 优先权日2012年9月5日
发明者张文耀, 宁建国 申请人:北京理工大学