JqBu
帖子
-
@大喵 请问问题解决了吗?
-
@JqBu 报错如下,贴出来给大家看看,有没有大佬指教一下呢```
Courant Number mean: 0.0440313 max: 0.39994
Interface Courant Number mean: 0.00208161 max: 0.39994
deltaT = 1.54321e-06
Selected 1971 cells for refinement out of 125250.
Refined from 125250 to 139047 cells.
#0 Foam::error::printStack(Foam::Ostream&) at ??:?
#1 Foam::sigSegv::sigHandler(int) at ??:?
#2 ? in "/lib/x86_64-linux-gnu/libc.so.6"
#3 Foam::fvMeshTopoChangers::refiner::refineUfs(Foam::HashSet<int, Foam::Hash<int> > const&, Foam::polyTopoChangeMap const&) at ??:?
#4 Foam::fvMeshTopoChangers::refiner::refine(Foam::List<int> const&) at ??:?
#5 Foam::fvMeshTopoChangers::refiner::update() at ??:?
#6 Foam::fvMesh::update() at ??:?
#7 ? in "/opt/openfoam10/platforms/linux64GccDPInt32Opt/bin/interFoam"
#8 ? in "/lib/x86_64-linux-gnu/libc.so.6"
#9 __libc_start_main in "/lib/x86_64-linux-gnu/libc.so.6"
#10 ? in "/opt/openfoam10/platforms/linux64GccDPInt32Opt/bin/interFoam" -
@JqBu 找到个of官方算例动态加密网格的,是下面这样,不过在我的算例里还是跑不了,贴出来记录一下把
topoChanger { type refiner; libs ("libfvMeshTopoChangers.so"); // How often to refine refineInterval 1; // Field to be refinement on field alpha.water; // Refine field in between lower..upper lowerRefineLevel 0.001; upperRefineLevel 0.999; // Have slower than 2:1 refinement nBufferLayers 1; // Refine cells only up to maxRefinement levels maxRefinement 2; // Stop refinement if maxCells reached maxCells 200000; // Flux field and corresponding velocity field. Fluxes on changed // faces get recalculated by interpolating the velocity. Use 'none' // on surfaceScalarFields that do not need to be reinterpolated. correctFluxes ( (phi none) (nHatf none) (rhoPhi none) (alphaPhi.water none) (ghf none) ); // Write the refinement level as a volScalarField dumpLevel true; }
-
想在of10里做些工作,但是发现of10的动态网格加密和以前版本有很大不同,求助大家一下:
比如我想按alpha.water的大小加密网格,以前可以写:dynamicFvMesh dynamicRefineFvMesh;
但是现在of规则变了,不能这样写了,src里没有dynamicfvMesh了,只有这些是和动网格相关的,但是要不是网格是移动的要不就是要topo的,
请问大家of10里怎么给alpha加密网格呀?
-
@jqbu 请问大家 看看我是哪里少考虑了?还是计算错了? 能否帮我分析下原因?感谢!
-
-
但是经过计算统计,常压下、1MPa时候这个式子大概是成立的,为什么在7MPa时等式后边三项计算结果比初始动能小很多?
-
@李东岳 是的李老师
-
重启大法好 比卸载重装 新版本覆盖啥的有用多了
-
今天win下的paraview打开突然出问题,但是也不报具体的错就闪退,安装新的版本并行版本报错说没有msmpi.dll,普通的版本也还是不行,也不说少啥就直接闪退,这样大家遇到过吗?不会要重装系统把?
-
@队长别开枪 好的 谢谢前辈!
-
@队长别开枪 戴前辈,还想请教您一下,Allrun-parallel中的# Reconstruct distributed data
runParallel redistributePar -reconstruct中那个redistributePar是什么操作?有时候我用动网格计算时,一个核合并reconstructParMesh再reconstructPar这样运行速度比较慢,看您的算例才知道合并也可以并行,那请问如何并行合并动网格计算的结果呢 -
@jqbu 或者请问其他熟悉Plic-VOF的大佬有什么建议嘛?才了解有这种方法捕捉界面,还不熟悉,请各位多指教呀
-
戴前辈您好,看到您的方法就想用of里的dambreak算例试一下,尝试了在of1912和of1812中加载您的求解interPlicFoam,但是算$FOAM_TUTORIALS/multiphase/interFoam/RAS/damBreak算例的时候,虽然按照您github上的要求修改了fvScheme和fvSolution,但是计算第一步就会出现问题,浮点数溢出,减小算例时间步长到1e-5也不行,细化一倍网格也不行,请问这是为什么呢?(我注意到您给出的tutorials都是多面体网格的,并非六面体网格,不知道是不是您的求解器不适用于六面体网格?)
-
又检查了一下p1, p2这对碰撞对粒子所在的网格,发现p1,p2并没有在一个网格内,这和程序设计的逻辑不一致,我的compositeCollisionModel是在ORourke基础上改的,两个粒子本应该在是在同一个网格内才可能发生碰撞
结果显示p1在ID为154862的网格内,p2在ID为159677的网格内,那么问题来了,为什么程序会跑出这种结果?p2到底是哪来的?
-
@星星星星晴 在 拉格朗日模型里是如何加入或删除粒子的?||为什么遍历粒子时粒子的属性会出现随机的情况? 中说:
响
是的 我现在是加了限制极大值极小值,但是后来就会出现ID=1,或者=2的情况,粒径和位置信息啥的也都不对,有点疑惑
-
以下问题基于OF7,OF9以上版本不确定具体模型是怎么回事,但是OF8以下的大概差不多,希望各位大佬们给点拨以下!
核心问题:拉格朗日模型在添加或删除粒子的时候是基于什么list或者是什么序列存储的粒子的信息?
我发现不同子模型在添加粒子时候都是通过addParticle函数实现的template<class ParticleType> void Foam::Cloud<ParticleType>::addParticle(ParticleType* pPtr) { this->append(pPtr); } // 用injectionModel举例,先new一个指针作为粒子,再通过指针赋予粒子各种属性 parcelType* pPtr = new parcelType(mesh, pos, celli); // 然后调用addParticle函数将有属性的粒子加入场内 cloud.addParticle(pPtr);
删除粒子的时候调用deleteParticle函数
template<class ParticleType> void Foam::Cloud<ParticleType>::deleteParticle(ParticleType& p) { delete(this->remove(&p)); } // 用StochasticCollisionModel里的程序举例 if (mass < this->owner().constProps().minParcelMass()) { this->owner().deleteParticle(p); }
那么在对指针(也就是粒子)进行append和remove的时候,OF是创建了一个指针的list吗还是什么,因为每个粒子指针都是new出来的,单纯new出来的指针是用二叉树的形式存储在堆里,应该不会出现指针的信息是随机生成的情况(为什么这么说见后面,我想象到的能让系统赋值随机数的可能性就是有一个list,本来list的各个位置都是有值的,然后人为把某个信息删掉,这样那个位置的信息就会是随机的?)。
核心问题的来源(希望有耐心的大佬帮忙解答一下下面的问题!!!感激不尽!!!):
最近测试喷雾算例时候会遇到一个问题,就是在计算的时候算着算着就会发散,大概像下面这样,CompostieCollision是我自己建的类,在这个模型里会有粒子的删除和添加功能(单就粒子的删除和添加功能来说,是仿照OF里自己的程序写的,不会有什么问题),但是问题应该是出现在这个类里了
仔细检查,多次测试输出了寻找到的粒子碰撞对p1,p2的各种属性时发现:p1的ID和各种属性是不会出现问题的,p2的ID会出现0、极大数或极小数,p2的粒径也不对,有时粒径很大,有时粒径为0(这里的ID是通过origID函数返回的,返回值是const类型,所以不会变)。如图
感觉这里的问题可能是系统遍历到粒子的时候随机生成了一些信息,导致粒子的ID是随机数,出问题的粒子的属性也不对(见下面报的错)。
为了更好的计算,找到更多错误的规律,随后限制了遍历碰撞对的条件,限制了粒子的ID应该在计算域内的粒子数范围内,随后发现:p2的ID会是一个比较小的整数,粒径信息不正确,位置信息压根就没有,报错也报的是位置信息的错
但是上述问题只是在有几十万粒子的喷雾算例里才会出现,在只有两个粒子的binary collision里计算时不会出现这些问题,ID一切正常,各种属性信息也一切正常。
请问各种大佬能不能麻烦给点建议?
-
@星星星星晴 感谢回复😊 回头我研究研究这个mpirundebug
-
@hongyan 在 天河 2 号超算安装 OpenFOAM 7 (不含CGAL) 中说:
修改配置文件使用 Intel 编译器和 Intel MPI 进行编译
请问修改配置文件为什么要使用 Intel 编译器和 Intel MPI 进行编译呢? 这样编译了之后就和自己电脑上的不一样了 怕是求解器什么后后面移到天河上会出问题
-
今天突然发现了一个奇怪的现象,如果是单核计算的话,输出的内容应该是这个顺序:
Solving 3-D cloud sprayCloud pAmbient = 101571.1 Composite::collide WeColl = 8.30375; B = 0.693729; delta = 0.6744853 Regime: Bouncing Composite collision model: nc_Composite_parcel =1 total collision number of Composite = 2 Ncoal = 0; Nbounc = 1; NSS = 1; NRS = 0 product the number of child parcel = 0
这和写代码时候想让他输出的位置是一样的;
但一旦并行后,输出的顺序就变成了这样:
Solving 3-D cloud sprayCloud [1] Composite::collide pAmbient = 101571.1 [0] Composite::collide [1] Regime: Bouncing Composite collision model: nc_Composite_parcel =1 total collision number of Composite = 2 Ncoal = 0; Nbounc = 1; NSS = 1; NRS = 0 product the number of child parcel = 0
甚至还会在这种地方出现语句:
Parcel fate (number, mass) : patch (top|down|side) - escape = 0, 0 - stick = 0, 0 Temperature min/max = 293, 293 Mass transfer phase change = 0 [1] Composite::collide D10, D32, Dmax (mu) = 99.81255, 101.9875, 105 Liquid penetration 95% mass (m) = 0.0006347351 Liquid penetration_y 95% mass (m) = 0.0005967672
使用并行输出Pout后和写这些输出语句的先后位置就不一样了
请问各位大佬这是为什么呢?
-
@jqbu 找到答案了 感谢已经毕业的师兄的解答
修改单位需要通过calculator生成一个新的场,然后在lagend里自己修改单位就好了
比如这样操作
就可以变成想要的结果了
-
请问各位大佬 paraview如何更改单位呀?比如用展示拉格朗日粒子的粒径的时候,总是显示0.000105 m 但是不知道如何设置105 um?诸如此类的修改单位的方式有人可以教教吗?
-
用blueCFD转化了粒子坐标后(https://github.com/blueCFD/lagrangianExtraFunctionObjects/tree/OF5x) 突然遇到了另一个报错 看起来像是转化过程中浮点数出错了 后面找了代码 发现是调用了regIOobject::write(cloud_.size())这个函数,然而我只在of里找到了 virtual bool write(const bool write = true) const这个函数 看起来不太对的样子
请问有人遇到过吗 请问如何解决?
-
看看我有没有c币?看看我有没有c币?看看我有没有c币?看看我有没有c币?看看我有没有c币?看看我有没有c币?
-
@星星星星晴 谢谢老师,我也尝试一下这个牛顿迭代法
-
老师好,我是天津大学的学生,请问老师方便留个邮箱后续沟通吗?
-
@星星星星晴 老师您好,我遇到了和您一样的问题,但是我把您这段代码算下来,遇到了几个问题:
1.把这段代码放在OpenFOAM里的时候,会报错说重载的pow()模棱两可,“call of overloaded ‘pow(Foam::scalar&, Foam::scalar)’ is ambiguous”
2.我用这段代码计算一元高次方程时候总不收敛,请问您之前有这问题吗?
3.我也关注了您这篇帖子这部分内容,我看2007年的论文“A new predictive model for fragmenting and non-fragmenting binary droplet collisions”里说先把2.7次幂转换成4次幂和3次幂的两个方程,再用Runge-Kutta法进行了四次迭代,但是我没搞懂怎么用Runge-Kutta求解非微分方程,请问老师您后来尝试过用论文里的方法求解方程吗?或者对帖子里这段代码有什么改进吗? -
@星星星星晴 前辈,我看了帖子之前的讨论,但是没太看懂大家解决粒子追踪这种死循环问题的原理是什么,之前算freeSpray的时候出现这种问题可以用添加patchInteractionModel的方法解决,但是后面算impinging spray的时候就解决不了了,网格尺度是一样的,粒子的设置也是一样的。我现在还没太清楚是程序哪个部分出现了问题?
-
@星星星星晴 前辈您好,感谢回复!请问您觉得多小的parcel算小呢?我在字典文件里设置了minParcelMass为1e-20,然后我设置的初始粒子的平均粒径在100um以上,破碎之后大部分也都是十几或几十um的水平
-
@yfclark 请问老师前面如何统计的,认为是分块的原因?现在又是如何思考的,加上locelInteraction就可以了? 因为我最近在算喷雾的时候也遇到了这个问题 排查之后也是在move函数出了问题,前面的算例加上locelInteraction就可以了,但是后来又有一个算例使用了各种patchInteractionModel都会卡在added xx new parcels这步。
-
在研究sprayFoam求解器整个运行机制的时候,遇到了这样一个问题,
在KinematicCloud.C中运行了这样一句话:functions_.preEvolve();
而functions_是CloudFunctionObjectList<KinematicCloud<CloudType>>这个类的数据成员。那么在CloudFunctionObjectList类中,preEvolve函数被下面语句定义。
template<class CloudType> void Foam::CloudFunctionObjectList<CloudType>::preEvolve() { forAll(*this, i) { this->operator[](i).preEvolve(); } }
在这里有两个疑问:
1.关于operator[]重载的说明:首先,this指针指向了functions_对象,属于类CloudFunctionObjectList,而类CloudFunctionObjectList继承于PtrList,PtrList继承于UPtrList,故调用了UPtrList里的operator函数。那么this->operator.preEvolve()就等价于functions_[i].preEvolve()(但这里的operator[](cosnt label i)不是virtual,而是inline,这样子类CloudFunctionObjectList可以调用UPtrList的operator吗?)
template<class T> inline const T& Foam::UPtrList<T>::operator[](const label i) const { if (!ptrs_[i]) { FatalErrorInFunction << "hanging pointer at index " << i << " (size " << size() << "), cannot dereference" << abort(FatalError); } return *(ptrs_[i]); }
请问这样理解正确吗?
2.this->operator.preEvolve();里的preEvolve()函数又在执行哪个preEvolve()函数呢?
this->operator.preEvolve()就等价于functions_[i].preEvolve(),在调用KinematicCloud的对象时会调用KinematicCloud的构造函数,实现对functions_的初始化,通过初始化的结果选择用哪个preEvolve函数
template<class CloudType> Foam::KinematicCloud<CloudType>::KinematicCloud ( const word& cloudName, const volScalarField& rho, const volVectorField& U, const volScalarField& mu, const dimensionedVector& g, bool readFields ) : CloudType(rho.mesh(), cloudName, false), kinematicCloud(), cloudCopyPtr_(nullptr), mesh_(rho.mesh()), particleProperties_ ( IOobject ( cloudName + "Properties", // 若为sprayFoam的程序,则为sprayCloudProperties rho.mesh().time().constant(), rho.mesh(), IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE ) ), outputProperties_ ( IOobject ( cloudName + "OutputProperties", mesh_.time().timeName(), "uniform"/cloud::prefix/cloudName, mesh_, IOobject::READ_IF_PRESENT, IOobject::NO_WRITE ) ), solution_(mesh_, particleProperties_.subDict("solution")), constProps_(particleProperties_), subModelProperties_ ( particleProperties_.subOrEmptyDict("subModels", solution_.active()) ), ... functions_ ( *this, particleProperties_.subOrEmptyDict("cloudFunctions"), // 通常在*CloudProperties文件最下面,会有cloudFunctions{}的内容,functions_则读取里面的信息 solution_.active() ),
但经搜索,在lagrangian/intermediate/submodels/CloudFunctionObjects/文件夹下只有VoidFraction,ParticleTrap,ParticleTracks,ParticleErosion这几个类里定义了preEvolve函数,而of自带tut里并非只用到了这几个fucntion,例如在lagrangian/reactingParcelFoam/verticalChannelLTS/constant/reactingCloud1Properties里,既有particleTracks1,又有patchPostProcessing1,那么patchPostProcessing1是如何实现的呢?
-
@李东岳 东岳老师,感谢您的回复,除了上面那个问题,还想再请教您另外一个问题,请问下图标红的部分是上面语法呀?老师能介绍一下operator的逻辑吗?
再次谢谢老师!
-
@李东岳 东岳老师,这里的surfaceFilmModel_在KinematicCloud类里被定义为autoPtr<SurfaceFilmModel<KinematicCloud<CloudType>>>类型,按您操作符重载的说法,我应该去哪找这里操作符重载的返回的类型?我看autoPtrI.H里有一些操作符重载的表达,但是没找到类似于inline T& Foam::autoPtr<T>::operator(){ }这样的表达,只有下面这种的
这里return的*ptr_在autoPtr.H里被定义为T类型请问东岳老师能举个例子这种情况应该怎么找吗
-
在看拉格朗日库的时候发现例如dispersion,surfaceFilm这种模型的表达看不太懂,他们的定义都比较特殊,请问大神这是什么用法?
以surfaceFilm举例:调用的位置在:
而surfaceFilm()的定义在KinematicCloudI.H里,代码如下:
看到这里就比较懵了,surfaceFilmModel_这个object后面又接了个()是什么表达?返回了什么值?请问有没有大神可以指点一下?我发现拉格朗日库里好多子模型都是这样调用的
-
现在搞明白了各种diagram里方框的颜色、线条颜色、虚实代表的含义,详见:https://www.openfoam.com/documentation/guides/latest/api/graph_legend.html
箭头相关:
深蓝色箭头用于显示两个类之间的公共继承关系。
深绿色箭头用于受保护的继承。
暗红色箭头用于私有继承。
如果一个类包含或被另一个类使用,则使用紫色虚线箭头。箭头被标记为可访问指向类或结构的变量。
黄色虚线箭头表示模板实例和实例化它的模板类之间的关系。箭头被标记为实例的模板参数。方框相关:
填充的灰框表示生成图的结构或类。
带有黑色边框的方框表示文档化的结构或类。
带有灰色边框的方框表示未文档化的结构体或类。
带有红色边框的方框表示没有显示所有继承/包含关系的文档化结构或类。如果图形不符合指定的边界,它将被截断。 -
最近在看拉格朗日粒子库的一些代码,这里调用了很多模板类,但之间的关系分不太好。我发现同样是类的继承关系,openfoam官方却在用不同的diagram表示他们之间的关系,举个例子说明:
对于immiscibleIncompressibleThreePhaseMixture这个类来说,他继承了incompressibleThreePhaseMixture和threePhaseInterfaceProperties两个类,代码如下:
class immiscibleIncompressibleThreePhaseMixture
:
public incompressibleThreePhaseMixture,
public threePhaseInterfaceProperties在openfoam官方是用dependency graph来表示它们之间的关系的,如图:
而在拉格朗日库中,同样是类的继承关系,是用inheritance diagram和collaboration diagram表示的,对应代码如下:
template<class CloudType>
class ParticleForceList
:
public PtrList<ParticleForce<CloudType>>在这里有三个疑问:
1.dependency graph, inheritance diagram和collaoration diagram具体有什么区别?
2.上面inheritance diagram图的右边的橙色虚线箭头表达的是什么关系?
3.上面inheritance diagram图的右边ParticleForceList<KinematicCloudFoam::DSMCCloud>和ParticleForceList<KinematicCloud<Cloud<basicKinematicCollidParcel>>>具体是怎么实现的?我在整个src库中都没有检索到相关的代码如果有大神答疑 不胜感激!!!期待和大家的交流!!!
-
@我爱梨涡 of9推出的是lagrangian转vof的方法把?但是也是用来计算喷雾的,可能适用于那种impingement jet击壁的模拟?怎么算从喷雾到燃烧的过程?
-
@tens 我知道Fluent里有这种VOF-DPM的方法,openfoam里其实也有人做过,但是这种方法大多是用来进行喷雾的初次破碎的捕捉的,和DNS模拟差不多,后期把小的液滴转化为粒子,是为了简化计算量,并不准确,而且这种方法虽然把液相转化为粒子了,可是有人用这种方法算燃烧吗?
-
请问各位大佬有没有什么能解决两股液体在气相场里的对撞喷雾、然后蒸发燃烧问题的技术路线推荐?
如果是把DPMFoam和sprayFoam结合起来,除了实现上有点难度,还有很多不确定的参数需要测试,请问有没有什么别的方法能实现这个问题,哪怕商软也行啊 -
@李东岳 有用!
paraview如何更改单位?
关于自适应网格报错问题。
openfoam 10 中怎么按某场的特征动态加密网格?
openfoam 10 中怎么按某场的特征动态加密网格?
openfoam 10 中怎么按某场的特征动态加密网格?
高压下interFoam算液滴运动能量不守恒?
高压下interFoam算液滴运动能量不守恒?
高压下interFoam算液滴运动能量不守恒?
今天 win下的paraview打开出错怎么回事
今天 win下的paraview打开出错怎么回事
今天 win下的paraview打开出错怎么回事
interPlicFoam
interPlicFoam
interPlicFoam
interPlicFoam
拉格朗日模型里是如何加入或删除粒子的?||为什么遍历粒子时粒子的属性会出现随机的情况?
拉格朗日模型里是如何加入或删除粒子的?||为什么遍历粒子时粒子的属性会出现随机的情况?
拉格朗日模型里是如何加入或删除粒子的?||为什么遍历粒子时粒子的属性会出现随机的情况?
并行Pout输出内容在log文件里的位置不确定是为什么?
天河 2 号超算安装 OpenFOAM 7 (不含CGAL)
并行Pout输出内容在log文件里的位置不确定是为什么?
paraview如何更改单位?
paraview如何更改单位?
拉格朗日一个bug
C币运行机制测试
如何在openfoam中求解一元高次方程
如何在openfoam中求解一元高次方程
如何在openfoam中求解一元高次方程
拉格朗日粒子追踪死循环
拉格朗日粒子追踪死循环
拉格朗日粒子追踪死循环
关于lagrangian求解器里preEvolve()的实现
关于lagrangian求解器里preEvolve()的实现
"object_()","对象名_()"这是什么用法?
"object_()","对象名_()"这是什么用法?
"object_()","对象名_()"这是什么用法?
dependency graph,inheritance diagram和collaboration diagram的区别与代码实现?
dependency graph,inheritance diagram和collaboration diagram的区别与代码实现?
关于两股液体在气相场里的对撞喷雾燃烧问题技术路线推荐
关于两股液体在气相场里的对撞喷雾燃烧问题技术路线推荐
关于两股液体在气相场里的对撞喷雾燃烧问题技术路线推荐
reconstructPar 一边组一边删除数据