Navigation

    CFD中文网

    CFD中文网

    • Login
    • Search
    • 最新

    如何看流场中的加速度云图?

    OpenFOAM
    5
    28
    3526
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • DY大世界
      DY大世界 last edited by

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

      grad.png

      史 1 Reply Last reply Reply Quote
      • 李东岳
        李东岳 管理员 last edited by

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

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

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

        CFD课程 改成线上了 http://dyfluid.com/class.html
        CFD高性能服务器 http://dyfluid.com/servers.html

        DY大世界 2 Replies Last reply Reply Quote
        • DY大世界
          DY大世界 @李东岳 last edited by

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

          1 Reply Last reply Reply Quote
          • DY大世界
            DY大世界 @李东岳 last edited by

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

            1 Reply Last reply Reply Quote
            • 李东岳
              李东岳 管理员 last edited by

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

              :xinlei:

              CFD课程 改成线上了 http://dyfluid.com/class.html
              CFD高性能服务器 http://dyfluid.com/servers.html

              1 Reply Last reply Reply Quote
              • 史
                史浩 讲师 @DY大世界 last edited by

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

                让我们随波逐流

                李东岳 1 Reply Last reply Reply Quote
                • 李东岳
                  李东岳 管理员 @史浩 last edited by

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

                  CFD课程 改成线上了 http://dyfluid.com/class.html
                  CFD高性能服务器 http://dyfluid.com/servers.html

                  史 1 Reply Last reply Reply Quote
                  • 史
                    史浩 讲师 @李东岳 last edited by

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

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

                    让我们随波逐流

                    Y 1 Reply Last reply Reply Quote
                    • Y
                      Yu_Tian @史浩 last edited by

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

                      永远学习,永远进步

                      史 1 Reply Last reply Reply Quote
                      • 史
                        史浩 讲师 @Yu_Tian last edited by

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

                        让我们随波逐流

                        Y 3 Replies Last reply Reply Quote
                        • Y
                          Yu_Tian @史浩 last edited by

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

                          永远学习,永远进步

                          1 Reply Last reply Reply Quote
                          • Y
                            Yu_Tian @史浩 last edited by

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

                            永远学习,永远进步

                            史 1 Reply Last reply Reply Quote
                            • 史
                              史浩 讲师 @Yu_Tian last edited by

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

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

                              让我们随波逐流

                              Y 1 Reply Last reply Reply Quote
                              • Y
                                Yu_Tian @史浩 last edited by

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

                                永远学习,永远进步

                                史 1 Reply Last reply Reply Quote
                                • 史
                                  史浩 讲师 @Yu_Tian last edited by

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

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

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

                                  让我们随波逐流

                                  Y 1 Reply Last reply Reply Quote
                                  • Y
                                    Yu_Tian @史浩 last edited by

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

                                    永远学习,永远进步

                                    史 1 Reply Last reply Reply Quote
                                    • 闻
                                      闻久STU last edited by

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

                                      DY大世界 1 Reply Last reply Reply Quote
                                      • DY大世界
                                        DY大世界 @闻久STU last edited by

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

                                        1 Reply Last reply Reply Quote
                                        • 史
                                          史浩 讲师 @Yu_Tian last edited by

                                          @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 Reply Last reply Reply Quote
                                          • Y
                                            Yu_Tian @史浩 last edited by

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

                                            永远学习,永远进步

                                            1 Reply Last reply Reply Quote
                                            • Y
                                              Yu_Tian @史浩 last edited by 李东岳

                                              @史浩 史老师,还有一个问题想请教一下, 就是在做这种矢量图和流线图的时候,在我模型里有局部加密的网格,这种怎么能得到均匀分布的矢量图和流线图,需要怎么设置?
                                              ac5ca5b2-1088-410f-a9fa-2383330611c4-image.png

                                              永远学习,永远进步

                                              史 1 Reply Last reply Reply Quote
                                              • 史
                                                史浩 讲师 @Yu_Tian last edited by

                                                @Yu_Tian 我这个图就是局部网格加密(AMR)结果的后处理图。对于局部网格加密算例,流线图没有影响,矢量图确实会在加密网格区域比较密集。矢量图的这个问题我也没找到比较好的处理方法,如果你有比较好的方法可以分享一下

                                                让我们随波逐流

                                                Y 1 Reply Last reply Reply Quote
                                                • Y
                                                  Yu_Tian @史浩 last edited by

                                                  @史浩 好的,感谢史老师,我看到了一个在tecplot里面进行后处理的,是在原计算域的基础上重新建了一个均匀网格,然后进行插值得到一个新的模型,然后矢量图就均匀了,但存在的一个问题就是可能会不会失真,我把链接放了上来,您评价一下。https://www.bilibili.com/video/av370688662

                                                  永远学习,永远进步

                                                  史 1 Reply Last reply Reply Quote
                                                  • 史
                                                    史浩 讲师 @Yu_Tian last edited by

                                                    @Yu_Tian 感谢分享,非常棒!学习了!这个失真的问题肯定会存在,只要不影响你想讨论的结果,都是可以接受的

                                                    让我们随波逐流

                                                    Y 1 Reply Last reply Reply Quote
                                                    • Y
                                                      Yu_Tian @史浩 last edited by

                                                      @史浩 好的,感谢史老师,还有一个问题想请教,就是前面跟您学习了在求解器里createFields.H额外定义了一个量(电场强度E)

                                                      Info<< "Reading field E\n" << endl;
                                                          volVectorField E
                                                          (
                                                              IOobject
                                                              (
                                                                  "E",
                                                                  runTime.timeName(),
                                                                  mesh,
                                                                  IOobject::NO_READ,
                                                                  IOobject::AUTO_WRITE
                                                              ),
                                                              -fvc::grad(Ue)
                                                          );
                                                      

                                                      ,在求解器.c文件里补充了求解梯度的方程,

                                                      E = -fvc::grad(Ue);
                                                      

                                                      这样在实例中0文件里添加了一个E的初始文件,

                                                      /*--------------------------------*- C++ -*----------------------------------*\
                                                      | =========                 |                                                 |
                                                      | \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
                                                      |  \\    /   O peration     | Version:  1.5-dev                               |
                                                      |   \\  /    A nd           | Web:      http://www.OpenFOAM.org               |
                                                      |    \\/     M anipulation  |                                                 |
                                                      \*---------------------------------------------------------------------------*/
                                                      FoamFile
                                                      {
                                                          version     2.0;
                                                          format      ascii;
                                                          class       volVectorField;
                                                          location    "0";
                                                          object      E;
                                                      }
                                                      // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
                                                      
                                                      dimensions      [1 1 -3 0 0 -1 0]; //kg*m*s^(-3)*A^(-1)
                                                      
                                                      internalField   uniform (0 0 0);
                                                      
                                                      boundaryField
                                                      {
                                                          upWall
                                                          {
                                                              type            zeroGradient;
                                                          }
                                                          downWall
                                                          {
                                                              type            zeroGradient;
                                                          }
                                                          rightWall
                                                          {
                                                              type            zeroGradient;
                                                          }
                                                          leftWall
                                                          {
                                                              type            symmetryPlane;
                                                          }
                                                          frontAndBack
                                                          {
                                                              type            empty;
                                                          }
                                                      }
                                                      
                                                      
                                                      // ************************************************************************* //
                                                      

                                                      还要不要在system中的fvSchemes和fvSolution对E做一些补充设置?比如下面这个

                                                          div(rho*phi,U)   Gauss upwind;
                                                      
                                                      E
                                                          {
                                                              solver          smoothSolver;
                                                              smoother        GaussSeidel;
                                                              tolerance       1e-08;
                                                              relTol          0;
                                                              nSweeps         1;
                                                          }
                                                      

                                                      永远学习,永远进步

                                                      史 1 Reply Last reply Reply Quote
                                                      • 史
                                                        史浩 讲师 @Yu_Tian last edited by

                                                        @Yu_Tian 都不需要,你只需要添加Ue的相应插值格式和求解器参数即可。也不用添加一个初始场,因为一开始你设置的是NO_READ属性,程序不会读初始场

                                                        让我们随波逐流

                                                        Y 2 Replies Last reply Reply Quote
                                                        • Y
                                                          Yu_Tian @史浩 last edited by

                                                          @史浩 好的,感谢感谢:146: :146: :146:

                                                          永远学习,永远进步

                                                          1 Reply Last reply Reply Quote
                                                          • Y
                                                            Yu_Tian @史浩 last edited by

                                                            @史浩史老师,help,帮忙看一下呗:140: https://www.cfd-china.com/topic/4247/流电耦合模型中边界条件的设置?_=1604991413128

                                                            永远学习,永远进步

                                                            1 Reply Last reply Reply Quote
                                                            • First post
                                                              Last post

                                                            CFD中文网 | 东岳流体 | 京ICP备15017992号-2