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中求解努塞尔数和fluent的结果相差较大,求各位大佬答疑解惑。

Openfoam中求解努塞尔数和fluent的结果相差较大,求各位大佬答疑解惑。

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

    模型采用的是矩形槽道,求解器采用的是PimpleFoam。并采用如下方式添加了温度场:https://zhuanlan.zhihu.com/p/485714816
    根据李老师写的求解努塞尔数的小代码,并对其进行改进,实现了实时输出,修改后的代码如下:

    coded
     {
         libs ( "libutilityFunctionObjects.so" );
         enabled         true;
         type            coded;
         name           printMinU;
         executeControl  timeStep;
         executeInterval 200;
         writeControl   timeStep;
         writeInterval  200;
    
         codeOptions
         #{
             -I$(LIB_SRC)/meshTools/lnInclude
         #};
    
         codeExecute
         #{
             const volScalarField& T
             (
                 mesh().lookupObject<volScalarField>("T")
             );
    
             const fvPatchList& patches = mesh().boundary();
    
                 std::ofstream file;
                 file.open ("nus", std::ofstream::out | std::ofstream::app);
             forAll(patches, patchi)
             {
                 const fvPatch& currPatch = patches[patchi];
                     if (currPatch.name() == "bottomWall")
                     {
                         fvPatchScalarField nus = T.boundaryField()[patchi];
    
                         scalar L = 0.1;
                         scalar Timp = 343;
                         const volScalarField& T = mesh().lookupObject<volScalarField>("T");
                         scalarField Tinternal = T.internalField();
                         scalar sumT = gSum(Tinternal * mesh().V());
                         scalar V = gSum(mesh().V());
                         scalar avgT = sumT / V;
                         nus = T.boundaryField()[patchi].snGrad()*L/(Timp - avgT);
                         //nus2file << "Time: " << mesh().time().timeName() << " " << nus << nl;
             
                         forAll(T.boundaryField()[patchi], facei)
                         {
                             //Pout << mesh().C().boundaryField()[patchi][facei].x()/0.1
                               //   << " " << nus[facei] << nl;
                             file << "Time: " << mesh().time().timeName() << " " << mesh().C().boundaryField()[patchi][facei].x() << " " << mesh().C().boundaryField()[patchi][facei].z() << " " << nus[facei] << std::endl;
                         }
                         
                     }
             }
             file.close(); 
        #};
     }
    

    其中计算努塞尔数时,之前采用的参考温度和fluent中的温度是一样的,都是采用的300,但是求解出的努塞尔数差距过大,后来将参考温度改成实时体积平均温度,努塞尔数变大不少,但是和fluent计算得出的还是相差不少。在百度上我看有人说fluent中的努塞尔数是导出热通量以后计算的努塞尔数,而不是用采用的温度梯度。温度梯度这种计算方式与第一层网格的高度关系很大。不知道有没有大佬计算过这种问题,求解。

    东方白杨东 1 条回复 最后回复
  • 楚 离线
    楚 离线
    楚扬长流
    写于 最后由 编辑
    #2

    这部分fluent壁面传热计算有一些独有的未公开技术,它的壁面处理与OpenFOAM差异还是蛮大的,可以去看看相关手册,尤其是SA和SST模型的壁面处理

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

    我觉得你需要使用传热求解器,而不是把温度当做一个变量来处理。

    也可以参考这个帖子 http://dyfluid.com/openfoam.html#id12

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

    2 1 条回复 最后回复
  • 2 离线
    2 离线
    2019201300
    在 中回复了 李东岳 最后由 编辑
    #4

    @李东岳 谢谢李老师,也谢谢楼上几位。目前找到一些问题所在了。在fluent中进出口的温度不是周期性的而流场是,每个周期都会重置入口温度(之前用fluent的人不清楚),所以这一点是我们自己的问题所在。另外还有一个问题就是在计算之前fluent进行初始化为300K,但是计算一段时间后会发现有小于300K的,这个问题就不知道是什么原因了。目前计划是对温度场T+、y+了。和实验的验证结果如下图所示,个人感觉能凑合用吧。
    9a7bebfa-8bf1-450e-8768-5e386dd453a2-微信截图_20240115155859.png

    1 条回复 最后回复
  • 东方白杨东 离线
    东方白杨东 离线
    东方白杨
    在 中回复了 2019201300 最后由 编辑
    #5

    @2019201300 在 Openfoam中求解努塞尔数和fluent的结果相差较大,求各位大佬答疑解惑。 中说:

    模型采用的是矩形槽道,求解器采用的是PimpleFoam。并采用如下方式添加了温度场:https://zhuanlan.zhihu.com/p/485714816
    根据李老师写的求解努塞尔数的小代码,并对其进行改进,实现了实时输出,修改后的代码如下:

    coded
     {
         libs ( "libutilityFunctionObjects.so" );
         enabled         true;
         type            coded;
         name           printMinU;
         executeControl  timeStep;
         executeInterval 200;
         writeControl   timeStep;
         writeInterval  200;
    
         codeOptions
         #{
             -I$(LIB_SRC)/meshTools/lnInclude
         #};
    
         codeExecute
         #{
             const volScalarField& T
             (
                 mesh().lookupObject<volScalarField>("T")
             );
    
             const fvPatchList& patches = mesh().boundary();
    
                 std::ofstream file;
                 file.open ("nus", std::ofstream::out | std::ofstream::app);
             forAll(patches, patchi)
             {
                 const fvPatch& currPatch = patches[patchi];
                     if (currPatch.name() == "bottomWall")
                     {
                         fvPatchScalarField nus = T.boundaryField()[patchi];
    
                         scalar L = 0.1;
                         scalar Timp = 343;
                         const volScalarField& T = mesh().lookupObject<volScalarField>("T");
                         scalarField Tinternal = T.internalField();
                         scalar sumT = gSum(Tinternal * mesh().V());
                         scalar V = gSum(mesh().V());
                         scalar avgT = sumT / V;
                         nus = T.boundaryField()[patchi].snGrad()*L/(Timp - avgT);
                         //nus2file << "Time: " << mesh().time().timeName() << " " << nus << nl;
             
                         forAll(T.boundaryField()[patchi], facei)
                         {
                             //Pout << mesh().C().boundaryField()[patchi][facei].x()/0.1
                               //   << " " << nus[facei] << nl;
                             file << "Time: " << mesh().time().timeName() << " " << mesh().C().boundaryField()[patchi][facei].x() << " " << mesh().C().boundaryField()[patchi][facei].z() << " " << nus[facei] << std::endl;
                         }
                         
                     }
             }
             file.close(); 
        #};
     }
    

    其中计算努塞尔数时,之前采用的参考温度和fluent中的温度是一样的,都是采用的300,但是求解出的努塞尔数差距过大,后来将参考温度改成实时体积平均温度,努塞尔数变大不少,但是和fluent计算得出的还是相差不少。在百度上我看有人说fluent中的努塞尔数是导出热通量以后计算的努塞尔数,而不是用采用的温度梯度。温度梯度这种计算方式与第一层网格的高度关系很大。不知道有没有大佬计算过这种问题,求解。

    您好,请问Nu数这个代码直接加载controldict文件后面就行了吗,不需要再加其他的了

    CAS-IET

    2 1 条回复 最后回复
  • 2 离线
    2 离线
    2019201300
    在 中回复了 东方白杨 最后由 编辑
    #6

    @东方白杨 我是这样干的。

    1 条回复 最后回复

  • 登录

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