是没添加fvc的头文件吗?
Izumi
帖子
-
-
你有在etc\caseDicts\postProcessing\fields下添加文件吗
-
怎么用openfoam提供的工具实现我不知道,我是利用paraview提取出乱序的数据后,利用python脚本重新排序,再作图
-
@wenke
不知道你的问题解决了没,你可以看下,可视化的计算数据应该在那个列表的下面 -
@宝丁 我的意思是比如case 1背压是p1,case 2背压是p2,case 1计算收敛后,将case 1的结果mapFields到case 2,再进行计算,case 2的边界条件是可以修改的
-
mapFields如果不添加-consistent,应该就不会映射边界条件,可以先修改边界条件,再mapFields;
也可以mapFields后,直接修改边界条件 -
@wwzhao 在 关于tmp<volScalarField>&用法的疑问 中说:
tmp是智能指针,不应该用引用的方式返回。
请问是指这句
const tmp<volScalarField>& tmuEff = turbModel.muEff();
还是指这句
const volScalarField& muEff = tmuEff();
我是照着下面写的,把三句并成了两句
const volVectorField& U = lookupObject<volVectorField>(fieldName_); const tmp<volTensorField> tgradU(fvc::grad(U)); const volTensorField& gradU = tgradU();
-
@东岳
那没用tmp时,有时出错可能是内存占完了?
我是在functionobject里用,只是后处理时算一下,倒是不太在意速度,只求不要时不时出错。 -
在编写涉及到muEff的后处理函数时发现,使用下面方法得到muEff时,可以编译,但是计算结果是错的,或者浮点数溢出
const volScalarField& muEff = turbModel.muEff();
而改成以下形式时,计算结果是正确的
const tmp<volScalarField>& tmuEff = turbModel.muEff(); const volScalarField& muEff = tmuEff();
而对于其他变量,如T,U等,两种形式的写法没发现对计算结果有影响,请问tmp<volScalarField>&有什么意义吗?为什么有的变量要用这种写法?谢谢!
-
@东岳
另一个alphatJayatillekeWallFunction和Fluent中的壁面函数一样,根据$y^+$使用不同的公式计算,打算试一下这个 -
标准壁面函数是下面这样的
这样$\alpha_t$在粘性层应该是0,在惯性层应该用公式(17.109)计算,但是alphatWallFunction在边界处给定$\alpha_t = \frac{\mu_t}{Pr_t}$,这应该是流场内部的计算方法吧,这样的话壁面$y^+$应该放到多大? -
@队长别开枪
十分感谢您的回复,我之前主要是对SIMPLEC改进了通量修正方法,没有为压力设置松弛因子。
有疑问,因为在rhoSimpleFoam的pEqn.H与pcEqn.H的代码中都有
p.relax();
,结合您最新的回复,OpenFOAM中SIMPLEC应该也可以在fields中设置压力松弛。另外,请问OpenFOAM中哪个求解器支持SIMPLER,没有找到。
-
我们在修改求解器的时候是否还需要删除该依赖文件,如果需要,它在哪个文件夹中。
我使用of4、5,修改求解器时,直接复制原求解器文件夹、重命名、修改求解器及make文件,然后直接编译就行了
-
看了一下rhoSimpleFoam的代码,发现transonic循环中才有以下压力方程松弛的设置,因此调节equations中的压力松弛因子应该只对transonic的情况有用
// Relax the pressure equation to maintain diagonal dominance pEqn.relax();
-
你好,我看rhoSimpleFoam的pEqn.H与pcEqn.H中均有
// Explicitly relax pressure for momentum corrector p.relax();
请问这个是不是压力松弛?
-
@东岳
这几天在算复杂模型,发现对于我的算例初场很差时,将equations中压力松弛因子先调低再调到1是有必要的,可以保证前期不发散,后期time step error的sum local持续降低。
值得注意的是我的算例中包含10个圆通道,采用相同的fvSolution时(equations中压力松弛因子为1),8个通道的sum可以降到0.001,2个通道的sum维持在1左右,但是检查进出口质量流量相差不大,不知道为什么。
这个可以当作一个trick吧,如果time step error降不下去,可以试着调一下equations中的压力松弛因子。 -
@东岳
time step error指的是sum local;
phi=0.00751(0.00779)中,0.00751是出口质量流量,括号中的0.00779是进口质量流量,边界条件是给定的进口质量流量为0.00779 -
使用rhoSimpleFoam计算圆管内流动时,发现收敛时time step error很大,进出口质量流量也相差较大,修改网格、数值格式、边界条件均无效,后对照tutorial,发现问题出在压力松弛因子。原本为避免发散,将松弛因子均设为了0.3,然后逐渐增加至0.7~0.9,这样设置就会出现上述问题,参照tutorial将压力松弛给到1,此时进出口流量守恒。
针对压力松弛因子,从第5200步开始,做了如下测试:-
将field中的压力松弛因子设置为1,其余0.9,5951收敛:time step error=118.87,phi=0.00751(0.00779)
-
将equations中的压力松弛因子设置为1,其余0.9,5275收敛:time step error=0.00196268,phi=0.00779(0.00779)
-
将equations与field中的压力松弛因子均设置为1,其余0.9,5268收敛:time step error=0.00283641,phi=0.00779(0.00779)
-
将equations与field中的压力松弛因子均设置为0.9,其余0.9,5786收敛:time step error=130.74,phi=0.00748(0.00779)
可以看出:equations中的压力松弛因子的设定是进出口量守恒的关键,请问这是为什么?是否所有计算中都要将equations中的压力松弛因子最终给到1? 谢谢!
-
-
@forward
应该可以独立划分网格,我做过简单测试,两个固体区域夹着一个流体区域,界面处固体网格与流体网格疏密不同,可以计算,没有比较过精度,不知道有无影响。 -
@东岳
谢谢!用Surface Vectors filter就直接画出来了 -
在paraview中,想在yz平面上,画出V、W分量的速度矢量图,而不考虑x方向的速度分量U,请问应该怎么做?可以直接在paraview中将U设置为0,然后再画吗?谢谢!
-
@calrel
mapFields之后再手动修改? -
用的是openfoam5的话,可以试试下面的命令:
simpleFoam -postProcess -func "turbulenceFields(devReff)"
如果还需要求div,再用一下div就行了
-
@肖恩曼
那可能就需要用循环一个个赋值了 -
Tensor好像可以返回某个方向的分量,SymmTensor能不能就不知道了,TensorI.H里的代码如下
template<class Cmpt> inline Foam::Vector<Cmpt> Foam::Tensor<Cmpt>::x() const { return Vector<Cmpt>(this->v_[XX], this->v_[XY], this->v_[XZ]); }
-
@mr-h
可以使用turbulenceFields得到devReff场 -
-
hex可以这么复杂吗?我看教程上hex只有八个顶点,你可以试试把整体分为7个hex
-
@dingcy
标准k-epsilon模型源文件在src\TurbulenceModels\turbulenceModels\RAS\kEpsilonOpenFOAM中k-epsilon模型没有除密度,是因为可压缩和不可压缩共用一套代码,只在编译时进行区分
-
@paopaoai11 不知道你指的是不是焓方程中的$\frac{\partial p}{\partial t}$,比如CFD中的能量方程中的公式18
-
抱歉,找到原因了,是我忘记wclean了
-
在虚拟机上编译了OpenFOAM 5.0,添加了自己的壁面函数,并修改了Make文件,但是wmake编译时没有反应,在之前的电脑上安装的OpenFOAM 5.0,壁面函数能够成功编译和使用。请问这是为什么?该怎么解决?谢谢!
-
相比真正的ubuntu,win10自带的ubuntu,和虚拟机哪个好?
看http://www.dyfluid.com/docs/install.html中说:但运行速度较慢。
是指系统慢还是OpenFOAM算的慢?谢谢!
-
The boundary conditions are:
$\tilde \nu_{wall} = 0 $
$\tilde \nu_{farfield} = 3 \nu_{\infty} : to : 5 \nu_{\infty}$Note that these boundary conditions on the SA turbulence field variable correspond to turbulent kinematic viscosity values of:
$\nu_{t,wall} = 0$
$\nu_{t,farfield} = 0.210438 \nu_{\infty} : to : 1.294234 \nu_{\infty}$ -
我看的一篇文献,在CFX中使用SSG模型,网格y+~1,但是我在OpenFOAM中网格y+较大(>11)时,能够得到收敛的结果,但是加密网格到y+~1时,就一直发散。
请问:SSG模型要求的y+是多大?此时nut、k、epsilon和R的边界条件应该怎么给?谢谢! -
@李东岳 看《Computational Methods for Fluid Dynamics》126页说:
根据经验内残差下降1到2个数量级就可以了,外残差则要下降3到5个数量级才行。
结合书中给的例子:
初值给0,初始误差大小和解相同,残差下降3到4个数量级,则误差可能下降到解的0.1%。
这样看来,如果初值给的好,外残差很可能降不下来,r就不能趋向于0了
-
@夜阑烟寒 我用的是OpenFOAM 5自带的foamMonitor
-
@程迪
rhoE应该是$\frac{\partial \rho e}{\partial t} + \frac{\partial \rho K}{\partial t}$
phiEp应该是$\nabla \cdot (\rho \mathbf{U} e)+\nabla \cdot (\rho \mathbf{U} K)+\nabla\cdot(p\mathbf{U})$
sigmaDotU应该是$\nabla \cdot(\tau \cdot \mathbf{U})$
感觉拆不了。另外,请问对定常的求解器也有时间步限制吗?如果没有的话,是不是定常的求解器中,比如buoyanySimpleFoam,就不用管隐式还是显式了?
-
@程迪
谢谢!看rhoCentralFoam时没看懂,看了你的链接清楚一些了。
我主要是想在能量方程中添加$\nabla \cdot(\tau \cdot u)$,然后计算耗散函数$\tau:(\frac12(\nabla u + (\nabla u)^T))$。
根据CFD中的能量方程,$\nabla \cdot(\tau \cdot u)$好像没法展开成可以隐式离散的项。
看rhoCentralFoam中的能量方程,除时间项外,用的都是显式离散。所以,对于能量方程来说,是不是不必拆项并使用隐式格式?
至于动量方程中的$\nabla \cdot \tau$,对于一般的求解器,应该是包含在UEqn.H里的turbulence->divDevRhoReff(U)吧,不用我们自己定义。rhoCentralFoam中的能量方程:
surfaceScalarField sigmaDotU ( "sigmaDotU", ( fvc::interpolate(muEff)*mesh.magSf()*fvc::snGrad(U) + fvc::dotInterpolate(mesh.Sf(), tauMC) ) & (a_pos*U_pos + a_neg*U_neg) ); solve ( fvm::ddt(rhoE) + fvc::div(phiEp) - fvc::div(sigmaDotU) );
-
@李东岳 请问tau如下定义可以吗?
volTensorField tau("tau", muEff*(dev2(gradU.T()) + gradU));
因为
\begin{equation}
dev2((\nabla u)^{T})=(\nabla u)^{T} - \frac{2}{3}tr((\nabla u)^{T})I = (\nabla u)^{T} - \frac{2}{3}(\nabla . u) I
\end{equation}
所以
\begin{equation}
\tau = \mu (dev2((\nabla u)^T) + \nabla u)
\end{equation} -
@李东岳 在 关于耦合传热求解器的几个问题 中说:
这个求解器里面不是那种动态的流固耦合,只不过实现了流体固体之间的热传导或者对流传导哦。
那就是先计算流体区域,然后将计算得到的边界条件施加到固体区域进行计算,再利用固体区域计算结果更新流体区域的边界条件,直到收敛?那这应该是弱耦合了。
另外,请问流体和固体之间传递的是什么边界条件,热流密度?传热系数和流体温度?或是其他?这部分在代码中没注意到。
谢谢!
-
查看耦合传热求解器chtMultiRegionSimpleFoam的代码,遇到以下几个问题:
-
chtMultiRegionSimpleFoam中是怎么实现的流固耦合,是强耦合还是弱耦合?
-
chtMultiRegionSimpleFoam中流体区域的求解的方程和buoyantSimpleFoam一样,那么是不是不能求解跨音速流动?
谢谢!
-
-
@李东岳 谢谢!我在几个点上放了probe,确实变化不大,应该是收敛了。
但是苏军伟在博客中提到:外残差: 对于方程f(x,t)=0在t_0时刻有收敛解x_0, 则f(x_0,t=t_0)=0; 当用t0时刻的结果代入到t1时刻的方程时,通常并不能满足方程,即 f(x_0, t = t_1) = r !=0; 这里的残差r称为外残差。
内残差:在cfd计算中通常将方程转化为代数方程Ax=b;当得到某个解A*x_0-b = r1; 这里的r1 ->0时,认为Ax=b收敛。 这里的r1为内残差。
对于稳态问题:只有当r->0时,才被认为收敛,也就是(x_1 - x_0)->0. 也就是我们在cfd计算中通常见到的那个残差,fluent及其pyFoam输出残差图就是这个r。r常被作为收敛判据。如果稳态问题只有r -> 0时才收敛,那么为什么buoyantSimpleFoam收敛时的残差还降不下去?
-
我在使用buoyantSimpleFoam时,想要通过残差来判断是否收敛,得到如下的残差图,其中p_rgh在0.1左右就不变了,而k和epsilon也在0.001以上。
为了减小残差,我调小了fvsolution中的tolerance和residualControl,另外也尝试了修改p_rgh的计算方法,但是都没有用,残差依旧如下图所示,请问这样收敛了吗?为什么残差这么大?谢谢!残差图:
-
尝试在可压缩类的求解器rhoPimpleFoam中使用externalWallHeatFluxTemperature边界条件,选择的算例是rhoPimpleFoam/RAS/cavity,将其T边界条件修改为以下后,发现可以正常计算,因此externalWallHeatFluxTemperature应该不是只能在传热类的求解器中使用,也可以用于可压缩类求解器。
分析上述出错的原因,可能在于能量方程的选择。在可以计算的cavity算例中能量方程为sensibleEnthalpy,而在上述出错的算例中能量方程为sensibleInternalEnergy。
据此,我修改了能量方程,但是fvschems和fvsolution可能还有点问题,目前还没有计算收敛。
-
使用buoyantSimpleFoam求解器,使用kOmegaSST模型计算得到的k和omega如下所示。
感觉omega很奇怪,几乎均匀分布,只在壁面附近有变化,请问我算的omega合理吗?谢谢!
k:
omega:
我的omega文件是:
dimensions [0 0 -1 0 0 0 0]; internalField uniform 300; boundaryField { inlet { //type calculated; //value uniform 0.12; type turbulentMixingLengthFrequencyInlet; mixingLength 0.002; value uniform 300; } outlet { type inletOutlet; inletValue uniform 300; value uniform 300; } smooth_wall { type omegaWallFunction; value uniform 300; } ribbed_wall { type omegaWallFunction; value uniform 300; } symmetry { type symmetryPlane; } }
-
在计算某忽略浮力的传热问题时,我想使用可压缩求解器rhoSimpleFoam,并给定热流密度作为边界条件,发现可以使用externalWallHeatFluxTemperature或turbulentHeatFluxTemperature,但是在OpenFOAM 5.0中后者已经被整合到前者之中,因此使用前者,并通过修改可压缩求解器rhoSimpleFoam的算例squareBend中的温度边界条件进行验证。
原算例的温度T边界条件为以下:
boundaryField { Default_Boundary_Region { type zeroGradient; } inlet { type fixedValue; value uniform 1000; } outlet { type inletOutlet; //type zeroGradient; value uniform 1000; inletValue uniform 1000; } }
修改为热流密度边界条件后的温度T边界条件为以下:
boundaryField { Default_Boundary_Region { type externalWallHeatFluxTemperature; mode flux; q uniform 300; /* thicknessLayers no; kappaLayers (1 2 3 4); kappa fluidThermo; */ kappaMethod fluidThermo; value $internalField; } inlet { type fixedValue; value uniform 1000; } outlet { type inletOutlet; //type zeroGradient; value uniform 1000; inletValue uniform 1000; } }
但是,原算例可以正常计算,而采用热流密度边界条件的新算例发生错误,如以下所示:
Starting time loop Time = 1 GAMG: Solving for Ux, Initial residual = 1, Final residual = 2.2028e-05, No Iterations 1 GAMG: Solving for Uy, Initial residual = 1, Final residual = 2.75277e-05, No Iterations 1 GAMG: Solving for Uz, Initial residual = 1, Final residual = 6.83017e-05, No Iterations 1 #0 Foam::error::printStack(Foam::Ostream&) at ??:? #1 Foam::sigFpe::sigHandler(int) at ??:? #2 ? in "/lib/x86_64-linux-gnu/libc.so.6" #3 Foam::heThermo<Foam::psiThermo, Foam::pureMixture<Foam::sutherlandTransport<Foam::species::thermo<Foam::hConstThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleInternalEnergy> > > >::he(Foam::Field<double> const&, Foam::Field<double> const&, int) const at ??:? #4 Foam::mixedEnergyFvPatchScalarField::updateCoeffs() at ??:? #5 Foam::fvMatrix<double>::fvMatrix(Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> const&, Foam::dimensionSet const&) at ??:? #6 Foam::tmp<Foam::fvMatrix<double> > Foam::fv::optionList::operator()<double>(Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> const&, Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>&, Foam::word const&) at ??:? #7 ? at ??:? #8 __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6" #9 ? at ??:? Floating point exception (core dumped)
另外,将buoyantSimpleFoam中算例hotRadiationRoomFvDOM的边界条件修改为externalWallHeatFluxTemperature定义的热流密度时,却可以正常计算。
因此,我的问题是:
-
为什么会出现修改为热流密度边界条件后计算不了的问题,应该怎么解决?
-
externalWallHeatFluxTemperature是不是只能在传热类的求解器中使用,而不能在可压缩类的求解器中使用?
-
如果只能使用传热类的求解器,那么在使用如buoyantSimpleFoam的求解器时,想要忽略浮力的作用,是否可以直接将g设置为0?
谢谢!
-
-
@李东岳 好的,谢谢!
-
我对于传热不是很了解,是不是对于温度变化较大的问题,不存在可压缩和不可压缩的区别?
-
我看OpenFOAM 4.0中的传热求解器,buoyantBoussinesqPimpleFoam和buoyantBoussinesqSimpleFoam虽然能够求解不可压缩流动,但是使用了Boussinesq假设,而buoyantPimpleFoam和buoyantSimpleFoam是求解可压缩流动的。
我的问题是:OpenFOAM有求解不可压缩流动、传热的求解器吗?还是需要自己修改或编写?
谢谢!
twoPhaseMixture类中添加muf()函数报错求助
自己写的后处理的functionObjects怎么直接调用?
OpenFOAM获取叶片表面压力系数曲线
运行OpenFOAM案例文件chtMultiRegionFoam出错
计算的时候如何给初场
计算的时候如何给初场
关于tmp<volScalarField>&用法的疑问
关于tmp<volScalarField>&用法的疑问
关于tmp<volScalarField>&用法的疑问
关于alphatWallFunction的疑问
关于alphatWallFunction的疑问
OF使用SIMPLE计算10步报错停止,SIMPLEC成功迭代收敛的原因
关于laplacian((1/A(U)),p)的疑惑与icoFoam.dep文件的疑惑
关于压力松弛因子的疑问
OF使用SIMPLE计算10步报错停止,SIMPLEC成功迭代收敛的原因
关于压力松弛因子的疑问
关于压力松弛因子的疑问
关于压力松弛因子的疑问
关于共轭换热的流固界面网格问题
paraview画矢量图,如何将某速度分量设为0?
paraview画矢量图,如何将某速度分量设为0?
复制之前算例的场信息到新算例,如何改变边界条件??
turbulence->divDevReff(U)
volSymmTensorField分量
volSymmTensorField分量
turbulence->divDevReff(U)
关于努塞尔数问题请教
求助,执行blockMesh出错
有关OpenFOAM中k-epsilon方程的问题
为什么有的流动控制方程里会出现压力对时间的偏导?
wmake编译没有反应?
wmake编译没有反应?
请问win10装openfoam,怎么不影响速度?
SA模型参数设定问题
请问OpenFOAM中的SSG模型应该怎么用?
如何根据残差判断是否收敛?
如何根据残差判断是否收敛?
代码实现?
代码实现?
代码实现?
关于耦合传热求解器的几个问题
关于耦合传热求解器的几个问题
如何根据残差判断是否收敛?
如何根据残差判断是否收敛?
关于边界条件externalWallHeatFluxTemperature的问题
使用kOmegaSST模型,感觉Omega算得不对
关于边界条件externalWallHeatFluxTemperature的问题
OpenFOAM有求解不可压缩流动、传热的求解器吗?
OpenFOAM有求解不可压缩流动、传热的求解器吗?
OpenFOAM有求解不可压缩流动、传热的求解器吗?