@李东岳 确实没看,主要在网上搜来着🤦,感谢老师!我现在研究一下!
李炳锐
帖子
-
请教一个&运算符的问题,&运算符对矩阵/单位的运算是什么呢? -
请教一个&运算符的问题,&运算符对矩阵/单位的运算是什么呢?在of10可压缩VOF求解器中,T方程有这样一部分表达式:
- ( U() & (fvModels.source(rho, U)&U)() ) *
下面说的不一定正确,但是目前有两个问题,
1.试了一下,好像U()是一个dimensionedField ,fvModels.source(rho, U)是一个fvMatrix,fvModels.source(rho, U)&U则变成了GeometricField。 其中这两个&符号是什么意思呢?怎么用数学表达式表述这项呢?
2.fvModels.source(rho, U)的单位就应该是kg m s [1 -2 -2],在做了上述运算后单位变成了[1 -1 -3],也就是多一个速度的单位,这个速度的单位是哪个&运算符带来的呢?为什么不是[1 0 -4]呢?
感谢各位老师同学!!!! -
denseParticleFoam中动量源项的求解@李东岳 太好了!学习中!
-
denseParticleFoam中动量源项的求解@李东岳 期待!谢谢老师
-
denseParticleFoam中动量源项的求解@李东岳 感谢李老师回复,我才注意到老师已经写过这个求解器的算法分析了。
但是我还是不太清楚operator.SU(U)调用的是什么函数,如果按我的理解,它调用的是这个,因为parcelCloud继承自ParcelCloudBase:class ParcelCloudBase : public Cloud<ParticleType>, virtual public parcelCloudBase { public: tmp<fvVectorMatrix> SU(const volVectorField& U) const { return tmp<fvVectorMatrix> ( new fvVectorMatrix(U, dimMass*dimAcceleration) ); } }
但是我看李老师写的文章,似乎实际用的是这个
code_texttemplate<class CloudType> inline Foam::tmp<Foam::fvVectorMatrix> Foam::MomentumCloud<CloudType>::SU(const volVectorField& U) const { if (debug) { Info<< "UTrans min/max = " << min(UTrans()).value() << ", " << max(UTrans()).value() << nl << "UCoeff min/max = " << min(UCoeff()).value() << ", " << max(UCoeff()).value() << endl; } if (solution_.coupled()) { if (solution_.semiImplicit("U")) { const volScalarField::Internal Vdt(this->mesh().V()*this->db().time().deltaT()); return UTrans()/Vdt - fvm::Sp(UCoeff()/Vdt, U) + UCoeff()/Vdt*U; } else { tmp<fvVectorMatrix> tfvm(new fvVectorMatrix(U, dimForce)); fvVectorMatrix& fvm = tfvm.ref(); fvm.source() = -UTrans()/(this->db().time().deltaT()); return tfvm; } } return tmp<fvVectorMatrix>(new fvVectorMatrix(U, dimForce)); }
我有点搞不清,想再请教一下李老师
-
denseParticleFoam中动量源项的求解各位老师、大佬,最近在看denseParticleFoam求解器,不太清楚动量方程中的源项矩阵cloudSU具体是怎么求出来的,我目前找到这里,求大家指点一下我:
求解器中,在createFields文件中,创建了一个parcelCloudList类:
parcelCloudList clouds(rhoc, Uc, muc, g);
随后在计算过程中创建了这个源项的矩阵cloudSU? 应该是通过计算出来的源项场 clouds.SU(Uc) 构造的 ?如下:
fvVectorMatrix cloudSU(clouds.SU(Uc));
parcelCloudList类中的 SU 函数如下:
Foam::tmp<Foam::fvVectorMatrix> Foam::parcelCloudList::SU ( const volVectorField& U ) const { tmp<fvVectorMatrix> tSU(new fvVectorMatrix(U, dimMass*dimAcceleration));** forAll(*this, i) { tSU.ref() += operator[](i).SU(U); } return tSU; }
这里想问一下:我理解成,parcelCloudList类继承自PtrList<parcelCloud>类,operator返回了PtrList<parcelCloud>类中指向的第i个parcelCloud类成员的指针,是这个意思吗?也就是说这里的tSU.ref()遍历了PtrList中的所有粒子团的指针然后把每一个粒子团所属类的parcelCloud.SU函数的返回值相加了得到了一个源项的场,可以这么理解吗?
parcelCloud类的SU函数
tmp<fvVectorMatrix> SU(const volVectorField& U) const { return tmp<fvVectorMatrix> ( new fvVectorMatrix(U, dimMass*dimAcceleration) ); }
但是在这里,parcelCloud中的SU函数又是怎么返回一个动量源项的值的呢?new这里实在是看不懂什么意思了!!!包括我看设置文件中,还可以选用WenYu曳力模型等,现在搞不清楚求解器在哪读取了这些相关设置,又是如何计算的。
求来大佬/老师帮忙看看吧!!!
-
Fluent UDF 如何调用元胞的静温想要使材料的导热系数与比热容随温度变化,fluent内导入的相关的UDF如下。
#include "udf.h" DEFINE_PROPERTY(cell_heatconductivity,cell,thread) { real heatconductivity; real te = C_T(cell,thread); heatconductivity = 1.7 + (te-300)/25; return heatconductivity; } DEFINE_SPECIFIC_HEAT(my_user_cp, T, Tref, h, yi) { real cp = 2000 + T ; return cp; }
然后发现,udf里面的te与T指的是总温而不是实际温度。也就是说运算中,比热容与导热系数是随着总温变化的。
云图如下:
我改怎么做才能让比热容与导热系数在计算中是随着实际温度变化 的呢?
初学Fluent,找了一段时间也没找到解决办法,麻烦前辈们帮我看一眼!