OpenFOAM

4.5k Topics 26.4k Posts
  • 1 Posts
    389 Views

    一般的openFOAM算例文件,时间步文件下就是场数据,而且场数据和网格点一般多,然而mutiRegions问题时间步文件下是region名称,而且场数据和region保持一致,这样导入的话,tecplot绘图会出现如下怪异场!微信图片_20201230134855.png

  • LES模拟两射流撞击

    23 Posts
    5k Views

    二维只是为了复现这篇文献,后面自己研究的话会做三维的

  • 如何在paraView中画出这样的图

    3 Posts
    1k Views

    感谢感谢,成功了

  • WSL2安装OpenFOAM

    10 Posts
    3k Views

    wsl是win模拟linux的api,就像wine一样。wsl2就是个虚拟机,不过经过微软优化,没其他虚拟机那么嗝应人。

    如果是升级失败,系统里应该有还原点,还原一下更新前的系统状态就好,不会擦除其他个人数据。

  • 13 Posts
    3k Views

    @队长别开枪 大佬大佬 感谢分享!!

  • 后处理新定义一个物理量问题

    3 Posts
    1k Views

    谢谢老师的回复,老师提供了一个可供一试的办法。这里给出一个使用 Python programmable filter 后处理的办法,粘贴在这,供参考。使用时需要VTK格式
    29a52e6c-72e1-4861-b38c-6733d4ea7b35-image.png

  • 7 Posts
    3k Views

    李老师您好,请问这个问题解决了吗?我也遇到类似的问题,就是只改湍流模型的名字,在编译的时候也出现了一些error

  • fsiFoam中的固体求解器

    7 Posts
    2k Views

    @Stan同学 别邮箱请教了,发布在论坛估计能更快得到解答,祝好

  • rhoSimpleFoam求解器算例

    3 Posts
    2k Views

    非常感谢!我更新了下方程33:xiexie:

    方程22是严谨的情况下的方程,但是22并不能用,因为$A^{n+2}$未知,所以还是要把方程22参考方程14那样线性化一下。就是方程23

  • 5 Posts
    2k Views

    @yhdthu 谢谢!

  • 3 Posts
    1k Views

    @刘雄国 哈哈哈好没事,反正看得懂的。嗯应该是进程。
    MPI或者OpenMP并不影响这个问题,反正都是两边交流信息,所以其实影响这个问题的是第二个。如果离散相分数很低,考虑单向耦合,或者二向耦合(连续相->离散相,离散相->离散相),那么可以把离散相和连续相分开,因为只需要把所有的连续相的流动汇总,并加给离散相就好了。
    如果是四向耦合,是不是大概这样:

    如果在每个时间步骤,用一个进程把所有的流场信息都集中起来供其他颗粒跟踪的进程去访问,并且还需要把所有的离散相信息汇总给连续相,那么通信量太大了。 即使把每个进程跟踪的颗粒都加上label,只定点访问某些进程的信息,似乎通信量也还挺大问题。 如果把流场的作为主进程,跟踪颗粒的作为slave进程,如果这个master/slave比是定的,那么也是之前的那个效率问题。
  • 自定义求解器运行时报错

    2 Posts
    741 Views

    信息太少,没法判断。可能性太多。像这个cfd online提供了这么多信息,依然是自己排查出来的。

    信息少就没法定位错误。可是都贴也太多。所以“知道提供什么信息”本身就是一件比较有挑战性的事情。然后现在好多问题是,了解的足够了就不会问了,了解的不足够又不知道怎么问,加油:huahua:

  • 5 Posts
    2k Views

    前辈,麻烦问一下,您的问题解决了吗?我刚接触这块知识,也是不会设置颗粒初始位置。(已知初始浓度)不知您有什么好的解决办法?

  • 12 Posts
    3k Views

    @Fu 是的,大兄弟。我其他文件中改参数了,但forceCoeffs中忘改了,都改后已经可以算了。谢谢哈!

  • 5 Posts
    2k Views

    感谢分享!

  • foamDataToFluent问题

    1 Posts
    517 Views

    请问foamDataToFluent如何用来转换组分量 比如CO2 H2O等转换 U P等都没问题 但是species fluent一直读不出来
    https://github.com/OpenFOAM/OpenFOAM-2.4.x/blob/master/applications/utilities/postProcessing/dataConversion/foamDataToFluent/fluentUnitNumbers.txt

  • CFD中的大涡模拟

    1 Posts
    1k Views

    测试排版用

    引言

    湍流运动是目前计算流体力学中困难最多因此也最活跃的领域之一。当湍流存在,则住在其他相关的流动现象,并引致能量耗散、混合以及传热。没有三维的涡,则没有真正的湍流,因为只有在三维的流动中,涡旋才能进行伸展并产生新的涡旋。目前可采用的数值计算方法分为三类:直接模拟(Direct Numerical Simulation,DNS)、大涡模拟(Large Eddy Simulation,LES)和雷诺时均法(Reynolds-averaged Navier–Stokes,RANS)。RANS经过长期的发展,已经非常成熟。但RANS通过将速度进行平均后,并不能捕获湍流中的小涡结构。同时,这些小涡基本是各项同性的。另一方面,从主流中抽取能量的大涡却是各向异性,并且其和计算域的几何、边界、体积力高度关联。在使用RANS的时候,整个流场中必须使用同一个湍流模型对各种尺度下的湍流进行解析,但通常大涡和小涡的表现是不同的。因此研究学者对一种更完善的模型进行了探索。

    不同于RANS,LES对大涡进行解析的同时对小涡进行模化。LES认为大涡直接受边界条件的影响因此对其解析,但小涡是各项同性的因此他们表现相同,可以进行模化。由于LES把小涡进行了模化,因此最小的网格单元需要大于Kolmogorov尺度(最小的涡旋尺度)。同时LES的时间步可以比DNS大的多。因此,对于给定的计算资源,相对于DNS,LES可以计算更大雷诺数的算例。另外,不同于RANS中平均的概念,LES使用的是一种空间滤波技术。LES模型的概念如下:

    首先要确定一种滤波函数和截止尺度$\Delta$。这样,就可以对所有大于截止尺度的涡进行非稳态计算;

    使用滤波函数对依时变量进行空间滤波操作,在这一步,小于截止尺度的涡被过滤掉;

    在解析大涡和模化小涡的数学操作中,会产生一个亚格子尺度应力项(Sub-grid-scale Stress,SGS),亚格子尺度应力需要通过SGS模型来模化;

    在LES中,截止尺度是用来表明“多大的涡才算大涡”的概念。其可以为任意大小,但是选择比网格还要小的截止尺度是没有意义的。在笛卡尔网格下,最简单的截止尺度这样计算:
    \begin{equation}
    \Delta=\sqrt[3]{\delta x \delta y \delta z}
    \end{equation}
    其中$\delta x$等为笛卡尔网格下网格单元的边长。其他不同的截止尺度计算方法还有最大边长法、普朗特混合长法等。

    方程与模型 滤波N-S方程

    笛卡尔坐标下的连续性方程为:
    \begin{equation}
    \frac{\partial \rho}{\partial t}+\nabla \cdot(\rho \mathbf{U})=0
    \end{equation}
    对$\nabla \cdot(\rho \mathbf{U})$进行滤波后有滤波连续性方程:
    \begin{equation}
    \frac{\partial \rho}{\partial t}+\nabla \cdot(\rho \mathbf{\bar{U}})=0
    \end{equation}
    其中$\mathbf{\bar{U}}$为滤波后的速度。且有:
    \begin{equation}
    \mathbf{U}=\mathbf{\bar{U}}+\mathbf{U'}
    \end{equation}
    其中$\mathbf{U'}$为残余速度,且$\mathbf{U'} \neq 0$。下图表示的是一个对$x$分量速度进行高斯滤波之后的滤波速度分量和残余速度分量的示意图。
    U.jpg
    另外,有不可压缩动量方程为:
    \begin{equation}
    \frac{\partial \mathbf{U}}{\partial t}+\nabla \cdot (\mathbf{U} \mathbf{U})=-\nabla \frac{p}{\rho}+\nabla \cdot(\nu \nabla \mathbf{U})
    \label{mom}
    \end{equation}
    同理有:
    \begin{equation}
    \frac{\partial \mathbf{\bar{U}}}{\partial t}+\nabla \cdot (\overline{\mathbf{U} \mathbf{U}})=-\nabla \frac{\bar{p}}{\rho}+\nabla \cdot(\nu \nabla \mathbf{\bar{U}})
    \label{momF}
    \end{equation}
    在方程\eqref{momF}中,除了待求的$\bar{\mathbf{U}}$和$\bar{p}$外增加了一个未知量$\overline{\mathbf{U} \mathbf{U}}$。为了将问题简化,把方程\eqref{momF}的第二项进行变化:
    \begin{equation}
    \nabla \cdot (\overline{\mathbf{U} \mathbf{U}})=\nabla \cdot (\mathbf{\bar{U}} \mathbf{\bar{U}})+\left(\nabla \cdot (\overline{\mathbf{U} \mathbf{U}})-\nabla \cdot (\mathbf{\bar{U}} \mathbf{\bar{U}})
    \right)
    \label{W}
    \end{equation}
    将方程\eqref{W}带入到方程\eqref{momF}中有:
    \begin{equation}
    \frac{\partial \mathbf{\bar{U}}}{\partial t}+\nabla \cdot (\mathbf{\bar{U}} \mathbf{\bar{U}})=-\nabla \frac{\bar{p}}{\rho}+\nabla \cdot(\nu \nabla \mathbf{\bar{U}})
    -\left(\nabla \cdot (\overline{\mathbf{U} \mathbf{U}})-\nabla \cdot (\mathbf{\bar{U}} \mathbf{\bar{U}})
    \right)
    \label{momFF}
    \end{equation}
    对比最初的的N-S方程\eqref{mom},方程\eqref{momFF}中的最后一项$-\left(\nabla \cdot (\overline{\mathbf{U} \mathbf{U}})-\nabla \cdot (\mathbf{\bar{U}} \mathbf{\bar{U}})
    \right)$为滤波操作产生的特殊项。对其展开有:
    \begin{equation}
    \nabla \cdot (\mathbf{\bar{U}} \mathbf{\bar{U}})=\nabla \cdot \left[\begin{matrix}
    \bar{u}_1\
    \bar{u}_2\
    \bar{u}_3
    \end{matrix}\right][\bar{u}_1, \bar{u}_2, \bar{u}_3]=\nabla \cdot \left[
    \begin{matrix}
    \bar{u}_1 \bar{u}_1 & \bar{u}_1 \bar{u}_2 & \bar{u}_1 \bar{u}_3\
    \bar{u}_2 \bar{u}_1 & \bar{u}_2 \bar{u}_2 & \bar{u}_2 \bar{u}_3\
    \bar{u}_3 \bar{u}_1 & \bar{u}_3 \bar{u}_2 & \bar{u}_3 \bar{u}_3
    \end{matrix}
    \right]
    \label{T1}
    \end{equation}

    \begin{equation}
    \nabla \cdot (\overline{\mathbf{U} \mathbf{U}})=\nabla \cdot \overline{\left[\begin{matrix}
    u_1\
    u_2\
    u_3
    \end{matrix}\right][u_1, u_2, u_3]}=\nabla \cdot \left[
    \begin{matrix}
    \overline{u_1 u_1} & \overline{u_1 u_2} & \overline{u_1 u_3}\
    \overline{u_2 u_1} & \overline{u_2 u_2} & \overline{u_2 u_3}\
    \overline{u_3 u_1} & \overline{u_3 u_2} & \overline{u_3 u_3}
    \end{matrix}
    \right]
    \label{T2}
    \end{equation}

  • OpenFoam分区域计算

    4 Posts
    1k Views

    @CarmeloSun 还没有

  • 4 Posts
    2k Views

    @ahujeffery 因为一般只有p方程需要p.flux() 目前新版本openfoam已经不需要这个了

  • 求助:关于VOF求解!

    3 Posts
    997 Views

    您好,我最近也在做这方面的工作,但是遇到了一些问题想向您请教下可以吗?

  • 4 Posts
    1k Views

    刚刚尝试了下将double型变量赋值给一个新的体标量场,然后比较两个体标量场的大小就可以通过编译了:chitang:

    b =mesn.C().component(vector::Y)/a;//b被声明为一个体标量场记录距离壁面的无量纲距离,a为特征长度 Prt = 1.25;//Prt也是被声明为一个体标量场,这里先把Prt当做了一个中间变量,Prt为我研究中的湍流普朗特数,其对流体温度梯度影响很大,应当是一个函数而非常数。 if( b <= Prt ) { Prt = 0.45; } else { Prt=4.75; }

    今晚先算用编译好的求解器算一遍对不对,结果好的话,明后天再放上来。

  • 7 Posts
    2k Views

    @bestucan 是的,谢谢大佬:xinxin2:

  • openFoam如何选择合适的壁面函数

    2 Posts
    1k Views

    @Naruto foam-extend-4.1 版本带有几个 Non-Equilibrium Wall Function,可以参考。

    还有一个参考是这篇硕士论文:http://repozitorij.fsb.hr/7620/1/Šutalo_2017_diplomski.pdf

  • 8 Posts
    2k Views

    @李东岳有没有utility或者force,能使颗粒在RANS模拟中像LES那样发散开来 中说:

    我们之前详细的研究过这个东西 目前DPM这面的turbulent dispersion force结果都不太好 你可以尝试一下

    想请教一下李老师,在这个stochasticDispersionRAS.C的代码中,dt代表的是什么,并没有看出它的出处在哪。。
    从结果上来看,这个dt好像不是模拟中的timestep,它的值对于每个颗都不一样。

    // Member Functions //- Update (disperse particles) virtual vector update ( const scalar dt, const label celli, const vector& U, const vector& Uc, vector& UTurb, scalar& tTurb );
  • 6 Posts
    2k Views

    @zousiyu 好的非常感谢您,我试一下。

  • 关于绿色版paraview

    8 Posts
    2k Views

    @liujunCFD 理论上新的空白硬盘是挂载在/home下面的,是不是就是你想要的对/home的扩容?
    个人感觉ubuntu的分区似乎没有windows那么严格:haqi:

  • 3 Posts
    798 Views

    @李东岳 谢谢东岳老师的回复。这个cloud的类型是在KinematicCloud.H 中对cloudType的一步细分。

    //- Type of cloud this cloud was instantiated for typedef CloudType cloudType; //- Type of parcel the cloud was instantiated for typedef typename CloudType::particleType parcelType; //- Convenience typedef for this cloud type typedef KinematicCloud<CloudType> kinematicCloudType;

    无论我保不保留这个,都显示一样的error。这个expected primary-expression before '.' token是什么意思啊?少了什么吗?

  • 求一个EMMS模型的代码

    1 Posts
    509 Views

    如题,最近正在学习EMMS模型,没怎么搞明白,希望大神指导

  • paraview怎么输入实验数据

    5 Posts
    1k Views

    openfoam搭配gnuplot也很方便

  • openfoam变时间步长dt的怎么理解

    3 Posts
    1k Views

    下午看资料也有跟你一样的困惑,不知道你说的是不是adjustTimeStep,还是只是如何改变时间步长哦,如果是adjustTimeStep的话你可以看看这个图片上的说法!微信图片编辑_20201208204436.jpg

  • 17 Posts
    5k Views

    @mohui 您好,请问您解决这个问题了吗?我想给同种液滴的两个液滴染色,便于观察融合过程中的各个形态变化,求指教。

  • 9 Posts
    2k Views

    @wyt 您好,请问您这个是同种液体的两个液滴吗?我想给同种液滴的两个液滴染色,便于观察融合过程中的各个形态变化,求指教。

  • 38 Posts
    10k Views

    @aaaachenjian 模拟是在微重力环境下,上下壁面有个温差,在自由面上加个热毛细力,已经放弃用VOF方法了,像这种变形较小的直接挪网格,这是算法天生问题不太好解决

  • 关于射流!

    4 Posts
    1k Views

    @liujunCFD关于射流! 中说:

    各位前辈在用OF处理两股射流相互作用时的思路

    貌似不需要特殊处理

  • 网格生成与合成的问题

    4 Posts
    1k Views

    WeChat8db3756fb66113a48305c51893ed1215.png

    模型还是很简单的,就是一个柱体+方形,但是我用icem画必须要用两个O grid,网格过渡很不好(至少我看起来很难受),不知有什么其他思路?

  • 1 Posts
    521 Views

    各位前辈好,我最近准备从其他版本移植一个动网格功能时发现新旧版本之间motionSolver类在调用declareRunTimeSelectionTable函数时存在不同,旧版本中argList使用了Istream,新版本改为了Iodictionary。这导致旧版本的派生类移植到新版本遇到问题,如果直接改新版本的话又会导致其他派生类出现问题。因此可否在基类motionSolver中调用两次declareRunTimeSelectionTable,argList分别使用Istream和Iodictionary?
    事实上我在polyPatch.H中看到了调用两个declareRunTimeSelectionTable的例子:

    TypeName("patch"); //- Debug switch to disallow the use of genericPolyPatch static int disallowGenericPolyPatch; // Declare run-time constructor selection tables declareRunTimeSelectionTable ( autoPtr, polyPatch, word, ( const word& name, const label size, const label start, const label index, const polyBoundaryMesh& bm, const word& patchType ), (name, size, start, index, bm, patchType) ); declareRunTimeSelectionTable ( autoPtr, polyPatch, dictionary, ( const word& name, const dictionary& dict, const label index, const polyBoundaryMesh& bm, const word& patchType ), (name, dict, index, bm, patchType) );

    但是不清楚是否是为了实现上述的功能?

  • 关于如何耦合求解器的些许疑虑

    5 Posts
    1k Views

    @bestucan 感谢
    你我素昧平生,得您悉心指导,甚是感动
    占用您宝贵的时间,无偿在论坛替新人解决问题,分享经验
    感激涕零,无以言表
    致谢
    :huahua:

  • 4 Posts
    1k Views

    这个猜测经过我目前的尝试发现应该是个错误的想法,stl文件应先转变成ftr格式,之后在背景网格中由writeIbMasks使用gamma变量去识别,而不需要用其他的方式去操作。希望大家可以引以为戒:136:
    这个答案是我在目前学习过程中的一个认知,如果有错误还希望各位大佬可以提出来:140:

  • paraview怎么使坐标图光滑

    3 Posts
    1k Views

    @bestucan 多谢:xinxin: :xinxin:

  • 跨音速求解器选择

    9 Posts
    2k Views

    @cccrrryyy 谢谢你的回复!用KOmegaSST有三方面的原因。第一是我用kOmegaSST做过subsonic jet, mixing layer等的模拟,效果都不错,高超音速的jet别人也做了,结果跟NASA的比对了,都挺好的,因为这些算例的积累所以想继续用KomegaSST做。第二是我们组在做修改KomegaSST湍流模型这块,所以希望都基于这个做。第三是因为用组里编的程序,湍流模型是kOmegaSST的做过transonic turbine的模拟,结果也很好。所以我觉得不是湍流模型的问题,认为openfoam应该能模拟出来的。

  • 2 Posts
    821 Views

    @dyb 图2 max Courant = 1.8,你用的PISO 还是PIMPLE
    减小deltaT试试

  • 19 Posts
    8k Views

    @李东岳 :wocao:
    大哥,你这样我压力好大= =

  • 9 Posts
    3k Views

    @veen 不清楚,cfl只是说保证计算结果收敛,精度的问题可能重点不在这上面了,稳态计算的话cfl要求没那么高

  • projection method 真的比piso快吗?

    20 Posts
    8k Views

    最近也基于pisoFoam植入了一下RKprojection foam,单个计算步不限制残差,projection method的确快很多,但是限制残差之后速度就变得特别慢,并且该算法内存占用量是pisoFoam的20倍。
    不知道有没有大佬看到过把这个算法植入到多相流求解器的呢?想尝试一下把这个方法放到多相流计算里边去。

  • IBM圆柱绕流模型不识别问题

    3 Posts
    1k Views

    感谢分享!!:146:

  • 3 Posts
    969 Views

    十分感谢

  • 40 Posts
    8k Views

    @星星星星晴 明白了.我这个方法确实直接套用不上.并且碰撞模型从同一个cell扩展到周围cells之间的碰撞,还会有其他的问题.我再想想,谢谢了.以后常联络!

  • 如何判断发没发生化学反应?

    11 Posts
    2k Views

    @CarmeloSun 谢谢前辈

  • 1 Posts
    520 Views

    改写了coalChemistryFoam求解器,添加了volume fraction。现在想把pairCollision模型也添加到coalChemistryFoam中,有些一筹莫展,请求大神指点!!!
    目前想到2个思路,一是把CollidingParcel加入到coalParcel中,已经试过了,有问题,应该不可行吧;二是改写pairCollision模型,现在卡壳了,不知道该怎么改。

  • 2 Posts
    879 Views
    #!/bin/sh # Source tutorial run functions . WM_PROJECT_DIR/bin/tools/RunFunctions # Get application name application="potentialFoam" runApplication blockMesh \cp save/boundary constant/polyMesh/boundary \rm -rf 0 \cp -r 0_org 0 runApplication $application -writep runApplication writeIbMasks

    这个是cylinderInChannelPotential中Allrun文件代码,就是比较想知道save文件夹里边有block Mesh,constant文件夹下的ployMesh里也有blockMesh,所以Allrun中的blockMesh命令运行的是哪个文件。然后将save/boundary 拷贝到constant/polyMesh/boundary的意义是什么呢