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

    各位老师好,

    我在计算管道流粘性功率时使用两种积分方案得到的结果误差很大。
    在数学上,体积分可以转换为面积分。
    5eeb509d-27cb-42e9-8126-e9bef7c9f84a-image.png
    我先用整个计算域内的网格计算左边的体积分,得到的值很接近预测值。
    再使用右侧的面积分计算几个边界,却得到很小的值。管道流动如下:
    左侧入口:充分发展的速度入口,计算得到的面积分很小(接近0)
    右侧出口:给定压力出口(0),他的速度梯度是0,所以在这个边界上的面积分是0,和计算得到的值匹配
    两侧壁面:无滑移壁面 壁面速度为0,所以边界上的面积分也是0,和计算也相符
    35228a25-9f77-4dc5-8362-b11532b791ea-image.png
    问题是出口和壁面都是由于给定的边界条件导致的数值为0,那么入口的面积分结果应该很接近左侧的体积分值才对。

    我自己分析是由于入口的速度梯度很难准确计算导致的。所以我使用入口右侧一层的网格速度梯度来代替,但是结果仍然很小。请教大家。

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

    你这个高斯定律用的不对,我还没见过这么用的, 你确定这么用是对的么

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

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

    @李东岳 抱歉老师,之前的写法有问题,重新补充一下。
    a6339f36-0605-4e14-a9ae-acddd1f154d2-image.png
    这里也是有相同的问题,如果入口使用了充分发展的速度条件,管道流稳定后沿流方向不存在速度梯度,按照面积分的方法求得的结果应该也是0.

    1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #4
    1. 为什么略去$\tau : \nabla\bfU$,如果略去的话,$\nabla\cdot(\tau\cdot\bfU)$也应该略掉
    2. $\int\nabla\cdot(\tau\cdot\bfU)\rd V$以及$\int(\tau\cdot\bfU)_f\cdot\rd\bfS_f$,这些都是连续形式,离散形式你是怎么计算的

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

    I 1 条回复 最后回复
  • I 离线
    I 离线
    ice_flow
    在 中回复了 李东岳 最后由 编辑
    #5

    @李东岳
    老师好,我分开回答
    1.这里略去的原因是
    在总的能量方程中:
    71c307a8-9f1e-43ae-977b-cd57744ed3fa-image.png
    如果不考虑热源、辐射、外力和温度变化。方程可以写成
    1acb0d0e-92ac-4176-a4f4-f1fce2d8b804-image.png
    再考虑动量方程,就得到
    0abacad2-6fcd-4490-bb02-3aa11020d20e-image.png
    因为不可压缩,所以这项就为零,省略去了。
    2.离散的形式我没有自己展开,使用的下面代码,这是体积分

    // 计算应变速率张量的偏量(deviatoric part of the strain rate tensor)
    volTensorField devD = dev(gradU);
    
    // 计算粘性应力张量
    volTensorField tau = mu * devD;
    
    // 计算粘性功率密度
    volScalarField viscousPowerDensity = U & fvc::div(tau);
    
    // 计算整个计算域的粘性功率(体积分)
    scalar totalViscousPowerVolume = 0.0;
    forAll(viscousPowerDensity, cellI)
    {
        scalar cellVolume = mesh.V()[cellI];
        totalViscousPowerVolume += viscousPowerDensity[cellI] * cellVolume;
    }
    
    Info << "Total viscous power in the domain (volume integral): " << totalViscousPowerVolume << endl;
    

    这部分是面积分,有点长

    // 计算粘性功率(面积分)
    scalar totalViscousPowerSurface = 0.0;
    
    // 定义入口ID
    label inletPatchID = mesh.boundaryMesh().findPatchID("inlet"); // 假设入口补丁名为 "inlet"
    
    forAll(mesh.boundaryMesh(), patchI)
    {
        const polyPatch& patch = mesh.boundaryMesh()[patchI];
        const word patchName = patch.name();
    
        const fvPatchVectorField& U_patch = U.boundaryField()[patchI];
        const fvPatchTensorField& tau_patch = tau.boundaryField()[patchI];
    
        scalar patchViscousPower = 0.0;
    
        forAll(patch, faceI)
        {
            const vector& Sf = patch.faceAreas()[faceI];
            const vector& U_face = U_patch[faceI];
            tensor tau_face;
    
            if (patchI == inletPatchID)
            {
                // 计算入口速度梯度的估计
                label cellI = patch.faceCells()[faceI];
    
                // 使用有限差分法计算速度梯度
                scalar dx = mesh.V()[cellI] / mag(Sf); // 单元在面法向量方向上的长度
                tensor gradU_approx = tensor::zero;
                gradU_approx.xx() = 2 * U_face.x() / dx; // x 方向上的速度梯度
                gradU_approx.yy() = 2 * U_face.y() / dx; // y 方向上的速度梯度
                gradU_approx.zz() = 2 * U_face.z() / dx; // z 方向上的速度梯度
                //Info << "dx: " << dx << endl;
                tau_face = (2.0/3.0) * mu * gradU_approx;
            }
            else
            {
                tau_face = tau_patch[faceI]; // 正常计算
            }
    
            scalar viscousPowerFace = (tau_face & U_face) & Sf;
            patchViscousPower += viscousPowerFace;
    
            // 输出壁面上的速度梯度和粘性应力张量的值
            if (patchName == "inlet")
            {
                Info << "patch: " << patchName << ", face: " << faceI << endl;
                Info << "U_face: " << U_face << endl;
                Info << "tau_face: " << tau_face << endl;
                Info << "Sf (face normal vector): " << Sf << endl;
    			
                Info << "viscousPowerFace: " << viscousPowerFace << endl;
            }
        }
    
        totalViscousPowerSurface += patchViscousPower;
        Info << "Patch: " << patchName << ", Integrated viscous power: " << patchViscousPower << endl;
    }
    
    1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 编辑
    #6

    $\nabla\cdot(\tau\cdot\bfU)$这一项,一般只有在超音速的时候才会考虑贡献

    代码我粗略看了一下,为什么inlet要单独计算?另外你写成数学形式更好debug。不过数学形式很简单,所以大概率还是代码里面可能有问题需要debug

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

    I 1 条回复 最后回复
  • 李东岳李 李东岳 被引用 于这个主题
  • I 离线
    I 离线
    ice_flow
    在 中回复了 李东岳 最后由 编辑
    #7

    @李东岳
    谢谢老师,一开始我认为是入口的速度梯度计算的不准确,所以用差分方法直接计算。后面对照下看来是接近的。
    我认为可能是不可压缩的算法里不考虑严格的能量守恒,所以fb4e0ad7-cdcb-4682-ab71-5ada18146f9d-image.png 直接计算并不为0.
    但是上面公式推导中使用高斯方法转换体面积分的时候默认了不可压缩时这项为零。应该写出完整的形式计算0ceb3ad3-73d3-4c9e-81b8-f3f473dfcbbb-image.png

    Total viscous power in the domain (volume integral): -1.50451907
    Total integrated tau : gradU: 1.48509576
    Total integrated viscous power (surface): 0.00384099619
    

    这样计算后数值是接近的,等稳定后误差应该还会减小。

    1 条回复 最后回复

  • 登录

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