Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. 大步长下变形网格发散

大步长下变形网格发散

已定时 已固定 已锁定 已移动 OpenFOAM
13 帖子 3 发布者 3.9k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #4

    你这个网格,如果是往x方向动的,yz方向的变形要跟上,要不然不会出现平移的效果。你1楼那个图是扩散模型处理的吗?看起来不像扩散模型,好像是slerp,要不然就是扩散模型边界条件没弄对

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    L 1 条回复 最后回复
  • L 离线
    L 离线
    lwjetmann
    在 中回复了 李东岳 最后由 编辑
    #5

    @李东岳 是扩散模型处理的:diffusivity quadratic inverseDistance (cylinder)

    1楼的图给的是圆柱的对称平面(圆柱端部用半球过渡的),圆柱往x负方向动(水平往右)。到图中发散的时刻,圆柱已经走了16个直径。将时间步长减小为当前的十分之一,网格变形能跟上,但是算得太慢了。所以想能不能通过改扩散系数模型来让网格在大步长的情况下也能 “跟着动” 。

    @李东岳 在 大步长下变形网格发散 中说:

    要不然就是扩散模型边界条件没弄对

    pointDisplacement边界条件很简单,远场是slip(或fixedValue也行,因为远场很远,10000个直径,网格扭曲也是局限在物面附近),圆柱物面是fixedValue(但实际应该是openfoam-adapter把固体域的位移map过来了:

                // Get the displacement on the patch
                fixedValuePointPatchVectorField& pointDisplacementFluidPatch(
                    refCast<fixedValuePointPatchVectorField>(
                        pointDisplacement_->boundaryFieldRef()[patchID]));
    
                // Overwrite the nodes on the interface directly
                forAll(pointDisplacement_->boundaryFieldRef()[patchID], i)
                {
                    for (unsigned int d = 0; d < dim; ++d)
                        pointDisplacementFluidPatch[i][d] = buffer[bufferIndex++];
                }
    
    1 条回复 最后回复
  • L 离线
    L 离线
    lwjetmann
    写于 最后由 编辑
    #6

    给感兴趣的同学老师们更新一下进展:

    1. directional diffusivity对我的三维情况,效果比inverDistance扩散模型更差,给的diffusivity directional (1,200,200),只运动了不到两个直径网格便发散了
      e27e2e28-fa0b-40b0-9cfe-cd44cb1192cb-directional.png

    2. directional diffusivity好像只有给(a, b, 0)且a<<b这种模式才有效果,且仅针对单向平移的二维网格。用不同的参数试了试moving cone算例
      8076a78c-867b-433f-b898-5b8a29bdd5cc-directional_compare.png
      尝试把moving cone改为球,diffusivity directional (1,200,0),效果也不错
      d028993a-7d4b-466c-a3c6-78315bbef936-directional_sphere.png

    3. 我的情况目前只有减小时间步长了,移动33个直径后还没发散
      e0bf116a-f3fc-4a2c-a1d8-5c9f4684232c-t95_all.png

    1 条回复 最后回复
  • L 离线
    L 离线
    lwjetmann
    写于 最后由 编辑
    #7

    再次更新进展:
    在displacementLaplacianFvMotionSolver基础上修改了一下,把边界(交界面)上固体域传来的位移分为刚性平移和局部变形,只针对后者求解laplacian方程得cellDisplacement场,插值到pointDisplacement场后再加上刚性平移场输出。这样改后,虽然时间步还是不能很大(否则端部还是出现“跟不上”的问题),但在和之前相同的时间步下,走了393个直径后的效果依旧很好:

    overall.png
    还存在的一个问题是边界附近的网格变化没有考虑到正交(如右中图),可能是扩散方程求解变形的固有问题?也许对时间步长的限制也是因此导致的。了解到rbfMotionSolver这种求解方法,不知道是否可以解决这个问题?

    1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #8

    感谢更新。是的,rbf对你说的正交性那个有很大的改善。这是算流固耦合?

    我在这面看到了这个rbf,没准可以移植一下 https://github.com/solids4foam/solids4foam/tree/master/src

    https://sourceforge.net/p/openfoam-extend/OpenFOAM-1.6-ext/ci/master/tree/tutorials/incompressible/icoDyMFoam/movingBlockRBF/RBFMotionFunction/ 这个看起来更简单 :140:

    我试了一下,感觉挺有意思,你要不要玩玩extend那个,比solids4foam的简单很多,直接挂库就行

    捕获.JPG

    不过openfoam.org的slerp看起来也很流弊 https://openfoam.org/release/2-3-0/mesh-motion/

    替代文字

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    L 1 条回复 最后回复
  • L 离线
    L 离线
    lwjetmann
    在 中回复了 李东岳 最后由 编辑
    #9

    谢谢李老师提供的资讯,原来openfoam.org介绍slerp时说过“求解椭圆方程得位移场会导致旋转边界附近网格剪切变形”!

    @李东岳 在 大步长下变形网格发散 中说:

    是的,rbf对你说的正交性那个有很大的改善。这是算流固耦合?

    是的,用的preCICE和calculiX算的流固耦合。

    @李东岳 在 大步长下变形网格发散 中说:

    你要不要玩玩extend那个,比solids4foam的简单很多,直接挂库就行

    我看了一下,extend这个只针对给定旋转角度和角速度的固体运动情况,还不是普遍情况。

    还有一点是,rbf插值算位移场在分核计算时要特别处理(对每一分区提取边界点,插值内部点),有些麻烦。针对我这个问题,非正交带来的误差应该还能接受,先这么算看看

    1 条回复 最后回复
  • Mina LeeM 离线
    Mina LeeM 离线
    Mina Lee
    写于 最后由 编辑
    #10

    可以尝试一下RBF求解器,RBF支持的动网格幅度很大,远超扩散和逆距离,当然,也可以尝试一下overset。
    https://www.bilibili.com/video/BV18a4y1D7zB/?vd_source=17ca8ef5f5c666dfc54376ddcfdd33da

    L 1 条回复 最后回复
  • L 离线
    L 离线
    lwjetmann
    在 中回复了 Mina Lee 最后由 编辑
    #11

    @Mina-Lee 感谢回复!不知道com版本有没有直接可用的rbf求解器呢?这个UP的视频我之前搜到过,当时还问了一下,他说dynamicOversetFvMesh就可以定义运动了。但是不知道overset的边界怎么在变形,而且他肯定是用的rbf

    Mina LeeM 1 条回复 最后回复
  • Mina LeeM 离线
    Mina LeeM 离线
    Mina Lee
    在 中回复了 lwjetmann 最后由 编辑
    #12

    @lwjetmann 可以去查一下solid4foam,这里边提供了RBF求解器,solid4foam的RBF库已经处理好并行问题了,但是你需要做一下改动,因为据我所知(个人见解,真伪自辩!):这个RBF库只能实现被动位移,显然,你要做的仿真是需要写一个主动位移函数的。
    dynamicOversetFvMesh确实可以定义运动,因为都是求解位移拉普拉斯方程,区别就是扩散系数是选择均一的?还是逆距离的?还是。。。

    @lwjetmann 在 大步长下变形网格发散 中说:

    但是不知道overset的边界怎么在变形

    理论上来说,位移拉普拉斯方程,就是给所有网格单元“中心”定义的,你要好好读一下代码,位移拉普拉斯方程是根据已知的位移边界条件,求解其余单元的位移值,这个需要插值到网格节点上的。换句话说,是不是overset边界,根本不影响变形。fixed边界,才会影响变形。

    如果你要用重叠网格,记住,不要用逆距离,OF的这个方法存在BUG!不要问我为什么,因为我也不知道怎么解决这个问题。

    祝好~

    L 1 条回复 最后回复
  • L 离线
    L 离线
    lwjetmann
    在 中回复了 Mina Lee 最后由 编辑
    #13

    十分感谢您的分享!

    @Mina-Lee 在 大步长下变形网格发散 中说:

    换句话说,是不是overset边界,根本不影响变形。fixed边界,才会影响变形。

    确实是啊!displacementLaplacianFvMotionSolver类中组建cellDisplacement场时,只对pointDisplacement为fixedValue类型的patch进行了处理(改为cellMotion类型,并对face各点求平均),其它类型的没做任何处理;最后cellDisplacement再插值回pointDisplacement时,点位移场只有原本的fixedValue边界没被修改,其它的都被求解结果修改了。

    我看代码时没深想到这一层,只在用的时候发现有时远场使用fixedValue和slip效果不同,我在这个贴子中的回复属于是瞎猫碰上死老鼠了,看来远场只要不是fixedValue,给任意都行。

    最后我的问题还是用的单一区域网格以及求扩散方程变形成功实现的,为了验证还用StarCCM算了比过,吻合得很好。倒是在StarCCM中试过重叠网格,overset交界面网格难匹配,常常挖洞出错,算出来的结果锯齿也很厉害。至于rbf,有些懒得折腾了,以后遇到非用不可的情况再说。

    这句话应该是您的“泣血之言”,指给后来的人看看:146: :146:

    @Mina-Lee 在 大步长下变形网格发散 中说:

    如果你要用重叠网格,记住,不要用逆距离,OF的这个方法存在BUG!

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]