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. 关于multiphaseEulerFoam中固相摩擦黏度的计算问题

关于multiphaseEulerFoam中固相摩擦黏度的计算问题

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

    各位前辈,请问在固相摩擦黏度求解过程中,如下处理的意义是什么?
    9c58cba2-ef9a-43cc-b19f-bcd0b44c2738-image.png
    在Wachem2000的论文里,摩擦黏度的定义式也不是这样写的:
    734db2ba-e220-4e57-b518-c6992a79362b-image.png
    此外这行代码对应的公式应该是怎样的呢?

    sqrt((1.0/3.0)*sqr(tr(D[celli])) - invariantII(D[celli]))
    
    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #2

    http://dyfluid.com/docs/tensor.html 公式可以在这里翻译

    Wachem2000那个是JohnsonJackson固相粘度,你这个是Schaeffer模型,

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

    Z 1 条回复 最后回复
  • Z 离线
    Z 离线
    Zhy2022
    在 中回复了 李东岳 最后由 Zhy2022 编辑
    #3

    @李东岳 多谢东岳老师!学生还有一事不太清楚:
    invariantII有如下两个版本:
    9f6044df-fa2a-4bf7-960b-fbfd31eb8227-image.png -8
    37d49ad7-c1bb-43fe-ad31-ff56201cd51b-image.png -2006
    像8这样定义的话就没算3D的吗? 但是tr前面仍是取的1/3的哇——(1.0/3.0)*sqr(tr(D[celli])

    Z 1 条回复 最后回复
  • Z 离线
    Z 离线
    Zhy2022
    在 中回复了 Zhy2022 最后由 编辑
    #4

    @Zhy2022 不好意思,8中也有非2D的定义-SymmTensorI.H

    1 条回复 最后回复
  • Z 离线
    Z 离线
    Zhy2022
    写于 最后由 编辑
    #5

    请教各位前辈老师:
    83f368bc-ac55-40bd-89f1-c6ae39ea5c04-image.png
    7a4f9461-8793-44b1-83f4-38b96cd3e3e1-image.png
    JJ模型中的0.5是哪来的呢?

    1 条回复 最后回复
  • Z 离线
    Z 离线
    Zhy2022
    写于 最后由 编辑
    #6

    请教各位前辈一个问题:
    268a789a-7dc8-4835-a14b-9a555865d688-image.png
    phi是一个surfaceScalarField,和volScalarField不矛盾吗?

    此外,现在需要对速度散度判断,以确定n的取值:
    ab4b0384-55c3-4a21-b5aa-677b1b44c21f-image.png
    n是一个volScalarField或者scalar也可以,要计算:
    4da41b5d-9c03-426c-be01-c69940e0402a-image.png
    写循环的话,应该用div(U),还是div(phi)?(ps和pc都是volScalarField)

    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 Zhy2022 最后由 编辑
    #7

    @zhy2022

    phi是一个surfaceScalarField,和volScalarField不矛盾吗?

    参考 http://dyfluid.cn/无痛苦ns方程笔记.pdf 6.17节

    后面那个用phi

    另外,你那个0.5找到理论依据了么

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

    Z 1 条回复 最后回复
  • Z 离线
    Z 离线
    Zhy2022
    在 中回复了 李东岳 最后由 编辑
    #8

    @李东岳 谢谢李老师!0.5暂时还没有找到足够有说服力的依据,只是看到有些文献里直接用的μ=0.5pfsin(phi);
    但我觉得wachem2000里面公式不太对,因为他引用的JJ的文章是这样定义的:7aae97ac-3754-40e4-a435-21cccb23f6e0-image.png

    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 Zhy2022 最后由 编辑
    #9

    @zhy2022 我琢磨下帮你处理下这个问题

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

    Z 2 条回复 最后回复
  • Z 离线
    Z 离线
    Zhy2022
    在 中回复了 李东岳 最后由 编辑
    #10

    @李东岳 :high: :high: :high:

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

    @李东岳 东岳老师,从下面几个式子看,固相黏度应该都是半经验表达式,所以0.5可能是个实验获得的参数:
    d7cd3790-cd15-45c3-bad9-6dcba069f6f6-image.png (JJ)
    bcc611d5-bc11-49c6-beb6-73d08b8496ad-image.png (Schaeffer)
    a5a9446d-2284-45ea-b94d-84d8125963b2-image.png (Princeton)

    此外,princeton中摩擦应力计算如下:
    b334a3b1-6081-4a12-bb32-5f3c04cca839-image.png
    3e038a48-fde7-41ec-9125-df2a1283aecb-image.png

    对通量的处理:

    const volVectorField& U = phase.U();
    surfaceScalarField phiU = fvc::interpolate(U) & U.mesh().Sf();
     volScalarField Ud = fvc::div(phiU);
    

    对压力计算:

    const volScalarField pc = Fr_*pow(max(alpha - alphaMinFriction, scalar(0)), eta_)
                                /pow(max(alphaMax - alpha, alphaDeltaMin_), p_);
    ......
    
    //对体
    forAll(n,celli) 
        {
            if (Ud[celli] < 0.0)
            {
                n[celli] = 1.03;
            }
            else
            {
                n[celli] = 0.5*sqrt(3.0)*sin(phi_.value());            
            }
            m[celli] = n[celli]-1;
        
            //..No negative base. 对不对?
            pt[celli] =  1.0-Ud[celli]/( n[celli]*sqrt(2.0)*sin(phi_.value())* (sqrt(Us[celli]) + small) );
            if (!(pt[celli] > 0.0))
            {
                pt[celli] = small;
            }
            
            //..No negative exponent.
            if (m[celli] > 0)
            {
                //n-1 power
                pt[celli] = pc[celli]*pow(pt[celli], m[celli]);
            }
            else
            {
                pt[celli] = pc[celli]*pow(1/pt[celli], mag(m[celli]));
            }
        }              
    ......
    
    //对面
    forAll(currPatch,facei)
            {
                if(UdBf[patchi][facei] < 0.0)
                {
                   nBf[patchi][facei] = 1.03;
                }
                else
                {
                   nBf[patchi][facei] = 0.5*sqrt(3.0)*sin(phi_.value());
                }
                mBf[patchi][facei] = nBf[patchi][facei]-1;
    
                ptBf[patchi][facei] = 1.0-UdBf[patchi][facei]/( nBf[patchi][facei]*sqrt(2.0)*sin(phi_.value())* (sqrt(UsBf[patchi][facei]) + small) );
                
                if (!(ptBf[patchi][facei] > 0.0))
                {
                   ptBf[patchi][facei] = small;
                }
            
                //..No negative exponent.
                if (mBf[patchi][facei] > 0)
                {
                    ptBf[patchi][facei] = pcBf[patchi][facei]*pow(ptBf[patchi][facei], mBf[patchi][facei]);
                }
                else
                {
                    ptBf[patchi][facei] = pcBf[patchi][facei]*pow(1/ptBf[patchi][facei], mag(mBf[patchi][facei]));
                }
            } 
        }  
        
        // Correct BCs
        pt.correctBoundaryConditions();
        Us.correctBoundaryConditions();
        Ud.correctBoundaryConditions();
    
    

    黏度计算:

    //对体
    forAll(Ud,celli) 
        {
            if (Ud[celli] < 0)
            {
                n[celli] = 1.03;
            }
            else
            {
                n[celli] = 0.5*sqrt(3.0)*sin(phi_.value());            
            }
            m[celli] = n[celli]-1;
    
            if (!(pc[celli] > 0))
            {
                pc[celli] = small;
            }
            
            //..pf is a const.
           
            //calculation of nu
            if (m[celli] > 0)
            {            
                nu[celli] = sqrt(2.0)*pf[celli]*sin(phi_.value())*
                            ( n[celli]-(n[celli]-1.0)*pow(pf[celli]/(pc[celli]), 1/m[celli]) )
                            /(sqrt(Us[celli]) + small);
            }
            else
            {
                nu[celli] = sqrt(2.0)*pf[celli]*sin(phi_.value())*
                            ( n[celli]-(n[celli]-1.0)*pow(pc[celli]/(pf[celli]+small), mag(1/m[celli])) )
                            /(sqrt(Us[celli]) + small);
            }
        }
    ......
    
    
    //对面
     forAll(patches, patchi)
        {
         
          if (!patches[patchi].coupled())
          {
            const fvPatch& currPatch = patches[patchi];
            forAll(currPatch,facei)
            {
                if(UdBf[patchi][facei] < 0.0)
                {
                   nBf[patchi][facei] = 1.03;
                }
                else
                {
                   nBf[patchi][facei] = 0.5*sqrt(3.0)*sin(phi_.value());
                }
                mBf[patchi][facei] = nBf[patchi][facei]-1;
    
                if (!(pcBf[patchi][facei] > 0.0))
                {
                    pcBf[patchi][facei] = small;
                }
    
                                  
                if (mBf[patchi][facei] > 0)
                {
                    nuBf[patchi][facei] = sqrt(2.0)*pf.boundaryField()[patchi][facei]*sin(phi_.value())*
                                          ( nBf[patchi][facei]-(nBf[patchi][facei]-1.0)*pow(pfBf[patchi][facei]/pcBf[patchi][facei], 1/mBf[patchi][facei]) )
                                          /(sqrt(UsBf[patchi][facei]) + small);
                }
                else
                {
                    nuBf[patchi][facei] = sqrt(2.0)*pf.boundaryField()[patchi][facei]*sin(phi_.value())*
                                          ( nBf[patchi][facei]-(nBf[patchi][facei]-1.0)*pow(pcBf[patchi][facei]/(pfBf[patchi][facei]+small), mag(1/mBf[patchi][facei])) )
                                          /(sqrt(UsBf[patchi][facei]) + small);
                }
            }
          } 
        } 
        
        nu.correctBoundaryConditions();
        Us.correctBoundaryConditions();
        pc.correctBoundaryConditions(); 
        Ud.correctBoundaryConditions(); 
    

    结果在相分数0.5左右(摩擦黏度产生处)报错:
    149e14c3-5f93-4325-980c-2e15732c8f04-image.png
    36f75fde-3108-44a1-88ee-ba7eee7d1aa7-image.png

    相分数出现突变,而且无法增大(继续堆积),增大就会报错,不知道是哪个地方的处理有问题,还请东岳老师和其他前辈能解答一二!

    1 条回复 最后回复

  • 登录

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