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中植入Fluent中溶质在单相扩散的功能

interfoam中植入Fluent中溶质在单相扩散的功能

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

    想在气液模型interfoam中实现Fluent里的液相溶质浓度扩散方程如下
    7d9d54c5-9674-4019-b656-ed3d10aa47cf-image.png

    暂不考虑源项
    实现如下:

        fvScalarMatrix CEqn
        (
           fvm::ddt(alpha1, rho1,C)
          + fvm::div(rhophi1,C)
          - fvm::laplacian(alpha1*Ck, C)
        );
    

    Ck是扩散系数,编译成功,运行出错,大家能不能给些建议

    1 条回复 最后回复
  • 麦迪文麦 离线
    麦迪文麦 离线
    麦迪文
    写于 最后由 编辑
    #2

    补充内容:
    经测试把上述代码中时间项的相分数置为1,如下代码所示,程序能稳定运行

       fvScalarMatrix CEqn
        (
           fvm::ddt((alpha1+alpha2), rho1,C)
          + fvm::div(rhophi1,C)
          - fvm::laplacian(alpha1*Ck, C)
        );
    

    感觉像是算法哪里出了问题??????

    1 条回复 最后回复
  • 麦迪文麦 离线
    麦迪文麦 离线
    麦迪文
    写于 最后由 编辑
    #3

    再次补充:
    使用QT调试,查出问题

     void Foam::DILUPreconditioner::calcReciprocalD
     (
         scalarField& rD,
         const lduMatrix& matrix
     )
     {
         scalar* __restrict__ rDPtr = rD.begin();
     
         const label* const __restrict__ uPtr = matrix.lduAddr().upperAddr().begin();
         const label* const __restrict__ lPtr = matrix.lduAddr().lowerAddr().begin();
     
         const scalar* const __restrict__ upperPtr = matrix.upper().begin();
         const scalar* const __restrict__ lowerPtr = matrix.lower().begin();
     
         label nFaces = matrix.upper().size();
    
    for (label face=0; face<nFaces; face++)
         {
             rDPtr[uPtr[face]] -= upperPtr[face]*lowerPtr[face]/rDPtr[lPtr[face]];//在这里报错。。。。。!!!!!!!!
         }
    
     
     
    
         label nCells = rD.size();
     
         for (label cell=0; cell<nCells; cell++)
         {
             rDPtr[cell] = 1.0/rDPtr[cell];
         }
     }
    
    1 条回复 最后回复
  • 麦迪文麦 离线
    麦迪文麦 离线
    麦迪文
    写于 最后由 编辑
    #4

    最后总结,给时间项中的相分数加上个极小值(1e-24),就能正常计算,是说明时间项中不能存在0系数?那两相欧拉模型中的时间项中的相分数是怎么处理的呢?

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

    你可以试试不要preconditioner,多相流里面也会出这个问题的,在你的fvSolution里面把preconditioner设置为none

    另外好像你的对流项没包含相分数?

    fvScalarMatrix CEqn
        (
           fvm::ddt(alpha1, rho1,C)
          + fvm::div(rhophi1,C)// + fvm::div(rhoAlphaPhi1,C)
          - fvm::laplacian(alpha1*Ck, C)
        );
    

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

    1 条回复 最后回复
  • 麦迪文麦 离线
    麦迪文麦 离线
    麦迪文
    写于 最后由 编辑
    #6

    对流项如下

    rhoPhi1=fvc::interpolate(rho*alpha1)*phi;
    

    在两相欧拉模型中的能量方程的矩阵结构在初始时刻和本文的差不多

       fvm::ddt(alpha1, rho1, he1) + fvm::div(alphaRhoPhi1, he1)
          - fvm::Sp(contErr1, he1)
    

    不知其最后这项fvm::Sp(contErr1, he1)(隐式修正?),还有更后面有两项 heatTransferCoeff*he1/Cpv1
    - fvm::Sp(heatTransferCoeff/Cpv1, he1是为了避免这类问题?

    软件版本是5.x

    1 条回复 最后回复
  • 麦迪文麦 离线
    麦迪文麦 离线
    麦迪文
    写于 最后由 编辑
    #7

    谢谢老师
    preconditioner设置为none后成功运行,并且暂时看上去和Fluent勉强趋势能勉强相近

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

    哦那你植入的可以

    Sp是用来处理有界性的,如果越界可以用一下试试,没越界可以暂时不用管,

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

    1 条回复 最后回复
  • Z 离线
    Z 离线
    zhangK
    在 中回复了 麦迪文 最后由 编辑
    #9

    @麦迪文 你好,请问能参考下您的代码吗:xiexie:

    1 条回复 最后回复

  • 登录

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