基于流体粒子建模空气泡的运动的方法和设备与流程

文档序号:12612332阅读:232来源:国知局
基于流体粒子建模空气泡的运动的方法和设备与流程

技术领域

下面的描述涉及一种用于基于流体粒子建模空气泡的运动的方法和设备。



背景技术:

在计算机图形(CG)领域中(例如,视觉效果(VFX)领域),空气粒子可用于建模流体流动中的空气泡。

为了使用空气粒子建模流体中的空气泡,与空气泡的体积对应的空间需要使用空气粒子填充。因此,大量的空气粒子需要被处理以建模大型的空气泡,并且确定空气粒子的最初播种位置和消除位置可能不容易。



技术实现要素:

提供本发明内容从而以简化的形式介绍将在下面的具体实施方式中进一步描述的构思的选择。本发明内容不意在标识所要求保护的主题的关键特征或必要特征,也不意在作为确定要求保护的主题的范围的帮助而被使用。

在一个总体方面中,一种流体粒子建模方法,包括:基于流体粒子的位置确定气泡单元;定义由气泡单元构成的气泡;基于气泡的体积的改变计算气泡的压力;基于气泡的压力更新流体粒子的位置。

确定气泡单元的步骤可包括:将基于网格单元的模型空间中的网格单元之中的不包括任何流体粒子的网格单元确定为气泡单元。

定义气泡的步骤可包括:基于气泡单元之间的连接关系确定气泡;将标识符(ID)分配给气泡。

确定气泡的步骤可包括:使用泛洪填充标记算法确定气泡单元之间的连接关系;将气泡单元之中的连接的气泡单元确定为气泡。

流体粒子建模方法还可包括:基于与气泡的位置相邻的流体单元的信息,确定气泡的最初的体积和最初的压力;流体单元可包括所述流体粒子中的一些流体粒子。

计算气泡的压力的步骤可包括:基于气泡的先前的体积和气泡的当前的体积计算气泡的压力。

计算气泡的压力的步骤可包括:使用气体状态方程计算有效防止气泡消失的气泡的压力。

流体粒子建模方法还可包括:通过在不同的建模时间步长中执行ID匹配,确定气泡的结构改变是否已发生;响应于确定的结果是结构改变已发生,将新的ID分配给由于结构改变而造成的一个或多个气泡。

确定气泡的结构改变是否已发生的步骤可包括:使用最佳重叠算法在不同的建模时间步长中执行ID匹配。

气泡的结构改变可以是气泡破裂为多个气泡和气泡与另一气泡合并之中的任意一个。

更新流体粒子的位置的步骤可包括:使用光滑粒子流体动力学(SPH)算法建模流体粒子。

更新流体粒子的位置的步骤可包括:将作为外力的气泡的压力施加到流体粒子之中的与气泡相邻的流体粒子;基于施加到与气泡相邻的流体粒子的外力,确定流体粒子的更新的位置。

计算气泡的压力的步骤可包括:重新布置气泡中的压力分布以建模气泡的浮力。

重新布置气泡中的压力分布的步骤可包括:基于构成气泡的气泡单元的位置,逐步改变气泡中的压力分布。

重新布置气泡中的压力分布的步骤可包括:增加构成气泡的气泡单元之中的在气泡中处于较高位置的气泡单元的压力;减少构成气泡的气泡单元之中的在气泡中处于较低位置的气泡单元的压力。

在另一总体方面中,一种非暂时性计算机可读存储介质,存储当由处理器执行时导致处理器执行如权利要求1所述的方法的指令。

在另一总体方面中,一种流体粒子建模设备,包括:处理器,被配置为基于流体粒子的位置确定气泡单元,定义由气泡单元构成的气泡,基于气泡的体积的改变计算气泡的压力,基于气泡的压力更新流体粒子的位置;存储器,被配置为存储在基于网格单元的模型空间中包括流体粒子的流体单元的信息和构成气泡的气泡单元的信息。

处理器还可被配置为:将基于网格单元的模型空间中的网格单元之中的不包括任何流体粒子的网格单元确定为气泡单元。

处理器还可被配置为:基于气泡单元之间的连接关系确定气泡,并将标识符(ID)分配给气泡。

处理器还可被配置为:基于与气泡的位置相邻的流体单元的信息,确定气泡的最初的体积和气泡的最初的压力;流体单元可包括所述流体粒子中的一些流体粒子。

处理器还可被配置为:基于气泡的先前的体积和气泡的当前的体积计算气泡的压力。

处理器还可被配置为:使用气体状态方程计算有效防止气泡消失的气泡的压力。

处理器还可被配置为:通过在不同的建模时间步长中执行ID匹配,确定气泡的结构改变是否已发生,响应于确定的结果是结构改变已发生,将新的ID分配给由于结构改变而造成的一个或多个气泡。

气泡的结构改变可以是气泡破裂为多个气泡和气泡与另一气泡合并之中的任意一个。

处理器还可被配置为:通过使用光滑粒子流体动力学(SPH)算法建模流体粒子来更新流体粒子的位置。

处理器还可被配置为:将作为外力的气泡的压力施加到与流体粒子之中的气泡相邻的流体粒子,并基于施加到与气泡相邻的流体粒子的外力,确定流体粒子的更新的位置。

处理器还可被配置为:重新布置气泡中的压力分布以建模气泡的浮力。

处理器还可被配置为:基于构成气泡的气泡单元的位置,逐步改变气泡中的压力分布。

处理器还可被配置为:增加构成气泡的气泡单元之中的在气泡中处于较高位置的气泡单元的压力,减少构成气泡的气泡单元之中的在气泡中处于较低位置的气泡单元的压力。

在另一总体方面中,一种流体建模方法,包括:使用粒子建模方法通过流体粒子建模流体;使用非粒子建模方法在流体中建模气泡;在建模处理中随时间流逝追踪气泡的体积;基于气泡的当前的体积计算气泡的当前的压力;将气泡的当前的压力施加到流体粒子之中的与气泡相邻的流体粒子。

粒子建模方法可包括:在基于网格单元的模型空间中建模网格单元中的流体粒子;非粒子建模方法可包括:通过基于网格单元的模型空间中的不包括任何流体粒子的连续的网格单元来建模气泡。

所述追踪气泡的步骤可包括:在建模处理的开始将气泡定义为基于网格单元的模型空间中的不包括任何流体粒子的连续的网格单元;在建模处理的开始将相同的标识符(ID)分配给连续的网格单元;将建模处理开始的气泡的体积确定为具有所述ID的连续网格单元的体积之和;在建模处理中在时间已流逝之后识别具有所述ID的识别的连续的网格单元;将时间已流逝之后的气泡的体积确定为具有所述ID的识别的连续的网格单元的体积之和。

所述方法还可包括:在建模处理的开始确定气泡的最初的体积;在建模处理的开始确定气泡的最初的压力;所述计算气泡的当前的压力的步骤可包括:基于气泡的当前的体积、气泡的最初的体积和气泡的最初的压力来计算气泡的当前的压力。

所述确定气泡的最初的体积的步骤可包括:将气泡的最初体积确定为在建模处理的开始基于网格单元的模型空间中的不包括任何流体粒子的连续的网格单元的体积之和;所述确定气泡的最初的压力的步骤可包括:将气泡的最初的压力确定为与建模处理开始的气泡相邻的流体粒子的压力。

所述方法还可包括:将与建模处理开始的气泡相邻的流体粒子的压力确定为与建模处理开始的气泡相邻的流体粒子的个体压力的平均。

所述计算气泡的当前的压力的步骤可包括:根据下面的等式计算气泡的当前的压力:

在上面的等式中,P2表示气泡的当前的压力,P1表示气泡的最初的压力,V1表示气泡的最初的体积,V2表示气泡的当前的体积。

所述将气泡的当前的压力施加到与气泡相邻的流体粒子的步骤可包括:将气泡的当前的压力施加到基于网格单元的模型空间中的包括流体粒子的网格单元。

从下面的具体实施方式、附图和权利要求,其他特征和方面将是清楚的。

附图说明

图1A和图1B是示出产生气泡的示例的示图。

图2是示出流体粒子建模方法的示例的流程图。

图3是示出定义气泡的处理的示例的流程图。

图4是示出定义的气泡的示例的示图。

图5是示出计算气泡的压力的处理的示例的流程图。

图6是示出计算有效防止气泡消失的气泡的压力的示例的示图。

图7是示出流体粒子建模方法的另一示例的示图。

图8是示出更新流体粒子的位置的处理的示例的示图。

图9A和图9B是示出基于气泡的结构改变而分配新的标识符(ID)的示例的示图。

图10是示出流体粒子建模方法的另一示例的流程图。

图11是示出流体粒子建模方法的另一示例的流程图。

图12A和图12B是示出重新布置气泡中的压力分布以建模气泡的浮力的处理的示例的示图。

图13是示出流体粒子建模设备的示例的示图。

贯穿附图和具体实施方式,相同的附图标号表示相同的元件。附图可不按比例,并且为了清楚、说明和方便,附图中的元件的相对大小、比例和描绘可被夸大。

具体实施方式

提供下面的详细描述以协助读者获得对在此描述的方法、设备和/或系统的全面理解。然而,在此描述的方法、设备和/或系统的各种变化、修改和等同物对本领域普通技术人员将是清楚的。在此描述的操作的顺序仅是示例,操作的顺序不受限于在此阐述的顺序,而是除了必须按特定顺序发生的操作之外可如本领域普通技术人员将清楚的那样改变。此外,为了更加清楚和简洁,可省略本领域普通技术人员所公知的功能和结构的描述。

在此描述的特征可以以不同的形式来实现,并且不应解释为受限于在此描述的示例。相反,提供在此描述的示例以使得本公开将是彻底和完整的,并且在此描述的示例将向本领域普通技术人员传达本公开的全部范围。

这里可使用诸如第一、第二、A、B、(a)、(b)的术语来描述组件。这些术语不用于限定对应组件的本质、顺序或序列,而仅用于将对应组件与一个或多个其他组件进行区分。例如,第一组件可替换地被称为第二组件,第二组件可替换地被称为第一组件。

如果说明书声明一个组件被“连接”、“结合”或“接合”到另一组件,则第三组件可被“连接”、“结合”或“接合”在第一组件与第二组件之间,或者第一组件可直接被“连接”、“结合”或“接合”到第二组件。如果说明书声明一个组件被“直接连接”或“直接接合”到另一组件,则第三组件可不被“连接”、“结合”或“接合”在第一组件与第二组件之间。诸如“在……之间”和“直接在……之间”,以及“与……相邻”和“与……直接相邻”的相似的描述将以本相同方式被解释。

在此使用的术语仅出于描述具体示例的目的,而不是被用于限制本公开。除非上下文另外明确地指示,否则单数形式也意在包括复数形式。如在此使用的,术语“包括”、“包含”和“具有”说明存在所叙述的特征、数量、操作、元件、组件和/或它们的组合,但是不排除存在或添加一个或多个其他特征、数量、操作、元件、组件和/或它们的组合。

除非另外定义,否则这里使用的包括技术术语和科学术语的所有术语具有与本公开所属领域的普通技术人员通常理解的含义相同的含义。除非在这里明确定义,否则诸如在通用字典中定义的术语应被解释为具有与相关领域的背景中的含义一致的含义,并且将不被解释为理想化或过于正式的含义。

下文中描述的示例可用于建模流体和包括在流体中的气泡。示例可以在各种装置(例如,个人计算机(PC)、膝上型计算机、平板计算机、智能电话、电视(TV)、智能家电和可穿戴装置)中实现。示例可用于图像处理以建模例如智能电话、移动装置和智能家居系统中的包括气泡的流体。例如,示例可类似地在游戏控制台或游戏机、虚拟现实播放器和三维(3D)建模设备中使用。

在示例中,建模设备可被实现为硬件模块。例如,建模设备可被实现为单处理器系统、多处理器系统、专用硬件系统、处理器和硬件加速器(HWA)被组合的系统和云计算系统。

图1A和图1B是示出产生气泡的示例的示图。在图1A和图1B的示例中,包括在流体(例如,图1A的流体120和图1B的流体140)中的小圆圈指示包括在流体中的流体粒子。

参照图1A,通过固体110与流体120之间的相互作用产生气泡。例如,当固体110的一部分淹没在流体120中并且随后被流体120的迅速移动或流体120的高流速排出时,流体120中的先前被固体110占据的空间被空气填充,流体120的表面由于流体120的高流速而闭合。在先前被固体110占据的空间中,通过填充该空间的空气产生气泡。

参照图1B,通过流体140的表面之间的碰撞产生气泡。例如,当波浪在海中升起时,流体140的部分可由于风而以不同的流速和不同的高度移动。流体140的在高位以高流速移动的一部分(例如,浪涌部分)的表面可与流体140的在低位以低流速移动的一部分的表面碰撞。在碰撞的时刻,空气可能被以高流速移动的浪涌部分捕获。气泡可通过被浪涌部分捕获的空气而产生。

尽管未示出,但是,例如当通过轻微地倾斜一瓶水将水倒入杯中并且在水流出瓶子的同时瓶外的空气流入瓶内时,可以产生气泡。

在上面描述的示例中,气泡可在流体中产生,或从流体中消失,并且气泡可改变尺寸。

图2是示出流体粒子建模方法的示例的流程图。可通过流体粒子建模设备(在下文中,简称为建模设备)执行流体粒子建模方法。参照图2,在操作210中,建模设备基于流体粒子的位置确定气泡单元。流体粒子可为包括在通过基于粒子的光滑粒子流体力学(SPH)算法建模的流体中的粒子。可选地,流体粒子可通过基于体素的流体隐式粒子(FLIP)算法被建模。

在基于网格单元的模型空间中,包括流体粒子的网格单元被确定为流体单元。建模设备将基于网格单元的模型空间中的不包括流体粒子的网格单元确定为气泡单元。

例如,在基于二维(2D)网格单元的模型空间中,在单个网格单元中可包括四个流体粒子。在基于3D网格单元的模型空间中,在单个网格单元中可包括八个流体粒子。然而,这些仅是示例,在单个网格单元中可包括更多或更少的粒子。

在操作220中,建模设备基于气泡单元定义气泡。建模设备基于气泡单元之间的连接关系确定气泡,并将标识符(ID)分配给气泡。将参照图3和图4描述通过建模设备定义空气泡的详细处理和定义的空气泡的示例。

在操作230中,建模设备基于气泡体积的改变计算气泡的压力。建模设备基于气泡先前的体积和基于时间的流逝(例如,建模时间步长)的气泡当前的体积计算气泡的压力。将参照图5描述通过建模设备计算气泡的压力的详细处理。

在操作240中,建模设备基于气泡的压力更新流体粒子的位置。建模设备通过将作为外力的气泡的压力施加到与气泡相邻的流体粒子来确定更新的流体粒子的位置。将参照图8描述通过建模设备更新流体粒子的位置的详细处理。

图3是示出定义气泡的处理的示例的流程图。参照图3,在操作310中,建模设备确定气泡单元之间的连接关系。例如,建模设备可使用泛洪填充(flood-fill)标记算法来确定气泡单元之间的连接关系。泛洪填充标记算法是用于确定多维排列中的分配的位置和连接的部分并执行标记的算法。泛洪填充标记算法可使用三个参数(例如,开始节点、目标颜色和替换颜色)。泛洪填充标记算法通过沿连接到开始节点的所有节点将目标颜色改变为替换颜色来确定分配的位置(例如,气泡单元)和连接的部分(例如,另一气泡单元)。可使用数据结构(例如,堆栈和队列)存储气泡单元之间的连接关系。

在操作320中,建模设备将气泡单元之中的连接的气泡单元确定为单个气泡。

在操作330中,建模设备将ID分配给气泡。分配给气泡的ID用于追踪气泡的运动和气泡的体积的改变。当结构改变发生时(例如,当气泡通过流体粒子的运动或气泡周围的对象的碰撞而破裂为多个气泡,或者气泡与另一气泡合并时),建模设备将新的ID分配给经历结构改变的气泡。将参照图9A和图9B描述基于结构改变将新的ID分配给气泡的详细处理。

图4是示出定义的气泡的示例的示图。

建模设备建模流体与气泡之间的相互作用,例如,当气泡在流体(例如,水)中产生,以及单个气泡破裂为更小的气泡或多个气泡合并为单个更大的气泡时发生的相互作用。

参照图4,建模设备基于SPH算法建模流体粒子以建模包括气泡430的流体410的运动。

建模设备使用网格单元建模气泡430,而不是使用空气粒子填充流体410中的气泡430的体积。

在将模型空间450划分为包括网格单元的网格空间后,建模设备将包括流体粒子的网格单元确定为流体单元(例如,流体单元415),并将不包括流体粒子的网格单元确定为气泡单元(例如,气泡单元435和气泡单元455)。气泡单元可被分类为建模流体410外的空气区域的气泡单元(例如,气泡单元455),以及建模流体410内的空气区域的气泡单元(例如,气泡单元435)。将主要基于建模包括在流体410中的空气区域的气泡单元(例如,气泡单元435)描述图4的示例。

因为通过SPH算法在建模流体粒子的处理中确定流体粒子的位置,所以建模设备在气泡430的网格和位置中确定流体粒子的位置。

每一气泡单元基于临近的气泡单元的连接关系被分类为组。连接的气泡单元所被分类入的单个组被确定为单个气泡(例如,气泡430)。连接的气泡单元的单个组中的气泡单元在基于网格单元的模型空间中是连续的气泡单元。气泡430的体积被假定为等于气泡单元的单个组的体积。例如,在包括长方形网格单元的模型空间的情况下,单个气泡的体积(例如,气泡430的体积)近似为对应的气泡单元的组的长方形网格单元的体积之和。

建模设备将ID分配给每一气泡,并在建模时间步长增加的持续时间内维持分配的ID。气泡由连接的气泡单元的组构成,并且相同组中的连接的气泡单元具有相同的ID。在建模进程中,当前的建模时间步长中的气泡的ID与先前的建模时间步长中的气泡的ID匹配。

建模设备可基于将被建模的气泡的尺寸配置网格单元,并确定或更新每一网格单元是否对应于流体或气体。

在一个示例中,建模设备通过使用网格单元建模包括在流体中的气泡替代使用粒子(例如,空气粒子)填充气泡,来最小化处理粒子的计算。此外,建模设备不需要通过使用气泡单元建模气泡来计算空气粒子的最初播种位置和消除位置。

图5是示出计算气泡压力的处理的示例的流程图。参照图5,在操作510中,建模设备基于与气泡的位置相邻的流体单元的信息确定气泡的最初的体积和最初的压力。例如,流体单元的信息可包括:包括在流体单元中的流体粒子的位置、移动量、移动速度、密度和体积。

在基于网格单元的模型空间中,可针对每一流体单元单独地存储,或者在流体单元的网格点存储流体单元的信息。可选地,可针对每一流体粒子存储,或者针对流体粒子的代表性的粒子存储流体单元的信息。

例如,建模设备可将气泡的最初的体积和最初的压力确定为在与气泡的位置相邻的流体单元中存储的体积和压力。在基于网格单元的模型空间中,同一物理量可在临近的网格单元之中被施加到作用的一个方向,也可基于作用与反作用原理被施加到反方向。

此外,建模设备可建模流体粒子以使得包括在流体单元中的每一流体粒子的体积或密度满足体积保留的条件,并将包括在与气泡的位置相邻的流体单元中的流体粒子的体积和压力的平均值(例如,代表性的值)确定为气泡的最初的体积和最初的压力。

在操作520中,建模设备使用气体状态方程计算有效防止气泡消失的气泡的压力。建模设备基于气泡的先前的体积(例如,最初的体积)和气泡的当前的体积来计算气泡的压力。将参照图6描述计算有效防止气泡消失的气泡的压力的详细处理。

图6是示出计算有效防止气泡消失的气泡的压力的示例的示图。

气体状态方程表达气体(例如,气泡)的压力与体积之间的相互关系,如下面的等式1所示。

PV=nRT (1)

在等式1中,P和V分别表示气体(例如,气泡)的压力和体积,n表示气体摩尔数,R和T分别表示气体的气体常数和温度。

假定气泡的温度在建模期间不改变,等式1的右边(nRT)可被常数k替代。因此,等式1可重写为PV=k。当给定k的值时,气体的压力P可根据下面的等式2使用气体的体积V而获得。

P=k/V (2)

通过前面描述的操作,建模设备计算气泡的最初的体积,并追踪气泡的ID以计算气泡的体积随时间的改变。建模设备确定气泡的体积的改变和气泡的压力的改变。

单个气泡的体积被近似为气泡单元的对应的组中的网格单元的体积之和。气泡单元的对应的组中的网格单元在基于网格单元的模型空间中是连续的单元。因此,当具有相同ID的气泡单元的体积改变时,建模设备使用气体状态方程计算有效防止气泡消失的气泡的压力。

将气泡的压力施加于相邻的流体粒子防止气泡由于流体粒子的移动而不自然地减小尺寸或消失。当气泡的体积随时间逐步减小时,建模设备通过逐步增加气泡的压力推动相邻的流体粒子以防止气泡消失。例如,建模设备将作为外力的有效防止气泡消失的气泡的压力施加到与气泡相邻的流体粒子以防止被流体粒子包围的气泡消失。

在上面描述的示例中,代替使用空气粒子建模气泡,气泡的空气压力用于执行与空气粒子相同的功能。因此,建模设备能够建模气泡,同时消除场景依赖性以及当使用空气粒子建模气泡时出现的粒子计算的量增加。

图7是示出流体粒子建模方法的另一示例的示图。参照图7,在操作710中,建模设备基于流体粒子位置确定气泡单元。

在操作720中,建模设备基于气泡单元之间的连接关系确定气泡。

在操作730中,建模设备将ID分配给气泡。

在操作740中,建模设备基于气泡的先前的体积和气泡的当前的体积计算气泡的压力。

在操作750中,建模设备通过将作为外力的气泡的压力施加到与气泡相邻的流体粒子来确定流体粒子的更新的位置。将参照图8描述确定流体粒子的更新的位置的详细处理。

在操作760中,建模设备确定气泡的结构改变是否发生。气泡的结构改变包括:气泡破裂为多个气泡以及气泡与另一气泡合并。

在一个示例中,建模设备通过在不同的建模时间步长中的ID匹配来确定气泡的结构改变是否发生。例如,建模设备使用最佳重叠算法确定与第一建模时间步长中的位置对应的气泡的ID是否和与第二建模时间步长中的位置对应的气泡的ID匹配。建模设备通过使用最佳重叠算法确定与ID对应的气泡是否满足气泡的原始的位置,以及通过确定气泡是否重叠于与原始的位置对应的气泡,来确定气泡的结构改变是否发生。

最佳重叠算法的示例在下面的表1中示出。

表1

当在操作760中确定结构改变不发生时,建模设备终止图7中的处理。

在操作770中,当在操作760中确定结构改变发生时,建模设备将新的ID分配给经历结构改变的气泡。将参照图9A和图9B描述将新的ID分配给结构改变所发生的气泡的详细处理。随后,建模设备追踪新的ID所分配的气泡,并在操作740中基于气泡的先前的体积和当前的体积计算气泡的压力。

图8是示出更新流体粒子的位置的处理的示例的示图。在图8的示例中,基于网格单元的模型空间中的流体单元和气泡单元的的网格点被示出。

参照图8,网格点810包括与网格点810相邻的气泡单元(例如,气泡单元825)的信息,网格点830包括与网格点830相邻的流体单元(例如,流体单元845)的信息。网格点850包括气泡单元(例如,气泡单元825)的信息和流体单元(例如,流体单元845)的信息。

流体单元的信息可包括:包括在流体单元中的流体粒子的位置、移动量、移动速度、密度和体积。

在基于网格单元的模型空间中,流体单元的信息可以以网格单元的网格点的代表值或平均值的形式被存储、针对每一流体粒子被存储或针对流体粒子之中的代表性粒子被存储。

建模设备将与气泡820的位置相邻的流体单元的体积和压力确定为气泡820的最初的体积V1和最初的压力P1。在基于网格单元的模型空间中,同一物理量在临近的网格单元之间以相反的方向作用,因此可在临近的网格单元之间获得平衡。

建模设备基于气泡820的先前的体积V1和气泡820的当前的体积V2来计算气泡820的改变的压力P2。因为如上面关于等式1所描述的,PV=k(其中,k是等于nRT的常数),所以P1V1=P2V2,因此P2可根据下面的等式3被计算。

建模设备将气泡820的计算的压力P2作为新的外力施加到与气泡820相邻的流体粒子。建模设备基于作用在与气泡820相邻的流体粒子上的新的外力P2使用SPH算法更新流体粒子的位置。

当流体粒子响应于新的外力P2而移动时,预计将被流体粒子接收的力可使用例如已知流体粒子的最初的位置和更新的位置,以及流体粒子的移动速度的一般的物理方程而被计算。

图9A和图9B是示出基于气泡的结构改变而分配新的ID的示例的示图。由于流体的移动或流体与对象的碰撞,包括在流体中的的气泡可破裂为多个小气泡或多个气泡可合并为单个气泡。

图9A示出单个气泡910破裂为两个气泡920和930的示例。参照图9A,具有ID B的气泡910破裂为气泡920和气泡930。在图9A的示例中,建模设备将ID C分配给气泡920并将ID D分配给气泡930。

可选地,建模设备可基于气泡910的ID B分配新的ID以指示气泡920和气泡930已从气泡910分离。例如,建模设备可将ID B-1分配给气泡920并将ID B-2分配给气泡930。

图9B示出两个气泡910和940合并为单个新的气泡950的示例。参照图9B,具有ID B的气泡910和具有ID E的气泡940合并为气泡950。在图9B的示例中,建模设备将新的ID F分配给气泡950。

当由于一个气泡或多个气泡的合并或破裂而发生结构改变时,经历结构改变的气泡的体积同样改变,因此在结构改变之前连续追踪原始的一个气泡或多个气泡的体积的改变是无意义的。据此,建模设备开始追踪新的ID所分配的气泡的体积的改变。

图10是示出流体粒子建模方法的另一示例的流程图。参照图10,在操作1010中,建模设备建模流体运动。例如,建模设备使用基于粒子的SPH算法对流体进行采样以获取多个流体粒子,并在每一建模时间步长中通过对每一流体粒子随时间的加速度和速度进行积分来确定流体粒子的位置。

在操作1020中,建模设备确定气泡单元,并将ID分配给由气泡单元构成的气泡。因为流体粒子的位置已在操作1010中被确定,所以建模设备确定流体粒子在网格中的位置。建模设备将不包括任何流体粒子的网格单元确定为气泡单元。建模设备通过确定每一气泡单元和与气泡相邻的气泡单元之间的连接关系来定义气泡。建模设备将ID分配给每一气泡。当建模时间步长增加时,建模设备保持分配到气泡的ID。

在操作1030中,建模设备针对识别气泡的每一ID追踪体积的改变。气泡包括具有相同的ID的连接的气泡单元。因此,气泡的体积约等于气泡单元的体积之和。当具有相同ID的气泡单元的体积改变时,建模设备基于等式(例如,PV=k)来计算有效防止气泡单元消失的压力。当结构改变(例如,气泡的合并或破裂)发生时,追踪在结构改变发生之前的气泡的体积是没有意义的。因此,建模设备针对与经历结构改变的气泡对应的新的ID追踪体积的改变。

在操作1040中,建模设备确定作为针对每一ID追踪体积的改变的结果体积是否改变。当在操作1040中建模设备确定体积没有改变时,建模设备终止图10中的处理。

在操作1050中,当在操作1040中建模设备确定体积改变时,建模设备计算体积所改变的气泡的压力。建模设备基于气泡的体积使用气体状态方程计算气泡的压力。在气泡的温度为常数的假定下,如从上面的等式3可见,气泡的压力和体积相互成反比。

在操作1060中,建模设备基于在操作1050中计算的气泡的压力来更新流体粒子的位置。建模设备通过将在操作1050中计算的气泡的压力施加到与气泡相邻的流体粒子来更新流体粒子的位置。

在操作1010中,建模设备基于更新的流体粒子的位置建模流体运动。

图11是示出流体粒子建模方法的另一示例的流程图。针对图11的操作1110至1130的描述,参考图2的操作210至230的描述。

参照图11,在操作1140中,建模设备重新布置气泡中的压力分布以建模气泡的浮力。建模设备基于构成气泡的气泡单元的的位置逐步改变气泡中的压力分布。气泡单元的位置可被解释为在模型空间中从参考水平面到气泡单元的高度。将参照图12A和图12B详细描述由建模设备执行的重新布置气泡中的压力分布的处理。

在操作1150中,建模设备基于重新布置的气泡中的压力分布更新流体粒子的位置。例如,建模设备计算通过重新布置气泡中的压力分布而产生的浮力。建模设备通过将作为外力的浮力施加到与气泡相邻的流体粒子来更新流体粒子的位置。

图12A和图12B是示出重新布置气泡中的压力分布以建模气泡的浮力的处理的示例的示图。图12A示出重新布置的气泡中的压力分布的示例。

参照图12A,建模设备使用逐步改变气泡1210中的压力分布的渐变(gradation)方法以建模气泡1210的浮力。建模设备基于构成气泡1210的气泡单元的位置逐步改变压力分布。例如,如在图12A中所示,建模设备重新布置在如在图6中所示的所有方向上相同的压力以建模气泡1210的浮力。

浮力可使用下面的等式4而获得。

浮力=(ρ)×(V)×(g) (4)

在等式4中,ρ表示流体密度,V表示体积,g表示重力加速度。

建模设备通过增加在构成气泡1210的气泡单元之中的较高位置的气泡单元1213的压力并减小在构成气泡1210的气泡单元之中的较低位置的气泡单元1216的压力来重新布置压力,以使得气泡1210中的压力分布逐步地改变。

图12B是示出气泡单元的位置或高度与气泡的压力之间的相互关系的曲线图。在构成气泡的多个气泡单元之中处于较高位置的气泡单元具有相对更高的压力,在构成气泡的气泡单元之中处于较低位置的气泡单元具有相对更低的压力。构成气泡的气泡单元的压力的平均值等于针对气泡计算的压力。

参照图12B的曲线图,当密度比为1000:1时,相比于当密度比为100:1的情况,基于气泡单元的位置或高度的压力的改变大。密度比是流体密度与气泡密度之比。对于相同类型的气泡,密度比随着流体密度的增加而增加。因此,当密度比增加时,相同体积的气泡的浮力也增加。当作用在气泡上的浮力增加时,基于气泡中的气泡单元的位置的压力改变也增加。

参照图12A和图12B,基于浮力的方向确定将被施加到与气泡(例如,气泡1210)相邻的流体粒子的压力。例如,与气泡1210的压力和气泡1210的浮力之和对应的外力被施加到包括在处于较高位置的气泡单元1213中的流体粒子,与气泡1210的压力和气泡1210的浮力之差对应的外力被施加到包括在处于较低位置的气泡单元1216中的流体粒子。此外,与气泡1210的压力对应的外力在气泡单元1213和1216的右侧和左侧被施加到包括在单元中的流体粒子。

图13是示出流体粒子建模设备的示例的示图。

参照图13,流体粒子建模设备1330包括处理器1310和存储器1330。处理器1310和存储器1330通过总线1350相互通信。

处理器1310基于流体粒子的位置确定气泡单元,基于气泡单元定义气泡,基于气泡的体积的改变计算气泡的压力,并基于计算的气泡的压力更新流体粒子的位置。

在基于网格单元的模型空间中,处理器1310将不包括任何流体粒子的网格单元确定为气泡单元。处理器基于气泡单元之间的连接关系定义气泡,并将ID分配给气泡。处理器1310基于与气泡的位置相邻的流体单元的信息确定气泡的最初体积和最初压力。处理器1310基于气泡的先前的体积和当前的体积计算气泡的压力。处理器1310使用气体状态方程计算有效防止气泡消失的压力。

此外,处理器1310通过在不同的建模时间步长中的ID匹配来确定气泡的结构改变是否发生,并将新的ID分配给发生结构改变的气泡。例如,气泡的结构改变可包括:气泡破裂为多个气泡以及气泡与另一气泡合并。

处理器1310使用SPH方法建模流体粒子。处理器1310通过将作为外力的气泡压力施加到与气泡相邻的流体粒子来确定更新的流体粒子的位置。

处理器1310重新布置气泡中的压力分布以建模气泡的浮力。处理器1310基于构成气泡的气泡单元的位置逐步改变压力分布。处理器1310增加在构成气泡的气泡单元之中处于较高位置的气泡单元的压力,并减小在构成气泡的气泡单元之中处于较低位置的气泡单元的压力。

存储器1330存储在基于网格单元的模型空间中包括流体粒子的流体单元的信息以及不包括流体粒子的气泡单元的信息。存储器1330可为易失性存储器或非易失性存储器。

处理器1310可执行上面参照图1A至图12B描述的任何处理和方法。处理器1310可执行程序并控制流体粒子建模设备1300。将由处理器1310执行的程序指令可被存储在存储器1330中。流体粒子建模设备1300可通过输入或输出装置(未示出)连接到外部装置(例如,个人计算机(PC)和网络),并与外部装置交换数据。

例如,上面参照图1A至图12B描述的任何处理或方法可以以在移动装置(诸如,移动电话、智能电话、个人数字助理(PDA)、平板计算机或膝上型计算机)、计算装置(诸如,PC、平板计算机或上网本)和其他各种电子系统(诸如,电视(TV)、智能TV、虚拟现实(VR)提供装置、游戏控制台或游戏机)中的硬件上操作的应用的形式实现,或可以以用于执行处理或方法的芯片的形式被嵌入其中。

通过硬件组件来实现图13中所示的执行在此描述的关于图1A至图13的操作的流体粒子建模设备1300、处理器1310和存储器1330。硬件组件的示例包括控制器、传感器、发生器、驱动器、存储器、比较器、算术逻辑单元、加法器、减法器、乘法器、除法器、积分器以及本领域普通技术人员所知的任何其他电子组件。在一个示例中,通过计算硬件(例如,通过一个或多个处理器或计算机)来实现硬件组件。通过一个或多个处理元件(诸如,逻辑门阵列、控制器和算术逻辑单元、数字信号处理器、微型计算机、可编程逻辑控制器、现场可编程门阵列、可编程逻辑阵列、微处理器或者本领域普通技术人员所知的能够以限定方式响应并执行指令以达到预期结果的任何其他装置或装置的组合)来实现处理器或计算机。在一个示例中,处理器或计算机包括或者被连接到存储由处理器或计算机执行的指令或软件的一个或多个存储器。由处理器或计算机实现的硬件组件执行指令或软件,诸如操作系统(OS)和在OS上运行的一个或多个软件应用,以执行在此描述的关于图1A至图13的操作。硬件组件还响应于指令或软件的执行而访问、操控、处理、创建和存储数据。为了简化,单数术语“处理器”或“计算机”可被用于在此描述的示例的描述,但是,在其他示例中,多个处理器或计算机被使用,或者处理器或计算机包括多个处理元件或多种类型的处理元件,或二者兼有。在一个示例中,硬件组件包括多个处理器,在另一示例中,硬件组件包括处理器和控制器。硬件组件具有不同的处理配置中的任何一个或多个,不同的处理配置的示例包括:单个处理器、独立处理器、并行处理器、单指令单数据(SISD)多处理、单指令多数据(SIMD)多处理、多指令单数据(MISD)多处理以及多指令多数据(MIMD)多处理。

由计算硬件(例如,由如上描述的执行指令或软件以执行在此描述的操作的一个或多个处理器或计算机)执行在图2、图3、图5、图7、图10和图11中所示的执行在此参照图1A至图13所描述的操作的方法。

用于控制处理器或计算机实现硬件组件并且执行以上描述的方法的指令或软件被编写为计算机程序、代码段、指令或者它们的任何组合,以单独地或共同地指示或配置处理器或计算机如机器或专用计算机一样进行操作,以执行由硬件组件执行的操作和如以上描述的方法。在一个示例中,指令或软件包括直接地由处理器或计算机执行的机器代码(诸如,由编译器产生的机器代码)。在另一示例中,指令或软件包括由处理器或计算机使用解释器执行的高级代码。本领域的普通技术编程者能基于附图中所示的框图和流程图以及公开了用于执行由硬件组件执行的操作和如以上描述的方法的算法的说明书中的相应描述,来容易地编写指令或软件。

用于控制处理器或计算机以实现硬件组件和执行如以上描述的方法的指令或软件,以及任何相关的数据、数据文件和数据结构被记录、存储或固定在一个或多个非暂时性计算机可读存储介质中或被记录、存储或固定在一个或多个非暂时性计算机可读存储介质上。非暂时性计算机可读存储介质的示例包括:只读存储器(ROM)、随机存取存储器(RAM)、闪存、CD-ROM、CD-R、CD+R、CD-RW、CD+RW、DVD-ROM、DVD-R、DVD+R、DVD-RW、DVD+RW、DVD-RAM、BD-ROM、BD-R、BD-R LTH、BD-RE、磁带、软盘、磁光数据存储装置、光学数据存储装置、硬盘、固态盘,以及本领域普通技术人员所知的任何装置,所述任何装置能够以非暂时性方式存储指令或软件以及任何相关数据、数据文件和数据结构,并且将指令或软件以及任何相关数据、数据文件和数据结构提供给处理器或计算机,从而处理器或计算机能执行指令。在一个示例中,指令或软件以及任何相关数据、数据文件和数据结构被分布在联网的计算机系统上,从而指令和软件以及任何相关数据、数据文件和数据结构以分布的方式被处理器或计算机存储、访问和执行。

虽然本公开包括特定示例,但是,对本领域的普通技术人员而言将清楚的是,在不脱离权利要求及其等同物的精神和范围的情况下,可在这些示例中在形式和细节上进行各种改变。在此描述的示例应被理解为仅具有描述性意义,而不是用于限制的目的。对每个示例中的特征或方面的描述应被理解为可应用于其他示例中的类似的特征或方面。如果以不同的顺序执行所描述的技术,和/或如果所描述的系统、构架、装置或电路中的组件以不同的方式来组合,和/或由其他组件或它们的等同物来替换或补充,则可获得合适的结果。因此,本公开的范围不是由具体实施方式来限定,而是由权利要求及其等同物来限定,并且在权利要求及其等同物的范围内的所有变化应被解释为被包括在本公开中。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1