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. interFoam耦合相间的能量方程

interFoam耦合相间的能量方程

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

    你为什么不直接用带传热的VOF,而是要自己植入呢

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

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

    @李东岳 非常感谢东岳老师的回复,接下来是(SOS,紧急求救!!!)首先说下模拟背景(OF9):这个算例模拟辐射和对流加热下,熔渣受热熔化向下滴落这个过程如下图Alpha 0时刻 到 Alpha 1时刻 这个过程,觉得传热方程不复杂自己就植入进去了,以源项的形式考虑了熔渣和空气接触面处的传热,目前计算结果也没问题如图T 0时刻 到 T 1时刻,以上是考虑的第一部分。
    Success.jpg
    第二部分考虑随着温度升高,熔渣的运动粘度不断变小,流动性变好,所以想植入nu与T之间的关系,但interFoam中nu是一个常数,根据代码发现,UEqn.H(第一段代码)中turbulence->divDevTau(rho, U),使用到了nu,因此想在src库中找到关于divDevTau(rho, U),把场变量Nu放进来,以为很简单,但接下来就开始了无穷尽的折磨。
    (1)根据divDevTau()定义找到了位于src/MomentumTransportModels/incompressible/IncompressibleMomentumTransportModel/的函数定义(第二段代码),发现函数定义在反复横跳,就是不给表达式;
    (2)根据网上资料发现在linearViscousStress.C文件下有关于****divDevTau(rho, U)****的定义,非常激动的准备把this->nuEff(),这个关于nu的函数直接改成Nu这个随温度变化的标量场(这里认为this->nuEff()就是nu的场),结果毫无作用:136: ;
    (3)既然上面没作用就想着直接把这段代码放在UEqn.H内()如下UEqn.H的代码,发现量纲是对的,又很激动,结果能算,但是完全错误,可见上图的UY的对比,熔渣向下流动,结果我改完代码,速度是向上的。
    (4)后面我把我采用笨办法把MomentumTransportModels中的所有代码都看了一遍,很不幸还是没找到关于这个歌函数的定义。。。。。。
    (5)被逼疯的状态,国庆加班两天了,又到24点了,求求东岳老师和各位大佬拯救我吧,头发快被我抓掉光了,目前就是想找到 divDevTau(rho, U) ,这个SB函数的具体定义式,然后如何把nu这个场变量放进去,或者说this->nuEff()具体是啥,这我也找不到具体定义,都是虚函数,没有说明具体定义,唉要被逼疯了:136: :136: :136:

        fvVectorMatrix UEqn
        (
            fvm::ddt(rho, U) + fvm::div(rhoPhi, U)
          + MRF.DDt(rho, U)
          + turbulence->divDevTau(rho, U)
          //- fvc::div((rho*NU)*dev2(T(fvc::grad(U))))%%(3)暴力放进来
        //  - fvm::laplacian(rho*NU, U)
         ==
           phaseChange.SU(rho, rhoPhi, U)
         + fvModels.source(rho, U)
        );
    
    template<class TransportModel>
    Foam::tmp<Foam::fvVectorMatrix>
    Foam::IncompressibleMomentumTransportModel<TransportModel>::
    divDevTau
    (
        const volScalarField& rho,
        volVectorField& U
    ) const
    {
        NotImplemented;
        
        return divDevSigma(U);
    }
    
    template<class TransportModel>
    Foam::tmp<Foam::fvVectorMatrix>
    Foam::IncompressibleMomentumTransportModel<TransportModel>::divDevSigma
    (
        volVectorField& U
    ) const
    {
        return divDevTau(U);
    }
    
    template<class TransportModel>
    Foam::tmp<Foam::fvVectorMatrix>
    Foam::IncompressibleMomentumTransportModel<TransportModel>::
    divDevTau
    (
        volVectorField& U
    ) const
    {
        NotImplemented;
        return divDevSigma(U);
    }
    
    template<class BasicMomentumTransportModel>
    Foam::tmp<Foam::fvVectorMatrix>
    Foam::linearViscousStress<BasicMomentumTransportModel>::divDevTau
    (
        const volScalarField& rho,
        volVectorField& U
    ) const
    {
    
      volScalarField Nu = rho.db().objectRegistry::lookupObject<volScalarField>("NU");
        return
        (
          - fvc::div((this->alpha_*rho*this->nuEff()(改成Nu))*dev2(T(fvc::grad(U))))
          - fvm::laplacian(this->alpha_*rho*this->nuEff()(改成Nu), U)
        );
    }
    
    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #10

    @upc_ngh 在 interFoam耦合相间的能量方程 中说:

    所以想植入nu与T之间的关系

    你去viscosity模型那面,参考crossPowerLaw模型,植入一个自己的模型即可。不要管湍流模型那面的nueff()

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

    U 1 条回复 最后回复
  • U 离线
    U 离线
    upc_ngh
    在 中回复了 李东岳 最后由 编辑
    #11

    @李东岳 非常感谢李老师回复,现在最关键的问题是把nu与T之间的函数建立之后,无法将nu传递进divDevTau(rho, U)这个函数内部,因为根本找不到任何关于它的实质定义。这个问题有个前辈之前也发帖询问过:https://www.cfd-china.com/topic/3588/devreff-通过devrhoreff-实现其功能-rho-1-of4-x @Yongbo
    (1)interFoam求解器内divDevTau(rho, U)指向的是 /IncompressibleMomentumTransportModel.C下的divDevTau(rho, U)这个函数,但是根本没找到任何相关的divDevTau(rho, U)的具体定义;
    (2)反而在linearViscousStress.C下存在divDevTau(rho, U),如下,但发现改变这个没任何反应,说明调用的也不是这个,后面我把IncompressibleMomentumTransportModel这个类下的所有有关divDevTau这个函数都改了一遍,发现都没任何反应,人完全懵了,就想知道interFoam中divDevTau(rho, U)具体是怎么实现的,虽然在IncompressibleMomentumTransportModel下,但是根本没有任何定义,人都被代码搞麻了:136:

    template<class BasicMomentumTransportModel>
    Foam::tmp<Foam::fvVectorMatrix>
    Foam::linearViscousStress<BasicMomentumTransportModel>::divDevTauBaby
    (
        const volScalarField& rho,
        volVectorField& U
    ) 
    {
    
      volScalarField Nu = rho.db().objectRegistry::lookupObject<volScalarField>("NU");%%这是我写的想要将变化的Nu传递进来
        return
        (
          - fvc::div((this->alpha_*rho*Nu)*dev2(T(fvc::grad(U))))
          - fvm::laplacian(this->alpha_*rho*Nu, U)
        );
    }
    
    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #12

    @upc_ngh 在 interFoam耦合相间的能量方程 中说:

    现在最关键的问题是把nu与T之间的函数建立之后,无法将nu传递进divDevTau(rho, U)这个函数内部

    为什么,你的意思所有的粘度模型visosity再湍流下都是失效的么

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

    U 1 条回复 最后回复
  • U 离线
    U 离线
    upc_ngh
    在 中回复了 李东岳 最后由 编辑
    #13

    @李东岳 目前应该是还没找对divDevTau(rho, U)具体位置,不知道把nu传给谁,网上说传给 linearViscousStress.C,但没任何反应,我昨天有个笨办法,在OF9下的MomentumTransportModels这个文件夹下关于divDevTau()所有定义内都加了Info输出某个量,用来监测interFoam中的divDevTau()到底调用了哪个函数,如下,但是没发现任何调用的迹象,我感觉很懵,明明定义在这个文件夹下,咋会找不到它的具体调用:141: ,东岳老师Help !!!现在完全没思路了

    %%这是非线性的divDevTau函数定义在  nonlinearEddyViscosity.C内
    template<class BasicMomentumTransportModel>
    Foam::tmp<Foam::fvVectorMatrix>
    Foam::nonlinearEddyViscosity<BasicMomentumTransportModel>::divDevTau
    (
        const volScalarField& rho,
        volVectorField& U
    ) const
    {
    
    Info<< " 13 "<<endl;
        return
        (
            fvc::div(rho*nonlinearStress_)
          + eddyViscosity<BasicMomentumTransportModel>::divDevTau(rho, U)
        );
    }
    
    %%这是非线性的divDevTau函数定义在  linearViscousStress.C内
    template<class BasicMomentumTransportModel>
    Foam::tmp<Foam::fvVectorMatrix>
    Foam::linearViscousStress<BasicMomentumTransportModel>::divDevTau
    (
        const volScalarField& rho,
        volVectorField& U
    ) const
    {
    
      //volScalarField Nu = rho.db().objectRegistry::lookupObject<volScalarField>("NU");
      Info<<"8"<<endl;
        return
        (
          - fvc::div((this->alpha_*rho*this->nuEff())*dev2(T(fvc::grad(U))))
          - fvm::laplacian(this->alpha_*rho*this->nuEff(), U)
        );
    }
    
    
    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #14
    1. 编译完了lib之后再编译一下求解器确保正确

    2. 你不需要管湍流模型的调用,你要改的是viscosity模型而不是湍流模型

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

    U 1 条回复 最后回复
  • U 离线
    U 离线
    upc_ngh
    在 中回复了 李东岳 最后由 编辑
    #15

    @李东岳 非常感谢李老师不辞辛苦的点拨,现在有了一点小进展,为避免之后的同学犯错总结一下:
    (1)之前错误点在于:通过lookup寻找随温度变化的nu场,再将 linearViscousStress.C中的divDevTau()下的this->nuEff()转换为nu场如下代码,这时仅仅编译 linearViscousStress.C上层的momentumTransportModels是不够的,还需要编译incompressible中的divDevTau()函数(尽管并没有修改这个函数),再编译求解器才可以。证明了interFoam中的divDevTau()中的函数在层流下执行的就是 linearViscousStress.C中的divDevTau()。
    (2)但现在又存在一个问题,按照东岳老师的interFoam的解析并对照下面的代码可以看出, this->nuEff()是等价与nu即图中的v(运动粘度)
    666.jpg
    但是如果简单的将this->nuEff()代替成nu是不对的,计算出来的流场是错误的(熔渣向下滴落结果速度是向上的)如下图,其中nu的值都是根据气液相分数乘以分别的nu值得到,不知道哪里错了,或许这里的this->nuEff并不是简单的nu的数值,而是对其进行了处理,但也没找到相关定义,真是举步维艰,心累唉:xinlei:

    %  linearViscousStress.C中的divDevTau()函数返回值
    volScalarField Nu = rho.db().objectRegistry::lookupObject<volScalarField>("nu");
        return
        (
          - fvc::div((this->alpha_*rho*this->nuEff())*dev2(T(fvc::grad(U))))
          - fvm::laplacian(this->alpha_*rho*this->nuEff(), U)
        );
    
    %  修改后linearViscousStress.C中的divDevTau()
    volScalarField Nu = rho.db().objectRegistry::lookupObject<volScalarField>("nu");
        return
        (
          - fvc::div((this->alpha_*rho*Nu)*dev2(T(fvc::grad(U))))
          - fvm::laplacian(this->alpha_*rho*Nu, U)
        );
    

    ai.jpg

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

    @upc_ngh 在 interFoam耦合相间的能量方程 中说:

    this->nuEff并不是简单的nu的数值

    这个是两个年度场的混合,类似密度的数值

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

    1 条回复 最后回复
  • U 离线
    U 离线
    upc_ngh
    写于 最后由 编辑
    #17

    @李东岳 感谢李老师的回复,根据查阅的资料:this->nuEff() = nu() + nut() interFoam求解器使用的this->nuEff()应该是laminarModel下的Stokes.C这个模型,因为在求解器计算时输出器选用的stress model 是Stokes model,那divDevTau()函数下的this->nuEff()就如Stokes.C内所描述如下,就是指向nu()并不是为this->nut() + this->nu(),这里就很疑惑,这里将nu()换成自己设定的Nu(T),就得不到合理的计算结果(流场分布)。此外,我选用的是层流在laminarModel.C内也将nut初始化为0,如下代码,所以不知道interFoam这里调用了哪里的的nuEff(),可能不是目前我认知的Stokes.C内部的:141:

    template<class BasicMomentumTransportModel>
    tmp<volScalarField> Stokes<BasicMomentumTransportModel>::nuEff() const
    {
        return volScalarField::New
        (
            IOobject::groupName("nuEff", this->alphaRhoPhi_.group()),
            this->nu()
        );
    }
    
    template<class BasicMomentumTransportModel>
    Foam::tmp<Foam::volScalarField>
    Foam::laminarModel<BasicMomentumTransportModel>::nut() const
    {
        return volScalarField::New
        (
            IOobject::groupName("nut", this->alphaRhoPhi_.group()),
            this->mesh_,
            dimensionedScalar(dimViscosity, 0)
        );
    }
    
    
    1 条回复 最后回复

  • 登录

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