如何看流场中的加速度云图?
-
在controldict文件中添加了grad(U)字典了,想看加速度场的云图,这里grad(U)有8个magnitude,这是表示什么意思,想看加速度应该选择哪一个?
-
-
@东岳 想看一下加速度云图应该怎么设置
-
@东岳 感谢李老师的解答
-
额,不好意思,没太看懂你的加速度是什么?加速度是怎么计算的啊?grad(U)不是加速度
-
@DY大世界 加速度是速度对时间的导数,应该是ddt(U)。grad(U)是空间的导数,相当于速度的梯度
-
@史浩 谢谢谢谢,我在NS方程笔记里面还写过,自己都给忘了
嗯,就是$\bfU$的物质导数
-
@东岳 你这一提醒,我发现我上面的好像错了。这里说的加速度应该指的是物质导数,物质导数和局部导数有如下关系
我上面写的fvc::ddt(U)
只是其中的局部导数。
那问题来了,在OpenFOAM中怎么求物质导数?下面的公式求物质导数看起来有点土DUDt=fvc::ddt(U)+fvc::div(phi, U)
-
@史浩 您好,同求如何查看电场中的电场线云图,是对电场强度Ue求梯度,grad(U),我想问下这个具体操作应该是怎么写进例子中,在哪个文件中补充的具体命令是什么?可不可以给个样板,谢谢
-
@Yu_Tian 你说的是电场的streamline是么?是下图这种效果么?
这个直接用电场强度矢量做流线图就可以得到,不用再求导了
-
@史浩 对对对,是想做出这个图,但是我采用的openfoam2.1.1版本的interFoamEHD求解器,里面的文件只有这些,其中有电压Ue,没有电场强度E,所以想通过对电压求解,是不是应该求梯度
-
@史浩 或者请教一下,这个图里的电场强度是怎么得到的?有没有例子可以分享一下
-
@Yu_Tian 电场强度是电势(电压)的梯度
E = fvc::grad(Ue) // Electric field intensity j = sigma*E // Current density, sigma--electric conductivity
-
@史浩 感谢回答,受到您的提示后,我采用后处理函数postProcess -func "grad(Ue)",确实得到了电场强度,但是我做了一下电场强度的矢量图,好像方向不太对,如下图所示,背景的云图是电势的分布,上面红色为正电极,下面蓝色为0电位,电场强度的方向不应该是从上指向下面吗?现在方向是不是反了?要不要加一个负号?但是postProcess -func "-grad(Ue)"这种表达又不满足形式要求,这个应该怎么做呢?谢谢
-
@Yu_Tian 抱歉,前面的公式少打了一个负号
-
,不过你已经找到这个错误了。
postProcess这个东西我还没用过,有空研究研究,你看看下面这种书写格式行不行postProcess -func "grad(-1.0*Ue)"
当时我直接写在程序里面了,把他当成一个结果输出了
-
@史浩感谢回答,但是这样也不行,我也在好奇说这个postProcess函数能不能进行这种加减乘除的运算?或者正确的表达方式是什么样的?不知道您上面提到的那种方式代码是在哪里使用的呢?是不是可以采用您的方式实现呢?
-
grad(U)是除以距离,应该看ddt吧
-
@闻久STU 收到~感谢大神指点!
-
@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; }
-
@史浩 好的,感谢大神
我仔细研究一下
-
@史浩 史老师,还有一个问题想请教一下, 就是在做这种矢量图和流线图的时候,在我模型里有局部加密的网格,这种怎么能得到均匀分布的矢量图和流线图,需要怎么设置?
-
@Yu_Tian 我这个图就是局部网格加密(AMR)结果的后处理图。对于局部网格加密算例,流线图没有影响,矢量图确实会在加密网格区域比较密集。矢量图的这个问题我也没找到比较好的处理方法,如果你有比较好的方法可以分享一下
-
@史浩 好的,感谢史老师,我看到了一个在tecplot里面进行后处理的,是在原计算域的基础上重新建了一个均匀网格,然后进行插值得到一个新的模型,然后矢量图就均匀了,但存在的一个问题就是可能会不会失真,我把链接放了上来,您评价一下。https://www.bilibili.com/video/av370688662
-
@Yu_Tian 感谢分享,非常棒!学习了!这个失真的问题肯定会存在,只要不影响你想讨论的结果,都是可以接受的
-
@史浩 好的,感谢史老师,还有一个问题想请教,就是前面跟您学习了在求解器里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; }
-
@Yu_Tian 都不需要,你只需要添加Ue的相应插值格式和求解器参数即可。也不用添加一个初始场,因为一开始你设置的是NO_READ属性,程序不会读初始场
-
@史浩 好的,感谢感谢
-
@史浩史老师,help,帮忙看一下呗
https://www.cfd-china.com/topic/4247/流电耦合模型中边界条件的设置?_=1604991413128