《简化的光滑粒子流体动力学.pdf》由会员分享,可在线阅读,更多相关《简化的光滑粒子流体动力学.pdf(18页完整版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102768698 A (43)申请公布日 2012.11.07 C N 1 0 2 7 6 8 6 9 8 A *CN102768698A* (21)申请号 201210135723.3 (22)申请日 2012.05.04 61/482654 2011.05.05 US 13/354797 2012.01.20 US G06F 17/50(2006.01) (71)申请人西门子公司 地址德国慕尼黑 (72)发明人 R.G.麦丹尼尔 Z.塔米米 (74)专利代理机构中国专利代理(香港)有限公 司 72001 代理人李少丹 卢江 (54) 发明名称 简化的光滑粒子流体。
2、动力学 (57) 摘要 本发明涉及简化的光滑粒子流体动力学。为 了使用更多粒子信息来实现有效率的光滑粒子流 体动力学,创建虚拟粒子。每个虚拟粒子代表针对 一个单元中的流体粒子的平均特性。对于给定流 体粒子的密度、力或其它计算,计算单元内的粒子 之间的交互作用。为了计算该单元外部的粒子对 该单元内的粒子的影响,使用来自相邻单元的虚 拟粒子。与这些集合的粒子的交互作用会减少计 算的次数,同时仍然包括来自其它单元的粒子的 影响。 (30)优先权数据 (51)Int.Cl. 权利要求书2页 说明书11页 附图4页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 2 页 说明书 。
3、11 页 附图 4 页 1/2页 2 1.在非临时性计算机可读存储介质中,在其中存储了代表能由编程的处理器执行的用 于光滑粒子流体动力学的指令的数据,该存储介质包括用于以下步骤的指令: 将仿真空间划分为单元; 将流体粒子分配给这些单元; 为每个具有至少一个流体粒子的单元创建虚拟粒子,所述虚拟粒子是从各自单元的流 体粒子中创建的; 确定每个虚拟粒子的质量; 根据相邻单元的虚拟粒子以及该流体粒子的单元的粒子确定每个流体粒子的周围的 密度;以及 作为流体粒子的密度和虚拟粒子的密度的函数来平流输送流体粒子。 2.根据权利要求1的非临时性计算机可读存储介质,其中划分和分配包括定义被分组 到所述单元中的流。
4、体粒子的三维分布。 3.根据权利要求1的非临时性计算机可读存储介质,其中创建虚拟粒子包括作为各自 单元中的流体粒子的位置的平均值而计算每个虚拟粒子的位置。 4.根据权利要求1的非临时性计算机可读存储介质,其中创建虚拟粒子包括计算每个 虚拟粒子的半径以包括各自单元的所有流体粒子。 5.根据权利要求1的非临时性计算机可读存储介质,其中确定质量包括作为该虚拟粒 子的密度的函数来计算每个虚拟粒子的质量。 6.根据权利要求1的非临时性计算机可读存储介质,其中确定每个虚拟粒子的质量包 括仅从各自单元中的流体粒子来确定密度和体积。 7.根据权利要求1的非临时性计算机可读存储介质,其中确定每个流体粒子的密度包。
5、 括计算来自同一单元中的流体粒子的贡献而不是来自其它单元的流体粒子的单独的贡献, 并且计算来自相邻单元的虚拟粒子的贡献而不是来自所述流体粒子的单元的虚拟粒子的 贡献。 8.根据权利要求1的非临时性计算机可读存储介质,其中平流输送包括计算每个流体 粒子的压力,所述压力基于该单元的流体粒子的密度以及相邻单元的虚拟粒子的密度。 9.根据权利要求1的非临时性计算机可读存储介质,其中平流输送包括计算每个流 体粒子的粘度力,所述粘度力基于该单元的流体粒子的密度以及相邻单元的质心粒子的密 度。 10.根据权利要求1的非临时性计算机可读存储介质,其中平流输送包括作为力的函 数来确定流体粒子的速度和位置,所述力。
6、是流体粒子的密度和虚拟粒子的密度的函数。 11.根据权利要求1的非临时性计算机可读存储介质,其中分配、创建、确定质量、确定 流体粒子的密度以及平流输送被重复以对流体流动进行仿真。 12.根据权利要求1的非临时性计算机可读存储介质,其中平流输送包括作为与边界 关联的外部力的函数而进行的平流输送。 13.一种用于光滑粒子流体动力学的方法,该方法包括: 利用处理器将体积划分为子体积; 用流体粒子来填充这些子体积; 确定虚拟粒子以代表每个子体积的流体粒子;以及 权 利 要 求 书CN 102768698 A 2/2页 3 基于与流体粒子相同的子体积中的流体粒子以及邻近子体积的虚拟粒子来计算每一 个流体。
7、粒子的力,该计算不基于邻近子体积的单个流体粒子。 14.根据权利要求13的方法,其中计算包括在没有来自非邻近子体积的贡献的情况下 计算针对流体粒子的力。 15.根据权利要求13的方法,其中计算包括计算虚拟粒子的虚拟力作为代表各自单元 内的力,并且在存在来自邻近子体积中的流体粒子的贡献的情况下计算针对每个流体粒子 的力作为对应的虚拟力。 16.根据权利要求13的方法,其中确定包括: 计算每个虚拟粒子的位置作为各自子体积中的仅流体粒子的位置的平均值; 计算每个虚拟粒子的半径以包括各自子体积的所有流体粒子; 仅从各自子体积的流体粒子来计算每个虚拟粒子的密度;以及 作为该虚拟粒子的密度的函数来计算每个。
8、虚拟粒子的质量。 17.根据权利要求13的方法,其中计算力包括: 计算针对每个流体粒子的压力,该压力基于子体积的流体粒子的密度以及邻近子体积 的虚拟粒子的密度; 计算针对每个流体粒子的粘度力,该粘度力基于所述子体积的流体粒子的密度以及邻 近子体积的虚拟粒子的密度。 18.根据权利要求13的方法,进一步包括作为力的函数来迭代地确定流体粒子的速度 和位置。 19.在非临时性计算机可读存储介质中,在其中存储了代表能由编程的处理器执行的 用于光滑粒子流体动力学的指令的数据,该存储介质包括用于以下步骤的指令: 定义第一粒子,每个第一粒子代表一个或多个第二粒子;以及 对每个第二粒子都针对在范围内的第二粒子。
9、仿真第二粒子对第二粒子交互作用,以及 仿真在该范围内的每个第二粒子与在所述范围之外的第一粒子的第二粒子对第一粒子交 互作用。 20.根据权利要求19的非临时性计算机可读存储介质,进一步包括将仿真空间划分为 单元,第二粒子贯穿整个仿真空间地分布在这些单元内,其中第一粒子代表各自单元中的 所有第二粒子,其中仿真第二粒子对第二粒子交互作用包括在单元之一内的交互作用,以 及其中仿真第二粒子对第一粒子交互作用包括与相邻单元的交互作用,所述范围定义相邻 单元。 权 利 要 求 书CN 102768698 A 1/11页 4 简化的光滑粒子流体动力学 0001 相关申请 本专利文本根据35 U.S.C.11。
10、9(e)要求在2011年5月5日提交的临时美国专利申 请No.61/482,654的提交日的权利,通过引用将该临时美国专利申请结合于此。 技术领域 0002 本实施例涉及基于粒子的流体仿真。在光滑的粒子流体动力学(SPH)中,计 算流体仿真基于蒙特卡洛方法。内部力是在粒子对之间计算的。例如,密度被计算为 ,其中i和j是相邻的粒子,m是质量,r是半径,h是限制对范围的 交互作用的光滑半径,W是核函数。压力被计算为 。粘度力被计算为 。这些力被用于对粒子的平流输送 (advecting)进行仿真。通过多次迭代,速度被计算为 ,以及位置被计算为 。 背景技术 0003 由于只有光滑半径h内的粒子彼此。
11、交互作用,因此可以在该仿真避免以所有粒子 的O(n 2 )计算。以交互作用速度对流体进行仿真的需要进一步导致了基于GPU的实施。通过 将仿真空间分为多个单元(cell),每一次缩小等于光滑半径h,可以在一个粒子的所有邻 居上以O(mn)为数量级迭代,其中m是每个单元的平均粒子数。如果粒子i位于 , ,则相邻粒子j属于。即使具有这样 的效率,以交互作用速度进行仿真仍然是困难的。在光滑半径外部的粒子的影响并未得到 考虑。 发明内容 0004 在各种实施例中,提供了系统、方法和计算机可读介质来用于光滑粒子流体动力 学(SPH)。为了使用更多粒子信息来实现有效率的SPH,创建虚拟粒子。每个虚拟粒子代表。
12、 说 明 书CN 102768698 A 2/11页 5 针对单元中的流体粒子的平均特性。对于给定流体粒子的密度、力或其它计算,计算单元内 的粒子之间的交互作用。为了计算该单元外部的粒子对该单元内的粒子的影响,使用来自 相邻单元的虚拟粒子。与这些集合的粒子的交互作用减少了计算的次数,同时仍然包括来 自其它单元的粒子的影响。 0005 在第一方面中,非临时性计算机可读存储介质在其中存储了代表可由编程的处理 器执行以用于光滑粒子流体动力学的指令的数据。该存储介质包括用于定义第一粒子的指 令,每个第一粒子代表一个或多个第二粒子,并且对每个第二粒子都针对一定范围内的第 二粒子仿真第二粒子对第二粒子交互。
13、作用,并且仿真在该范围内的每个第二粒子与该范围 外部的第一粒子的第二粒子对第一粒子交互作用。 0006 在第二方面,非临时性计算机可读存储介质在其中存储了代表可由编程的处理器 执行以用于光滑粒子流体动力学的指令的数据。该存储介质包括用于以下步骤的指令:将 仿真空间划分为单元;将流体粒子分配给这些单元;对每个单元用至少一个流体粒子创建 质心粒子,质心粒子从各自单元的流体粒子中创建;确定每个质心粒子的质量;根据相邻 单元的质心粒子以及该流体粒子的单元的粒子来确定每个流体粒子的密度;以及作为流体 粒子的密度和质心粒子的密度的函数来平流输送流体粒子。 0007 在第三方面,提供用于光滑粒子流体动力学的。
14、方法。处理器将体积划分为子体积。 这些子体积被流体粒子填充。虚拟粒子代表每个子体积的流体粒子。对于每个流体粒子的 力被基于在与该流体粒子相同的子体积中的流体粒子以及相邻子体积的虚拟粒子来计算。 该计算不是基于相邻子体积的单个流体粒子的。 0008 上述任何一个或多个方面可以单独或组合使用。这些以及其它方面、特征和优点 将由于下面对优选实施例的详细描述而变得明显,该详细描述是要结合附图来阅读的。本 发明通过下面的权利要求定义的,并且在这一节中不应当有任何内容作为对这些权利要求 的限制。下面结合优选实施例讨论本发明的其它方面和优点,并且稍后可以独立或组合地 要求保护。 附图说明 0009 组件和附。
15、图不一定是按比例的,而是重点在于图解实施例的原理。此外在附图中, 贯穿不同的视图相似的附图标记表示对应的部分。 0010 图1是用于光滑粒子流体动力学仿真的一个实施例的流程图; 图2是将粒子分布划分为多个单元的一个实施例的图解; 图3是创建虚拟粒子的一个实施例的图解; 图4是在光滑粒子流体动力学中使用流体粒子和虚拟粒子的一个实施例的图解;以及 图5是用于光滑粒子流体动力学仿真的系统的一个实施例的框图。 具体实施方式 0011 基于粒子的流体仿真方法,例如光滑粒子流体动力学(SPH),可以被用于实现交互 作用的流体仿真。为了提供仿真而同时保持交互作用速度,创建代表每个单元的一个或多 个粒子的虚拟。
16、粒子。为了交互作用,该仿真通常以每周期(以毫秒为单位)为基础来更新。 因此,流体交互作用的计算有效率地进行以保持交互作用速度。用于以交互作用速度的SPH 说 明 书CN 102768698 A 3/11页 6 的有效率的方法可以是用更大的虚拟粒子来替换每个单元的多个流体粒子。替换虚拟粒子 被用于计算未在单元内的粒子对与该单元内的给定流体粒子的交互作用的贡献。SPH实施 可以比现有技术更快,并且适于交互作用的应用,同时提供类似的仿真质量。光滑距离可 以减小以进一步增加速度,但是会减小对降低仿真质量的给定流体粒子贡献力的粒子的数 量。 0012 增强型SPH包括密度和/或内部力的计算。这些计算基于。
17、使用仍然捕获整体流体 仿真行为的组合的粒子(例如虚拟粒子)来代表相同的流体体积。虚拟粒子被表示为空间中 的具有给定质量的点(即,代表空间中质量的存在),其中在网格单元内的一组粒子的密度 被集合。为了保持流体仿真的小细节特征,这些计算包括在单元水平上的流体粒子对流体 粒子的交互作用。为了在流体仿真中包括通过其它单元贡献的特征,这些计算还包括流体 粒子对虚拟粒子的交互作用。 0013 图1示出在基于粒子的仿真中的光滑粒子流体动力学方法。该方法通过图5的系 统和/或不同的系统来实施。处理器执行动作。可以提供额外的、不同的或更少的动作。 例如,动作34,36,37和38未被执行。作为另一个示例,动作3。
18、7未被执行。动作34-38可 以在不使用动作28,30和32的情况下执行,至少使用不使用虚拟粒子的动作28,30和32。 在又一个示例中,提供移动固体对象和调整粒子运动的额外的动作。可以添加任何进一步 的基于粒子的流体仿真动作。 0014 该方法以所示出的顺序提供。动作22和24可以顺序地执行或者与动作26并行 地执行。可以提供其它顺序。在一个实施例中,动作22和24是在仿真之前执行的初始化 的一部分。对流体粒子的运动进行仿真而不进一步执行初始化动作。动作26,28,30,32和 34作为仿真流体流程的一部分重复地或迭代地执行。在该仿真中,作用于被仿真的粒子的 内部力以及粒子和任何固体对象之间。
19、的力被重复地计算。 0015 在动作22中,仿真空间被划分为多个单元。该仿真空间是体积、面积或其它区域。 所述仿真空间是有边界的,例如通过表面,或者是无边界的,例如代表流体内的流动区域。 0016 基于预先确定的参数和/或通过用户输入的信息,处理器将仿真空间划分为所述 多个单元。每个单元是子区域。例如,处理器将体积划分为多个子体积。为了进行基于粒 子的流体仿真,将这些粒子分为有规则间隔的网格单元。这些粒子被分组为三维的单元分 布。所述仿真空间被细分为三维(3D)的网格,使得在任何仿真迭代期间流体粒子仅位于一 个单元中。图2示出4个这样的单元40,每一个单元包括流体粒子42。这些网格单元分割 了。
20、粒子分布并且也被用于计算对流体仿真的演变有所贡献的特性。 0017 可以使用任何数量的单元。单元的数量以及这些单元的对应体积可以基于粒子密 度、每个单元的粒子数量和/或流体的仿真体积来确定。 0018 这些单元40具有相同的尺寸和形状,但是可以具有不同的尺寸和形状。每个单元 都被定义为该单元中心的三维位置和该单元内的被仿真的粒子列表的函数。在一个实施例 中,每个单元都通过该单元中的流体粒子对象的列表、该列表的长度(标量值)、该单元的中 心(三元组)以及用于将具有粒子的单元与没有粒子的单元区分开来的空标志(布尔值)来 定义。在替换的实施例中,中心和/或空标志不是单独存储的,因为空属性可以从该列表。
21、中 确定并且中心可以通过单元的索引来确定。 0019 在动作22中进行单元的初始创建时,将单元计数设置为0。所述体积被划分为多 说 明 书CN 102768698 A 4/11页 7 个单元,而且确定单元计数和对应的分布。这些单元的3D结构作为向量存储。这些单元作 为一维列表存储。从该一维列表中作为索引移位的函数来访问这些单元。在三维空间中的 单元索引与该单元的实际存储器位置之间的关系通过索引函数来给定。如果给定单元在三 维中的规则分布,所产生的一维存储向量具有单元的代表不同行、列和平面的规则图案。每 一行的单元在索引方面是顺序的,其中在给定列中的每一行都偏移了第一索引值,在一列 中的网格元素。
22、的数量(例如当存在10列时,第一行是0-9,第二行是10-19,等等,其中为了 找到与第一行中的单元相邻的第二行的单元使用+10的偏移)。对于使用等于平面(行 列)中元素数量的第二索引值的平面而言,按照类似的方式进行重复。由于在存储器中的这 种规则分布,可以快速确定用于获取给定单元周围的所有单元的索引移位图案。也可以使 用用于存储的单元网格的其它布置。 0020 在动作24中,将流体粒子分配给这些单元。通过划分所述体积定义的子体积被流 体粒子填充。定义被仿真的流体粒子的两维或三维分布。这些流体粒子是总体上代表被仿 真的流体的点。流体粒子可以与特性关联和/或被处理为两维或三维形状。由于流体粒子 。
23、被用于对流体仿真,因此流体粒子以贯穿整个体积的规则密度散布在初始位置上,在所述 初始位置上流体将被仿真。可以使用不规则的密度,例如对温度差异对流体密度的影响进 行建模。 0021 流体粒子可以在体积被分为子体积之前分布在该体积中。在动作22中的单元创 建可以导致粒子在这些单元内的分布。替换地,在动作22中创建单元之后在动作24中分 布流体粒子。 0022 每个单元中流体粒子的数量对不同的单元是相同或不同的。在每个单元40内的 流体粒子42的数量和布置可以不同,例如在图2所表示的。在一个实施例中,每个单元中 流体粒子的数量很小,例如小于100、10或其它数量。动作22的划分和动作24的分布提供 。
24、了贯穿仿真空间的被分组到单元40中的流体粒子42的三维分布。 0023 流体粒子具有预先确定的、计算的、用户设置的或者被分配的特性。这些特性可以 基于待执行的仿真来分配。不同的特性可以按照相同或不同的方式来确定,例如用户输入 位置和半径这些特性。确定其它仿真特性,例如光滑半径和体积。所输入或存储的信息由 处理器用于确定所述分布。 0024 流体粒子具有被分配的或固定的半径R f 。所有的流体粒子典型地都具有相同的半 径,但是不同的流体粒子可以具有不同的半径。作为所述分布的一部分,流体粒子具有被分 配的位置L i f 。不同的流体粒子处在不同的位置上。 0025 光滑半径可以是被分配的或是常量。。
25、在一个实施例中,光滑半径h f 是常量, 被计算为,其中。一个示例值是。体积是另一个常量,被计算为 。不同的流体粒子具有相同的体积,但是可以具有不同的体积。 0026 流体粒子也可以被分配速度。当流体粒子运动时,例如在仿真的每次迭代时 运动,速度和/或位置保持相同或者改变。对于给定的迭代来说,速度和位置被更新为 以及。力初始地被设置为零,即,但是 说 明 书CN 102768698 A 5/11页 8 也可以是其它值。初始的粒子速度可以到零或者可以被设置为指示给流体的初始运动的 值。 0027 如果给定流体粒子42在仿真空间中的分布,则在动作26中确定虚拟粒子。虽然 流体粒子在代表其它东西(即。
26、流体)的含义中是虚拟的,但是“虚拟粒子”被用于指代代表 一个或多个其它粒子的粒子。每个虚拟粒子都代表一个或多个流体粒子。例如,每个单元 中的流体粒子都由各自的虚拟粒子代表。图3示出虚拟粒子44,其中每个单元一个。在替 换实施例中可以使用代表多个单元的虚拟粒子44。对于每个非空单元而言,创建虚拟粒子 44。每个虚拟粒子44都从对应单元40的流体粒子42中创建。虚拟粒子44被定义为每个 虚拟粒子代表一个或多个流体粒子42,其中每个虚拟粒子44代表给定单元或者其它子体 积中的所有流体粒子42。虚拟粒子44的数量等于非空网格单元40的数量,但是可以提供 其它数量。 0028 对于仿真的每次迭代,都要计。
27、算虚拟粒子。计算各种特性。例如,确定每个虚拟粒 子的位置和半径。所述位置被计算为各个单元中的流体粒子的平均位置。例如,计算单元 内的所有且只有流体粒子的平均位置。在一个实施例中,虚拟粒子的位置L g c 是单元内粒子 的质心。虚拟粒子可以是质心粒子。位置的质心的一个代表是 ,其中g是质心粒子,而j是流体粒子,cell(j)=cell(g),以及count(cell(g)是虚拟粒子 g所位于的单元内的流体粒子的数量。可以使用其它用于计算虚拟粒子的质心或位置的中 心的方法。 0029 在一个实施例中,计算虚拟粒子的半径。每个虚拟粒子的半径包括各个子体积的 流体粒子。对于每个单元,确定包括所有流体粒。
28、子的半径,但是可以使用其它标准(例如,包 括大多数流体粒子的半径)。为了包含单元内的所有流体粒子,将半径设置为离中心位置最 远的流体粒子与该中心位置之间的距离。半径R g c 依据流体粒子的分布而变化,并且被表示 为,其中。该半径等于或大于流体粒子半径,但是小于或 等于单元内最大距离的一半。这被表示为,其中单元尺寸基于流体粒子 的光滑距离。可以从所述半径中来确定体积,例如。 0030 虚拟粒子的光滑距离是可变的,但是可以是常量。在一个实施例中,虚拟粒子光滑 距离h g c 被表示为h g c =kR g c ,其中k2,例如k=3。虚拟粒子的光滑距离大于或等于流体粒子 的光滑距离。这被表示为对。
29、所有g都有h g c h f 。由于单元可以仅包括一个流体粒子,因 此为该单元所产生的虚拟粒子具有该流体粒子的位置、半径和光滑距离。由于一些单元可 以包括多于一个流体粒子,因此这些单元的光滑距离大于单个流体粒子的光滑距离。位置 和半径也可以不同于该单元中的任何一个流体粒子。 0031 为这些单元的每一个、大多数或一些确定虚拟粒子的特性。在一个实施例中,虚拟 粒子是为具有至少一个流体粒子的每个单元创建的。对于具有流体粒子的给定单元,计算 单个虚拟粒子以及在该单元内的流体粒子的特性。 0032 在动作32中,确定每个虚拟粒子的质量。该质量是从各单元中的流体粒子来确定 说 明 书CN 1027686。
30、98 A 6/11页 9 的。用于计算虚拟粒子的其它特性的相同的流体粒子被用于计算所述质量。使用任何方法 来计算在虚拟粒子的位置上的质量。 0033 在动作28和动作30中,确定流体粒子和虚拟粒子中每一个的密度。任何给定流 体粒子的密度包括两个组分。第一组分是来自同一单元内的其它流体粒子的贡献。第二组 分是来自其它单元的虚拟粒子的贡献,例如来自正好相邻的单元的贡献。其它单元中的单 个流体粒子对所述密度没有贡献。相反,使用代表流体粒子的虚拟粒子。在一个实施例中, 虚拟粒子密度是仅在相邻单元内的粒子的贡献,并且被表示为 。 0034 图4代表针对一个单元中的流体粒子42的计算,其中贡献来自其它单元。
31、中的虚拟 粒子44。为清楚起见仅示出4个子体积。虽然图2-4示出4个子体积,但是提供了在同一 平面内的额外子体积和体积的额外平面。 0035 虚拟粒子光滑距离和虚拟粒子位置可以被用于确定哪些虚拟粒子对给定流体粒 子的密度有所贡献。在其它实施例中,相邻通过单元分布来定义。对于立方形单元,来自邻 近6个(沿着x维、y维和z维的每一个的对)或来自邻近26个(沿着x,y和z的对加上来 自对角线的对)的虚拟粒子可以为相邻。为了限制计算的复杂性,来自其它单元(即非相邻 单元)的虚拟粒子不被使用并且对密度计算没有贡献。类似的,针对给定流体粒子所属的单 元的虚拟粒子不被使用,因为流体粒子本身和同一单元的流体粒。
32、子被用于单独的贡献。流 体粒子密度是用同一单元中的其它流体粒子的贡献以及相邻单元中的虚拟粒子的贡献 来计算的。 0036 对于每个流体粒子i,都在两个水平上计算密度:使用同一单元 内的粒子的贡献,以及使用相邻单元中的相邻质心粒子。这被表示为: ,其中。可以使用其它函数。 0037 针对该仿真的每个流体粒子计算密度。流体粒子的密度被有效率地确定,即使包 含来自相邻单元的密度分布。在同一单元中的其它流体粒子的贡献类似于传统的SPH计算 并且按照O(m 2 )的数量级,其中m是每个单元的粒子的平均数量。这种复杂度水平通过仅 在同一单元内的流体粒子之间执行这些运算来最小化。第二阶段(即相邻虚拟粒子的贡。
33、献) 是O(1),因为相邻单元的数量是常量并且每个单元仅有一个虚拟粒子。针对密度的全部计 算时间类似于SPH,即O(nm),但是增加了在更宽范围内的粒子的影响。实际上,基本运算的 数量可以更少。 0038 给定流体粒子的质量是常量,代表在该流体粒子的半径内仿真的流体质量。 0039 每个虚拟粒子的质量也在动作32中计算。该质量是所述单元内的流体粒子的密 度的函数。如果给定所计算的密度和粒子半径或体积,则计算虚拟粒子的质量。流体粒子 的质量是固定的,例如m f 。虚拟粒子的质量m g c 随着虚拟粒子的密度和体积的变化而变化。 在一个示例中,质量被表示为:,但是可以使用其它计算。 0040 在动。
34、作34中,流体粒子被平流输送。在动作36中计算影响每个流体粒子的力,在 说 明 书CN 102768698 A 7/11页 10 动作37中处理任何约束条件,并且在动作38中计算或更新速度和位置。可以提供额外的、 不同的或更少的动作。 0041 流体粒子作为流体粒子密度以及虚拟粒子密度的函数来平流输送。这些密度被用 于在动作36中计算力。 0042 在每次仿真迭代中,在内部力和外部力的作用下对流体粒子进行平流输送。内部 力是针对所有流体粒子计算的,并且流体和任何固体对象之间的碰撞被处理为对于流体来 说的外部力。使用内部力和外部力的组合,对流体进行平流输送。 0043 针对每个流体粒子的内部力基。
35、于同一单元中的流体粒子以及邻近单元的虚拟粒 子。在没有来自非邻近单元的贡献的情况下确定来自邻近单元的针对给定单元内的流体粒 子的力,但是可以使用任何范围的贡献。在同一迭代期间计算该单元内的每一对粒子之间 的力。 0044 为了简化针对该单元外部的流体粒子的计算,不使用来自相邻单元中的单个流体 粒子的力。相反,确定通过代表相邻单元内的流体粒子的虚拟粒子引起的虚拟力。作用在 虚拟粒子上的力代表单元内的力,并被用于计算在相邻单元中的流体粒子上的力。对施加 于给定流体粒子的力的贡献包括来自邻近子体积中的流体粒子的贡献,但是基于虚拟粒子 以及对应的虚拟力而不是单个流体粒子的力。内部力是在网格单元内在该单。
36、元的每个粒子 与邻近单元的虚拟粒子之间计算的。 0045 任何力都可以被计算。在一个实施例中,计算压力和粘度力。压力是针对仿真空 间中的每一个流体粒子计算的。对于给定的流体粒子,所述压力基于该单元的其它流体粒 子的密度以及邻近单元的虚拟粒子的密度。压力P i f 被表示为P i f =EOS( i f ),其中EOS是用 于在给定流体粒子密度时计算压力的状态方程。EOS可以代表理想气体的压力或Tait方 程。其它函数可以被使用。 0046 针对虚拟粒子的压力P g c 是基于同一子体积内的流体粒子的压力以及这些流体粒 子的质量来计算的。虚拟压力被计算为: ,其中针对该求和中的每个流体粒子的压力。
37、是 P i f =EOS( i f )。 0047 针对虚拟粒子和流体粒子的压力被用于确定针对每个流体粒子的压力。该压力对 来自单元内的流体粒子的压力与来自其它单元的虚拟粒子的压力求和。在一个实施例中, 所述压力在一项中是流体粒子质量、单元的流体粒子之间的压力、针对该单元的核函数的 向量差(del)以及流体粒子的密度的函数,并且在另一项中是虚拟粒子质量、相邻单元的流 体粒子与虚拟粒子之间的压力、针对虚拟粒子的核函数的向量差(del)、以及虚拟粒子的密 度的函数。在一个实施例中,压力被表示为: 说 明 书CN 102768698 A 10 8/11页 11 , 其中i和j是流体粒子,g是虚拟粒子。
38、,并且。可以使 用其它压力函数。 0048 另一个力是粘度力。针对每一个流体粒子计算粘度力。粘度力是来自同一单元内 的流体粒子的力以及来自相邻单元的虚拟粒子的力的和。在一个实施例中,粘度力被计算 为一项是流体粒子质量、流体粒子速度和平滑距离上流体粒子半径的拉普拉斯算子、流体 粒子密度以及粘度的函数,并且另一项是虚拟粒子质量、虚拟粒子速度和在虚拟平滑距离 上的虚拟粒子半径的拉普拉斯算子、虚拟粒子密度以及粘度的函数。一个示例表示是: , 其中i和j是流体粒子,g是质心粒子,是粘度,并且 。可以使用针对粘度力的其它函数。 0049 流体粒子的速度取决于仿真和任何事先计算的速度(即,在其它迭代中确定的。
39、速 度)。对于第一次迭代,流体粒子的速度由用户编程或设置。虚拟粒子的速度是在各个单元 中的流体粒子的速度的函数。可以计算平均速度向量。另一个示例被表示为: 。可以使用其它函数。 0050 可以使用其它内部力来代替或附加于压力和粘度力。不计算针对虚拟粒子的单独 的压力和粘度力,因为它们是虚拟的并且不会运动。虚拟粒子的创建是为了确定来自相邻 粒子对任何给定流体粒子的贡献。 0051 总的力可以包括外部力,例如与边界关联。流体粒子作为任何外部力的函数平流 输送。在动作37中,在仿真中执行边界处理以确定外部力在何处发生以及以什么样的程度 发生。为了处理在仿真空间中的固定障碍,将每个碰撞表面的每个面(通。
40、过碎片表示)与凑 巧在光滑半径内的一组网格单元或子体积关联。该问题可以被重新定义为将固体碎片与一 组网格单元关联。该映射找到与代表所述对象、即所述碎片的网眼或表面相交的单元。碎 片被用于检测哪些流体粒子可能与对象碰撞。如果网格单元的中心和/或任何部分在离最 近碎片的光滑半径之外,则该单元被认为远离碎片并被忽略。在每个仿真步骤期间,仅对那 些关联单元内的流体粒子进行测试看是否与相关的面、三角形或代表该面的其它碎片发生 说 明 书CN 102768698 A 11 9/11页 12 碰撞。 0052 检测对流体进行仿真的流体粒子与边界的碰撞。在一个或多个流体粒子相交或处 于由碎片的通过与碎片基元(。
41、primitive)的碰撞而确定的内侧的地方,发生了碰撞。通过 测试流体粒子相对于碎片的位置,可以计算由于碰撞而作用于这些粒子和对象的力。 0053 当流体粒子从那个平面穿过一定距离d进入固体对象中时,该流体粒子与碎片碰 撞。例如,其中D是至基元表面的平面距离(从所述粒子至基元上点的最小 距离),并且是单位表面法线。可以使用针对流体粒子的其它碰撞检测,例如确定从碎片 外部到碎片内部的转移。 0054 确定该碰撞的交互作用力。任何力计算都可以被用于代表来自与刚性体或半 刚性体的碰撞的力。该力被添加给碰撞的流体粒子,而对向力被添加给所述对象。该力 是针对流体粒子的外部力。流体粒子i具有位置和力:。。
42、在流体 粒子上的边界力被如下计算为误差校正力和反力的和: ,其中是常量,其与粒子的密度成比例并且与仿真时间步长 的平方成反比。 0055 的目的是对抗在法线的方向上施加于粒子i的任何力,从而被负加 权。法线被定义为从碰撞表面指向外部。另一方面,被用于校正粒子i在碰撞表 面的表面内部所经过的穿越距离d。这可以是弹簧常量或其它力计算。和都在 法线方向上动作,由此这构成了自由滑动条件。用于力计算的法线垂直于流体粒子所碰撞 的基元。可以使用具有或不具有自由滑动或其它条件的其它力计算。 0056 计算作用于固体对象和/或流体粒子的任何其它力。施加这些力是为 了移动流体粒子。这些力的向量可以被求和,以确定。
43、总的力和方向,其被表示为: 。依据对固体对象的运动的限制,固体对象可以由于力 的施加而运动或不运动。当固体对象改变位置时,对碎片的所有边界体积施加平移和旋转。 0057 在动作38中,确定流体粒子的速度和位置。所述力被施加到流体粒子。由同一单 元中的流体粒子贡献的力、来自周围虚拟粒子的力以及来自任何边界的力被施加到每个流 体粒子以确定在给定的单位时间内该流体粒子的速度和位置。由于这些力基于虚拟粒子和 流体的密度,因此速度和位置是密度以及其它因素的函数。 0058 给定流体粒子的速度基于当前速度以及由于加速而带来的任何改变。这 些力导致了加速。在一个实施例中,在给定迭代中的流体粒子的速度被表示为。
44、 ,其中a是加速度,t是时间。初始迭代的速度是被分配或预定 的。不同的流体粒子可以具有不同的速度和/或加速度。速度可以被计算为一维、两维或 说 明 书CN 102768698 A 12 10/11页 13 三维向量以说明方向。 0059 每个流体粒子的位置基于当前位置与给定单位时间内的速度导致的位移量的和。 在一个实施例中,所述位置被表示为: 。 0060 任何其它运动、变形或改变被应用于该仿真。然后该仿真的下一个周期发生,使用 当前配置重复相同的步骤。在每次迭代中,重新计算虚拟粒子。不同的流体粒子可以在每 个子体积内。在动作24中流体粒子基于位置被分配给不同的子体积,在动作26中重新创 建虚。
45、拟粒子,又在28中计算虚拟粒子的密度,又在动作32中计算虚拟粒子的质量,并且又 在动作34中执行流体粒子的平流输送。使用流体粒子的当前速度和位置的这种重复对流 体流动进行仿真。 0061 该仿真有效率地执行,同时包括在单个单元范围之外的、集合形式的信息。通过包 括来自相邻子体积、但是限于代表性粒子或更大粒子的信息,平流输送或整个仿真的效率 比确定同一组单元中的所有流体粒子之间的交互作用好得多。在一个实施例中,平流输送 是以O(nm)数量级的效率执行的,其中m是每个单元的流体粒子的平均数量。 0062 图5示出用于在流体仿真中的光滑粒子流体动力学系统的框图。该系统包括处理 器16和存储器18。可。
46、以提供额外的、不同的或更少的部件。例如,提供例如网卡、无线收发 器和/或用户输入设备的输入设备。作为另一个示例,提供显示器、打印机、网卡、无线收发 器和/或其它输出设备。 0063 由处理器16执行的计算机处理可以按照硬件、软件、固件、专用处理器或它们的 组合的各种形式来实施。一些实施例以软件实施为在非临时性程序存储设备上有形体现的 程序。通过用存储器中的代码或系统来实施,由处理器16执行基于粒子的仿真。 0064 处理器16和/或存储器18是计算机、个人计算机、服务器、工作站、网络处理器或 其它现在已知或后来开发的处理系统的一部分。例如显示设备、盘存储设备(例如磁或光盘 存储设备)、键盘、打。
47、印设备和鼠标的各种外设可以在操作中耦合到处理器16。程序可以被 上传到处理器16并由处理器16执行。类似的,处理策略可以包括多重处理、多任务、并行 处理等等。处理器16在具有硬件的计算机平台上实施,所述硬件例如是一个或多个中心处 理单元(CPU)、图形处理单元(GPU)、随机存取存储器(RAM)和(一个或多个)输入/输出(I/ O)接口。该计算机平台也包括操作系统和微指令代码。在此所描述的各种处理和功能可以 是微指令代码的一部分或是经由操作系统存储和执行的程序的一部分(或它们的组合)。替 换地,处理器16是网络中的一个或多个处理器。 0065 指令、用户输入(例如参数或值分配)、规则和/或其它。
48、信息存储在非临时性计算机 可读存储器例如存储器18中。存储器18是外部存储设备、内部存储设备、RAM、ROM和/或 本地存储器(例如固态驱动器或硬驱动器)。相同或不同的计算机可读介质可用于指令和其 它数据,例如为流体粒子和/或虚拟粒子计算的各种参数。存储器18可以使用通过处理 器16管理并且驻留在存储器上的数据库管理系统(DBMS)来实施,所述存储器例如是硬盘、 RAM或可移动介质。替换的,存储器18是处理器16内部的(例如高速缓存)。存储器18存 储由基于粒子的流体仿真所使用的或者由基于粒子的流体仿真所产生的数据。 0066 用于实施在此讨论的处理、方法和/或技术的指令被提供在计算机可读存储。
49、介质 说 明 书CN 102768698 A 13 11/11页 14 上或者例如高速缓存、缓冲器、RAM、可移动介质、硬驱动器的存储器或其它计算机可读存储 介质上。计算机可读存储介质包括各种类型的易失性和非易失性存储介质。在附图中图解 或在此描述的功能、动作或任务是响应存储在计算机可读存储介质中或计算机可读存储介 质上的一组或多组指令而执行的。功能、动作或任务与特定类型的指令集、存储介质、处理 器或处理策略无关,并且可以通过软件、硬件、集成电路、固件、微代码等等独立或组合操作 地执行。 0067 在一个实施例中,指令存储在可移动介质设备上以便由本地或远程系统读取。在 其它实施例中,指令存储在远程位置上以便于通过计算机网络或通过电话线传输。在另外 的实施例中,指令存储在给定的计算机、CPU、GPU或系统中。由于在附图中描绘的一些组成 系统部件和方法动作优选以代码来实施,因此系统部件(或处理步骤)之间的实际连接可以 依据本实施例所编程的方式而不同。 0068 处理器16被配置为执行所述仿真。处。