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. fvc::grad(CenPot)为什么算出来不对??

fvc::grad(CenPot)为什么算出来不对??

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

    各位大佬,有一个问题困扰我好久了,就是已知离心力Fcentrifugal=- fvc::grad(CenPot),也就是离心力可以写成势函数CenPot=0.5omega^2(x^2+y^2)的梯度格式,目前我已经验证过CenPot这个量求出来是没问题的,关键就在于OF里面求一次梯度直接就求错了,求得非常离谱。
    理论上求梯度,x方向梯度应该是omega^2*x,y方向梯度应该是omega^2*y吧,omega只有z分量,并且已经排除了网格、边界条件问题,网格用的结构化质量没毛病。求出来y方向梯度是正确的,x方向就不对,结果如下:
    056cf42e-8915-49f8-bde9-d43d068d703e-image.png
    上图是-fvc::grad(CenPot)求出来的,居然是对称的???
    b87502ba-42bc-4a7b-bded-10c9c0ec6d77-image.png
    这是标准的离心力,非常正确越往右边越大
    9c19d774-5220-4f22-b56f-81fe9e17f59e-image.png
    这是标准的离心势,也是没毛病
    那为啥就是OF算梯度算出来不对呢??
    这是我计算时梯度离散代码:无论是 Gauss linear还是leastSquares算出来都不对

    gradSchemes
    {
        default         Gauss linear;
    }
    

    这是我求解器源码:

    Info<< "Reading field CenPot\n" << endl;//读取离心力势
    volScalarField CenPot
    (
        IOobject
        (
            "CenPot",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::AUTO_WRITE
        ),
        1 * SRF->CenPot()
    );
    
    volVectorField GradCenPot
    (
        IOobject
        (
            "GradCenPot",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::AUTO_WRITE
        ),
        - fvc::grad(CenPot)
    );
    

    CAS-IET

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

    各位大神,帮帮我吧@李东岳 @尚善若水 @coolhhh @学流体的小明

    CAS-IET

    1 条回复 最后回复
  • C 离线
    C 离线
    coolhhh 神
    在 中回复了 东方白杨 最后由 编辑
    #3

    @东方白杨 不清楚什么原因,你看在程序最后再重新计算一遍保存,看看结果有无区别

    GradCenPot = - fvc::grad(CenPot);
    GradCenPot.write();
    
    1 条回复 最后回复

  • 登录

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