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
28 帖子 5 发布者 19.4k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • D 离线
    D 离线
    DY大世界
    写于2020年8月14日 02:11 最后由 编辑
    #1

    在controldict文件中添加了grad(U)字典了,想看加速度场的云图,这里grad(U)有8个magnitude,这是表示什么意思,想看加速度应该选择哪一个?

    grad.png

    史 1 条回复 最后回复 2020年8月14日 09:17
  • 李 在线
    李 在线
    李东岳 管理员
    写于2020年8月14日 02:43 最后由 编辑
    #2

    @DY大世界 在 如何看流场中的加速度云图? 中说:

    想看加速度应该选择哪一个?

    gradU是二阶张量,9个分量。
    什么是加速度...

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

    D 2 条回复 最后回复 2020年8月14日 02:47
  • D 离线
    D 离线
    DY大世界
    在 2020年8月14日 02:47 中回复了 李东岳 最后由 编辑
    #3

    @东岳 想看一下加速度云图应该怎么设置

    1 条回复 最后回复
  • D 离线
    D 离线
    DY大世界
    在 2020年8月14日 07:34 中回复了 李东岳 最后由 编辑
    #4

    @东岳 感谢李老师的解答:146:

    1 条回复 最后回复
  • 李 在线
    李 在线
    李东岳 管理员
    写于2020年8月14日 07:37 最后由 编辑
    #5

    额,不好意思,没太看懂你的加速度是什么?加速度是怎么计算的啊?grad(U)不是加速度

    :xinlei:

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

    1 条回复 最后回复
  • 史 离线
    史 离线
    史浩 神
    在 2020年8月14日 09:17 中回复了 DY大世界 最后由 编辑
    #6

    @DY大世界 加速度是速度对时间的导数,应该是ddt(U)。grad(U)是空间的导数,相当于速度的梯度

    让我们随波逐流

    李 1 条回复 最后回复 2020年8月14日 09:20
  • 李 在线
    李 在线
    李东岳 管理员
    在 2020年8月14日 09:20 中回复了 史浩 最后由 编辑
    #7

    @史浩 谢谢谢谢,我在NS方程笔记里面还写过,自己都给忘了 :zoule: 嗯,就是U的物质导数

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

    史 1 条回复 最后回复 2020年8月14日 09:58
  • 史 离线
    史 离线
    史浩 神
    在 2020年8月14日 09:58 中回复了 李东岳 最后由 编辑
    #8

    @东岳 你这一提醒,我发现我上面的好像错了。这里说的加速度应该指的是物质导数,物质导数和局部导数有如下关系
    932fba42-a347-454a-92ee-07a07b9fb11e-image.png
    我上面写的fvc::ddt(U)只是其中的局部导数。
    那问题来了,在OpenFOAM中怎么求物质导数?下面的公式求物质导数看起来有点土

    DUDt=fvc::ddt(U)+fvc::div(phi, U)
    

    让我们随波逐流

    Y 1 条回复 最后回复 2020年8月17日 07:07
  • Y 离线
    Y 离线
    Yu_Tian
    在 2020年8月17日 07:07 中回复了 史浩 最后由 编辑
    #9

    @史浩 您好,同求如何查看电场中的电场线云图,是对电场强度Ue求梯度,grad(U),我想问下这个具体操作应该是怎么写进例子中,在哪个文件中补充的具体命令是什么?可不可以给个样板,谢谢

    永远学习,永远进步

    史 1 条回复 最后回复 2020年8月17日 07:39
  • 史 离线
    史 离线
    史浩 神
    在 2020年8月17日 07:39 中回复了 Yu_Tian 最后由 编辑
    #10

    @Yu_Tian 你说的是电场的streamline是么?是下图这种效果么?
    14e305f2-ae38-4c30-949f-a97c652498cc-image.png
    这个直接用电场强度矢量做流线图就可以得到,不用再求导了

    让我们随波逐流

    Y 3 条回复 最后回复 2020年8月17日 08:40
  • Y 离线
    Y 离线
    Yu_Tian
    在 2020年8月17日 08:40 中回复了 史浩 最后由 编辑
    #11

    @史浩 对对对,是想做出这个图,但是我采用的openfoam2.1.1版本的interFoamEHD求解器,里面的文件只有这些,其中有电压Ue,没有电场强度E,所以想通过对电压求解,是不是应该求梯度b50cc161-7835-41fa-ad8a-9223fe89942d-image.png

    永远学习,永远进步

    1 条回复 最后回复
  • Y 离线
    Y 离线
    Yu_Tian
    在 2020年8月18日 02:21 中回复了 史浩 最后由 编辑
    #12

    @史浩 或者请教一下,这个图里的电场强度是怎么得到的?有没有例子可以分享一下:140: :140:

    永远学习,永远进步

    史 1 条回复 最后回复 2020年8月20日 11:35
  • 史 离线
    史 离线
    史浩 神
    在 2020年8月20日 11:35 中回复了 Yu_Tian 最后由 编辑
    #13

    @Yu_Tian 电场强度是电势(电压)的梯度

    E = fvc::grad(Ue)  // Electric field intensity
    j = sigma*E        // Current density, sigma--electric conductivity
    

    让我们随波逐流

    Y 1 条回复 最后回复 2020年8月22日 02:43
  • Y 离线
    Y 离线
    Yu_Tian
    在 2020年8月22日 02:43 中回复了 史浩 最后由 编辑
    #14

    @史浩 感谢回答,受到您的提示后,我采用后处理函数postProcess -func "grad(Ue)",确实得到了电场强度,但是我做了一下电场强度的矢量图,好像方向不太对,如下图所示,背景的云图是电势的分布,上面红色为正电极,下面蓝色为0电位,电场强度的方向不应该是从上指向下面吗?现在方向是不是反了?要不要加一个负号?但是postProcess -func "-grad(Ue)"这种表达又不满足形式要求,这个应该怎么做呢?谢谢:140:
    1684eb8f-70ca-462f-9b12-d4bd68dda3a9-image.png

    永远学习,永远进步

    史 1 条回复 最后回复 2020年8月22日 11:17
  • 史 离线
    史 离线
    史浩 神
    在 2020年8月22日 11:17 中回复了 Yu_Tian 最后由 编辑
    #15

    @Yu_Tian 抱歉,前面的公式少打了一个负号-,不过你已经找到这个错误了。
    postProcess这个东西我还没用过,有空研究研究,你看看下面这种书写格式行不行

    postProcess -func "grad(-1.0*Ue)"
    

    当时我直接写在程序里面了,把他当成一个结果输出了

    让我们随波逐流

    Y 1 条回复 最后回复 2020年8月24日 03:52
  • Y 离线
    Y 离线
    Yu_Tian
    在 2020年8月24日 03:52 中回复了 史浩 最后由 编辑
    #16

    @史浩感谢回答,但是这样也不行,我也在好奇说这个postProcess函数能不能进行这种加减乘除的运算?或者正确的表达方式是什么样的?不知道您上面提到的那种方式代码是在哪里使用的呢?是不是可以采用您的方式实现呢?
    19254f98-c2ec-4e39-9603-be94078dfb23-image.png

    永远学习,永远进步

    史 1 条回复 最后回复 2020年8月28日 06:46
  • 闻 离线
    闻 离线
    闻久STU
    写于2020年8月24日 09:29 最后由 编辑
    #17

    grad(U)是除以距离,应该看ddt吧

    D 1 条回复 最后回复 2020年8月25日 14:59
  • D 离线
    D 离线
    DY大世界
    在 2020年8月25日 14:59 中回复了 闻久STU 最后由 编辑
    #18

    @闻久STU 收到~感谢大神指点!:xiexie:

    1 条回复 最后回复
  • 史 离线
    史 离线
    史浩 神
    在 2020年8月28日 06:46 中回复了 Yu_Tian 最后由 编辑
    #19

    @Yu_Tian 在createFields.H文件中,添加变量声明

    volVectorField js
    (
        IOobject
        (
            "js",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::AUTO_WRITE
        ),
        -sigma*fvc::grad(Ue)
    );
    

    在求解完Ue后,更新一下js

    js=-sigma*fvc::grad(Ue);
    

    我一般这样通过求解器实现的。
    也可以用postProcess实现,但是需要具体看一下他的源码,这个我不是很熟悉
    放一个我之前写过的一个求边界“axis”上的最大速度,这个是参考之前版本的calc方法写的,后来calc全部整合到postProcess中了,但是在OpenFOAM 6里面,按照calc的思虑一样可以用

    #include "timeSelector.H"
    #include "calcType.H"
    void calc(const argList& args, const Time& runTime, const fvMesh& mesh)
    {
    IOobject UHeader
    (
    "U",
    runTime.timeName(),
    mesh,
    IOobject::MUST_READ
    );
    if (phiHeader.headerOk())
    {
    volVectorField U(UHeader, mesh);
    forAll(U.boundaryField(), patchi)
    {
    const fvPatchVectorField & pU = U.boundaryField()[patchi];
    const fvPatch & pU_B = pU.patch();
    if(pU_B.name() == "axis")
    {
    Foam::Info<< "mag(U) max : " << max(mag(pU)).value() << Foam::endl;
    break;
    }
    }
    }
    else
    {
    Foam::Info<< "No U exists!" << Foam::endl;
    }
    Info<< "\nEnd\n" << endl;
    }
    int main(int argc, char *argv[])
    {
    #include "setRootCase.H"
    #include "createTime.H"
    Foam::instantList timeDirs = Foam::timeSelector::select0(runTime, args);
    #include "createNamedMesh.H"
    forAll(timeDirs, timeI)
    {
    runTime.setTime(timeDirs[timeI], timeI);
    Foam::Info<< "Time = " << runTime.timeName() << Foam::endl;
    mesh.readUpdate();
    calc(args, runTime, mesh);
    Foam::Info<< Foam::endl;
    }
    Foam::Info<< "End\n" << Foam::endl;
    return 0;
    }

    让我们随波逐流

    Y 1 条回复 最后回复 2020年8月30日 07:09
  • Y 离线
    Y 离线
    Yu_Tian
    在 2020年8月30日 07:09 中回复了 史浩 最后由 编辑
    #20

    @史浩 好的,感谢大神:146: :146: :146: 我仔细研究一下

    永远学习,永远进步

    1 条回复 最后回复
2020年8月14日 02:11

5/28

2020年8月14日 07:37

未读 23
2020年11月10日 08:04
  • 登录

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