但是我下面那个
dnew = 2*(pgo_*pow(Ro_,3)/70000,1/3.0)
并没有出现报错,求解器可以正常使用。所以我在考虑是不是我Pc插值有问题,为了研究这个我尝试了下原有的密度插值rhoc,求解器能够使用
dnew = 2*(pgo_*pow(Ro_,3)/(10*rhoc_),1/3.0)
但是我下面那个
dnew = 2*(pgo_*pow(Ro_,3)/70000,1/3.0)
并没有出现报错,求解器可以正常使用。所以我在考虑是不是我Pc插值有问题,为了研究这个我尝试了下原有的密度插值rhoc,求解器能够使用
dnew = 2*(pgo_*pow(Ro_,3)/(10*rhoc_),1/3.0)
@李东岳 编译通过了,就是计算时候输入求解器命令时候报错
我为什么会这么问呢,因为我编写颗粒方程时候,先想着用理想气体方程,pv3=pv3
所以我代码是
dnew = 2*(pgo_*pow(Ro_,3)/Pc_,1/3.0)
其中,pgo是气泡初始压强,ro是初始半径。编译成功,但求解器使用时候失败了,我为了研究哪儿有问题,我分辨改了上下两个形式。
dnew = 2*(70000*pow(0.00005,3)/Pc_,1/3.0)
dnew = 2*(pgo_*pow(Ro_,3)/70000,1/3.0)
上面那个求解器无法使用,下面求解器可以使用,然后我也调用了一下of原有的rhoc这几个插值也能使用,我感觉是我Pc没有插值成功,研究好久好久也不知道哪儿有问题,我完全是原本rhoInterp如何插值编写的我也模仿写的。
请问各位大佬编写拉格朗日求解器插值问题时候如何进行编写的呢?比如我想识别颗粒收到的液体压强,首先我在求解器上的creatFields.H编写个P=p*rhoc,然后再src源文件里面插值
Pc_ = td.PInterp().interpolate(this->position(), tetIs); //- myadd
//-myadd Pressure interpolator
autoPtr<interpolation<scalar> > PInterp_;
inline const interpolation<scalar>& PInterp() const;
等等这些代码我都是照着of原有的几个Uc,rhoc,muc模仿写出来的,但是我似乎没有插值成功,我直接使用of自带的muc,rhoc这几个插值可以使用。
这个问题是哪儿有问题呢,是不是我的求解器需要进行修改,单单识别一个P不可以
@星星星星晴 比如of他自带Uc插值,是网格中心mesh的,但没有压力P插值,我人为在求解器中间写了个Pc(模仿createField.H的Uc写的),然后在源库里面使用跟着UInterp模仿写PInterp,我这个思路我感觉应该是正确的吧,包括加什么粒子新的属性,我都是模仿他们原有的p.age这些去编写,但是最后就是有问题。
google有什么更好的搜索方式吗,我之前尝试过,请问还有什么平台我可以去询问,cfdonline我打算也问问哈哈哈哈哈
@星星星星晴 您好大佬,我询问一些事情不知道您曾经是否遇到过。我在加(p.d)颗粒长大时候,假如我颗粒直径是个随着时间线性增长的函数时候,能够进行源文件编译,求解器运行,形如我代码红框那个部分(其他地方是我原始的方程代码,我没有进行使用罢了,storeddt就是我的d)
但是我修改一下代码,改成pv=nrt这种就无法使用,能够通过编译,就是无法进行求解器运行,一下子就报错
**我在想难道是他无法去识别我这个Ro_ pgo_,Pc_???**这个Pc是我在求解器里自定义的p*rho。但是我在其他文件下面仿造openfoam自带的一些颗粒属性都对这些进行了定义啊,这个问题困扰了我好几个月了
这是高斯定理,可以看高数下学习三微积分时候的内容,总体来说就是,在某个封闭空间里面,内部散度积分等于封闭体积的外轮廓面积分。你一个网格里面内部的散度的积分,就是流进流出这个网格的量。其中后面那个dS代表面积分吧
最近编写了一个拉格朗日DPMFoam下面的颗粒长大的求解器,在OpenFOAM/OpenFOAM-3.0.0/src/lagrangian/intermediate/lnInclude对源文件进行了修改。
源文件,求解器均编译成功,使用新求解器时候不能运行stochasticDispersionRAS的随机游走模型,有如下报错
Starting time loop
Courant Number mean: 0 max: 0
Time = 0.01
Evolving kinematicCloud
Solving 3-D cloud kinematicCloud
#0 Foam::error::printStack(Foam::Ostream&) at ??:?
#1 Foam::sigSegv::sigHandler(int) at ??:?
#2 ? in "/lib64/libc.so.6"
#3 std::string::rfind(char, unsigned long) const in "/lib64/libstdc++.so.6"
#4 Foam::IOobject::group() const at ??:?
#5 Foam::DispersionRASModel<Foam::KinematicCloud<Foam::Cloud<Foam::CollidingParcel<Foam::KinematicParcel<Foam::particle> > > > >::kModel() const at ??:?
#6 Foam::DispersionRASModel<Foam::KinematicCloud<Foam::Cloud<Foam::CollidingParcel<Foam::KinematicParcel<Foam::particle> > > > >::cacheFields(bool) at ??:?
#7 ? at ??:?
#8 ? at ??:?
#9 ? at ??:?
#10 __libc_start_main in "/lib64/libc.so.6"
#11 ? at ??:?
Segmentation fault (core dumped)
修改了一下算法,算简单一点也有报错
Courant Number mean: 0 max: 0
Time = 0.001
Evolving kinematicCloud
Solving 3-D cloud kinematicCloud
[2] #[3] #0 0 Foam::error::printStack(Foam::Ostream&)Foam::error::printStack(Foam::Ostream&)[1] #0 Foam::error::printStack(Foam::Ostream&)[0] #0 Foam::error::printStack(Foam::Ostream&) at ??:?
at ??:?
at ??:?
at ??:?
[3] #1 [1] #[2] #1 Foam::sigSegv::sigHandler(int)1 Foam::sigSegv::sigHandler(int)Foam::sigSegv::sigHandler(int)[0] #1 Foam::sigSegv::sigHandler(int) at ??:?
[3] #2 ? at ??:?
[2] #2 at ??:?
[1] #2 ?? at ??:?
[0] #2 ? in "/lib64/libc.so.6"
[1] #3 std::string::rfind(char, unsigned long) const in "/lib64/libc.so.6"
[3] #3 std::string::rfind(char, unsigned long) const in "/lib64/libc.so.6"
[2] #3 std::string::rfind(char, unsigned long) const in "/lib64/libc.so.6"
[0] #3 std::string::rfind(char, unsigned long) const in "/lib64/libstdc++.so.6"
in "/lib64/libstdc++.so.6"
[1] #4 Foam::IOobject::group() const[3] #4 Foam::IOobject::group() const in "/lib64/libstdc++.so.6"
[2] #4 Foam::IOobject::group() const in "/lib64/libstdc++.so.6"
[0] #4 Foam::IOobject::group() const at ??:?
[1] #5 Foam::DispersionRASModel<Foam::KinematicCloud<Foam::Cloud<Foam::CollidingParcel<Foam::KinematicParcel<Foam::particle> > > > >::kModel() const at ??:?
[3] #5 Foam::DispersionRASModel<Foam::KinematicCloud<Foam::Cloud<Foam::CollidingParcel<Foam::KinematicParcel<Foam::particle> > > > >::kModel() const at ??:?
[2] #5 Foam::DispersionRASModel<Foam::KinematicCloud<Foam::Cloud<Foam::CollidingParcel<Foam::KinematicParcel<Foam::particle> > > > >::kModel() const at ??:?
[0] #5 Foam::DispersionRASModel<Foam::KinematicCloud<Foam::Cloud<Foam::CollidingParcel<Foam::KinematicParcel<Foam::particle> > > > >::kModel() const at ??:?
[1] #6 Foam::DispersionRASModel<Foam::KinematicCloud<Foam::Cloud<Foam::CollidingParcel<Foam::KinematicParcel<Foam::particle> > > > >::cacheFields(bool) at ??:?
[3] #6 Foam::DispersionRASModel<Foam::KinematicCloud<Foam::Cloud<Foam::CollidingParcel<Foam::KinematicParcel<Foam::particle> > > > >::cacheFields(bool) at ??:?
[2] #6 Foam::DispersionRASModel<Foam::KinematicCloud<Foam::Cloud<Foam::CollidingParcel<Foam::KinematicParcel<Foam::particle> > > > >::cacheFields(bool) at ??:?
[0] #6 Foam::DispersionRASModel<Foam::KinematicCloud<Foam::Cloud<Foam::CollidingParcel<Foam::KinematicParcel<Foam::particle> > > > >::cacheFields(bool) at ??:?
[1] #7 at ??:?
[2] #7 at ??:?
[3] #7 at ??:?
[0] #7 ???? at ??:?
[1] #8 at ??:?
[2] #8 at ??:?
[3] #8 at ??:?
[0] #8 ???? at ??:?
[1] #9 at ??:?
[2] #9 at ??:?
[3] #9 at ??:?
[0] #9 ???? at ??:?
[1] #10 __libc_start_main at ??:?
[3] #10 __libc_start_main at ??:?
[2] #10 __libc_start_main at ??:?
[0] #10 __libc_start_main in "/lib64/libc.so.6"
[1] #11 in "/lib64/libc.so.6"
[3] #11 in "/lib64/libc.so.6"
[2] #11 in "/lib64/libc.so.6"
[0] #11 ???? at ??:?
at ??:?
at ??:?
at ??:?
看起来是和Collisionparcel文件有关系?????为什么我改一下颗粒直接变化还和碰撞模型的文件产生了影响??我修改完了之后,不用随机游走模型倒是能跑,但是之后我是算例是需要运动随机游走模型的,所以我想搞想清楚原因,是不是我还要对CollisonParcel文件进行修改
什么求解器,自己写的求解器吗,会不会是求解器问题??或者你再检查下边界条件
@haozhibin 在 新手疑问。为什么别人开发的求解器对of版本有要求 中说:
发的fe3.0版
源文件不一样呗,算法应该都是差不多的,但是处理方式不一样。这种移植的话,相隔不久的版本应该好做,但是远一点版本就难了
@AppleKiller 行,我再看看,研究了好久感觉都没问题,我再重新看看我的函数
@hurricane007 问题太奇怪了,以至于现在我都不知道如何解决它,openfoam没有相应提示的报错
我修改完src文件之后能够编译成功
我又修改了DPMFoam求解器文件也能编译成功(warn应该是提醒我,我自己新增的变量,每个地方写的顺序有点不一致)
但是我使用该求解器就报错
这个没啥报错提示,我卡了好久了,感觉自己改的源代码也没啥问题
@李东岳 可不可以这样说(gpt给的建议),湍流分散力主要是通过一个宏观调控来影响离散相扩散,所以是加在双欧拉模型中的源相中;随机游走模型是直接调控单个离散相,所以是加在拉格朗日模型中。同时两个方法的目的性是一样的,但是添加的方式,方程不一致。
@李东岳 东岳老师,我再细问一下,你看比如双欧拉法中曳力公式
可以转化运用在拉格朗日中变成以下形式(忽略一下量纲变化,因为拉格朗日里是力,欧拉法公式是体积力)
这种”转化“我发现各种力都能转化
那么形如双欧拉法的湍流分散力,能否转化成欧拉拉格朗日中,来用来描述单个颗粒啊?(stochasticDispersionRAS原理似乎完全不一样,不是加力,而是加湍流速度)
随机游走模型和湍流分散力模型应用效果和目的我目前浅显感觉应该是相似的的,但是他们的公式似乎天差地别,这两个概念具体上有什么异同啊?望东岳老师解答
湍流分散力和随机游走模型有什么区别啊,目前我都把他们两个混为一谈,今天有老师提出来了,然后就说分散力在双欧拉里面使用,游走模型在欧拉拉格朗日里面使用??是这样吗,有大佬系统给我讲解一下他们两个异同地方。最好带一点公式,让我知道湍流分散力如何表示(游走模型是stochasticDispersionRAS我看了open foam代码看明白了)
这两个概念内容有没有相关文件解释啊
@zzzttt 整个报错你给复制下来看看,用的什么求解器也说明下
@好学者 我使用DPMFoam,简单解答下你问题,可能有错误
问题1: DPM模型里面连续项也可以用湍流模型,具体在constant里面湍流模型文件可以设置。
问题2: gas phase应该是气体把,你可以看看设置文件他设置了什么,这个东西要么是离散相液滴,要么是连续项气体
问题3: 喷出来的就是parcel,of使用了parcel和particle两个概念,parcel包裹n个paticle,这个n你可以设置,当n为1时候particle就是parcel,你of设置的其实是parcel,不是particle,这是为了n不为1时候,简便计算。比如1w个颗粒,可以简便为5000个包裹,每个包裹2个颗粒。你用的拉格朗日求解器算出来的肯定是离散项啊,你可以在paraview看一下,是一个一个颗粒的,不会产生连续项,你想看连续项只能看看像分数,或者用Euler模型
问题4: 见问题3
问题5:你这一块肯定是有离散项有连续项,你可以通过像分数看看。openfoam的拉格朗日求解器中,离散项和连续项也有像分数的关系,你可以看看东岳老师的普适性方程看看。你这个虚线内部肯定是有连续项目有离散项,这和像分数有关,比如边长为1m的正方体网格,内部有20个1dm的颗粒,那么这个颗粒像分数就是20‰ 这个和双欧拉模型是异曲同工之妙。
问题6 移植气泡也是目前我的工作,这个太难了,我也在仔细研究。你在parcel里面添加气项是什么意思,如果你是想要添加一些离散项属性这个倒好添加。你是不是做类似于空化的啊。气泡成核我不知道,气泡长大我目前在做,包括气泡破碎这些。你这个要求太难了,需要修改openfoam 的源文件,这个玩意可以私下讨论下
顶一下
@zhou 没用过此类求解器,你可以降低下并行数试试,或者看看网格是否有问题???我用拉格朗日求解器也遇到类似情况,也没有什么解决办法,不过你这个开源求解器,可能是你的边界条件有什么问题什么的把,你现在先看看你目前阶段算出来的东西有没有问题
@yjc95 还没有解决的话,可以加我qq,2269609762