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
5 帖子 2 发布者 4.2k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • C 离线
    C 离线
    CFDngu
    写于 最后由 CFDngu 编辑
    #1

    大家好,最近重新研究interFoam,关于动网格的处理有些困惑,希望大家指点。

    若网格进行运动,首先interFoam.C中要运行如下内容:

    if (correctPhi)
    {
            // 计算绝对通量
             phi = mesh.Sf() & Uf();
    
            // 求解pcorr,利用其修正phi,保证质量守恒
             #include "correctPhi.H"
    
            // 绝对通量转换为相对通量
             fvc::makeRelative(phi, U);
    
             mixture.correct();
    }
    

    这段代码所做的工作我在注释中标注出来了,不知道是否准确。我的第一个问题是,计算绝对通量为什么不是如下代码:

    phi = fvc::interpolate(U) & mesh.Sf()
    

    按我的理解,直接用Uf()访问的是上一迭代得出的面上速度,网格运动后其不一定与新网格面在一个平面了,而fvc::interpolate(U)是按照更新的网格插值得出的,这样貌似更合理些?

    随后是求解相方程的内容,采用相对通量求解没有问题。

    #include "alphaControls.H"
    #include "alphaEqnSubCycle.H"
    
    mixture.correct();
    

    相方程求解后,我没有发现对rhoPhi采用类似makeRelative()的操作,即程序直接组建速度矩阵然后求解压力泊松方程,并在求解后才执行makeRelative(),位置在pEqn.H:70。这一点我没理解,为什么在动量方程的求解中未使用相对通量,而在求解后才显式地将phi转换为相对通量?

    最后还有个小问题,在求解完压力方程后,将phi转化为相对值之前,即pEqn.H:67,程序还对面上速度进行了更新:

    Uf() = fvc::interpolate(U);
    surfaceVectorField n(mesh.Sf()/mesh.magSf());
    Uf() += n*(phi/mesh.magSf() - (n & Uf()));
    

    后两句存在的意义是什么呢?尤其是最后一句,实在没想明白。

    劳烦大家指点下,我哪里理解有误还是哪个地方知识储备不够,这三个问题困扰我好几天了,查了不少资料也没找到原因,谢谢!

    1 条回复 最后回复
  • bestucanB 离线
    bestucanB 离线
    bestucan 版主 大神
    写于 最后由 编辑
    #2

    面上速度本身就是相邻网格体心插值得到的吧。fvc:interpolate(U) 和 Uf()的区别是不是,只是,前一个时间步和后一个时间步的区别。

    rhoPhi就是密度的通量吧。可能是密度比较容易出现间断点?也可能像上一个的区别,只是之前的和之后的?

    这个区别好像就是显式的和隐式的区别。

    最后一个问题,看起来像是在综合算Uf()的值。Uf()的变化由两部分组成,一部分是由于坐标的变化,一部分是由于自身的变化。就是物质导数。原地不动也会变的那部分叫本地导数,因为运动导致变化的那部分叫迁移导数。那三行,第一行就是迁移导数,后两行是在算本地导数,加上去。第二行是算面上速度原本的方向。本来那个方向乘以面上法向量就是该速度在面法向的投影。第三行就这个方向上的速度算对Uf方向的速度增量。怎么算的还看不出来。

    滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

    异步沟通方式(《posting style》from wiki)(下载后打开):
    https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
    提问的智慧(github在gitee的镜像):
    https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way

    C 1 条回复 最后回复
  • C 离线
    C 离线
    CFDngu
    在 中回复了 bestucan 最后由 编辑
    #3

    @bestucan 你好,非常感谢你的回复,我其实周日晚上就看到了,受到很大启发,也还有些不懂的地方,所以思考了两天才回复。

    第一个问题,我认为应该如你所说,是显式和隐式的区别;
    第二个问题,我将ALE框架下的积分形式的方程手动离散了一下,发现和MULES或isoAdvector中对应的代码一致,用的是相对通量求解的,而rhoPhi也是用相对通量组建的,所以不需要再次进行makeRelative操作;
    第三个问题,我还是没太明白,按照我的理解,fvc::intepolate(U)就应该直接是新的面上速度了。我认为最后一句是不是类似非正交修正的操作?(尤其是相邻网格体心连线没有经过面心的时候)

    bestucanB 1 条回复 最后回复
  • bestucanB 离线
    bestucanB 离线
    bestucan 版主 大神
    在 中回复了 CFDngu 最后由 编辑
    #4

    @CFDngu 第三个更像是非正交修正的逆操作。

    假设修非正交修正前的向量是x,那么修正的方程是
    mesh.Sf()=x*mesh.magSf()
    向量乘以面法向量等于在面法向上的分量

    那么x的表达式就是
    x=mesh.Sf()/mesh.magSf()
    这就是那个n的方向。

    n的方向就是网格体心的方向。即使网格原地不动,这个方向的向量也会发生作用。改变该网格的体心位置的数值。

    n乘的这个(phi/mesh.magSf() - (n & Uf())),第一项也是个类似的逆操作,像是把总的量里减去迁移造成的,就是当地向量造成的,再去乘当地向量的方向n

    最多猜这么多了:chigua2:

    滚来滚去……~(~o ̄▽ ̄)~o 滚来滚去都不能让大家看出来我不是老师么 O_o

    异步沟通方式(《posting style》from wiki)(下载后打开):
    https://www.jianguoyun.com/p/Dc52X2sQsLv2BRiqnKYD
    提问的智慧(github在gitee的镜像):
    https://gitee.com/bestucan/How-To-Ask-Questions-The-Smart-Way

    C 1 条回复 最后回复
  • C 离线
    C 离线
    CFDngu
    在 中回复了 bestucan 最后由 编辑
    #5

    @bestucan 好的,非常感谢,我再研究一下~

    1 条回复 最后回复

  • 登录

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