各位老师好,最近在做of和fluent的对比模拟,在of中通过stl对模型进行个网格划分,在使用foamMeshToFluent命令后只能得到如图1的长方体网格,好像是stl文件用来切割的,但实际的网格应该是图2,烦请各位老师指点一二,这种网格应该如何导出,谢谢!
upc_ngh
帖子
-
-
@李东岳
(1)对的,李老师。今天下午按照这个命令发现,在简单的block块网格上可以实验单一Z方向的拉伸,但对于snappyHexMesh生成后发现多个方向都成倍数扩展了,这个不知道是什么问题,还请李老师和各位大神指点一下;
(2)是的,网格质量会变差,但是可以通过对Z方向多做网格节点弥补。
因此,总的来说对于复杂网格的单一方向拉伸,of是不是没法通过简单的命令进行处理呢?还请各位老师指点,谢谢! -
@李东岳 感谢东岳老师回复,但使用这个命令后模型依然全尺寸扩大了,我具体的命令如下。是不是针对简便的缩放模型,更改scale,或者节点坐标,又或者transformPoints命令可以,但是涉及到snappyHexMesh就有很多复杂的设置了,所以我想问有李老师和各位大神,针对这种复杂网格的缩放问题要咋处理呢,谢谢!下图是经过这个命令后生成的模型,可以看出尺寸没有发生变化,质量还变得很差,没有达到仅Z轴缩放的目的,所以针对snappyHexMesh还能通过命令做缩放吗?
#!/bin/sh cd ${0%/*} || exit 1 . $WM_PROJECT_DIR/bin/tools/RunFunctions # Create the initial block mesh and decompose runApplication blockMesh runApplication transformPoints 'scale=(1 1 10)' runApplication decomposePar -copyZero # Run snappy runParallel snappyHexMesh -overwrite # Split the mesh into regions runParallel splitMeshRegions -cellZones -defaultRegionName solid -overwrite runParallel $(getApplication) runApplication reconstructParMesh -allRegions -constant runApplication reconstructPar -allRegions paraFoam -touchAll
-
各位老师好,在使用chtMultiRegionFoam自带的标准算例shellAndTubeHeatExchange时,想要使管壳式换热器仅仅在Z轴方向拉伸,而在XY方向保持原尺寸,是否有可行的办法?目前尝试过更改blockMesh中关键点的位置坐标,如下将原来的vertices中Z轴坐标扩大,但均会报错。不知道通过改代码是否能够实现这样的目的,还请各位老师指点,谢谢!
-
@李东岳,感谢李老师挂念,其实当时算的不是喷管,而是引射器,喷管只是其中一个部分,后面因为引射器的整体结构我们无法设计,所以很难判断是模拟的问题还是设计结构的问题,后来就搁浅了。看看后面业主能不能提供现场数据,再算算看。
-
@李东岳 和老板申请一下,结合方向看有没有机会再次跟着老师再拓展点知识面,期待
-
@李东岳 哇,谢谢东岳老师,北京见
-
@李东岳 非常感谢东岳老师,您先忙。那能否把您现在的case发上来,我好好学习一下,搞清楚哪些地方设置错了 ,打工人太难了
-
@李东岳 谢谢李老师,这是改的边界条件吗?“现在需要慢慢向你的设置靠拢”是啥意思呢,是我的初始参数比如11.6MPa不对吗?
-
@李东岳 好的,case已经上传case_laval.rar ,另东岳老师我这是过热水蒸气,是否需要改变thermophysicalProperties内的perfectGas设置,这部分也没啥资料
另外, 东岳老师今年是线下吗,北京还是杭州?上次在杭州上课受益匪浅,希望今年还是在杭州,直接从学校去听课,再跟着老师学习一下 -
@李东岳 我模仿其他压力基求解Case的边界条件进行搭配,我也不知道该咋正确搭配,真令人头大 那东岳老师经验丰富,有啥好的建议吗 ?对于这种简单的laval喷管,入口11.6MPa,633K,出口1MPa
-
@李东岳 谢谢东岳老师回复,U的入口边界条件设定过两种,跑出来的结果都差不多,难道是U的设置出了错误,实际上应该入口30m/s,喉部500m/s,出口1000多m/s
一种是这个INLET_1 { type fixedValue; value uniform (30 0 0); }
一种是这样的
INLET_1 { type pressureInletOutletVelocity; value $internalField;//这是跟随设置的internalField uniform (0 0 0); }
-
各位老师好!学生目前在做简单的laval喷管的模拟,流动介质是过热水蒸汽,采用了sonicFoam和rhocentralFoam以及Fluent,分别进行了计算,OF内求解器的P和U的边界条件都如下图1计算结果(sonic和rhoCentral计算结果差不多)所示,T的边界条件是,入口:type inletOutlet; inletValue uniform 633;出口:type zeroGradient; 可以看出目前模型无法计算,压力和流速都不对。图2的云图是Fluent计算结果,可以看出这个计算结果是比较正确的。目前不知道哪里出现了错误,目前怀疑边界条件有问题,或者是thermophysicalProperties设置不对如下图3,因为模拟的是过热水蒸汽,这部分不知如何修改,请各位老师点拨学生一下,不胜感激!
-
@vbcwl 你好,可以在SRC里面额外添加颗粒属性T,再进行计算,是可行的,但做不到东岳老师说的表面和内部的差异,仅仅是颗粒表面温度。
-
@四季之中的隐星
我自己写的求解器场变量是XX,传进去之后使用const volatile进行转换,你看看是否有帮助const fvMesh& mesh = this->owner().mesh(); const volatile volScalarField& zhan = mesh.objectRegistry::lookupObject<volScalarField>("XX"); const volatile volScalarField& Tsur = mesh.objectRegistry::lookupObject<volScalarField>("Tcell"); volScalarField* modifier = (volScalarField*)(&zhan); volScalarField& XXX = *modifier; volScalarField* modifierTsur = (volScalarField*)(&Tsur); volScalarField& Tsurface = *modifierTsur;
-
@四季之中的隐星 你好,我的方法比较笨。首先在application定义一个场变量(和你要传回来的场值最好一样);然后把这个量传递进SRC中,在SRC里面把场的const性质强行转换为非const,这样就可以赋值,传递出来了
-
@马乔 谢谢马乔老师的回答,这个问题我通过其他方法绕过去解决了。我在求解器外定义了一个场,然后传输进SRC中,把我想获取的值传递到这个场内,然后就可以在求解器调用massStick()的数值了,谢谢前辈的点拨,我后面试试先调用这个方法是否可行,再次感谢!
-
@李东岳 感谢李老师的回复,根据查阅的资料:this->nuEff() = nu() + nut() interFoam求解器使用的this->nuEff()应该是laminarModel下的Stokes.C这个模型,因为在求解器计算时输出器选用的stress model 是Stokes model,那divDevTau()函数下的this->nuEff()就如Stokes.C内所描述如下,就是指向nu()并不是为this->nut() + this->nu(),这里就很疑惑,这里将nu()换成自己设定的Nu(T),就得不到合理的计算结果(流场分布)。此外,我选用的是层流在laminarModel.C内也将nut初始化为0,如下代码,所以不知道interFoam这里调用了哪里的的nuEff(),可能不是目前我认知的Stokes.C内部的
template<class BasicMomentumTransportModel> tmp<volScalarField> Stokes<BasicMomentumTransportModel>::nuEff() const { return volScalarField::New ( IOobject::groupName("nuEff", this->alphaRhoPhi_.group()), this->nu() ); }
template<class BasicMomentumTransportModel> Foam::tmp<Foam::volScalarField> Foam::laminarModel<BasicMomentumTransportModel>::nut() const { return volScalarField::New ( IOobject::groupName("nut", this->alphaRhoPhi_.group()), this->mesh_, dimensionedScalar(dimViscosity, 0) ); }
-
@李东岳 非常感谢李老师不辞辛苦的点拨,现在有了一点小进展,为避免之后的同学犯错总结一下:
(1)之前错误点在于:通过lookup寻找随温度变化的nu场,再将 linearViscousStress.C中的divDevTau()下的this->nuEff()转换为nu场如下代码,这时仅仅编译 linearViscousStress.C上层的momentumTransportModels是不够的,还需要编译incompressible中的divDevTau()函数(尽管并没有修改这个函数),再编译求解器才可以。证明了interFoam中的divDevTau()中的函数在层流下执行的就是 linearViscousStress.C中的divDevTau()。
(2)但现在又存在一个问题,按照东岳老师的interFoam的解析并对照下面的代码可以看出, this->nuEff()是等价与nu即图中的v(运动粘度)
但是如果简单的将this->nuEff()代替成nu是不对的,计算出来的流场是错误的(熔渣向下滴落结果速度是向上的)如下图,其中nu的值都是根据气液相分数乘以分别的nu值得到,不知道哪里错了,或许这里的this->nuEff并不是简单的nu的数值,而是对其进行了处理,但也没找到相关定义,真是举步维艰,心累唉% linearViscousStress.C中的divDevTau()函数返回值 volScalarField Nu = rho.db().objectRegistry::lookupObject<volScalarField>("nu"); return ( - fvc::div((this->alpha_*rho*this->nuEff())*dev2(T(fvc::grad(U)))) - fvm::laplacian(this->alpha_*rho*this->nuEff(), U) ); % 修改后linearViscousStress.C中的divDevTau() volScalarField Nu = rho.db().objectRegistry::lookupObject<volScalarField>("nu"); return ( - fvc::div((this->alpha_*rho*Nu)*dev2(T(fvc::grad(U)))) - fvm::laplacian(this->alpha_*rho*Nu, U) );
-
@李东岳 目前应该是还没找对divDevTau(rho, U)具体位置,不知道把nu传给谁,网上说传给 linearViscousStress.C,但没任何反应,我昨天有个笨办法,在OF9下的MomentumTransportModels这个文件夹下关于divDevTau()所有定义内都加了Info输出某个量,用来监测interFoam中的divDevTau()到底调用了哪个函数,如下,但是没发现任何调用的迹象,我感觉很懵,明明定义在这个文件夹下,咋会找不到它的具体调用 ,东岳老师Help !!!现在完全没思路了
%%这是非线性的divDevTau函数定义在 nonlinearEddyViscosity.C内 template<class BasicMomentumTransportModel> Foam::tmp<Foam::fvVectorMatrix> Foam::nonlinearEddyViscosity<BasicMomentumTransportModel>::divDevTau ( const volScalarField& rho, volVectorField& U ) const { Info<< " 13 "<<endl; return ( fvc::div(rho*nonlinearStress_) + eddyViscosity<BasicMomentumTransportModel>::divDevTau(rho, U) ); } %%这是非线性的divDevTau函数定义在 linearViscousStress.C内 template<class BasicMomentumTransportModel> Foam::tmp<Foam::fvVectorMatrix> Foam::linearViscousStress<BasicMomentumTransportModel>::divDevTau ( const volScalarField& rho, volVectorField& U ) const { //volScalarField Nu = rho.db().objectRegistry::lookupObject<volScalarField>("NU"); Info<<"8"<<endl; return ( - fvc::div((this->alpha_*rho*this->nuEff())*dev2(T(fvc::grad(U)))) - fvm::laplacian(this->alpha_*rho*this->nuEff(), U) ); }
-
@李东岳 非常感谢李老师回复,现在最关键的问题是把nu与T之间的函数建立之后,无法将nu传递进divDevTau(rho, U)这个函数内部,因为根本找不到任何关于它的实质定义。这个问题有个前辈之前也发帖询问过:https://www.cfd-china.com/topic/3588/devreff-通过devrhoreff-实现其功能-rho-1-of4-x @Yongbo
(1)interFoam求解器内divDevTau(rho, U)指向的是 /IncompressibleMomentumTransportModel.C下的divDevTau(rho, U)这个函数,但是根本没找到任何相关的divDevTau(rho, U)的具体定义;
(2)反而在linearViscousStress.C下存在divDevTau(rho, U),如下,但发现改变这个没任何反应,说明调用的也不是这个,后面我把IncompressibleMomentumTransportModel这个类下的所有有关divDevTau这个函数都改了一遍,发现都没任何反应,人完全懵了,就想知道interFoam中divDevTau(rho, U)具体是怎么实现的,虽然在IncompressibleMomentumTransportModel下,但是根本没有任何定义,人都被代码搞麻了template<class BasicMomentumTransportModel> Foam::tmp<Foam::fvVectorMatrix> Foam::linearViscousStress<BasicMomentumTransportModel>::divDevTauBaby ( const volScalarField& rho, volVectorField& U ) { volScalarField Nu = rho.db().objectRegistry::lookupObject<volScalarField>("NU");%%这是我写的想要将变化的Nu传递进来 return ( - fvc::div((this->alpha_*rho*Nu)*dev2(T(fvc::grad(U)))) - fvm::laplacian(this->alpha_*rho*Nu, U) ); }
-
@李东岳 非常感谢东岳老师的回复,接下来是(SOS,紧急求救!!!)首先说下模拟背景(OF9):这个算例模拟辐射和对流加热下,熔渣受热熔化向下滴落这个过程如下图Alpha 0时刻 到 Alpha 1时刻 这个过程,觉得传热方程不复杂自己就植入进去了,以源项的形式考虑了熔渣和空气接触面处的传热,目前计算结果也没问题如图T 0时刻 到 T 1时刻,以上是考虑的第一部分。
第二部分考虑随着温度升高,熔渣的运动粘度不断变小,流动性变好,所以想植入nu与T之间的关系,但interFoam中nu是一个常数,根据代码发现,UEqn.H(第一段代码)中turbulence->divDevTau(rho, U),使用到了nu,因此想在src库中找到关于divDevTau(rho, U),把场变量Nu放进来,以为很简单,但接下来就开始了无穷尽的折磨。
(1)根据divDevTau()定义找到了位于src/MomentumTransportModels/incompressible/IncompressibleMomentumTransportModel/的函数定义(第二段代码),发现函数定义在反复横跳,就是不给表达式;
(2)根据网上资料发现在linearViscousStress.C文件下有关于****divDevTau(rho, U)****的定义,非常激动的准备把this->nuEff(),这个关于nu的函数直接改成Nu这个随温度变化的标量场(这里认为this->nuEff()就是nu的场),结果毫无作用 ;
(3)既然上面没作用就想着直接把这段代码放在UEqn.H内()如下UEqn.H的代码,发现量纲是对的,又很激动,结果能算,但是完全错误,可见上图的UY的对比,熔渣向下流动,结果我改完代码,速度是向上的。
(4)后面我把我采用笨办法把MomentumTransportModels中的所有代码都看了一遍,很不幸还是没找到关于这个歌函数的定义。。。。。。
(5)被逼疯的状态,国庆加班两天了,又到24点了,求求东岳老师和各位大佬拯救我吧,头发快被我抓掉光了,目前就是想找到 divDevTau(rho, U) ,这个SB函数的具体定义式,然后如何把nu这个场变量放进去,或者说this->nuEff()具体是啥,这我也找不到具体定义,都是虚函数,没有说明具体定义,唉要被逼疯了fvVectorMatrix UEqn ( fvm::ddt(rho, U) + fvm::div(rhoPhi, U) + MRF.DDt(rho, U) + turbulence->divDevTau(rho, U) //- fvc::div((rho*NU)*dev2(T(fvc::grad(U))))%%(3)暴力放进来 // - fvm::laplacian(rho*NU, U) == phaseChange.SU(rho, rhoPhi, U) + fvModels.source(rho, U) );
template<class TransportModel> Foam::tmp<Foam::fvVectorMatrix> Foam::IncompressibleMomentumTransportModel<TransportModel>:: divDevTau ( const volScalarField& rho, volVectorField& U ) const { NotImplemented; return divDevSigma(U); } template<class TransportModel> Foam::tmp<Foam::fvVectorMatrix> Foam::IncompressibleMomentumTransportModel<TransportModel>::divDevSigma ( volVectorField& U ) const { return divDevTau(U); } template<class TransportModel> Foam::tmp<Foam::fvVectorMatrix> Foam::IncompressibleMomentumTransportModel<TransportModel>:: divDevTau ( volVectorField& U ) const { NotImplemented; return divDevSigma(U); }
template<class BasicMomentumTransportModel> Foam::tmp<Foam::fvVectorMatrix> Foam::linearViscousStress<BasicMomentumTransportModel>::divDevTau ( const volScalarField& rho, volVectorField& U ) const { volScalarField Nu = rho.db().objectRegistry::lookupObject<volScalarField>("NU"); return ( - fvc::div((this->alpha_*rho*this->nuEff()(改成Nu))*dev2(T(fvc::grad(U)))) - fvm::laplacian(this->alpha_*rho*this->nuEff()(改成Nu), U) ); }
-
@李东岳 东岳老师好,我这个昨晚发现问题了,我原来的TEqn如下:
//计算错误 fvScalarMatrix TEqn ( fvm::ddt(rho*cp,Tcell) +fvm::div(rhoPhiT,Tcell) -fvm::laplacian(k,Tcell) ); TEqn.solve(); //计算正确 fvScalarMatrix TEqn ( fvm::ddt(Tcell) +fvm::div(phi,Tcell) -fvm::laplacian(k/cp/rho,Tcell) ); TEqn.solve(); //基金会版本 fvScalarMatrix TEqn ( fvm::ddt(rhoCp, T) + fvm::div(rhoCpPhi, T, "div(phi,T)") - fvm::Sp(fvc::ddt(rhoCp) + fvc::div(rhoCpPhi), T) - fvm::laplacian(kappaEff, T, "laplacian(kappa,T)") == fluid.heatTransfer(T) + radiation->ST(T) + fvOptions(rhoCp, T)
上面求解是有问题的,后面我把各项的rho和cp同时约去,变成上面那样,这样就可以计算了,结果也是正常的,如下图。此外,我还有一个问题,如果想要考虑气液界面处的传热,是不是要在方程后面加上一项,就像基金会版本求解器icoReactingMultiphaseInterFoam中的代码中的 fluid.heatTransfer(T),但具体这部分怎么做的,目前感觉没有思路也没找到相关的文献资料,还请东岳老师和各位大佬多多指点,谢谢!
-
@李东岳 @李东岳 @李东岳 谢谢东岳老师,的确仅植入对流项结果和上面一样,速度大的离谱。对流项植入的代码如下,如上面公式3-4所描述的那个对流项,小弟卡在这个地方好久了,就是解决不掉,还请东岳老师和各位大佬多多指点,或者说是不是我上面的文献中的公式不能用于interFoam的两相能量求解?那该如何解决呢,谢谢各位老师!
//这里在createFields中创建cp,水(alpha1)和空气的定压比热容 dimensionedScalar cp1("cp1", dimensionSet(0,2,-2,-1,0), 4200); dimensionedScalar cp2("cp2", dimensionSet(0,2,-2,-1,0), 1003); volScalarField cp ( IOobject ( "cp", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT ), alpha1*cp1 + alpha2*cp2 ); cp.oldTime(); //这里定义水和空气的导热系数 dimensionedScalar k1("k1", dimensionSet(1,1,-3,-1,0), 0.59); dimensionedScalar k2("k2", dimensionSet(1,1,-3,-1,0), 0.026); volScalarField k ( IOobject ( "k", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT ), alpha1*k1 + alpha2*k2 ); k.oldTime(); //定义密度 volScalarField rho ( IOobject ( "rho", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT ), alpha1*rho1 + alpha2*rho2 ); rho.oldTime(); //dingyi热通量即rho*cp*phi surfaceScalarField rhoPhiT ( IOobject ( "rhoPhiT", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), fvc::interpolate(rho*cp)*phi );
rhoPhiT = fvc::interpolate(rho*cp)*phi;
+fvm::div(rhoPhiT,Tcell)
-
@李东岳 非常感谢东岳老师,的确是phi没有更新,但加上更新之后,发现温度场求解更加离谱,在液相前锋出现极端值,如下图(0.1s时的相分数,温度,边界示意图),这种情况是什么原因,我猜测是不是壁面的温度边界条件设置的不对,还请各位老师,再多多指点,谢谢!
-
各位老师好,最近在做两相流动(空气和水)过程中,空气对液相的加热过程,准备基于interFoam求解器添加能量方程,参考如下公式:
在interFoam内植入的代码(无源项St)如下,基于溃坝的算例,结果计算的温度场、相分数场如下图,温度并不随着水相的迁移而迁移,与初始场基本无变化,困惑已久,希望得到各位老师的指点,不胜感激,谢谢!cp = alpha1*cp1 + alpha2*cp2; k = alpha1*k1 + alpha2*k2; rho = alpha1*rho1 + alpha2*rho2 rhoPhiT = fvc::interpolate(rho*cp)*phi
fvScalarMatrix TEqn ( fvm::ddt(cp*rho,Tcell) +fvm::div(rhoPhiT,Tcell) -fvm::laplacian(k,Tcell) ); TEqn.solve();
-
@李东岳谢谢东岳老师,已经搞定了在求解器窗口输入 of2106 就切换回V2106版本了
-
在使用东岳老师提供的openfoam虚拟机时(OpenFOAM-9+OpenFOAM-v2106),发现其只能使用OpenFOAM-9进行相关编译,即使在OpenFOAM-v2106下编译其自带求解器,也会报错,所以想咨询一下各位老师,这种情况下想使用V2106应该如何操作?按照网上提供的重新安装编译OpenFoam-v2106的教程,也会报错如下,这个$WM_PROJECT_DIR代表的还是OpenFOAM-9
error (Allwmake) : not located in $WM_PROJECT_DIR Check your OpenFOAM environment and installation
-
@李东岳 感谢东岳老师的回答,第一张图内代码定义的massStick()不是我写的,是src库内定义的场变量,我目前想在求解器主程序内寻找到这一变量,于是在求解器程序内写了如代码1,2两种方式,发现都无法寻找到massStick这个场变量,老师您看代码1,2写的是不是有啥问题?谢谢东岳老师!
-
各位老师,我目前在使用MPPICFoam求解器时,需要在主函数中对壁面粘附的massStick这个场进行处理,但是现在无法寻找到这一场变量,尝试两种写法,虽都能通过编译,但运行均会报错,代码及报错信息如下1,2。具体需要寻找的场变量定义如下图,希望各位老师,朋友加以指点,不胜感激,卡在这地方好几天了
1、const volScalarField stick = mesh.time().lookupObject<volScalarField>("massStick"); //报错信息是 request for volScalarField massStick from objectRegistry shiyan3 failed available objects of type volScalarField are 0()
2、
const volScalarField stick = mesh.lookupObject<volScalarField>("massStick"); //报错信息是 request for volScalarField massStick from objectRegistry region0 failed available objects of type volScalarField are 8 ( alpha.air_0 deltaH2 nu mu.air p alpha.air rho.air deltaH1 )
-
@田畔的风 非常感谢两位老师@李东岳 ,感觉久旱逢甘露 ,话不多说,我要开始汲取营养了,后面有相关问题和进展,再向老师们请教
-
@李东岳 东岳老师,您好,目前我遇到了和上面那个同学类似问题@xiaolin ,具体问题如下:二维内,气固两相流动过程中,固态颗粒和壁面(半圆形壁面)碰撞,粘连形成沉积。目前的想法是当贴近壁面的第一层网格内,固相体积分数大于某值时,壁面的边界条件就向上移动一个单元,就是上面"alpha与point的关系“。目前发现相关动网格编程资料很少,盼望各位老师能给点建议或者参考资料学习一下,提前谢谢各位大神!
-
@李东岳 收到,谢谢东岳老师!
-
@李东岳 对的李老师,我去年参加过OKS课程,周四晚上有时间的,那就提前谢谢李老师了!
-
@李东岳 东岳老师,上次那个程序您帮忙看看,有结果了吗
-
@李东岳 哇,谢谢东岳老师,非常感谢感谢
-
@李东岳 东岳老师,上次温度方程求解错误主要是由于两个原因,一个是边界条件给错了,还一个是温度方程和动量、连续相方程耦合求解了,经过更改已经可以正常运行。但目前在验证算例时发现和实验值存在较大的误差。
验证算例如下: 一根长为 12 m, 直径为 1 m的垂直管, 管道上端为入口, 管道下端为出口,出口压力是 1e5Pa, 气液相分别为空气和水,温度均为 25 ℃ .入口处 x = 0, 出口处 x = 12 m.初始状态如图 1(a)所示, 气相相含率 0. 2, 气相速度 Vg=0;液相相含率 0. 8, 液相速度 Vl=10 m/s。使用双欧拉求解。耦合求解动量及连续性方程(参考瞬态可压缩压力泊松方程),收敛后求解相率方程,进行下一时间步。图一是示意图,图二是解析解的气相分数及液相流速,图三为求解出的压力、持气率、液相流速,可以看出波动很大,尤其持气率波动尤其大,已经排除网格密度的原因。能力有限,查找一周的错误了,实在找不到什么别的原因了,还望东岳老师和前辈指点一二。
气液相动量方程:fvVectorMatrix UEqn1 ( fvm::ddt(alpharho1, U1) + fvm::div(alphaphi1, U1) == -pGrad1-Sg ); UEqn1.solve(); fvVectorMatrix UEqn2 ( fvm::ddt(alpharho2, U2) + fvm::div(alphaphi2, U2) == -pGrad2-Sl ); UEqn2.solve();
连续性方程
psi1 = 1/Cg/Cg; psi2 = rho2/p; volScalarField rAU1(1.0/UEqn1.A()); surfaceScalarField rhorAUf1("rhorAUf1", fvc::interpolate(alpharho1*rAU1/rhog)); volVectorField HbyA1(constrainHbyA(rAU1*UEqn1.H(), U1, p)); surfaceScalarField phiHbyA1 ( "phiHbyA1", ( fvc::interpolate(psi1*alpha1/rhog) *fvc::flux(HbyA1) ) ); volScalarField alphapsi1("alphapsi1",alpha1*psi1/rhog); volScalarField rAU2(1.0/UEqn2.A()); surfaceScalarField rhorAUf2("rhorAUf2", fvc::interpolate(alpharho2*rAU2/rho2)); volVectorField HbyA2(constrainHbyA(rAU2*UEqn2.H(), U2, p)); surfaceScalarField phiHbyA2 ( "phiHbyA2", ( fvc::interpolate(psi2*alpha2/rho2) *fvc::flux(HbyA2) ) ); volScalarField alphapsi2("alphapsi2",alpha2*psi2/rho2); fvScalarMatrix pEqn ( fvm::ddt(alphapsi1, p) + fvm::ddt(alphapsi2, p) + fvm::div(phiHbyA1, p) + fvm::div(phiHbyA2, p) - fvm::laplacian(rhorAUf1, p) - fvm::laplacian(rhorAUf2, p) ); pEqn.solve(); rho1 = p*psi1; rho1.correctBoundaryConditions();
surfaceScalarField phi1 = fvc::interpolate(rho1*U1) & mesh.Sf(); surfaceScalarField phi2 = fvc::interpolate(rho2*U2) & mesh.Sf(); fvScalarMatrix alpharhoEqn1 ( fvm::ddt(rho1,alpha1) + fvm::div(phi1,alpha1) ); fvScalarMatrix alpharhoEqn2 ( fvm::ddt(rho2,alpha2) + fvm::div(phi2,alpha2) ); alpharhoEqn1.solve(); alpharhoEqn2.solve(); alpha1 = alpha1/(alpha1+alpha2); alpha2 = 1 - alpha1; alpha2.correctBoundaryConditions();
-
@李东岳 对的,东岳老师,我是先求解动量方程,压力修正方程之后,最后一步再求解温度场,压力这个时候已经是已知的吧,然后就各种发散
-
目前在求解两相可压缩流动过程时的温度方程时出现一些问题,请教一下各位老师前辈。求解发现,管道内流体流到处温度急剧下降至0.01K量级,直至发散。试图将不同相除以其密度再相加,问题依旧存在,感觉方程和植入没啥问题,不知道为啥始终求得温度接近0K,烦请各位老师指点一二,谢谢!
alphacp1 = alpha1*cp1*rho1; alphacp2 = alpha2*cp2*rho2; alphaphicp1 = fvc::interpolate(alphacp1*U1) & mesh.Sf(); alphaphicp2 = fvc::interpolate(alphacp2*U2) & mesh.Sf(); surfaceScalarField birho1 = fvc::interpolate(alpha1*rho1*U1) & mesh.Sf()/fvc::interpolate(rho1); surfaceScalarField birho2 = fvc::interpolate(alpha2*rho2*U2) & mesh.Sf()/fvc::interpolate(rho2); fvScalarMatrix TEqn ( fvm::ddt(alphacp1,T) + fvm::ddt(alphacp2,T) + fvm::div(alphaphicp1,T) + fvm::div(alphaphicp2,T) + fvc::div(birho1,p) + fvc::div(birho2,p) - fvc::ddt(alpha1,p) - fvc::ddt(alpha2,p) ); TEqn.solve();
-
@李东岳 感谢东岳老师,在去掉PBM模型(其他条件不变时)后,收敛起来很容易,证明应该不是流场的原因。加上PBM后不收敛的原因是什么,还请您指点
-
各位老师、大神好,
用PBM模拟局部管道水合物颗粒沉积问题,
两相分别为液态水和水合物颗粒相- 大管径为进口时,残差曲线勉强收敛(减小松弛因子后)
- 小管径进口,大管径为出口时。残差曲线一直不收敛
物理模型为变径管 网格质量(图)!
残差曲线一直不收敛
流速模型用的k-ɛ模型,多相流模型为欧拉双流体模型、pbm
边界条件 :速度入口(流速范围为0.5-2.5m/s)、压力出口、壁面无滑移
会不会是因为流场变复杂了?
想知道具体不收敛的原因,希望各位老师指点指点 -
@李东岳 感谢东岳老师的回复,这模拟的是双流体,主要是关注离散相沉积
-
@Samuel-Tu 谢谢前辈指点,使用transform已经解决了
-
各位老师好,在使用paraView处理长宽比例差距很大面场时,就像下图,怎么扩大Y轴比例,使得Y和Z轴上的物理量都能看得比较清楚,现在由于Z轴很长(10m),Y很小(5cm),Y轴上的量根本看不清楚,谢谢各位前辈指点一二
-
@李东岳 岳 东岳老师好,上面公式S其实表达的意思不一样的,我这里用错了,现在存在的困难是怎么求解这个压力方程值p',感觉好难写出来只关于p'的方程,再进行求解,希望能得到东岳老师和各位前辈的指点,谢谢!
-
各位老师前辈好,最近在向openFoam内植入如下图所示方程时,遇到了几个问题,想请各位老师前辈指点一二,方程背景大致是一维管内包含传质的气液两相流动求解,其中S源项就是两相之间传质量。现在遇到主要问题一个是求解速度压力修正值时,怎么表示出如离散表达式内的各个系数,这部分我看好像是HbyA矩阵这样的,看了好久还是不咋明白该怎么在程序内表达,另一个就是怎么写带入修正值后的连续性方程,怎么把这个修正方程写成求解P'的形式。提前谢谢各位老师了
-
@李东岳 对的,大概有十几公里,那谢谢东岳老师,我再使劲努努力钻研一下。个人觉得根据文献植入算法太难了,虽然能看懂离散和求解过程,但是想在openfoam里面实现觉得难度挺大的,当时老师您带我们植入的单相可压缩的,目前这是两相可压缩,我努力努力,再次感谢东岳老师的持续关心
-
@李东岳 DPM那个是自己在paiSpring那个模型下面添加的颗粒碰撞聚集得到的结果,粒径分布是还可以,但因为实际工程中固相颗粒数量很大以及流场压力不稳定,计算起来非常慢就没有再去接着做了;IATE用到液固我也没见过,就是做着看看,找不到相关的参考文献,就大致算成这样,就准备放论文里面了。还有一个问题想请教一下老师,就是老板准备让植入一个1D的管道沉积模型,想要看看在openfoam框架下能不能做,具体内容这篇参考文献:[https://www.sciencedirect.com/science/article/pii/S0920410520310585]
-
@李东岳 主要是用来算液固流的,因为缺少固体颗粒破碎和聚集的效率因子,算出来的粒径分布和实验还是存在比较大的误差,大致就像下面这样。因为想做出固相沉积的样子,所以看到老师上个帖子有算沉积的,想学习一下,结果感觉自己植入太难。估计得再报一次补习班了。
-
@李东岳 东岳老师是想诱惑我再报一次您的辅导班
OpenFOAM中的网格导出fluent中出现问题
chtMultiRegionFoam自带算例的网格问题
chtMultiRegionFoam自带算例的网格问题
chtMultiRegionFoam自带算例的网格问题
openFoam与Fluent模拟简单的Laval蒸汽喷管
openFoam与Fluent模拟简单的Laval蒸汽喷管
openFoam与Fluent模拟简单的Laval蒸汽喷管
openFoam与Fluent模拟简单的Laval蒸汽喷管
openFoam与Fluent模拟简单的Laval蒸汽喷管
openFoam与Fluent模拟简单的Laval蒸汽喷管
openFoam与Fluent模拟简单的Laval蒸汽喷管
openFoam与Fluent模拟简单的Laval蒸汽喷管
openFoam与Fluent模拟简单的Laval蒸汽喷管
DPMFoam给粒子添加温度等
如何使用lookupObject寻找SRC库内的场变量
如何使用lookupObject寻找SRC库内的场变量
如何使用lookupObject寻找SRC库内的场变量
interFoam耦合相间的能量方程
interFoam耦合相间的能量方程
interFoam耦合相间的能量方程
interFoam耦合相间的能量方程
interFoam耦合相间的能量方程
interFoam耦合相间的能量方程
interFoam耦合相间的能量方程
interFoam耦合相间的能量方程
interFoam耦合相间的能量方程
虚拟机双版本OpenFOAM怎么切换使用
虚拟机双版本OpenFOAM怎么切换使用
如何使用lookupObject寻找SRC库内的场变量
如何使用lookupObject寻找SRC库内的场变量
关于网格高度变化的动网格设置
关于网格高度变化的动网格设置
气液流动过程中温度直接求解问题
气液流动过程中温度直接求解问题
气液流动过程中温度直接求解问题
气液流动过程中温度直接求解问题
气液流动过程中温度直接求解问题
气液流动过程中温度直接求解问题
气液流动过程中温度直接求解问题
fluent求助帖 变径管(PBM模型)的收敛问题
fluent求助帖 变径管(PBM模型)的收敛问题
paraView调整显示比例
paraView调整显示比例
paraView调整显示比例
怎么读取openFoam中系数矩阵
怎么读取openFoam中系数矩阵
twoPhaseEulerFoam中的IATE模型系数
twoPhaseEulerFoam中的IATE模型系数
twoPhaseEulerFoam中的IATE模型系数
openfoam中的沉积