首页 / 专利库 / 物理 / 连续介质力学 / 流体力学 / 计算流体动力学 / 简化的光滑粒子流体动力学

简化的光滑粒子流体

阅读:83发布:2020-05-14

专利汇可以提供简化的光滑粒子流体专利检索,专利查询,专利分析的服务。并且本 发明 涉及简化的光滑粒子 流体 动 力 学。为了使用更多粒子信息来实现有效率的光滑粒子流体动力学,创建虚拟粒子。每个虚拟粒子代表针对一个单元中的流体粒子的平均特性。对于给定流体粒子的 密度 、力或其它计算,计算单元内的粒子之间的交互作用。为了计算该单元外部的粒子对该单元内的粒子的影响,使用来自相邻单元的虚拟粒子。与这些集合的粒子的交互作用会减少计算的次数,同时仍然包括来自其它单元的粒子的影响。,下面是简化的光滑粒子流体专利的具体信息内容。

1.在非临时性计算机可读存储介质中,在其中存储了代表能由编程的处理器执行的用于光滑粒子流体学的指令的数据,该存储介质包括用于以下步骤的指令:
将仿真空间划分为单元;
将流体粒子分配给这些单元;
为每个具有至少一个流体粒子的单元创建虚拟粒子,所述虚拟粒子是从各自单元的流体粒子中创建的;
确定每个虚拟粒子的质量
根据相邻单元的虚拟粒子以及该流体粒子的单元的粒子确定每个流体粒子的周围的密度;以及
作为流体粒子的密度和虚拟粒子的密度的函数来平流输送流体粒子。
2.根据权利要求1的非临时性计算机可读存储介质,其中划分和分配包括定义被分组到所述单元中的流体粒子的三维分布。
3.根据权利要求1的非临时性计算机可读存储介质,其中创建虚拟粒子包括作为各自单元中的流体粒子的位置的平均值而计算每个虚拟粒子的位置。
4.根据权利要求1的非临时性计算机可读存储介质,其中创建虚拟粒子包括计算每个虚拟粒子的半径以包括各自单元的所有流体粒子。
5.根据权利要求1的非临时性计算机可读存储介质,其中确定质量包括作为该虚拟粒子的密度的函数来计算每个虚拟粒子的质量。
6.根据权利要求1的非临时性计算机可读存储介质,其中确定每个虚拟粒子的质量包括仅从各自单元中的流体粒子来确定密度和体积。
7.根据权利要求1的非临时性计算机可读存储介质,其中确定每个流体粒子的密度包括计算来自同一单元中的流体粒子的贡献而不是来自其它单元的流体粒子的单独的贡献,并且计算来自相邻单元的虚拟粒子的贡献而不是来自所述流体粒子的单元的虚拟粒子的贡献。
8.根据权利要求1的非临时性计算机可读存储介质,其中平流输送包括计算每个流体粒子的压力,所述压力基于该单元的流体粒子的密度以及相邻单元的虚拟粒子的密度。
9.根据权利要求1的非临时性计算机可读存储介质,其中平流输送包括计算每个流体粒子的粘度力,所述粘度力基于该单元的流体粒子的密度以及相邻单元的质心粒子的密度。
10.根据权利要求1的非临时性计算机可读存储介质,其中平流输送包括作为力的函数来确定流体粒子的速度和位置,所述力是流体粒子的密度和虚拟粒子的密度的函数。
11.根据权利要求1的非临时性计算机可读存储介质,其中分配、创建、确定质量、确定流体粒子的密度以及平流输送被重复以对流体流动进行仿真。
12.根据权利要求1的非临时性计算机可读存储介质,其中平流输送包括作为与边界关联的外部力的函数而进行的平流输送。
13.一种用于光滑粒子流体动力学的方法,该方法包括:
利用处理器将体积划分为子体积;
用流体粒子来填充这些子体积;
确定虚拟粒子以代表每个子体积的流体粒子;以及
基于与流体粒子相同的子体积中的流体粒子以及邻近子体积的虚拟粒子来计算每一个流体粒子的力,该计算不基于邻近子体积的单个流体粒子。
14.根据权利要求13的方法,其中计算包括在没有来自非邻近子体积的贡献的情况下计算针对流体粒子的力。
15.根据权利要求13的方法,其中计算包括计算虚拟粒子的虚拟力作为代表各自单元内的力,并且在存在来自邻近子体积中的流体粒子的贡献的情况下计算针对每个流体粒子的力作为对应的虚拟力。
16.根据权利要求13的方法,其中确定包括:
计算每个虚拟粒子的位置作为各自子体积中的仅流体粒子的位置的平均值;
计算每个虚拟粒子的半径以包括各自子体积的所有流体粒子;
仅从各自子体积的流体粒子来计算每个虚拟粒子的密度;以及
作为该虚拟粒子的密度的函数来计算每个虚拟粒子的质量。
17.根据权利要求13的方法,其中计算力包括:
计算针对每个流体粒子的压力,该压力基于子体积的流体粒子的密度以及邻近子体积的虚拟粒子的密度;
计算针对每个流体粒子的粘度力,该粘度力基于所述子体积的流体粒子的密度以及邻近子体积的虚拟粒子的密度。
18.根据权利要求13的方法,进一步包括作为力的函数来迭代地确定流体粒子的速度和位置。
19.在非临时性计算机可读存储介质中,在其中存储了代表能由编程的处理器执行的用于光滑粒子流体动力学的指令的数据,该存储介质包括用于以下步骤的指令:
定义第一粒子,每个第一粒子代表一个或多个第二粒子;以及
对每个第二粒子都针对在范围内的第二粒子仿真第二粒子对第二粒子交互作用,以及仿真在该范围内的每个第二粒子与在所述范围之外的第一粒子的第二粒子对第一粒子交互作用。
20.根据权利要求19的非临时性计算机可读存储介质,进一步包括将仿真空间划分为单元,第二粒子贯穿整个仿真空间地分布在这些单元内,其中第一粒子代表各自单元中的所有第二粒子,其中仿真第二粒子对第二粒子交互作用包括在单元之一内的交互作用,以及其中仿真第二粒子对第一粒子交互作用包括与相邻单元的交互作用,所述范围定义相邻单元。

说明书全文

简化的光滑粒子流体

[0001] 相关申请专利文本根据35 U.S.C.§119(e)要求在2011年5月5日提交的临时美国专利申请No.61/482,654的提交日的权利,通过引用将该临时美国专利申请结合于此。

技术领域

[0002] 本实施例涉及基于粒子的流体仿真。在光滑的粒子流体动力学(SPH)中,计算流体仿真基于蒙特卡洛方法。内部力是在粒子对之间计算的。例如,密度被计算为 ,其中i和j是相邻的粒子,m是质量,r是半径,h是限制对范围的交互作用的光滑半径,W是核函数。压力被计算为
粘度力被计算为
。这些力被用于对粒子的平流输送
(advecting)进行仿真。通过多次迭代,速度被计算为
,以及位置被计算为

背景技术

[0003] 由于只有光滑半径h内的粒子彼此交互作用,因此可以在该仿真避免以所有粒子2
的O(n)计算。以交互作用速度对流体进行仿真的需要进一步导致了基于GPU的实施。通过将仿真空间分为多个单元(cell),每一次缩小等于光滑半径h,可以在一个粒子的所有邻居上以O(mn)为数量级迭代,其中m是每个单元的平均粒子数。如果粒子i位于, ,则相邻粒子j属于 。即使具有这样
的效率,以交互作用速度进行仿真仍然是困难的。在光滑半径外部的粒子的影响并未得到考虑。
发明内容
[0004] 在各种实施例中,提供了系统、方法和计算机可读介质来用于光滑粒子流体动力学(SPH)。为了使用更多粒子信息来实现有效率的SPH,创建虚拟粒子。每个虚拟粒子代表针对单元中的流体粒子的平均特性。对于给定流体粒子的密度、力或其它计算,计算单元内的粒子之间的交互作用。为了计算该单元外部的粒子对该单元内的粒子的影响,使用来自相邻单元的虚拟粒子。与这些集合的粒子的交互作用减少了计算的次数,同时仍然包括来自其它单元的粒子的影响。
[0005] 在第一方面中,非临时性计算机可读存储介质在其中存储了代表可由编程的处理器执行以用于光滑粒子流体动力学的指令的数据。该存储介质包括用于定义第一粒子的指令,每个第一粒子代表一个或多个第二粒子,并且对每个第二粒子都针对一定范围内的第二粒子仿真第二粒子对第二粒子交互作用,并且仿真在该范围内的每个第二粒子与该范围外部的第一粒子的第二粒子对第一粒子交互作用。
[0006] 在第二方面,非临时性计算机可读存储介质在其中存储了代表可由编程的处理器执行以用于光滑粒子流体动力学的指令的数据。该存储介质包括用于以下步骤的指令:将仿真空间划分为单元;将流体粒子分配给这些单元;对每个单元用至少一个流体粒子创建质心粒子,质心粒子从各自单元的流体粒子中创建;确定每个质心粒子的质量;根据相邻单元的质心粒子以及该流体粒子的单元的粒子来确定每个流体粒子的密度;以及作为流体粒子的密度和质心粒子的密度的函数来平流输送流体粒子。
[0007] 在第三方面,提供用于光滑粒子流体动力学的方法。处理器将体积划分为子体积。这些子体积被流体粒子填充。虚拟粒子代表每个子体积的流体粒子。对于每个流体粒子的力被基于在与该流体粒子相同的子体积中的流体粒子以及相邻子体积的虚拟粒子来计算。
该计算不是基于相邻子体积的单个流体粒子的。
[0008] 上述任何一个或多个方面可以单独或组合使用。这些以及其它方面、特征和优点将由于下面对优选实施例的详细描述而变得明显,该详细描述是要结合附图来阅读的。本发明通过下面的权利要求定义的,并且在这一节中不应当有任何内容作为对这些权利要求的限制。下面结合优选实施例讨论本发明的其它方面和优点,并且稍后可以独立或组合地要求保护。

附图说明

[0009] 组件和附图不一定是按比例的,而是重点在于图解实施例的原理。此外在附图中,贯穿不同的视图相似的附图标记表示对应的部分。
[0010] 图1是用于光滑粒子流体动力学仿真的一个实施例的流程图;图2是将粒子分布划分为多个单元的一个实施例的图解;
图3是创建虚拟粒子的一个实施例的图解;
图4是在光滑粒子流体动力学中使用流体粒子和虚拟粒子的一个实施例的图解;以及图5是用于光滑粒子流体动力学仿真的系统的一个实施例的框图

具体实施方式

[0011] 基于粒子的流体仿真方法,例如光滑粒子流体动力学(SPH),可以被用于实现交互作用的流体仿真。为了提供仿真而同时保持交互作用速度,创建代表每个单元的一个或多个粒子的虚拟粒子。为了交互作用,该仿真通常以每周期(以毫秒为单位)为基础来更新。因此,流体交互作用的计算有效率地进行以保持交互作用速度。用于以交互作用速度的SPH的有效率的方法可以是用更大的虚拟粒子来替换每个单元的多个流体粒子。替换虚拟粒子被用于计算未在单元内的粒子对与该单元内的给定流体粒子的交互作用的贡献。SPH实施可以比现有技术更快,并且适于交互作用的应用,同时提供类似的仿真质量。光滑距离可以减小以进一步增加速度,但是会减小对降低仿真质量的给定流体粒子贡献力的粒子的数量。
[0012] 增强型SPH包括密度和/或内部力的计算。这些计算基于使用仍然捕获整体流体仿真行为的组合的粒子(例如虚拟粒子)来代表相同的流体体积。虚拟粒子被表示为空间中的具有给定质量的点(即,代表空间中质量的存在),其中在网格单元内的一组粒子的密度被集合。为了保持流体仿真的小细节特征,这些计算包括在单元平上的流体粒子对流体粒子的交互作用。为了在流体仿真中包括通过其它单元贡献的特征,这些计算还包括流体粒子对虚拟粒子的交互作用。
[0013] 图1示出在基于粒子的仿真中的光滑粒子流体动力学方法。该方法通过图5的系统和/或不同的系统来实施。处理器执行动作。可以提供额外的、不同的或更少的动作。例如,动作34,36,37和38未被执行。作为另一个示例,动作37未被执行。动作34-38可以在不使用动作28,30和32的情况下执行,至少使用不使用虚拟粒子的动作28,30和32。
在又一个示例中,提供移动固体对象和调整粒子运动的额外的动作。可以添加任何进一步的基于粒子的流体仿真动作。
[0014] 该方法以所示出的顺序提供。动作22和24可以顺序地执行或者与动作26并行地执行。可以提供其它顺序。在一个实施例中,动作22和24是在仿真之前执行的初始化的一部分。对流体粒子的运动进行仿真而不进一步执行初始化动作。动作26,28,30,32和34作为仿真流体流程的一部分重复地或迭代地执行。在该仿真中,作用于被仿真的粒子的内部力以及粒子和任何固体对象之间的力被重复地计算。
[0015] 在动作22中,仿真空间被划分为多个单元。该仿真空间是体积、面积或其它区域。所述仿真空间是有边界的,例如通过表面,或者是无边界的,例如代表流体内的流动区域。
[0016] 基于预先确定的参数和/或通过用户输入的信息,处理器将仿真空间划分为所述多个单元。每个单元是子区域。例如,处理器将体积划分为多个子体积。为了进行基于粒子的流体仿真,将这些粒子分为有规则间隔的网格单元。这些粒子被分组为三维的单元分布。所述仿真空间被细分为三维(3D)的网格,使得在任何仿真迭代期间流体粒子仅位于一个单元中。图2示出4个这样的单元40,每一个单元包括流体粒子42。这些网格单元分割了粒子分布并且也被用于计算对流体仿真的演变有所贡献的特性。
[0017] 可以使用任何数量的单元。单元的数量以及这些单元的对应体积可以基于粒子密度、每个单元的粒子数量和/或流体的仿真体积来确定。
[0018] 这些单元40具有相同的尺寸和形状,但是可以具有不同的尺寸和形状。每个单元都被定义为该单元中心的三维位置和该单元内的被仿真的粒子列表的函数。在一个实施例中,每个单元都通过该单元中的流体粒子对象的列表、该列表的长度(标量值)、该单元的中心(三元组)以及用于将具有粒子的单元与没有粒子的单元区分开来的空标志(布尔值)来定义。在替换的实施例中,中心和/或空标志不是单独存储的,因为空属性可以从该列表中确定并且中心可以通过单元的索引来确定。
[0019] 在动作22中进行单元的初始创建时,将单元计数设置为0。所述体积被划分为多个单元,而且确定单元计数和对应的分布。这些单元的3D结构作为向量存储。这些单元作为一维列表存储。从该一维列表中作为索引移位的函数来访问这些单元。在三维空间中的单元索引与该单元的实际存储器位置之间的关系通过索引函数来给定。如果给定单元在三维中的规则分布,所产生的一维存储向量具有单元的代表不同行、列和平面的规则图案。每一行的单元在索引方面是顺序的,其中在给定列中的每一行都偏移了第一索引值,在一列中的网格元素的数量(例如当存在10列时,第一行是0-9,第二行是10-19,等等,其中为了找到与第一行中的单元相邻的第二行的单元使用+10的偏移)。对于使用等于平面(行×列)中元素数量的第二索引值的平面而言,按照类似的方式进行重复。由于在存储器中的这种规则分布,可以快速确定用于获取给定单元周围的所有单元的索引移位图案。也可以使用用于存储的单元网格的其它布置。
[0020] 在动作24中,将流体粒子分配给这些单元。通过划分所述体积定义的子体积被流体粒子填充。定义被仿真的流体粒子的两维或三维分布。这些流体粒子是总体上代表被仿真的流体的点。流体粒子可以与特性关联和/或被处理为两维或三维形状。由于流体粒子被用于对流体仿真,因此流体粒子以贯穿整个体积的规则密度散布在初始位置上,在所述初始位置上流体将被仿真。可以使用不规则的密度,例如对温度差异对流体密度的影响进行建模。
[0021] 流体粒子可以在体积被分为子体积之前分布在该体积中。在动作22中的单元创建可以导致粒子在这些单元内的分布。替换地,在动作22中创建单元之后在动作24中分布流体粒子。
[0022] 每个单元中流体粒子的数量对不同的单元是相同或不同的。在每个单元40内的流体粒子42的数量和布置可以不同,例如在图2所表示的。在一个实施例中,每个单元中流体粒子的数量很小,例如小于100、10或其它数量。动作22的划分和动作24的分布提供了贯穿仿真空间的被分组到单元40中的流体粒子42的三维分布。
[0023] 流体粒子具有预先确定的、计算的、用户设置的或者被分配的特性。这些特性可以基于待执行的仿真来分配。不同的特性可以按照相同或不同的方式来确定,例如用户输入位置和半径这些特性。确定其它仿真特性,例如光滑半径和体积。所输入或存储的信息由处理器用于确定所述分布。
[0024] 流体粒子具有被分配的或固定的半径Rf。所有的流体粒子典型地都具有相同的半径,但是不同的流体粒子可以具有不同的半径。作为所述分布的一部分,流体粒子具有被分f配的位置Li。不同的流体粒子处在不同的位置上。
[0025] 光滑半径可以是被分配的或是常量。在一个实施例中,光滑半径hf是常量,被计算为 ,其中 。一个示例值是 。体积是另一个常量,被计算为。不同的流体粒子具有相同的体积,但是可以具有不同的体积。
[0026] 流体粒子也可以被分配速度。当流体粒子运动时,例如在仿真的每次迭代时运动,速度和/或位置保持相同或者改变。对于给定的迭代来说,速度和位置被更新为以及 。力初始地被设置为零,即 ,但是也可以是其它值。初始的粒子速度可以到零或者可以被设置为指示给流体的初始运动的值。
[0027] 如果给定流体粒子42在仿真空间中的分布,则在动作26中确定虚拟粒子。虽然流体粒子在代表其它东西(即流体)的含义中是虚拟的,但是“虚拟粒子”被用于指代代表一个或多个其它粒子的粒子。每个虚拟粒子都代表一个或多个流体粒子。例如,每个单元中的流体粒子都由各自的虚拟粒子代表。图3示出虚拟粒子44,其中每个单元一个。在替换实施例中可以使用代表多个单元的虚拟粒子44。对于每个非空单元而言,创建虚拟粒子44。每个虚拟粒子44都从对应单元40的流体粒子42中创建。虚拟粒子44被定义为每个虚拟粒子代表一个或多个流体粒子42,其中每个虚拟粒子44代表给定单元或者其它子体积中的所有流体粒子42。虚拟粒子44的数量等于非空网格单元40的数量,但是可以提供其它数量。
[0028] 对于仿真的每次迭代,都要计算虚拟粒子。计算各种特性。例如,确定每个虚拟粒子的位置和半径。所述位置被计算为各个单元中的流体粒子的平均位置。例如,计算单元c内的所有且只有流体粒子的平均位置。在一个实施例中,虚拟粒子的位置Lg 是单元内粒子的质心。虚拟粒子可以是质心粒子。位置的质心的一个代表是
,其中g是质心粒子,而j是流体粒子,cell(j)=cell(g),以及count(cell(g))是虚拟粒子g所位于的单元内的流体粒子的数量。可以使用其它用于计算虚拟粒子的质心或位置的中心的方法。
[0029] 在一个实施例中,计算虚拟粒子的半径。每个虚拟粒子的半径包括各个子体积的流体粒子。对于每个单元,确定包括所有流体粒子的半径,但是可以使用其它标准(例如,包括大多数流体粒子的半径)。为了包含单元内的所有流体粒子,将半径设置为离中心位置最远的流体粒子与该中心位置之间的距离。半径Rgc依据流体粒子的分布而变化,并且被表示为 ,其中 。该半径等于或大于流体粒子半径,但是小于或等于单元内最大距离的一半。这被表示为 ,其中单元尺寸基于流体粒子
的光滑距离。可以从所述半径中来确定体积,例如 。
[0030] 虚拟粒子的光滑距离是可变的,但是可以是常量。在一个实施例中,虚拟粒子光滑c c c距离hg 被表示为hg=kRg,其中k>2,例如k=3。虚拟粒子的光滑距离大于或等于流体粒子c f
的光滑距离。这被表示为对所有g都有hg ≥ h。由于单元可以仅包括一个流体粒子,因此为该单元所产生的虚拟粒子具有该流体粒子的位置、半径和光滑距离。由于一些单元可以包括多于一个流体粒子,因此这些单元的光滑距离大于单个流体粒子的光滑距离。位置和半径也可以不同于该单元中的任何一个流体粒子。
[0031] 为这些单元的每一个、大多数或一些确定虚拟粒子的特性。在一个实施例中,虚拟粒子是为具有至少一个流体粒子的每个单元创建的。对于具有流体粒子的给定单元,计算单个虚拟粒子以及在该单元内的流体粒子的特性。
[0032] 在动作32中,确定每个虚拟粒子的质量。该质量是从各单元中的流体粒子来确定的。用于计算虚拟粒子的其它特性的相同的流体粒子被用于计算所述质量。使用任何方法来计算在虚拟粒子的位置上的质量。
[0033] 在动作28和动作30中,确定流体粒子和虚拟粒子中每一个的密度。任何给定流体粒子的密度包括两个组分。第一组分是来自同一单元内的其它流体粒子的贡献。第二组分是来自其它单元的虚拟粒子的贡献,例如来自正好相邻的单元的贡献。其它单元中的单个流体粒子对所述密度没有贡献。相反,使用代表流体粒子的虚拟粒子。在一个实施例中,虚拟粒子密度 是仅在相邻单元内的粒子的贡献,并且被表示为。
[0034] 图4代表针对一个单元中的流体粒子42的计算,其中贡献来自其它单元中的虚拟粒子44。为清楚起见仅示出4个子体积。虽然图2-4示出4个子体积,但是提供了在同一平面内的额外子体积和体积的额外平面。
[0035] 虚拟粒子光滑距离和虚拟粒子位置可以被用于确定哪些虚拟粒子对给定流体粒子的密度有所贡献。在其它实施例中,相邻通过单元分布来定义。对于立方形单元,来自邻近6个(沿着x维、y维和z维的每一个的对)或来自邻近26个(沿着x,y和z的对加上来自对线的对)的虚拟粒子可以为相邻。为了限制计算的复杂性,来自其它单元(即非相邻单元)的虚拟粒子不被使用并且对密度计算没有贡献。类似的,针对给定流体粒子所属的单元的虚拟粒子不被使用,因为流体粒子本身和同一单元的流体粒子被用于单独的贡献。流体粒子密度 是用同一单元中的其它流体粒子的贡献以及相邻单元中的虚拟粒子的贡献来计算的。
[0036] 对于每个流体粒子i,都在两个水平上计算密度:使用同一单元内的粒子的贡献,以及使用相邻单元中的相邻质心粒子。这被表示为:
,其中 。可以使用其它函数。
[0037] 针对该仿真的每个流体粒子计算密度。流体粒子的密度被有效率地确定,即使包含来自相邻单元的密度分布。在同一单元中的其它流体粒子的贡献类似于传统的SPH计算2
并且按照O(m)的数量级,其中m是每个单元的粒子的平均数量。这种复杂度水平通过仅在同一单元内的流体粒子之间执行这些运算来最小化。第二阶段(即相邻虚拟粒子的贡献)是O(1),因为相邻单元的数量是常量并且每个单元仅有一个虚拟粒子。针对密度的全部计算时间类似于SPH,即O(nm),但是增加了在更宽范围内的粒子的影响。实际上,基本运算的数量可以更少。
[0038] 给定流体粒子的质量是常量 ,代表在该流体粒子的半径内仿真的流体质量。
[0039] 每个虚拟粒子的质量也在动作32中计算。该质量是所述单元内的流体粒子的密度的函数。如果给定所计算的密度和粒子半径或体积,则计算虚拟粒子的质量。流体粒子f c的质量是固定的,例如m。虚拟粒子的质量mg 随着虚拟粒子的密度和体积的变化而变化。
在一个示例中,质量被表示为: ,但是可以使用其它计算。
[0040] 在动作34中,流体粒子被平流输送。在动作36中计算影响每个流体粒子的力,在动作37中处理任何约束条件,并且在动作38中计算或更新速度和位置。可以提供额外的、不同的或更少的动作。
[0041] 流体粒子作为流体粒子密度以及虚拟粒子密度的函数来平流输送。这些密度被用于在动作36中计算力。
[0042] 在每次仿真迭代中,在内部力和外部力的作用下对流体粒子进行平流输送。内部力是针对所有流体粒子计算的,并且流体和任何固体对象之间的碰撞被处理为对于流体来说的外部力。使用内部力和外部力的组合,对流体进行平流输送。
[0043] 针对每个流体粒子的内部力基于同一单元中的流体粒子以及邻近单元的虚拟粒子。在没有来自非邻近单元的贡献的情况下确定来自邻近单元的针对给定单元内的流体粒子的力,但是可以使用任何范围的贡献。在同一迭代期间计算该单元内的每一对粒子之间的力。
[0044] 为了简化针对该单元外部的流体粒子的计算,不使用来自相邻单元中的单个流体粒子的力。相反,确定通过代表相邻单元内的流体粒子的虚拟粒子引起的虚拟力。作用在虚拟粒子上的力代表单元内的力,并被用于计算在相邻单元中的流体粒子上的力。对施加于给定流体粒子的力的贡献包括来自邻近子体积中的流体粒子的贡献,但是基于虚拟粒子以及对应的虚拟力而不是单个流体粒子的力。内部力是在网格单元内在该单元的每个粒子与邻近单元的虚拟粒子之间计算的。
[0045] 任何力都可以被计算。在一个实施例中,计算压力和粘度力。压力是针对仿真空间中的每一个流体粒子计算的。对于给定的流体粒子,所述压力基于该单元的其它流体粒f f f子的密度以及邻近单元的虚拟粒子的密度。压力Pi 被表示为Pi=EOS(ρi),其中EOS是用于在给定流体粒子密度时计算压力的状态方程。EOS可以代表理想气体的压力或Tait方程。其它函数可以被使用。
[0046] 针对虚拟粒子的压力Pgc是基于同一子体积内的流体粒子的压力以及这些流体粒子的质量来计算的。虚拟压力被计算为:,其中针对该求和中的每个流体粒子的压力是
f f
Pi =EOS(ρi )。
[0047] 针对虚拟粒子和流体粒子的压力被用于确定针对每个流体粒子的压力。该压力对来自单元内的流体粒子的压力与来自其它单元的虚拟粒子的压力求和。在一个实施例中,所述压力在一项中是流体粒子质量、单元的流体粒子之间的压力、针对该单元的核函数的向量差(del)以及流体粒子的密度的函数,并且在另一项中是虚拟粒子质量、相邻单元的流体粒子与虚拟粒子之间的压力、针对虚拟粒子的核函数的向量差(del)、以及虚拟粒子的密度的函数。在一个实施例中,压力被表示为:,
其中i和j是流体粒子, ,g是虚拟粒子,并且 。可以使
用其它压力函数。
[0048] 另一个力是粘度力。针对每一个流体粒子计算粘度力。粘度力是来自同一单元内的流体粒子的力以及来自相邻单元的虚拟粒子的力的和。在一个实施例中,粘度力被计算为一项是流体粒子质量、流体粒子速度和平滑距离上流体粒子半径的拉普拉斯算子、流体粒子密度以及粘度的函数,并且另一项是虚拟粒子质量、虚拟粒子速度和在虚拟平滑距离上的虚拟粒子半径的拉普拉斯算子、虚拟粒子密度以及粘度的函数。一个示例表示是:,
其中i和j是流体粒子, ,g是质心粒子,μ是粘度,并且
。可以使用针对粘度力的其它函数。
[0049] 流体粒子的速度取决于仿真和任何事先计算的速度(即,在其它迭代中确定的速度)。对于第一次迭代,流体粒子的速度由用户编程或设置。虚拟粒子的速度是在各个单元中的流体粒子的速度的函数。可以计算平均速度向量。另一个示例被表示为:。可以使用其它函数。
[0050] 可以使用其它内部力来代替或附加于压力和粘度力。不计算针对虚拟粒子的单独的压力和粘度力,因为它们是虚拟的并且不会运动。虚拟粒子的创建是为了确定来自相邻粒子对任何给定流体粒子的贡献。
[0051] 总的力可以包括外部力,例如与边界关联。流体粒子作为任何外部力的函数平流输送。在动作37中,在仿真中执行边界处理以确定外部力在何处发生以及以什么样的程度发生。为了处理在仿真空间中的固定障碍,将每个碰撞表面的每个面(通过碎片表示)与凑巧在光滑半径内的一组网格单元或子体积关联。该问题可以被重新定义为将固体碎片与一组网格单元关联。该映射找到与代表所述对象、即所述碎片的网眼或表面相交的单元。碎片被用于检测哪些流体粒子可能与对象碰撞。如果网格单元的中心和/或任何部分在离最近碎片的光滑半径之外,则该单元被认为远离碎片并被忽略。在每个仿真步骤期间,仅对那些关联单元内的流体粒子进行测试看是否与相关的面、三角形或代表该面的其它碎片发生碰撞。
[0052] 检测对流体进行仿真的流体粒子与边界的碰撞。在一个或多个流体粒子相交或处于由碎片的通过与碎片基元(primitive)的碰撞而确定的内侧的地方,发生了碰撞。通过测试流体粒子相对于碎片的位置,可以计算由于碰撞而作用于这些粒子和对象的力。
[0053] 当流体粒子从那个平面穿过一定距离d进入固体对象中时,该流体粒子与碎片碰撞。例如, ,其中D是至基元表面的平面距离(从所述粒子至基元上点的最小距离),并且 是单位表面法线。可以使用针对流体粒子的其它碰撞检测,例如确定从碎片外部到碎片内部的转移。
[0054] 确定该碰撞的交互作用力。任何力计算都可以被用于代表来自与刚性体或半刚性体的碰撞的力。该力被添加给碰撞的流体粒子,而对向力被添加给所述对象。该力是针对流体粒子的外部力。流体粒子i具有位置 和力: 。在流体粒子上的边界力被如下计算为误差校正力 和反力 的和:
,其中 是常量,其与粒子的密度 成比例并且与仿真时间步长
的平方成反比。
[0055] 的目的是对抗在法线 的方向上施加于粒子i的任何力,从而 被负加权。法线 被定义为从碰撞表面指向外部。另一方面, 被用于校正粒子i在碰撞表面的表面内部所经过的穿越距离d。这可以是弹簧常量或其它力计算。 和 都在法线方向上动作,由此这构成了自由滑动条件。用于力计算的法线垂直于流体粒子所碰撞的基元。可以使用具有或不具有自由滑动或其它条件的其它力计算。
[0056] 计算作用于固体对象和/或流体粒子的任何其它力。施加这些力是为了移动流体粒子。这些力的向量可以被求和,以确定总的力和方向,其被表示为:。依据对固体对象的运动的限制,固体对象可以由于力
的施加而运动或不运动。当固体对象改变位置时,对碎片的所有边界体积施加平移和旋转。
[0057] 在动作38中,确定流体粒子的速度和位置。所述力被施加到流体粒子。由同一单元中的流体粒子贡献的力、来自周围虚拟粒子的力以及来自任何边界的力被施加到每个流体粒子以确定在给定的单位时间内该流体粒子的速度和位置。由于这些力基于虚拟粒子和流体的密度,因此速度和位置是密度以及其它因素的函数。
[0058] 给定流体粒子的速度基于当前速度以及由于加速而带来的任何改变。这些力导致了加速。在一个实施例中,在给定迭代中的流体粒子的速度被表示为,其中a是加速度,t是时间。初始迭代的速度是被分配或预定的。不同的流体粒子可以具有不同的速度和/或加速度。速度可以被计算为一维、两维或三维向量以说明方向。
[0059] 每个流体粒子的位置基于当前位置与给定单位时间内的速度导致的位移量的和。在一个实施例中,所述位置被表示为:

[0060] 任何其它运动、变形或改变被应用于该仿真。然后该仿真的下一个周期发生,使用当前配置重复相同的步骤。在每次迭代中,重新计算虚拟粒子。不同的流体粒子可以在每个子体积内。在动作24中流体粒子基于位置被分配给不同的子体积,在动作26中重新创建虚拟粒子,又在28中计算虚拟粒子的密度,又在动作32中计算虚拟粒子的质量,并且又在动作34中执行流体粒子的平流输送。使用流体粒子的当前速度和位置的这种重复对流体流动进行仿真。
[0061] 该仿真有效率地执行,同时包括在单个单元范围之外的、集合形式的信息。通过包括来自相邻子体积、但是限于代表性粒子或更大粒子的信息,平流输送或整个仿真的效率比确定同一组单元中的所有流体粒子之间的交互作用好得多。在一个实施例中,平流输送是以O(nm)数量级的效率执行的,其中m是每个单元的流体粒子的平均数量。
[0062] 图5示出用于在流体仿真中的光滑粒子流体动力学系统的框图。该系统包括处理器16和存储器18。可以提供额外的、不同的或更少的部件。例如,提供例如网卡、无线收发器和/或用户输入设备的输入设备。作为另一个示例,提供显示器、打印机、网卡、无线收发器和/或其它输出设备。
[0063] 由处理器16执行的计算机处理可以按照硬件软件固件、专用处理器或它们的组合的各种形式来实施。一些实施例以软件实施为在非临时性程序存储设备上有形体现的程序。通过用存储器中的代码或系统来实施,由处理器16执行基于粒子的仿真。
[0064] 处理器16和/或存储器18是计算机、个人计算机、服务器、工作站、网络处理器或其它现在已知或后来开发的处理系统的一部分。例如显示设备、盘存储设备(例如磁或光盘存储设备)、键盘、打印设备和鼠标的各种外设可以在操作中耦合到处理器16。程序可以被上传到处理器16并由处理器16执行。类似的,处理策略可以包括多重处理、多任务、并行处理等等。处理器16在具有硬件的计算机平台上实施,所述硬件例如是一个或多个中心处理单元(CPU)、图形处理单元(GPU)、随机存取存储器(RAM)和(一个或多个)输入/输出(I/O)接口。该计算机平台也包括操作系统和微指令代码。在此所描述的各种处理和功能可以是微指令代码的一部分或是经由操作系统存储和执行的程序的一部分(或它们的组合)。替换地,处理器16是网络中的一个或多个处理器。
[0065] 指令、用户输入(例如参数或值分配)、规则和/或其它信息存储在非临时性计算机可读存储器例如存储器18中。存储器18是外部存储设备、内部存储设备、RAM、ROM和/或本地存储器(例如固态驱动器或硬驱动器)。相同或不同的计算机可读介质可用于指令和其它数据,例如为流体粒子和/或虚拟粒子计算的各种参数。存储器18可以使用通过处理器16管理并且驻留在存储器上的数据库管理系统(DBMS)来实施,所述存储器例如是硬盘、RAM或可移动介质。替换的,存储器18是处理器16内部的(例如高速缓存)。存储器18存储由基于粒子的流体仿真所使用的或者由基于粒子的流体仿真所产生的数据。
[0066] 用于实施在此讨论的处理、方法和/或技术的指令被提供在计算机可读存储介质上或者例如高速缓存、缓冲器、RAM、可移动介质、硬驱动器的存储器或其它计算机可读存储介质上。计算机可读存储介质包括各种类型的易失性和非易失性存储介质。在附图中图解或在此描述的功能、动作或任务是响应存储在计算机可读存储介质中或计算机可读存储介质上的一组或多组指令而执行的。功能、动作或任务与特定类型的指令集、存储介质、处理器或处理策略无关,并且可以通过软件、硬件、集成电路、固件、微代码等等独立或组合操作地执行。
[0067] 在一个实施例中,指令存储在可移动介质设备上以便由本地或远程系统读取。在其它实施例中,指令存储在远程位置上以便于通过计算机网络或通过电话线传输。在另外的实施例中,指令存储在给定的计算机、CPU、GPU或系统中。由于在附图中描绘的一些组成系统部件和方法动作优选以代码来实施,因此系统部件(或处理步骤)之间的实际连接可以依据本实施例所编程的方式而不同。
[0068] 处理器16被配置为执行所述仿真。处理器16接收用于仿真的参数的指示,例如固体对象和流体粒子的数量、尺寸、形状、密度和/或其它特性。初始化动作通过处理器16执行以准备好所述仿真。替换的,处理器16接收事先计算的初始化信息,例如接收粒子、碎片、单元的存储位置的指示和/或其它信息。处理器16执行所述仿真,例如计算流体粒子和虚拟粒子的各种参数以及对流体流动以及与一个或多个对象的交互作用进行仿真。也可以仿真对于对象的影响。该仿真的结果作为图像或数据输出。
[0069] 在此描述的各种改进可以一起或单独使用。尽管在此已参照附图描述了本发明的图解实施例,应当理解本发明不限于那些精确的实施例,并且本领域技术人员可以做出各种其它改变和修改,而不偏离本发明的范围或精神。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈