@coolhhh 发现问题了,因为我的是两相流,需要设定field 为U.water
Jasper 0
帖子
-
-
我在controldict里面加入如下代码想计算vorticity,结果发现只在初始时刻算了一次,后面时刻的值就不变了
vorticity1 { type vorticity; libs (fieldFunctionObjects); writeControl writeTime; }
即使我加入执行控制,vorticity依然是不随着计算时间变化,有没有大佬知道这是咋回事?
vorticity1 { type vorticity; libs (fieldFunctionObjects); executeControl timeStep; executeInterval 1; writeControl writeTime; }
-
@李东岳 加了,就是把杨氏模量调大点就会有堆积了,估计之前的太小了导致没有弹性。。。
-
谢大佬回复,刚搜了一下貌似跟材料和粒径都有关系
-
我发现这个youngsModulus的系数貌似跟粒径有关。
- 当我用粒径为3毫米的时候,我设置系数为1e4粒子并不会发生融合;
- 但当我用粒径1cm的时候,系数为1e4就会融合了,然后把系数调到1e8就不会融合了。
但是这个系数越大计算速度越慢。请问这个youngsModulus系数有没有一个设置的标准啊?还是说只能像我现在这样试?
-
@李东岳 终于找到了问题所在,不知道为什么在这个case里我把young's Modulus设置成了1e-8,改成1e8之后就会有堆积了
-
谢谢李老师,我试一下然后再来说一下进展
-
放小了是会好很多,但是我这个scale factor是设置的1呀,这样显示出来的不应该就是实际的粒子大小吗?我设置了粒子直径是1cm,这个计算域的直径也才15cm,一共有2万个粒子,理论上来说应该肯定堆积起来了吧?学生对这个沉积的问题确实是困扰好久了,还望李老师帮忙解答一下,万分感谢啊!
-
@李东岳 我也想到了这个问题,于是把颗粒直径增大,结果还是一样,貌似这些颗粒都挤在一块了,甚至直接融合在一块了。。。下图是我最新跑的用vector滤镜处理的(中间空出来那一块本来是个injector,在这个测试里我设置成了壁面)
-
各位大佬好,我用DPMFoam简单算了一个case,颗粒在静止水体中释放,如下图
等颗粒全部沉降后,最后却只沉积在了底面壁面上,如何才能让颗粒像实际一样堆积起来呢?
-
您好请问这个问题解决了吗?我也遇到了
-
@李东岳 谢谢李老师答复。我现在就在用-oversubscribe方法跑,但是我不知道这个方法具体是怎么调用的核数,比如是不是我的两个cpu都调用了,还是说只调用了一个cpu里的38个线程(一个cpu总共48线程)
-
请教各位大佬,我的工作站为双cpu:Intel(R) dual-Xeon(R) Gold 5220R ,每个cpu有24 个cores,总数为48cores,96线程。我在计算时划分了38个processors,但是运行如下命令时出错:mpirun -np 38 interFoam -parallel
错误代码为There are not enough slots available in the system to satisfy the 38 slots that were requested by the application:
貌似只识别了一个cpu,怎么才能在这两个cpu上进行并行计算呢?
-
@jasper-0 更新一下目前进度,我尝试在KinematicLookupTableInjection.C里将injectors_设置为MUST_READ_IF_MODIFIED,
template<class CloudType> Foam::KinematicLookupTableInjection<CloudType>::KinematicLookupTableInjection ( const dictionary& dict, CloudType& owner, const word& modelName ) : InjectionModel<CloudType>(dict, owner, modelName, typeName), inputFileName_(this->coeffDict().lookup("inputFile")), duration_(this->coeffDict().getScalar("duration")), parcelsPerSecond_(this->coeffDict().getScalar("parcelsPerSecond")), randomise_(this->coeffDict().getBool("randomise")), injectors_ ( IOobject ( inputFileName_, owner.db().time().constant(), owner.db(), IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE ) ),
但是在运行solver的时候提示不支持自动重新读取,有没有大佬知道这种情况咋解决呢?
GlobalIOList<kinematicParcelInjectionData> kinematicLookupTableInjection constructed with IOobject::MUST_READ_IF_MODIFIED but GlobalIOList<kinematicParcelInjectionData> does not support automatic rereading.
-
@oitocfd 谢谢大佬回复,这两天忙着做实验没看到消息。所以我如果只考虑Drag force,那么这个phicForces就不用加了吧?
-
@oitocfd 是的大佬,就是在interFoam里加了拉格朗日粒子,two-way coupling,但是我不知道DPMFoam里的这个phicForces是干啥的,与cloudVolSUSu有关,其定义如下
fvVectorMatrix cloudSU(kinematicCloud.SU(Uc)); volVectorField cloudVolSUSu ( IOobject ( "cloudVolSUSu", runTime.timeName(), mesh ), mesh, dimensionedVector(cloudSU.dimensions()/dimVolume, Zero), zeroGradientFvPatchVectorField::typeName ); cloudVolSUSu.primitiveFieldRef() = -cloudSU.source()/mesh.V(); cloudVolSUSu.correctBoundaryConditions(); cloudSU.source() = Zero;
可见cloudVolSUSu是定义的cloudSU里的source项,而在U方程里加的cloudSU.source()定义为了0. 意思是cloudSU的source项和和非source项是分开算的。所以我不知道这个source()是什么?植入拉格朗日粒子,phicForces到底需不需要加?希望大佬可以解惑一下
这里的cloudSU在KinematicCloudI.H里定义如下:
template<class CloudType> inline Foam::tmp<Foam::fvVectorMatrix> Foam::KinematicCloud<CloudType>::SU(volVectorField& U, bool incompressible) const { if (debug) { Pout<< "UTrans min/max = " << min(UTrans()).value() << ", " << max(UTrans()).value() << nl << "UCoeff min/max = " << min(UCoeff()).value() << ", " << max(UCoeff()).value() << endl; } dimensionSet dim(dimForce); if (incompressible) { dim.reset(dimForce/dimDensity); } if (solution_.coupled()) { if (solution_.semiImplicit("U")) { volScalarField::Internal Vdt(mesh_.V()*this->db().time().deltaT()); if (incompressible) { Vdt.dimensions() *= dimDensity; } return UTrans()/Vdt - fvm::Sp(UCoeff()/Vdt, U) + UCoeff()/Vdt*U; } else { tmp<fvVectorMatrix> tfvm(new fvVectorMatrix(U, dim)); fvVectorMatrix& fvm = tfvm.ref(); fvm.source() = -UTrans()/(this->db().time().deltaT()); return tfvm; } } return tmp<fvVectorMatrix>::New(U, dim); }
-
@星星星星晴 谢谢您的回复,这个教程我也看了,他就是直接在U方程里加了个SU源项,但是在DPMFoam里面还有这个phicForces一项,主要是跟cloudVolSUSu有关,但是具体不知道是干什么的。。。
-
大家好,
我在做一个欧拉-拉格朗日模拟,想请问一下如何让injectionModels在每一个时间步都读取kinematicLookupTableInjection里的数据?在我的代码里现在能做到把每个时间步想要射入的粒子都写入kinematicLookupTableInjection,但是injectionModels只会初始化的时候读取一次,而我在lookuptable里更新的数据都不会再读取了。
有没有大佬知道如何做到呢?万分感激!
-
各位大佬好,
本人想在interFoam中植入拉格朗日粒子,通过以下这个教程来学习一下
http://www.tfd.chalmers.se/~hani/kurser/OS_CFD_2013/AlejandroLopez/LPT_for_erosionModelling_report.pdf但是在这个教程里,对U.eqn的修改,只是添加了kinematicCloud.SU(U)这一项,
而在DPMFoam里,还添加了phicForces这一项,并且这一项会对P.eqn进行影响。
surfaceScalarField phicForces ( fvc::flux(rAUc*cloudVolSUSu/rhoc) + rAUcf*(g & mesh.Sf()) );
查了一些资料,是不是kinematicCloud.SU(U)指的是drag force,而phicForces包含了gravitational force,lift force和其他力?还有就是这个cloudVolSUSu指的是什么?
希望有大佬可以解答一下!
-
@李东岳 感谢李老师回复!
-
请问Reynolds stress model里的LRR model如何植入到twoPhaseEulerFoam里呢?我正在尝试但是还没有成功,不知道有大佬做过吗或者有相关资料吗?万分感谢!
-
@星星星星晴 感谢大佬指点!
-
@李东岳 感谢大佬指点,用clip确实能得到我想要的了
-
@jasper-0 请问有大佬知道吗?困扰好几天了
-
求问大佬们怎么展示一个切面上的拉格朗日粒子呢?如下图,我只能得到整个计算域内的拉格朗日粒子,有办法可以只展示一个切面上的粒子吗?感恩!
-
@李东岳 李老师,用的是reactingTwoPhaseEulerFoam里的class method
-
求问为什么我用PBM破碎模型里的基本模型exponential模型可以得到想要的结果,换做其他破碎模型(比如LuoSvendsen)结果就不好呢?最近在模拟bubble column的一个例子,我尝试了所有破碎模型,结果显示只有exponential模型跟实验结果接近,其他模型结果相似,下图为空气速度的图,第一个图为exponential模型结果,第二个图为LuoSvendsen模型结果:
然后我又对比了一下气泡直径,也是exponential结果更符合实际,气泡直径随着高度增加因为破碎会变小,下图第一个图为exponential模型结果,第二个图为LuoSvendsen模型结果:
请问有人碰到过这种问题吗?还望大佬指点一下! -
求问怎么在paraview里提取拉格朗日粒子的field到一个切面上?比如看拉格朗日粒子通过某一截面的速度?目前在截面上只有欧拉场的数据。。。
-
@李东岳 楼上这俩一样的啊老师,我就截图截的大小不一样了。但是一楼那个算例其实是我想模拟的,但网格太大,所以我先用楼上这个网格小的进行试验的
-
@李东岳 我的情况刚好是dispersion影响不大,而lift影响巨大,下面两个图分别是dispersion系数为0.7,有无lift的情况。具体原因继续看看,准备先把压力求解器从GAMG换成PCG看看。
-
@李东岳 多谢大佬,我再研究一下!
-
@李东岳 谢谢东岳老师的回复。我主要是模拟的一楼的那个case,这两天试了一下用不同的dispersion系数,结果很相似,如果我把lift force去掉之后,结果alpha.air的分布会更窄,跟实验结果不相符。请问老师没有别的可以改的地方了吗?
-
@李东岳 三维的
-
@李东岳 感谢李老师的回复,我这个case设置过了turbulent dispersion系数为0.4。因为这个网格比较多,所以我这两天模拟了一下deen bubble column,根据您的建议,我把dispersion系数设为从0.1到1,发现差别并不大。下图第一个为0.1,第二个为1。lift force系数都是0.5 (看文献大多也是用0.5). 感觉我模拟的空气在静水中射流都会分叉。。。但是看文献里空气体积分数最大值都是在中心线。您是这方面的专家,想请问除了这两个系数还有别的原因导致分叉吗?比如差分格式的选择?这个分叉属实很困扰我
-
求问各位大佬,本人在用twoPhaseEulerFoam模拟空气在静水中的射流,发现气体偏离了中心线。经过测试和文献阅读发现气体的横向扩散主要跟lift force有关。下图我用的lift force是costant coefficient 为0.5,
通过减小lift force coefficient 为0.1得到如下图,但是alpha.air 的最大值依然不在中心线上,并且扩散范围变得非常窄,这与实验并不相符。不知道有没有大佬有相似的经验呢?这种情况该如何解决呢?万分感谢!
-
想用双欧拉方法模拟水气两相流,请问twoPhaseEulerFoam中可以加入PBM模型来模拟气泡的聚合和破碎吗?该如何操作呢
-
@李东岳 算的固液两相流,李老师,我现在在做测试,就想搞清楚拉格朗日这面
-
@李东岳 李老师您好,还想请教一下,因为我的粒子直径相对于网格来说较大,所以用DPMFoam计算时发散了,取了几个时间步后的压力分布图发现有一个点压强突然变的很小,如下图:
我的粒子浓度相对来说应该是比较大的
但当我把kinematicCloudProperties里的alphamax从0.9变成0.7之后就可以正常计算了,请问这是什么原因呢?通过调整alphamax来进行计算可以吗?谢谢您 -
@李东岳 谢谢李老师!
-
@李东岳 但是我的模拟中粒子是通过kinematicCloudPositions来定义的,所以计算域内粒子数量是固定的。而且我的网格大小是6mm,粒子直径是3mm,对于这种情况是不是网格尺寸对粒子浓度影响较大啊?
-
各位大佬好,
本人最近在想是不是拉格朗日粒子的浓度是与网格大小相关的?因为在openfoam中浓度定义为:theta[celli] += p.nParticle()*p.volume(); theta.primitiveFieldRef() /= mesh_.V();
当网格变小的时候,浓度不就自然而然变大了吗?如果是这样的话,该如何跟实验进行验证呢?
-
-
@zhe 在 MPPICInterFoam 中如何通过alphac得到alpha1和alpha2? 中说:
那么alpha1才应该是整个cell里的alpha1啊
没看懂这是什么意思。举个例子,比如alphac=1-theta=0.8, alpha1=0.5,那么phase1所占整个cell的体积分数就是0.8*0.5=0.4,phase2也是0.4,0.4+0.4+0.2=1,在MPPICInterFoam中粒子是考虑了体积分数的
-
大家好,我想请教一下调用momentum source函数的时候,返回值是哪一个?在KinematicCloudI.H中有这个函数的定义:
template<class CloudType> inline Foam::tmp<Foam::fvVectorMatrix> Foam::KinematicCloud<CloudType>::SU(volVectorField& U, bool incompressible) const { if (debug) { Pout<< "UTrans min/max = " << min(UTrans()).value() << ", " << max(UTrans()).value() << nl << "UCoeff min/max = " << min(UCoeff()).value() << ", " << max(UCoeff()).value() << endl; } dimensionSet dim(dimForce); if (incompressible) { dim.reset(dimForce/dimDensity); } if (solution_.coupled()) { if (solution_.semiImplicit("U")) { volScalarField::Internal Vdt(mesh_.V()*this->db().time().deltaT()); if (incompressible) { Vdt.dimensions() *= dimDensity; } return UTrans()/Vdt - fvm::Sp(UCoeff()/Vdt, U) + UCoeff()/Vdt*U; } else { tmp<fvVectorMatrix> tfvm(new fvVectorMatrix(U, dim)); fvVectorMatrix& fvm = tfvm.ref(); fvm.source() = -UTrans()/(this->db().time().deltaT()); return tfvm; } } return tmp<fvVectorMatrix>::New(U, dim); }
在调用这个函数的时候,如果我用semiImplicit格式的话,返回的是
return UTrans()/Vdt - fvm::Sp(UCoeff()/Vdt, U) + UCoeff()/Vdt*U;
还是
return tmp<fvVectorMatrix>::New(U, dim);
呢?
我认为返回的应该是后者吧 tmp<fvVectorMatrix>::New(U, dim);
我想知道它是什么意思呢? -
@bestucan 好的,非常感谢大佬的指点!
-
@bestucan 刚看了一下CollidingCloud.C,引用了solve函数:
template<class CloudType> void Foam::CollidingCloud<CloudType>::evolve() { if (this->solution().canEvolve()) { typename parcelType::trackingData td(*this); this->solve(*this, td); } }
我个人的理解是,这里的*this指针指的就是CollidingCloud,因此cloud.preEvolve就是CollidingCloud.preEvolve, 而preEvolve是KinematicCloud的public的成员函数,CollidingCloud是其衍生类,因此可以直接调用了preEvolve函数
-
@bestucan 感谢大佬的解答,非常详细。我主要的问题也是没有看到有模板参数的函数是在哪里调用的?例如solve函数的调用。我用的是DPMFoam,在DPMFoam.C里也没有看到调用,如果能看到调用函数就能知道TrackCloudType指的是什么了。大佬能否指点一下去哪里看solve函数的调用呢?
-
大家好,我想请教一下KinematicParcelTrackingDataI.H中的TrackCloudType& cloud里的cloud指的是什么?在如下代码中:
rhoInterp_ ( interpolation<scalar>::New ( cloud.solution().interpolationSchemes(), cloud.rho() ) ),
cloud直接调用了函数rho(),为了弄清楚cloud是哪个类,我改变了rho()为任意的字母,比如a(),但是重新编译依然可以编译成功,这是为什么呢?
-
@bestucan 老师您好,我想请教一下kinematicCloud.H 里面的274行
template<class TrackCloudType> void solve ( TrackCloudType& cloud, typename parcelType::trackingData& td );
TrackCloudType& cloud,里面的cloud是在cloud.H里面定义的类,但是在kinematicCloud.C 里面的140行直接调用了kinematicCloud类的成员函数cloud.preEvolve(td)。这是为什么呢?还是说这里的cloud指的就是kinematicCloud?
-
@bestucan 好的谢谢您,我去看一下
function object里vorticity只执行一次是为什么?
function object里vorticity只执行一次是为什么?
颗粒沉积为什么全都到了底面一个面上?
颗粒沉积为什么全都到了底面一个面上?
颗粒沉积为什么全都到了底面一个面上?
颗粒沉积为什么全都到了底面一个面上?
颗粒沉积为什么全都到了底面一个面上?
颗粒沉积为什么全都到了底面一个面上?
颗粒沉积为什么全都到了底面一个面上?
颗粒沉积为什么全都到了底面一个面上?
求问 coalchemistryfoam喷入颗粒再多 也显示铺成一层 为啥呢
openfoam 如何在双cpu工作站并行计算
openfoam 如何在双cpu工作站并行计算
如何让injectionModels在每一个时间步都读取kinematicLookupTableInjection
植入拉格朗日粒子的Ueqn中需不需要加phicForces?
植入拉格朗日粒子的Ueqn中需不需要加phicForces?
植入拉格朗日粒子的Ueqn中需不需要加phicForces?
如何让injectionModels在每一个时间步都读取kinematicLookupTableInjection
植入拉格朗日粒子的Ueqn中需不需要加phicForces?
Reynolds stress model植入到twoPhaseEulerFoam
Reynolds stress model植入到twoPhaseEulerFoam
怎么展示一个切面上的拉格朗日粒子
怎么展示一个切面上的拉格朗日粒子
怎么展示一个切面上的拉格朗日粒子
怎么展示一个切面上的拉格朗日粒子
PBM破碎模型exponential模型比其他破碎模型更好
PBM破碎模型exponential模型比其他破碎模型更好
如何获得某一截面上的拉格朗日场
twoPhaseEulerFoam中的lift force
twoPhaseEulerFoam中的lift force
twoPhaseEulerFoam中的lift force
twoPhaseEulerFoam中的lift force
twoPhaseEulerFoam中的lift force
twoPhaseEulerFoam中的lift force
twoPhaseEulerFoam中的lift force
twoPhaseEulerFoam中怎么加入PBM模型
拉格朗日粒子浓度与网格大小的关系
拉格朗日粒子浓度与网格大小的关系
拉格朗日粒子浓度与网格大小的关系
拉格朗日粒子浓度与网格大小的关系
拉格朗日粒子浓度与网格大小的关系
MPPICInterFoam 中如何通过alphac得到alpha1和alpha2?
MPPICInterFoam 中如何通过alphac得到alpha1和alpha2?
kinematicCloud.SU(Uc)的返回值
CollidingCloud构造函数后面的 CloudType()是什么?
CollidingCloud构造函数后面的 CloudType()是什么?
CollidingCloud构造函数后面的 CloudType()是什么?
TrackCloudType& cloud里的cloud指的是什么
CollidingCloud构造函数后面的 CloudType()是什么?
CollidingCloud构造函数后面的 CloudType()是什么?