您是否曾经在comsolMultiphysics®软件中建模变形对象并想知道它们之间的距离?在今天的博客文章中,我们将使用方法来使用方法来确定最接近距离字段的方法来计算对象之间的距离。我们还将找出如何将距离字段用作多物理模型的一部分。
用一般挤出组件耦合计算距离
让我们考虑两个标记为A和B的对象,如下所示。我们要计算的三个距离是:
- 距离将A视为距离字段。在这种情况下,我们计算从周围所有点和内部对象A内部到其边界上最接近点的距离和方向(dA)。
- 从对象B边界上的每个点到对象A上的最接近点的距离(dab)。
- 线的端点是对象A和B之间最短距离(dAB,最小)。
两个对象A和B,以及我们要计算的距离。
我们可以使用COMSOL多物理学中的一般挤出和最小组件耦合的组合来计算所有这些距离。首先,让我们看一下如何使用一般挤出组件耦合。我们命名操作员A_B
并定义它源选择成为对象A的边界A。先进的部分,我们使用网格搜索方法的最接近的点。这些设置如下所示。该操作员的所有其他设置都可以留在其默认设置上。
一般挤出组件耦合的设置用于计算最接近的点距离。请注意网格搜索方法被设定为最接近的点。
我们在一个称为变量的定义中使用该操作员D_A
, 定义为:
sqrt((x-a_b(x))^2+(y-a_b(y))^2)
该变量是在要计算距离字段的域上定义的。在这种情况下,只是周围的域。我们还可以计算该距离场的梯度的负数,- \ nabla d_a(\ mathbf {x})。这为我们提供了向量字段的组件,该组件指向A边界上的最接近点。我们可以使用分化操作员D(d_a,x)
和D(d_a,y)
采用空间衍生物,如下屏幕截图所示。
变量定义。
我们可以在所需的任何地方使用这些变量。例如,我们可以绘制距离字段或使材料属性取决于距离。下图绘制了距离和方向向量的轮廓。请注意,即使在对象B背后的区域中计算距离。我们显然在这里获得了很多信息,但是由于在周围域中的每个点计算最短的距离,因此有大量的计算成本。有时候,我们不需要所有这些信息,只需要对象之间的距离。
距离字段(轮廓线)和到两个对象周围域中对象A(箭头)边界的最短方向。
计算对象之间的间隙
让我们变得更轻松一些,只关心两个对象之间的距离,而不是方向。我们使用相同的一般挤出组件耦合,但是只需要在对象B边界上定义一个变量即可计算距离。
定义对象之间距离的变量。
尽管这是我们以前使用的距离功能相同的距离函数,但我们不需要中间空间中的网格。我们甚至不需要域A和B上的网格;只需在对象的边界上有一个网格即可。这种方法花费的时间少得多,但是它仅给我们从对象A到对象边界的每个点的最短距离。我们无法恢复方向向量。我们还可以对周围的所有这些定义进行翻转,并计算从对象B到对象A边界上的每个点的最短距离。这些距离如下图所示,沿对象的边界可用。
从对象B边界上的每个点到对象A上的最接近点,反之亦然。
使用最小组件耦合计算对象之间的最短线
现在,让我们找到描述两个对象之间最短距离的行。在上一节中,我们看到我们可以计算两个变量,轻拍
和D_BA
,描述了A和B之间的最短距离,反之亦然。现在,我们想找到这些域的边界之间的最小距离。因此,我们设置了两个不同的最小组件耦合:一个用于对象A的边界,另一个用于对象B。我们称这些运算符称为这些操作员Mina
和Minb
,如下面的屏幕截图所示。
对象A边界上的最小组件耦合的定义。
然后,我们将这些最小组件耦合称为提取最小距离。我们还可以向最小组件耦合提供第二个参数,以找到最小距离的坐标。例如,通过定义变量斧头
作为表达mina(d_ba,x)
,它具有X- 在哪个D_BA
在A边界上的最低限度。
两个域之间最短线段的坐标的定义。
我们可以将定义这些坐标的变量称为我们想要的任何地方。例如,我们可以使用切割线如下图所示,要显示连接两个对象的最短线段。如果我们在两个对象之间有一个网状域和解决方案,那么我们可以沿两者之间的最短线绘制字段。
切割线功能,用于确定对象之间的最短线。
comsolMultiphysics®中计算距离的局限性和用途
这些用于确定距离的技术可以在任何模型中使用。尽管此处介绍的示例是2D,但它们也可以概括为3D。但是,计算3D距离场的确需要相对较长的时间,而在边界和间隙之间计算距离的距离较小。
计算非滑动形状周围的距离场也需要更多的护理。如下图所示,圆角周围的距离场是非滑动的,因此,方向向量将不确定沿着与边界两个不同部分相等的线。解决距离场的这种非平滑度需要更好的网格。
在粗网格(左)和更精制的网格(右)上的物体周围和内部的距离字段。在这种情况下,距离场的平滑度取决于网格。
一旦我们在适当的细网上计算了此距离字段,我们就会像对待模型中的任何其他变量一样对待它。例如,我们可以使材料属性成为距表面距离的函数。下图显示了这种代表性的材料分布。
代表性的材料分布,是距表面距离的函数。
也可以使用距离函数来帮助可视化我们的结果。假设我们只对在表面特定距离内的溶液部分感兴趣。在这种情况下,我们可以使用筛选制作音量图时的子场。然后,我们输入逻辑表达式,仅显示在对象表面一定距离内的结果,其示例如下所示。
使用距离函数仅绘制表面5 mm内的溶液。
关于comsolMultiphysics®中对象之间计算距离的结论想法
我们已经演示了如何将距离字段计算到模型内的边界,边界之间的距离以及两个边界之间的最短线段。该方法还可以计算3D模型中边缘和点的距离字段。计算的距离可以在设置,物理定义和模型的结果评估中使用。我们在这里分享了几个示例,但是现在轮到您了。我们很想听听您的想法!
进一步的资源
- 在comsol多物理学中找到各种帮助资源:
评论(7)
Amr al Abed
2017年4月9日感谢沃尔特的出色帖子和教程。
到目前为止,我一直在使用Comsol的墙距离物理学来进行这些计算。
只是想知道两种方法(挤出变量与WD物理学)之间的主要区别是什么?
当最好使用一种方法而不是另一种方法时,您是否有任何建议?
此致
AMR
沃尔特·弗莱
2017年4月10日您好AMR,好的问题。壁距离物理求解了艾科纳尔方程的一种形式(https://en.wikipedia.org/wiki/eikonal_equation),例如,在需要到墙壁的距离的湍流问题中,我们将其使用。(看://www.dvdachetez.com/blogs/which-turbulence-model-should-choose-choose-cfd-application/)
如果要计算整个域内的距离字段,则墙壁距离物理具有比这种方法更快和使用少的内存的优点。但是,我认为您不能使用墙壁距离接口简单地找到边界之间的距离或最小距离。当然,可能还有其他差异,但是这些弹簧很容易想到。
阿里·卡迪瓦(Ali Kadivar)
2018年4月11日非常感谢沃尔特提供的出色而有用的引理。计算两个边界之间的距离是完美的,但是在轮廓内部如何。
让我们想象我们有一个时间变量的封闭轮廓,例如“ sigmaxx> a”
轮廓时两个电极之间的流体,形状更大,形状变化。
我们希望找到宽度和最小宽度,即两个钻子之间的距离,用sigmaxx> a将材料的物质物质超过,并用作轮廓壁。
你对此有任何想法吗?
如果您可以为我提供解决方案,这将不胜感激。
此致
阿里
凯蒂·费尔克拉夫(Caty Fairclough)
2018年4月26日嗨,阿里,
谢谢你的评论!
对于您的问题,我建议与我们的支持团队联系。
在线支持中心://www.dvdachetez.com/support
电子邮件:support@comsol.com
Zhen li
2019年8月7日亲爱的作家,
感谢您的论文扩大了我的视野。但是,我有一个问题,即如何设置本文所示的数字4和6。感谢您的时间。
最好的祝愿
李
尼克·德夫林
2019年11月23日嗨 - 感谢您的这篇文章。是否可以以类似的方式自动测量域的最大x,y或z维度?(几何形状是在犀牛中创建的,并进口到comsol),例如,我需要完成传热计算,其中应用于域的材料的热导率取决于一个或两个方向的域的尺寸,并且长宽比比两者之间。
Amirhossein Omidvar
2021年3月2日谢谢沃尔特的教程!
我试图找到在某些负载下的两个膜之间的差距如何变化。我应用了相同的方法来查找包括定义常规挤出组件和使用x,y,z参数变量的它们之间的“间隙”。我想知道如何绘制结果?