@luofq-sysu 第一个问题:是的,我取的是流向速度时均值。
第二个问题,是的,是不同流向位置。我当时做的是一个平板流动,平板上流向的网格113个。150个不是一个必须的值,看你算例的情况跟需求。我的是二维流动,因此没有展向的问题。
fangyuanaza
帖子
-
后处理得到momentum thickness -
后处理得到momentum thickness@luofq-sysu 实现了,我意识到thickness 只能完成模拟后计算得到,因此,我是按照公式用python计算的。基本想法是在我感兴趣的区域监测了150个垂直于壁面的线,监测密度与速度。根据公式 得到每个位置的thickness,然后连接。具体做法是
1: 用python写一个sampleDict(不想手动写150个位置的监测信息)
2: 用python读取每个位置的信息,根据公式计算thickness. -
考虑动量源项后残差变差@李东岳 此问题已解决,做了很多测试后发现,不是残差不好没收敛的问题,而是后处理的问题。本算例计算域在利用对称边界条件后仅为原算例的1/4.而要监测的为duct中心的流动状况。也就是说监测点在计算域边界,因为计算机误差,无法精确取到这个点,计算机会进行插值,导致了这么多spikes。将监测点往计算域内部靠近能解决这个问题。
关于残差,尽管满足y+<1,但是有些监测的物理量的残差不乐观,这个可以加密网格解决。我在截面加密一倍网格后可以解决。但是个人认为没有必要。因为残差不好的物理量都是本身数值很小的,比如压力,Uy, Uz。本身这些量接近于零,因此数值的一点点波动,相对残差会比较大。这些并不影响最终结果。
-
python进行OpenFOAM流场后处理@田畔的风 感谢您的回复~
不是纵横比的问题,调整纵横比之后:
而是因为计算域边界是曲线,当调用tricontourf时,在一个矩形域内进行了插值,导致边界变形,成了直线。同理,用contourf时,首先需要对mesh进行插值,也会有同样的问题。
这个问题已经解决了,对于计算域的两个block, 分开处理。先reshapre到对应的block网格,然后用contourf来画。可以得到物理量的云图。
-
python进行OpenFOAM流场后处理@田畔的风 这个流场图真的很漂亮。请教一下老师,我的网格是O型+H型,Fortran代码算的,能导入paraView。想请教一下,这种情况如何导入到python画图呢?如果直接用contourf 或者tricontourf都会导致网格变形。比如在paraview中为:
在python中直接
ax1.tricontourf(x,y, u,linewidth=0.25, levels=levels,cmap='coolwarm',vmin=0, vmax=1),显示出来为:
造成的原因可能是因为您说的Matplotlib只能处理三角形的网格。想请问在不清楚网格具体信息的情况下,能不能从paraview导出成三角网格?尝试过您代码中的Slice,但由于本身是2D,不能切片。请问有什么建议么? -
考虑动量源项后残差变差@李东岳 看了您的算例设置以后发现添加源项的方式是一样的,您的算例是准直接模拟,所以会有细小的涡。我的就是steady的RANS,所以流场比较平均
-
考虑动量源项后残差变差@李东岳 谢谢李老师的回复!一般圆管临界雷诺数是2000-2600, 这个雷诺数是5600. 所以认为应该是能发展成湍流的如果不用周期边界条件,发现>70h 才发展为完全湍流。从tke的分布判断的。除了这些波动,整体趋势实际上与DNS数据非常接近。速度流场看起来正常。模拟的四分之一个计算域,可以看到转角的流动速度更小:
-
考虑动量源项后残差变差请教各位老师,最近模拟一个矩形管道流动,结果与DNS对比。刚开始采用一般性边界条件,入口匀速流动,出口定压。但是因为流动雷诺数很低,需要很长的区间发展成完全的湍流,但是残差情况较好,如下:
因此后来改成周期性边界条件cyclic。在控制方程中添加动量源项来驱动流动,通过fvOptions添加momentumSource,发现这样残差变差:
体现在模拟结果上为,速度曲线很多波动:
请教是什么原因呢? -
python进行OpenFOAM流场后处理@李东岳 是的,我当时不清楚该怎么做来用python处理整个流场数据,最后是用paraview导入tecplot数据,然后导出成csv等方便读取数据的格式,用python进行处理。因为tecplot数据结构是分块的,而csv等格式是坐标点对应物理量的形式,方便读取。
第二个可能对大家有用的地方在于:有时候tecplot数据导入paraview会一直卡顿,无法完全显示,需要删掉一些符号:
• X, Y and Z array headers MUST NOT have other characters like [mm]. It must be simply “x”, “y” and “z”.Paraview also accepts this: “Z, mm” and this “x/c” • This parameter is not allowed by Paraview (it must be deleted from the file): “ZONETYPE=…” • “STRANDID” and “SOLUTION TIME” are currently unsupported by Paraview but they can be left in the file (it gives only a warning message) • Comments are allowed by using “#” (like Python)我当时是删除了ZONETYPE, 才能导入paraview的。
-
python进行OpenFOAM流场后处理@chszkc 感谢提供这个资源,试一试~
-
paraFOAM时的dlopen error@hy1112006 我有点记不清了,现在是可以打开的。可能是路径中的dyfluid-7 中的-不易识别?你可以试一试换一个路径编译,或者改成dyfluid_7试一试
-
python进行OpenFOAM流场后处理请教各位老师,在做几组流场图对比的时候,不用软件导出来的图,而是导出数据,用python进行绘制,改如何做呢?比如tecplot形式生成的数据。
-
如何在docker上同时运行python和open foam是,问题是如何让新装的python和open foam在一个docker 的container里面,按官网教程装好open foam后,要在生成的container里面加上python,用代码添加,这部分不知道怎么处理,请问有经验分享么?感觉docker是好,但是不太用户友好
-
如何监测边界与平面相交线的参数@李东岳 感谢老师的回答,抱歉才看到回信,最终解决办法是强制读取边界信息,检测距离边界最近的网格点数据并给出。黄色震荡部分是因为插值了内部网格点和边界值的结果。
-
如何在docker上同时运行python和open foam请教各位老师,有没有尝试过在Mac 系统上 M1 芯片上跑过python与openfoam. 用python命令自动运行openfoam. 我目前是在电脑上用docker成功安装了openfoam7,能运行算例,也能编译新的模型,接着在电脑上安装了anaconda2 和anaconda3,因为有时候需要调试旧的代码。在终端测试2和3都能用,但是进入open foam的环境下是没法运行anaconda的,根本原因应该是这三个软件不在一个container里面。那么如何在现有的安装了openfoam的container下安装python2&3,能让python脚本运行open foam算例呢?
-
如何监测边界与平面相交线的参数请教各位老师,我设置了一个hump算例,需要监测其表面压力与摩擦力分布。其中一个方法是在paraview中实现,仅选中hump底面,用plotoverintersection 可以给定一个平面从而在相交曲线上plot实现。但是我需要这是一个自动化的过程,希望在sampleDict中实现,因此,我取出intersection的坐标,直接剪测这些点。出现的问题是这两种方法结果不一致,后者曲线震荡,怀疑是给的点不精确,给出的监测结果是边界与内部网格插值结果,这种情况怎么处理呢?请各位老师指教。下图红线是前者方法画的摩擦力系数图,黄色线是用后者方法画的:
-
如何在湍流模型中读取压力场@fangyuanaza 解决了这个问题,代码分享如下,以免大家有需要:
const volScalarFields& p = this->db().objectRegistry::lookupObject<volScalarField>("p")
经过Info输出发现,确实是每一步的压力场
-
如何在湍流模型中读取压力场@李东岳 学生也include 了header volFields.H, 应该就是两步,一是#include “volFields.H”, 第二是:
volScalarField p ( IOobject ( "p", this->runTime_.timeName(), this->mesh_, IOobject::MUST_READ, IOobject::AUTO_WRITE ), this->mesh_ );
控制方程也求解了每步的pressure,不清楚问题出在哪里,请老师指点一下
-
如何在湍流模型中读取压力场@李东岳 有的,计算结果中
Time = 1 GAMG: Solving for p, Initial residual = 1, Final residual = 0.00833422.
从残差控制可见求解了控制方程的压力
-
如何在湍流模型中读取压力场请教各位老师~ 想在湍流模型中读取压力场,进行运算后置入湍流输运方程中,采取createField.H中的形式,如下:
volScalarField p ( IOobject ( "p", this->runTime_.timeName(), this->mesh_, IOobject::MUST_READ, IOobject::AUTO_WRITE ), this->mesh_ );
可以编译通过,但是运行时候报错:
cannot find file".../../case/1/p".目前是steady case, 1100步保存一次结果。 尝试过用READ_IF_MODIFIED. NO WRITE,都不行。受编程指南启发,尝试加上
dimensionedScalar ( "p", dimensionSet (1,-1,-2,0,0,0,0), lookupObject<volScalarField>("p") )
报错,没有lookupObject. 请问该如何解决这个问题?p应该是public变量,而且确实在不同时间步都储存了。