@random_ran 您好,想咨询一下,这么多的网格您是如何进行后处理的呢?paraview 会崩溃的吧?
winsway_zero
帖子
-
-
@yu_tian 很简单,你在decomposPar 之前renumber, 然后把生成的网格复制到constant 中替换,再进行分块和并行计算。
-
@李东岳 非常抱歉,这个硬盘我还真不知道。我用的是UCL的集群。
-
@李东岳 我看教程有pvserver 可以并行。但是有时候不知道学校的管理员是不是给封了,以前速度还可以,现在用起来就很揪心。集群上模拟最大的问题就是网格多了以后数据文件都比较大都是100G+,没个4T的硬盘真不太敢做模拟。后处理和下载数据都是心病。
-
目前使用OpenFoam 在集群上做模拟,网格数量级在千万级别。每个时间步的文件都非常大,对于这样的情况,如何能够有效的进行后处理,希望各位朋友提供帮助和分享一下经验。
-
@samuel-tu 为什么感觉PIMPLE才是真正的PISO算法,而PISO算法只是进行了多次压力和速度修正,在OpenFOAM中并没有判断一个时间步内收敛与否。从流程图上看也没有区别,https://marinecfd.xyz/post/piso-algorithm/ 这个帖子还对PISO的细节进行了分析。
-
@李东岳 我下面仔细推导了一下:
首先rAU(1.0/UEqn.A());
,这个公式的计算得到的结果是:对角系数
这是
A()
函数:template<class Type> Foam::tmp<Foam::volScalarField> Foam::fvMatrix<Type>::A() const { tmp<volScalarField> tAphi ( volScalarField::New ( "A("+psi_.name()+')', psi_.mesh(), dimensions_/psi_.dimensions()/dimVol, extrapolatedCalculatedFvPatchScalarField::typeName ) ); tAphi.ref().primitiveFieldRef() = D()/psi_.mesh().V(); tAphi.ref().correctBoundaryConditions(); return tAphi; }
这是D()对角系数的平均化处理
template<class Type> Foam::tmp<Foam::scalarField> Foam::fvMatrix<Type>::D() const { tmp<scalarField> tdiag(new scalarField(diag())); addCmptAvBoundaryDiag(tdiag.ref()); return tdiag; }
边界对对角系数的影响:
template<class Type> void Foam::fvMatrix<Type>::addCmptAvBoundaryDiag(scalarField& diag) const { forAll(internalCoeffs_, patchi) { addToInternalField ( lduAddr().patchAddr(patchi), cmptAv(internalCoeffs_[patchi]), diag ); } }
从上面的代码可以得到:
$$
A_p=\frac{\bar{D}}{\Delta V}
$$
其中:
$$
\bar{D}=average(a_p')+diag
$$
式子中average(Ap')
表示的是边界对主对角线系数的影响的平均;diag
表示的是内部面离散的主对角线系数。周围系数作为源项:
H()
template<class Type> Foam::tmp<Foam::GeometricField<Type, Foam::fvPatchField, Foam::volMesh>> Foam::fvMatrix<Type>::H() const { tmp<GeometricField<Type, fvPatchField, volMesh>> tHphi ( GeometricField<Type, fvPatchField, volMesh>::New ( "H("+psi_.name()+')', psi_.mesh(), dimensions_/dimVol, extrapolatedCalculatedFvPatchScalarField::typeName ) ); GeometricField<Type, fvPatchField, volMesh>& Hphi = tHphi.ref(); // Loop over field components for (direction cmpt=0; cmpt<Type::nComponents; cmpt++) { scalarField psiCmpt(psi_.primitiveField().component(cmpt)); scalarField boundaryDiagCmpt(psi_.size(), 0.0); addBoundaryDiag(boundaryDiagCmpt, cmpt); boundaryDiagCmpt.negate(); addCmptAvBoundaryDiag(boundaryDiagCmpt); Hphi.primitiveFieldRef().replace(cmpt, boundaryDiagCmpt*psiCmpt); } Hphi.primitiveFieldRef() += lduMatrix::H(psi_.primitiveField()) + source_; addBoundarySource(Hphi.primitiveFieldRef()); Hphi.primitiveFieldRef() /= psi_.mesh().V(); Hphi.correctBoundaryConditions(); typename Type::labelType validComponents ( psi_.mesh().template validComponents<Type>() ); for (direction cmpt=0; cmpt<Type::nComponents; cmpt++) { if (validComponents[cmpt] == -1) { Hphi.replace ( cmpt, dimensionedScalar(Hphi.dimensions(), 0) ); } } return tHphi; }
template<class Type> void Foam::fvMatrix<Type>::addBoundaryDiag ( scalarField& diag, const direction solveCmpt ) const { forAll(internalCoeffs_, patchi) { addToInternalField ( lduAddr().patchAddr(patchi), internalCoeffs_[patchi].component(solveCmpt), diag ); } }
这里面的求解过程包含了:
$$
H=\frac{\left [-\sum a_{\mathbf{N}}\mathbf{U_N} + (\mathbf{b}+\mathbf{b'})+(average(a_p')-a_p')\mathbf{U_C}\right]}{\Delta V}
$$最后:
$$
HbyA= \frac{H}{A}=\frac{\Delta V}{average(a_p')+diag}\frac{\left [-\sum a_{\mathbf{N}}\mathbf{U_N} + (\mathbf{b}+\mathbf{b'})+(average(a_p')-a_p')\mathbf{U_C}\right]}{\Delta V}
$$
$$
HbyA= \frac{H}{A}=\frac{\left [-\sum a_{\mathbf{N}}\mathbf{U_N} + (\mathbf{b}+\mathbf{b'})+(average(a_p')-a_p')\mathbf{U_C}\right]}{average(a_p')+diag}
$$ -
@李东岳 如果只是离散内部面是相同的,但是将边界的影响引入到了对角线上的Ap系数后,对角线系数就不一样了。比如Wall边界条件,里面涉及到了应力的分解:
-
@李东岳 李老师,您好。
volScalarField rAU(1.0/UEqn.A());
这个重理论上分析应该是矢量才对,但是细节上的操作确实做成了体标量场。template<class Type> Foam::tmp<Foam::volScalarField> Foam::fvMatrix<Type>::A() const { tmp<volScalarField> tAphi ( volScalarField::New ( "A("+psi_.name()+')', psi_.mesh(), dimensions_/psi_.dimensions()/dimVol, extrapolatedCalculatedFvPatchScalarField::typeName ) ); tAphi.ref().primitiveFieldRef() = D()/psi_.mesh().V(); tAphi.ref().correctBoundaryConditions(); return tAphi; }
$ A=\frac{A_p}{\Delta V}$
在计算系数Diag的过程中,将边界对主对角线的系数进行了平均更新:template<class Type> Foam::tmp<Foam::scalarField> Foam::fvMatrix<Type>::D() const { tmp<scalarField> tdiag(new scalarField(diag())); //这里进行了平均处理并修正了主对角线系数。 addCmptAvBoundaryDiag(tdiag.ref()); return tdiag; }
为什么这样操作呢?这样会使得系数矩阵不一样了!
-
volScalarField rAU(1.0/UEqn.A());
按照道理说这个应该是矢量场才对,因为三个方向
volVectorField
。 -
winsway_zero@foxmail.com
-
最近在学习李老师刚发表的文章:twoWayGPBEFoam: An open-source Eulerian QBMM solver for monokinetic bubbly flows。文章后面附有FOAM的code,不过在编译的时候出现了一个小问题。
就是fvMesh中没有solver这个成员函数(openFOAM-7.0),希望能够得到李老师帮助,根据code学习一下该算法。谢谢,谢谢~ -
你可以读取openFOAM处理好的网格文件啊,它的网格文件还是很有规律的,至少我现在已经实现读取和处理openFOAM的网格数据了,自己在编写求解器。
-
大家好,我现在用FLuent 做一个二维i微通道里液滴运动的模拟,连续相为油,液滴为水。在初始化时液滴通道里patch了一个水的区域,连续相初始有速度。使用VOF 模型计算,但是在最终计算的过程中,发现液滴的大小被压缩或者扩张了。【像下面图像展示的那样,液滴逐渐被拉长了,似乎不再满足质量守恒】实际情况下不应该出现这种现象的。请问大家这是什么原因呢?
-
@TINGHAIK 完全可以,没有问题的。
-
gmsh可以,这个是开源的网格软件。
-
@东岳 谢谢东岳老师哈
-
@Samuel-Tu 大佬,期待你搞一个附带公式的流程图
-
@东岳
主要是这个哈 -
@东岳 岳哥,帮忙看看呗,我写的公式是否正确,特别是梯度的算数平均那里哈~
-
@东岳
差分因子设定为:FX表示的是面上的插值因子,坐标和面相同。
\begin{equation}
FAC=\frac{\left| \overrightarrow{Pe} \right|}{\left| \overrightarrow{Pe} \right|+\left| \overrightarrow{eE} \right|}
\end{equation}
网格P和N格心之间的中间坐标e’计算:
\begin{equation}
{{P}_{{{e}'}}}={{P}_N}\times{FAC}+{{P}_P}\times{FACP}
\end{equation}
网格P和N格心之间的中间梯度计算:
\begin{equation}
\nabla {{\phi }_{e'}}=\nabla {{\phi }_{P}}^{old}FACP+\nabla {{\phi }_{N}}^{old}FAC
\end{equation}
网格P和N中间界面面心坐标e计算:
\begin{equation}
{{P}_{e}}=0.5({{P}_{1}}+{{P}_{2}})
\end{equation}
中间界面值$ϕ_e$的计算:
\begin{align}
& {{\phi }_{{{P}'}}}={{\phi }_{P}}+{{(\nabla \phi )}_{P}}\centerdot (\overrightarrow{{{r}_{P'}}}-\overrightarrow{{{r}_{P}}}) \
& {{\phi }_{e}}={{\phi }_{e'}}+{{(\nabla \phi )}_{e'}}\centerdot (\overrightarrow{{{r}_{e}}}-\overrightarrow{{{r}_{e'}}}) \
\end{align}\begin{align}
& {{\phi }_{e}}={{\phi }_{E}}\times FAC+{{\phi }_{P}}\times FACP+{{\left( \frac{\partial \phi }{\partial x} \right)}_{e'}}\left( {{x}_{e}}-{{x}_{e'}} \right)+{{\left( \frac{\partial \phi }{\partial y} \right)}_{e'}}\left( {{y}_{e}}-{{y}_{e'}} \right) \
& ={{\phi }_{N}}FAC+{{\phi }_{P}}FACP+\nabla {{\phi }_{{{e}'}}}\bullet \left( \overrightarrow{{{r}_{e}}}-\overrightarrow{{{r}_{e'}}} \right) \
& ={{\phi }_{e'}}+{{(\nabla \phi )}_{e'}}\centerdot (\overrightarrow{{{r}_{e}}}-\overrightarrow{{{r}_{e'}}})
\end{align}其中:$\overline{\nabla \phi }\text{=}\frac{1}{N}\sum\limits_{i}{\nabla {{\phi }_{i}},i=P,E,W,N,S}$,东岳老师这个是这样算吗?
参考文献:
[1]On the discretization of the diffusion term in finite-volume continuum mechanics
[2]Numerical method for coupled fluid flow, heat transfer and stress analysis using unstructured moving meshes with cells of arbitrary topology
[3]Ferziger J H, PeriC M.Computational Methods for Fluid Dynamics. 3. Germany: Springer,2002.
[4]Ferziger J H, PeriC M.Computational Methods for Fluid Dynamics. 4. Germany: Springer,2020. -
@东岳
想咨询一下东岳老师,这两个梯度的区别,实在不知道怎么计算,谢谢谢谢~ -
这里已经解决了,虽然用的方法精度不是很高,但是非正交修正还是很重要的。梯度计算和扩散项的延迟修正对于计算有很大影响。
1.网格是柱坐标,不采用非正交修正:
可以看出速度场是不对的。
2.网格非正交,不采用非正交修正:
这个也是与标准结果不符合!!!
3.网格正交,采用非正交修正:
计算结果是正确的!
4.网格非正交,采用非正交修正:
计算结果是正确的!
其实网格少点计算也是这样。非正交修正还是非常重要的!!! -
@东岳 李老师,这个我已经解决了哈。我一会儿放一下结果。不过偏心率是有要求的不能太高。。。
-
@东岳 这个我添加了非正交修正了,就是上图的这个效果。非正交修正的方法很多,我用了最简单的,基于网格中心的插值延迟修正。
-
@东岳
控制方程为:
\begin{equation}
0=-\frac{\partial p}{\partial z}+\mu \left( \frac{{{\partial }^{2}}W}{\partial {{x}^{2}}}+\frac{{{\partial }^{2}}W}{\partial {{y}^{2}}} \right)
\end{equation}
其中:下式结果由达西层流公式计算得到的结果
\begin{equation}
-\frac{\partial p}{\partial z}=2.2
\end{equation}
已知条件:圆管直径为1寸管=0.0243m,中间的小圆直径为大圆的一半=0.01215m,小圆只在中心线上偏心(指的是小圆圆心位置,大圆圆心位置在(0,0)点,小圆(0,y))。我设置的偏心高度y=0.45R(大圆半径)。
介质:水的物性,密度1000,动力粘度0.001;
网格附件:grid1.zip -
这本确实是神书,里面的示例代码给的真的相当赞。
-
最近在做一项研究,但是一直被网格非正交困扰。已知条件:1.二维的圆形网格;2.计算z方向的速度分布;3.压力由一维达西公式计算得到,作为源项放入标量输运方程。4.最后可以得到层流的速度分布;由于忽略了U,V方向,因此没有对流项。这是一个稳态有压力源项的椭圆方程。
下图是网格非正交
计算结果为:
正交网格为:
正交网格标准计算结果为:
关于网格非正交的处理和梯度的处理方式是参考Ferziger, J.H. and M. PeriC, Computational Methods for Fluid Dynamics. 3 ed. 2002, Germany: Springer.第8.6.2的内容,因为书上有示例代码,实现是没有问题的。
希望得到各位CFDer的解答。 -
@东岳 谢谢东岳老师,我明白如何处理了哈。东岳老师整理的文档和资料都很通俗易懂。
-
想咨询一下动网格的控制方程应该如何处理呀;控制方程里面忽略了X,Y方向的流动(U,V),主要关注Z方向(W)的流动问题。
流动只考虑z方向,但是粘性项需要考虑x和y方向。由于网格是随着之间变化的,因此控制方程应该需要进行修改,这个部分理论不足,真不知道如何处理?希望能够有这方面的行家交流学习一下,谢谢谢谢~ -
@ibelief 朋友您好,能否再分享一下?是同位网格版本的吗?
-
@东岳 东岳老师,有个小问题咨询一下。就是
\begin{equation}
\nu_{\mathrm{SGS}}=\rho\left(C_{\mathrm{SGS}} \Delta \right)^2 \sqrt{\frac{1}{2}(\nabla\bar{\bfU}+\nabla\bar{\bfU}^{\mathrm{T}}):(\nabla\bar{\bfU}+\nabla\bar{\bfU}^{\mathrm{T}})}
\label{lilly}
\end{equation}
中的应变率张量数值格式在使用投影法计算时应该为显式吧? -
如果能实现顶盖驱动MAC算法,simple也没有问题啊~可以先试试MAC,速度边界条件都是第一类边界条件,其余都为0.只有顶盖有速度。
-
@东岳 哈哈,好的哈。很期待看你的文章了解这个算法(如果可以是否可以发一下),如果可行我就可以用这个做一维的两相流动模拟 我们这边比较偏向于工程,高维度不太适合。
-
@东岳 东岳老师,那么该模型可以运用于一维流动计算吗?计算得到d32,从而算拖曳力引入TFM中。
-
@东岳 感觉我要入坑了哈,我这里的扩散界面模型采用的是相场捕捉界面,该方法容易构造界面,但是计算量比较贵。我的最终目的是模拟管流,结果与实验结果对比。实验的管径约40mm,管长估计10-20D就可以。因此在考虑计算时间的问题,而且油气输送多数是湍流,因此还需要考虑湍流模型的选择。想一想就是一堆问题。
-
@东岳 多谢东岳老师,我想到了新点子。该方法的计算效率怎样呢?扩散界面方法计算成本较高。
-
@东岳 文献都是到处找,目前就是相场方程和NS耦合。一些简单的例子哈
-
@东岳 我研究的就是油水,网格就是均分网格,简单的方腔。都是自己编程实现,目前没有借助of,of结构太庞大了,不好改,也不好查错误。
-
@东岳 马上要开题了,正在找适合的求解两相流的算法,一要满足速度快便于工程问题,二要能发文章 。用扩散界面模型耦合NS方程的界面张力一直不收敛,很心塞。
-
你在tecplot中设置一下比例,网上有教程。tecplot默认的比例不是1,需要自己调一调。
-
你这个应该采用的是交错网格吧?建议先看看陶文铨院士的数值传热学,看看如何处理边界处的压力和速度的离散。然后再看看宇波老师出版的书数值传热学实训,里面关于SIMPLE有详细的流程图。接着就要靠自己编程了哈~
-
@东岳 东岳老师,我看了一下你发表的文章哈,关于CFD-PBE中QMOM中计算流程有点不太理解。
1.:求解分散相的相方程;
2.:求解k-epsilon方程;
3.:求解PBE方程:(1)求解权重和节点;(2)求解源项。
4.:求解动量方程
5.:压力速度泊松方程
6.:判断收敛,是否进行下一时步。
就是在第三步求解过程中,液滴粒径应该如何确定呢?这个应该是一个迭代的过程吧?假设一个液滴Sauter直径进行迭代直至收敛? -
有研究界面扩散模型的吗?大家可以相互交流交流哈
qq:805759762 -
@东岳 收到,可以访问哈,谢谢啦。
-
@东岳 发现现在打不开了
-
@东岳 谢谢,我研究研究。
-
请教一下如何实现Zalesak slotted disk problem,其初始流场应给如何设定?
u_x = -2 \pi y
u_y = 2 \pi x
谢谢 -
还是不太懂,层流模型和DNS之间的区别,希望大神解答一下。
-
@hungryandfool 您好,您说的书能说一下书名吗?
并行效率疑问
看个乐:renumberMesh后的魔性云图
Paraview 处理千万级网格问题
Paraview 处理千万级网格问题
Paraview 处理千万级网格问题
pimple算法的流程图
重新看icoFoam
重新看icoFoam
icoFoam求解器解析中问题。
重新看icoFoam
Daniele Marchisio的CFD Talk登记
EQBMM编译小问题
自己编程做CFD,如何读网格文件。
Fluent VOF 两相计算中 的 体积压缩和扩张问题
请问有哪些类似于ICEM、pointwiae的开源网格软件?
请问有哪些类似于ICEM、pointwiae的开源网格软件?
网格与圆管层流
pimple算法的流程图
网格与圆管层流
网格与圆管层流
网格与圆管层流
网格与圆管层流
网格与圆管层流
网格与圆管层流
网格与圆管层流
网格与圆管层流
CFD神书开始预定咯!!
网格与圆管层流
关于动网格的求解方法及步骤咨询
关于动网格的求解方法及步骤咨询
二维稳态层流SIMPLE算法C/C++的实现
LES介绍的文章的一个公式
利用交错网格simple算法计算顶盖方腔流发散
多相流与矩方法的数学模型
多相流与矩方法的数学模型
多相流与矩方法的数学模型
多相流与矩方法的数学模型
多相流与矩方法的数学模型
多相流与矩方法的数学模型
多相流与矩方法的数学模型
【OF网格求助】ICEM画的网格,使用fluent3DMeshToFoam转换后出错。
二维稳态层流SIMPLE算法C/C++的实现
多相流与矩方法的数学模型
有研究界面扩散模型的吗?
Zalesak slotted disk设定
Zalesak slotted disk设定
Zalesak slotted disk设定
Zalesak slotted disk设定
层流模型指的是什么?
OpenFOAM教程 初级入门建议(2020年更新版)