动网格除了前面讲了很多的关于运动指定之外,另一个重要主题则为网格的更新。
在部件运动之后,不可避免的会造成网格形状的变化,如若不对网格加以控制,在持续运动的过程中,则可能造成网格极度变形、歪曲率过大,甚至产生负体积。因此必须对发生变形的网格进行矫正。
Fluent主要提供了三种方式控制网格:

  • Smoothing
  • Layering
  • Remeshing
    本文关注Fluent中的Smoothing方法。

    启用Smoothing方法

    Smoothing方法的启用非常简单,只需要在Dynamic Mesh中激活Smoothing选项即可,如图所示。

    之后可进入Setting...菜单项中进行参数设置。

    Smoothing设置面板

    Smoothing参数比较多,如图所示。

    其包含三种光顺方法:

  • Spring/Laplace/Boudary Layer
  • Diffusion
  • Linearly Elastic Solid
    通常选择:
  • 小幅度的网格运动,使用smoothing方法,此方法计算量较小
  • 大幅度的网格运动,建议使用Diffusion方法,此方法可以提供较好的网格质量
  • 对于存在旋转运动的边界,可以使用Linearly Elastic Solid方法,此方法计算量最大,但能够提供更好的网格质量。

弹簧光顺

弹簧光顺(Spring)是最基础的光顺方法,也是Fluent默认使用的光顺方法。
该方法的基本思路是将网格节点之间的连接线近似为弹簧,通过计算节点之间力平衡方程得到各节点光顺后的位置。
\[
\vec{F_{i}}=\sum_{j}^{n_i}{k_{ij}(\Delta\vec{x}_j-\Delta\vec{x}_i)}
\]

式中\(\Delta \vec{x}_i\)及\(\Delta \vec{x}_j\)分别为节点i与节点j的位移。\(n_i\)为与节点i相连的节点数量;\(k_{ij}\)为节点i与节点j之间的弹簧刚度。

弹簧刚度可定义为:
\[
k_{ij} = \frac{k_{fac}}{\sqrt{|\vec{x}_i-\vec{x}_j|}}
\]
式中\(k_{fac}\)为Spring Constant Factor,是一个需要用户输入的值。

当弹簧力达到平衡时,可计算得到:
\[
\Delta \vec{x}_i^{m+1}=\frac{\sum_{j}^{n_i}{k_{ij}\Delta \vec{x}_j^m}}{\sum_{j}^{n_i}{k_{ij}}}
\]
其中,m为迭代次数。

当节点i的位移计算得到之后,即可更新网格位置:
\[
\vec{x}_{i}^{n+1}=\vec{x}_i^n+\Delta \vec{x}_i^{converged}
\]

需要设置的参数包括:

  • Spring Constant Factor:弹簧常数因子。该参数控制了扩散阻尼,参数取值范围0~1,默认值为1。此参数越小,表示网格之间的阻尼越小,网格运动更容易扩散到更远的节点。当边界运动较为剧烈时,可适当减小此数值。
  • Convergence Tolerance:收敛精度。计算网格节点运动采用的是迭代法,这个迭代容差控制了迭代精度。默认值为0.001,通常不需要修改。
  • Number of Iterations:迭代次数。当迭代次数达到此设定值,停止迭代计算。默认值为20,通常不需要修改。
    这三个参数决定了弹簧光顺过程中网格节点的运动方式。
    Elements方式决定了更新的网格类型:
  • Tri in Tri Zones:只光顺三角形或四面体网格
  • Tri in Mixed Zones:光顺混合区域中的三角形或四面体网格

要点

对于弹簧光顺方法:

  • 光顺方法并不会改变网格拓扑关系。意思是说,不管部件如何运动,网格节点之间的链接关系不会发生改变,网格的数量也不会变化。因此光顺方法只适合于小幅度的运动
  • 可通过调整设置参数Spring Contant Factor来控制网格节点的运动幅度。当边界运动幅度很大时,可适当降低该参数值,从而利用更多的网格节点运动来消减边界运动造成的网格影响。
  • 光顺方法只要适用于三角形或四面体网格,虽然Fluent宣称smoothing方法可以用于所有网格,但其实在其他类型的网格上,smoothing并不会得到好的结果。
    ---
    更多关于CFD内容,可微信扫描下方二维码关注微信公众号。

Fluent动网格【11】:弹簧光顺的更多相关文章

  1. Fluent动网格【13】:网格光顺总结及实例

    光顺(Smoothing)方法是最基本的网格节点更新方法.Fluent提供了三种光顺方法: Spring弹簧光顺 Diffusion扩散光顺 Linearly Elastic Solid光顺 三种方法 ...

  2. Fluent动网格【1】:概述

    最近总有小伙伴向我询问Fluent中的动网格问题,因此决定做一期关于Fluent动网格技术的内容. 动网格技术在流体仿真中很特殊,应用也很广.生活中能够碰到形形色色的包含有部件运动的问题,比如说我现在 ...

  3. Fluent动网格【8】:网格节点运动案例

    Fluent动网格中的DEFINE_GRID_MOTION宏允许用户定义网格节点的运动.本案例演示采用DEFINE_GRID_MOTION宏指定边界节点的运动. 案例动网格效果如图所示. 案例描述 本 ...

  4. Fluent动网格【12】:扩散光顺

    扩散光顺是Fluent提供的另外一种常用的网格光顺方法.其基本原理是通过求解扩散方程得到网格节点的运动位移. 扩散光顺基本计算 扩散光顺通过求解 以下扩散方程来设置网格的节点位置. \[ \nabla ...

  5. Fluent动网格【9】:区域运动

    本文所述的区域运动并非动网格中的运动域,而是指在多参考系(MRF)或滑移网格中所涉及到的区域的运动. 在滑移网格中指定区域运动时,除了能够指定绝对运动外,还能指定某一区域与其他区域间的相对运动,如图所 ...

  6. Fluent动网格【7】:网格节点运动

    在动网格中,对于那些既包含了运动也包含了变形的区域,可以通过UDF来指定区域中每一个节点的位置.这给了用户最大的自由度来指定网格的运动.在其他的动网格技术中(如重叠网格)则很难做到这一点.定义网格节点 ...

  7. Fluent动网格【5】:部件变形

    在动网格中关于部件运动除了指定刚体运动外,有时还需要指定某些边界的变形,这种情况经常会遇到,尤其是与运动部件存在相连接边界的情况下,如下图中边界1运动导致与之相连的边界2和边界3发生变形. Fluen ...

  8. Fluent动网格【3】:DEFINE_CG_MOTION宏

    除了利用Profile进行运动指定之外,Fluent中还可以使用UDF宏来指定部件的运动.其中用于运动指定的宏主要有三个: DEFINE_CG_MOTION DEFINE_GEOM DEFINE_GR ...

  9. Fluent动网格【2】:Profile文件

    动网格中一个重要任务是部件运动方式的指定.在动网格中指定部件的运动,往往将部件的运动方式指定为其加速度.速度或位移与时间的相关关系,本文主要讲述如何在Fluent中利用瞬态Profile文件指定部件的 ...

随机推荐

  1. 算法进阶面试题07——求子数组的最大异或和(前缀树)、换钱的方法数(递归改dp最全套路解说)、纸牌博弈、机器人行走问题

    主要讲第五课的内容前缀树应用和第六课内容暴力递归改动态规划的最全步骤 第一题 给定一个数组,求子数组的最大异或和. 一个数组的异或和为,数组中所有的数异或起来的结果. 简单的前缀树应用 暴力方法: 先 ...

  2. switch语句以及三种循环语句的总结

    1:switch语句(1)格式:switch(表达式) {case 值1:语句体1;break;case 值2:语句体2;break;...default:语句体n+1;break;} 格式解释说明: ...

  3. 简单总结下opacity、transparent以及rgba

    这几个概念最开始学的时候只是有个大致印象,现在复习这部分的知识点,发现不仔细区分一下,还真有点混乱. 三者共同点是都和透明有关.先分着来说一下: 1.opacity用来设置元素的不透明级别,从 0.0 ...

  4. Java并发编程(三)-- 多线程的“问题”

    竞态条件与临界区 在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源.当多个线程同时访问同一个资源,并且其中的一个或者多个线程对这个资源进行了写操作,才会产生竞态条件.多个线程 ...

  5. Java代码优化小结(三)

    (35)对资源的close()建议分开操作虽然有些麻烦,却能避免资源泄露.我们想,如果没有修改过的代码,万一XXX.close()抛异常了,那么就进入了catch块中了,YYY.close()不会执行 ...

  6. Android:ViewGroup和View的Touch事件

    Android中ViewGroup和View中的Touch事件传递机制分析 关键字:GroupView:View:Touch事件 基础知识: onInterceptTouchEvent():在View ...

  7. C++ Primer 与“类”有关的注意事项总结

    C++ 与"类"有关的注意事项总结(一) 1. 除了静态 static 数据成员外,数据成员不能在类体中被显式地初始化. 例如 : class First { int memi = ...

  8. Linux vi/vim命令高效助记图

    图片来源网上,如有侵权,请告知,我会删除掉,谢谢~ 常用编辑按键: 1 vi +[num] file 打开文件,并将光标置于第n行首 2 vi + file 打开文件,并将光标置于最后一行首 3 vi ...

  9. ArrayList数据结构的实现

    import java.util.Iterator; import java.util.NoSuchElementException; public class MyArrayList<T> ...

  10. Java WebSocket HttpSession与WebSocket Session的关联

    当HttpSession中止(通过显示地失效或超时)时,Web容器会把HttpSession属性从HttpSession中清除. javax.servlet.http.HttpSessionBindi ...