各位老师好,最近在做of和fluent的对比模拟,在of中通过stl对模型进行个网格划分,在使用foamMeshToFluent命令后只能得到如图1的长方体网格,好像是stl文件用来切割的,但实际的网格应该是图2,烦请各位老师指点一二,这种网格应该如何导出,谢谢!
upc_ngh
帖子
-
OpenFOAM中的网格导出fluent中出现问题 -
chtMultiRegionFoam自带算例的网格问题@李东岳
(1)对的,李老师。今天下午按照这个命令发现,在简单的block块网格上可以实验单一Z方向的拉伸,但对于snappyHexMesh生成后发现多个方向都成倍数扩展了,这个不知道是什么问题,还请李老师和各位大神指点一下;
(2)是的,网格质量会变差,但是可以通过对Z方向多做网格节点弥补。
因此,总的来说对于复杂网格的单一方向拉伸,of是不是没法通过简单的命令进行处理呢?还请各位老师指点,谢谢! -
chtMultiRegionFoam自带算例的网格问题@李东岳 感谢东岳老师回复,但使用这个命令后模型依然全尺寸扩大了,我具体的命令如下。是不是针对简便的缩放模型,更改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自带算例的网格问题各位老师好,在使用chtMultiRegionFoam自带的标准算例shellAndTubeHeatExchange时,想要使管壳式换热器仅仅在Z轴方向拉伸,而在XY方向保持原尺寸,是否有可行的办法?目前尝试过更改blockMesh中关键点的位置坐标,如下将原来的vertices中Z轴坐标扩大,但均会报错。不知道通过改代码是否能够实现这样的目的,还请各位老师指点,谢谢!
-
openFoam与Fluent模拟简单的Laval蒸汽喷管@李东岳,感谢李老师挂念,其实当时算的不是喷管,而是引射器,喷管只是其中一个部分,后面因为引射器的整体结构我们无法设计,所以很难判断是模拟的问题还是设计结构的问题,后来就搁浅了。看看后面业主能不能提供现场数据,再算算看。
-
openFoam与Fluent模拟简单的Laval蒸汽喷管@李东岳 和老板申请一下,结合方向看有没有机会再次跟着老师再拓展点知识面,期待
-
openFoam与Fluent模拟简单的Laval蒸汽喷管@李东岳 哇,谢谢东岳老师,北京见
-
openFoam与Fluent模拟简单的Laval蒸汽喷管@李东岳 非常感谢东岳老师,您先忙。那能否把您现在的case发上来,我好好学习一下,搞清楚哪些地方设置错了 ,打工人太难了
-
openFoam与Fluent模拟简单的Laval蒸汽喷管@李东岳 谢谢李老师,这是改的边界条件吗?“现在需要慢慢向你的设置靠拢”是啥意思呢,是我的初始参数比如11.6MPa不对吗?
-
openFoam与Fluent模拟简单的Laval蒸汽喷管@李东岳 好的,case已经上传case_laval.rar ,另东岳老师我这是过热水蒸气,是否需要改变thermophysicalProperties内的perfectGas设置,这部分也没啥资料
另外, 东岳老师今年是线下吗,北京还是杭州?上次在杭州上课受益匪浅,希望今年还是在杭州,直接从学校去听课,再跟着老师学习一下 -
openFoam与Fluent模拟简单的Laval蒸汽喷管@李东岳 我模仿其他压力基求解Case的边界条件进行搭配,我也不知道该咋正确搭配,真令人头大 那东岳老师经验丰富,有啥好的建议吗 ?对于这种简单的laval喷管,入口11.6MPa,633K,出口1MPa
-
openFoam与Fluent模拟简单的Laval蒸汽喷管@李东岳 谢谢东岳老师回复,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); }
-
openFoam与Fluent模拟简单的Laval蒸汽喷管各位老师好!学生目前在做简单的laval喷管的模拟,流动介质是过热水蒸汽,采用了sonicFoam和rhocentralFoam以及Fluent,分别进行了计算,OF内求解器的P和U的边界条件都如下图1计算结果(sonic和rhoCentral计算结果差不多)所示,T的边界条件是,入口:type inletOutlet; inletValue uniform 633;出口:type zeroGradient; 可以看出目前模型无法计算,压力和流速都不对。图2的云图是Fluent计算结果,可以看出这个计算结果是比较正确的。目前不知道哪里出现了错误,目前怀疑边界条件有问题,或者是thermophysicalProperties设置不对如下图3,因为模拟的是过热水蒸汽,这部分不知如何修改,请各位老师点拨学生一下,不胜感激!
-
DPMFoam给粒子添加温度等@vbcwl 你好,可以在SRC里面额外添加颗粒属性T,再进行计算,是可行的,但做不到东岳老师说的表面和内部的差异,仅仅是颗粒表面温度。
-
如何使用lookupObject寻找SRC库内的场变量@四季之中的隐星
我自己写的求解器场变量是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;
-
如何使用lookupObject寻找SRC库内的场变量@四季之中的隐星 你好,我的方法比较笨。首先在application定义一个场变量(和你要传回来的场值最好一样);然后把这个量传递进SRC中,在SRC里面把场的const性质强行转换为非const,这样就可以赋值,传递出来了
-
如何使用lookupObject寻找SRC库内的场变量@马乔 谢谢马乔老师的回答,这个问题我通过其他方法绕过去解决了。我在求解器外定义了一个场,然后传输进SRC中,把我想获取的值传递到这个场内,然后就可以在求解器调用massStick()的数值了,谢谢前辈的点拨,我后面试试先调用这个方法是否可行,再次感谢!
-
interFoam耦合相间的能量方程@李东岳 感谢李老师的回复,根据查阅的资料: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) ); }
-
interFoam耦合相间的能量方程@李东岳 非常感谢李老师不辞辛苦的点拨,现在有了一点小进展,为避免之后的同学犯错总结一下:
(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) );
-
interFoam耦合相间的能量方程@李东岳 目前应该是还没找对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) ); }