各位前辈好!
我将网格导入到openfoam中,但只想输出某一个面上所有网格点的坐标信息,有没有类似程序可以参考呢?
麻烦哪位热心前人指点一下!
各位前辈好!
我将网格导入到openfoam中,但只想输出某一个面上所有网格点的坐标信息,有没有类似程序可以参考呢?
麻烦哪位热心前人指点一下!
各位前辈好!
最近我想在工作站的centos7系统上安装of3,我根据wiki上的教程进行了操作(链接如下:链接文本)
其中的一步是“Now let's get and unpack Boost and fix the version in makeCGAL”(中文含义是:“现在让我们获取并解压 Boost 并修复 makeCGAL 中的版本:”)
给出的参考命令是
wget "https://raw.github.com/wyldckat/scripts4OpenFOAM3rdParty/master/getBoost"
但运行发现无法 无法下载,可能是这个链接已经没有了,这也导致后面在编译openfoam的时候报错
g++ -m64 -Dlinux64 -DWM_ARCH_OPTION=64 -DWM_DP -DWM_LABEL_SIZE=64 -Wall -Wextra -Wold-style-cast -Wnon-virtual-dtor -Wno-unused-parameter -Wno-invalid-offsetof -O3 -DNoRepository -ftemplate-depth-100 -I/home/win/OpenFOAM/ThirdParty-3.0.0/platforms/linux64Gcc/boost_1_55_0/include -I/home/win/OpenFOAM/OpenFOAM-3.0.0/src/meshTools/lnInclude -I/home/win/OpenFOAM/OpenFOAM-3.0.0/src/parallel/decompose/decompositionMethods/lnInclude -I/home/win/OpenFOAM/OpenFOAM-3.0.0/src/renumber/renumberMethods/lnInclude -IlnInclude -I. -I/home/win/OpenFOAM/OpenFOAM-3.0.0/src/OpenFOAM/lnInclude -I/home/win/OpenFOAM/OpenFOAM-3.0.0/src/OSspecific/POSIX/lnInclude -fPIC -c SloanRenumber.C -o /home/win/OpenFOAM/OpenFOAM-3.0.0/platforms/linux64GccDPInt64Opt/src/renumber/SloanRenumber/SloanRenumber.o
SloanRenumber.C:34:28: 致命错误:boost/config.hpp:没有那个文件或目录
#include <boost/config.hpp>
^
编译中断。
make: *** [/home/win/OpenFOAM/OpenFOAM-3.0.0/platforms/linux64GccDPInt64Opt/src/renumber/SloanRenumber/SloanRenumber.o] 错误 1
请问一下大家,如何才能下载合适版本的boost用于of3的安装呢?
谢谢
各位前辈好!
自己目前基于OpenFOAM开发了一个简单的程序,做的是气液两相流模拟,目前论文投稿 想投到Physics of Fluids 或者 international journal of multiphase flow杂志
我上网查看发现Physics of Fluids是个比较老牌的杂志,之前口碑很好,但最近几年有点水的趋势,年发文量2000+;international journal of multiphase flow中的论文都很扎实,但感觉圈子比较小,年发文量才200+,目前的影响力没有POF高。所以目前自己也比较纠结投到哪个杂志
有没有哪位前辈能发表一下自己的经验或者看法呢?
感激不尽!
感谢二位前辈的回复,我差不多理解这个意思了
最近看到了一点OF关于 函数声明的代码 ,对于const的使用存在疑惑:
inline scalar k() const { return k_; }
inline const vectorField& Smom() const { return Smom_; }
为什么第一行代码应用了一个const,第二行代码用了两个const呢?
第二行代码中的两个const分别表示什么意思呢?
麻烦老师们能够指点一下
各位前辈好!
如图1 ,我现在流场中有一些气泡,想将每一个气泡的内部压力映射到底部壁面上,效果图如图2,我应该如何在paraview中进行映射/投影呢?我自己试验了pointDatasetInterpolator好像不太对(图3)。
哪位前辈能够指点一个思路呢?谢谢
图1:
图2:
图3:
@tens 谢谢您的热心指点,虽然还有点晕,我后面仔细体会体会 ,再次感谢
@tens 感谢您的回答,我试验了一下,确实可以累加流场,但我非常疑惑,在主程序中添加
c_flow_total += c_flow; // 展开为c_flow_total = c_flow_total + c_flow;
每一次循环,主程序怎么知道等式右边的c_flow_total代表了上一个时间步的值呢?为什么替换为c_flow_total.oldTime()就不可以了呢?
希望您能够在解答一下,谢谢
各位前辈好!
我有一个volScalarField场c_flow,现在想累加每一个时刻的c_flow流场,在一段时间后输出c_flow_total
我写的程序如下:
初始化设置c_flow_total流场为0
Info<< "Initializing c_flow_total" << endl;
volScalarField c_flow_total
(
IOobject
(
"c_flow_total",
mesh.time().timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::NO_WRITE
),
mesh,
dimensionedScalar("c_flow_total", dimensionSet(0,1,-1,0,0,0,0), 0)
);
然后在主程序中计算c_flow和c_flow_total
Info<< "Calculating erosion index c_flow\n" << endl;
volScalarField c_flow
(
IOobject
(
"c_flow",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
8.97pos(p_rgh - pSat)*sqrt(mag(p_rgh - pSat)/rho1)
);
Info<< "Calculating c_flow_total" << endl;
volScalarField c_flow_total
(
IOobject
(
"c_flow_total",
runTime.timeName(),
mesh,
IOobject::READ_IF_PRESENT,
IOobject::AUTO_WRITE
),
c_flow_total.oldTime() + c_flow
);
程序编译没有问题,但用interPhaseChangeFoam计算case报错如下:
Calculating c_flow_total
#0 Foam::error::printStack(Foam::Ostream&) at ??:?
#1 Foam::sigSegv::sigHandler(int) at ??:?
#2 ? in "/lib64/libc.so.6"
#3 Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>::storeOldTimes() const at ??:?
#4 Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>::oldTime() const at ??:?
#5 ? at ??:?
#6 __libc_start_main in "/lib64/libc.so.6"
#7 ? at ??:?
Segmentation fault
我感觉可能是oldTime()的使用出现了问题,请问一下大家,在程序中 累加每一个时刻的流场有什么好的办法呢?
@小考拉 自问自答来解决这个问题。
首先定义一个全为0的流场命名为c_flow
然后利用下面的命令
c_flow.boundaryField()[patchID] = c_flow_origin.boundaryField()[patchID]
最后输出c_flow流场即可
各位前辈好!我现在有一个volScalarField类型的流场c_flow_origin,但我只想在程序中输出名字为“BOTTOM”的这个面的流场
代码如下:
volScalarField c_flow_origin = 8.97*pos(0.99-alpha1)*sqrtp_rgh/rho1); //流场c_flow
label patchID = mesh.boundaryMesh().findPatchID("BOTTOM"); //查找名字为BOTTOM的面ID
volScalarField c_flow_BOTTOM //输出这个面的流场
(
IOobject
(
"c_flow_BOTTOM",
runTime.timeName(),
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
c_flow_origin.boundaryField()[patchID]
);
编译发现报错:
createFields.H:139:9: error: no matching function for call to ‘Foam::GeometricField<double, Foam::fvsPatchField, Foam::surfaceMesh>::GeometricField(Foam::IOobject, Foam::fvPatchField<double>&)’
根据报错分析 应该是输出的 BOTTOM面流场的 数据类型volScalarField有问题,但更改了好像也不行,请问这个问题应该如何解决呢?
感谢
@队长别开枪 谢谢老师指点,我好好研究一下
各位前辈好!
我现在想在interPhaseChengFoam中添加一个链表list,里面放一些符合某些条件的单元,比如要求单元蒸汽体积分数大于0.5,我应该如何操作呢?有没有哪些类似的代码 可以参考呢?
麻烦哪位老师指点一下
谢谢
@tens 学到了,感谢老师的指点!
@小考拉 继续补充,对于第二个问题,目前导热系数的确可以通过普朗特数的公式计算得到,但前提是我设置的case里面保证了thermophysicalProperties中的transport里面选择const
具体的介绍,可以参考:https://cfd.direct/openfoam/user-guide/v6-thermophysical/
感谢老师的回复。
是的,我说的就是alphaEff的单位。我目前认为单位是 kg/(ms)
问题二中,对于导热率( thermal diffusivity)我通过查找资料,感觉可能是通过 普朗特数计算得到的吧。
我计算之前设置了流场的普朗特数,就可以计算得到导热率了,不知道我这样的理解是否正确呢?
各位老师好!
我采用compressibleInterFoam二次开发计算了一个可压缩空化问题,目前对里面的能量方程有一点疑问。能量方程代码如下:
fvScalarMatrix TEqn
(
fvm::ddt(rho, T)
+ fvm::div(rhoPhi, T)
- fvm::laplacian(mixture.alphaEff(turbulence->mut()), T)
+ (
fvc::div(fvc::absolute(phi, U), p)
+ fvc::ddt(rho, K) + fvc::div(rhoPhi, K)
)
*(
alpha1/mixture.thermo1().Cv()
+ alpha2/mixture.thermo2().Cv()
)
);
根据东岳老师的能量方程教程(链接:http://www.dyfluid.com/docs/energy.html ) 公式(7)和公式(21),可以得到alpha_eff 的单位应该是 kg/(ms),但通过查看of源代码可以发现alpha_eff 单位竟然可以是 kg/(ms) 还可以是 J/m/s/K。
代码链接:https://cpp.openfoam.org/v3/a02698.html#a9648c27c51ad3b583ca3c44c7ac0d868
https://cpp.openfoam.org/v3/a00123.html#a20f8bad2335b8c29d97af5ac7d324746
问题一:我感觉alpha_eff 单位应该是 kg/(ms),怎么又多出来一个呢?
问题二:通过查阅文献,发现混合热扩散系数alpha_eff 需要通过导热率k,定容比热容Cv来计算(在本例中为水和水蒸气的导热率),在of中如何计算导热率k呢?
麻烦各位老师指点一下,同时请问有什么资料可以推荐参考呢?我去学习一下
感谢老师的指点,我自己去试一试!!
各位老师好!
我想在一个自己写的类中输出一个矢量CCC,参考论坛上的代码,将下面的代码写进了类中:
fileName name = ("coefficient");
OFstream OS(name);
if (Pstream::master())
{
if(OS.opened())
{
OS << runTime_.value() << tab << CCC.value() << endl << "\n"; // CCC是一个dimensionedVector
OS << nl << endl;
}
}
但计算时发现 当前时间步输出的 CCC 将 上一时间步输出的 CCC 覆盖掉了
我现在想输出每一个时间步的CCC值,应该加哪些代码呢? 或者是 有哪些代码可以参考呢?
麻烦哪位老师可以指点一下呢?
各位朋友们好!
我最近在看lagrangian库中的solidParticle库代码,对于里面的 类模板的使用 不太懂,solidParticleCloud.C部分代码如下:
void Foam::solidParticleCloud::move(const dimensionedVector& g) //在solidParticleCloud类中定义一个move函数
{
const volScalarField& rho = mesh_.lookupObject<const volScalarField>("rho");
const volVectorField& U = mesh_.lookupObject<const volVectorField>("U");
const volScalarField& nu = mesh_.lookupObject<const volScalarField>("nu");
interpolationCellPoint<scalar> rhoInterp(rho);
interpolationCellPoint<vector> UInterp(U);
interpolationCellPoint<scalar> nuInterp(nu);
solidParticle::trackingData
td(*this, rhoInterp, UInterp, nuInterp, g.value()); //在solidParticleCloud类下面定义了一个trackingData类的对象td??
Cloud<solidParticle>::move(td, mesh_.time().deltaTValue());
}
代码中的这句话:
solidParticle::trackingData
td(*this, rhoInterp, UInterp, nuInterp, g.value());
目前自己很困惑,为什么在solidParticleCloud类的函数move中可以 定义一个 solidParticle类中的 trackingData类的 对象td呢?
自己查找了solidParticleCloud.H文件发现 solidParticleCloud的基类是 Cloud<solidParticle>类,这个Cloud<solidParticle>类 中solidParticle是实参,对Cloud <ParticleType> 类模板进行了实例化.
我怀疑难道是因为Cloud<solidParticle>类中的 实参是solidParticle,所以其子类solidParticleCloud中函数 就可以调用/定义 solidParticle类中的trackingData类?
请哪位高手能够指点一下呢?感激不尽
@xpqiu 谢谢邱老师的热心指点!我明白了!再次感谢
@xpqiu 非常感谢邱老师的热心指点!
根据邱老师的指点,我自己梳理了一下思路:
1.找到对象mesh_的类fvMesh,fvMesh类具体介绍:https://cpp.openfoam.org/v3/a08664_source.html ,可以发现fvMesh类继承了primitiveMesh这个类,necll() 函数是在primitiveMesh类中定义的。
2.查找primitiveMesh类,发现了成员函数nCell(),这样就可以在primitiveMesh.H文件、primitiveMeshI.H文件查看具体定义了
但上述这个过程,我目前存在一个问题,在fvMesh.H中 fvMesh类 调用 基类primitiveMesh成员函数nCell() 的接口 是 哪几行代码呢?(fvMesh.H文件源代码链接: https://cpp.openfoam.org/v3/a05817_source.html
)
我自己对老师说的 “搜索fvMesh这个类的接口” 这句话 不太理解
同时,结合我自己初学的一些C++知识,fvMesh类的接口应该是 留给fvMesh类的子类 调用的,这里我要找的应该是fvMesh类的某个基类(即primitiveMesh),总感觉有点矛盾
麻烦老师能否再指点一下?谢谢
各位朋友们好!
我现在正在研究lagrangian库中的代码,参考网上的教程进行一些二次开发,其中有些设置流场初始值 或者 调用某些网格单元 中心、边长的代码自己不太懂。(例如: mesh_.nCells(), mesh_nCells().size()等)
本着溯源的目的,目前自己采取的方法是在lagrangian库下面 调用搜索命令 grep -R 'mesh_.nCells() ./
查找对应的文件,例如搜索到:
./intermediate/clouds/Templates/KinematicCloud/KinematicCloud.C
然后在doxygen上查找对应文件的源代码(链接:https://cpp.openfoam.org/v3/a06411_source.html),
可以发现KinematicCloud.C中mesh_.nCells()的位置 ,但在这里却没有对应的链接 来解释mesh_.nCells()的含义(见下图)
请问我如何找到真正定义mesh_n.Cells() 的源文件的位置呢?我想查看一下nCells()函数的具体功能
我感觉这个找mesh_n.Cells() 源代码的方法,也应该可以推广应用到查找网格单元的其他属性吧?(比如想查找单元中心的位置,单元的边长等等)
希望各位前辈 朋友们能够指点一下
你好,我目前也在研究lagrangian库中的代码,我主要参考瑞典查尔姆斯理工OpenFOAM课程的PPT,网址链接:http://www.tfd.chalmers.se/~hani/kurser/OS_CFD/ 希望对你有所帮助
另外,可以和您邮件或者其他方式交流一下 有关lagrangian库的 问题吗?我现在主要在做 欧拉-拉格朗日的耦合,针对的是气液两相空化流动,有一些心得和问题,可以交流一下吗?
@Mania 我记得当时前辈推荐的这个 代码 里面有一个说明,直接放到有关的目录下面,编译链接即可。将postaverage文件加入到constant文件中,然后直接在终端输入命令 postaverage就可以生成对应的展向平均文件了。。还是比较简单的,建议你自己多试一试
@anubis 我之前是在tecplot里面做的,,没有用过paraview,你可以换到tecplot里面试试?
目前问题已经解决,自问自答了, 记录一下步骤:
1.需要将坐标点写到tecplot里面的宏文件中导入tecplot,
2.然后利用tecplot里面的data-extract-extract geom over time命令进行提取,
3.最后直接将对应的变量写进file输出即可。
@TINGHAIK 感谢前辈的指点,我这几天比较忙,有空试验一下
各位前辈好!
本人利用openfoam计算水翼空化流动,输出了100个时刻的流场数据,目前想利用tecplot提取这100个时刻流场中 下图这条监测虚线上的数据。这条虚线垂直距离水翼吸力面1mm。
目前的困难就是如何提取 这条检测线上的数据呢?
自己之前 截取水翼吸力面上的数据,直接利用slience截取水翼就可以,但现在 监测线 垂直距离水翼壁面 有1mm,就不知道怎么处理了,希望各位前辈能够提供一点思路 或者 建议,十分感谢
刚刚自己又研究了一下,现在又出现了新的问题,请问一下大家openfoam中有关比内能的定义代码在哪里找呢?目前我只能找到compressibleInterFoam里面有关比焓he的定义,但具体求解代码在src里面找不到了?
各位前辈好!
本人目前主要研究空化中的激波问题,读论文的时候(论文链接:https://www.cambridge.org/core/journals/journal-of-fluid-mechanics/article/numerical-study-of-cavitation-regimes-in-flow-over-a-circular-cylinder/C66ECA1BBE0036734834570F7DCE1683),
涉及到比内能与温度的公式2.4(下图),现在不明白水中比内能el与温度T的关系式是如何得到的呢?水的这个关系式为什么比气体的关系式多出一个Pc\rho_l呢?
有没有哪位前辈可以推荐一点参考资料呢?
@bestucan 前辈您好!很抱歉再次打扰您,针对您之前的回复,我认真研读了一下,但还是存在一些困难,还希望您能够指点一个思路,感激不尽!
我现在在用非线性SGS模型,为了防止计算崩掉,就要限制SGS模型计算的Tij,可是Tij是一个类型为 volTensorField
的张量,我现在无法提取出来这个Tij的每一个分量,进行限制。
我刚刚简单试验了一下如下代码:
const volSymmTensorField S = symm(gradU);
const volScalarField Z = S.zz();
,报错如下:
DNM.C: In member function ‘Foam::dimensionedVector Foam::compressible::LESNonlinearModels::DCNM::C(const volTensorField&) const’:
DNM.C:83:28: error: ‘const volSymmTensorField’ has no member named ‘zz’
const volScalarField Z = S.zz();
我目前的思路是参考tensor的定义成员xx xy xz的思路,将volTensorField中也定义一个xx xy xz等9个分量,,但不知道这样可行否,,同时由于这个原始的湍流模型代码比较老(是2.4版本的),我如何能快速找到tensor 和 volTensorField的定义和代码呢?
希望前辈百忙之中再指点一下,谢谢!
@benqing 在 paraView-求展向平均问题 中说:
@小考拉 paraview能不能做不清楚,但是可以写程序实现,下面是cfdonline上的程序,我用过,可以实现,你可以研究一下,源程序好像只有速度压力这些东西,alpha.water的话需要自己添加进去
https://www.cfd-online.com/Forums/openfoam-post-processing/106966-spanwise-averaging-three-dimensional-field.html
前辈您好!
我最近在研究您回复我的cfd online上的求解展向时均的代码,cfd online上面有两个代码,分别如下 和 ,请问前辈您之前用的是哪一套代码呢?
我现在在研究第一套代码的spanwiseAvg.C文件,但里面的一些遍历网格单元的代码自己不是很清楚,,请问前辈有哪些资料可以参考学习一下呢?
另外在第一套代码中(spanwiseAvg.C)的file文件中为什么是EXE = $(FOAM_USER_APPBIN)/spanwiseAvg
呢?感觉看起来编译的是个求解器,
自己的of代码基础比较薄弱,还望前辈能够赐教,感激不尽
哇,感谢前辈回复,我仔细去学习一下
各位前辈们好!
我现在定义了一个张量 volTensorField S,现在想输出其中的 S.xx()这个分量的值,查看了一些前辈之前的讨论帖子:链接文本
请问对于 类型为volTensorField的张量S怎样输出它的分量S.xx()呢?
@bestucan 感谢前辈的回复,目前问题已经解决
在编译OpenFOAM之前,需要先编译ThirdParty,但OpenFOAM WiKi中的Ubuntu18.04版安装教程里面好像并没有“编译ThirdParty这一步”,希望以后大家注意吧
各位前辈好!
我目前在Ubuntu18.04下面相安装openfoam3.0.0,参考了openfoamwiki有关在Ubuntu 18.04安装of 3.0.1的教程,教程连接:链接文本
自己一步步完全按照wiki上面的教程安装,安装到第14步 编译openfoam的时候,编译一会就报错如下:
g++-5 -m64 -Dlinux64 -DWM_ARCH_OPTION=64 -DWM_DP -DWM_LABEL_SIZE=32 -Wall -Wextra -Wold-style-cast -Wnon-virtual-dtor -Wno-unused-parameter -Wno-invalid-offsetof -O3 -DNoRepository -ftemplate-depth-100 -IlnInclude -I. -I/home/abc/OpenFOAM/OpenFOAM-3.0.0/src/OpenFOAM/lnInclude -I/home/abc/OpenFOAM/OpenFOAM-3.0.0/src/OSspecific/POSIX/lnInclude -fPIC -c reaction/reactions/makeLangmuirHinshelwoodReactions.C -o /home/abc/OpenFOAM/OpenFOAM-3.0.0/platforms/linux64GccDPInt32Opt/src/thermophysicalModels/specie/reaction/reactions/makeLangmuirHinshelwoodReactions.o
reaction/reactions/makeReactions.C: In function ‘void __static_initialization_and_destruction_0(int, int)’:
reaction/reactions/makeReactions.C:106:1: internal compiler error: 段错误
}
^
g++-5: internal compiler error: 段错误 (program cc1plus)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions.
make: *** [/home/abc/OpenFOAM/OpenFOAM-3.0.0/platforms/linux64GccDPInt32Opt/src/thermophysicalModels/specie/reaction/reactions/makeReactions.o] Error 4
/home/abc/OpenFOAM/OpenFOAM-3.0.0/wmake/rules/General/transform:8: recipe for target '/home/abc/OpenFOAM/OpenFOAM-3.0.0/platforms/linux64GccDPInt32Opt/src/thermophysicalModels/specie/reaction/reactions/makeReactions.o' failed
make: *** 正在等待未完成的任务....
abc@abc-X11DAi-N:~/OpenFOAM/OpenFOAM-3.0.0$
麻烦哪位前辈能够指点以下怎么解决呢? 谢谢
各位前辈好!
我在compressibleInterFoam中引入了空化源项,现在调用自己写的非线性SGS模型计算的时候,流场初始速度10m/s,计算一段时间后,maxU会突然增大,导致流场发散掉,下面是速度暴增的过程
MULES: Solving for alpha.water
Liquid phase volume fraction = 0.997517 Min(alpha.water) = 0.000412402 Max(alpha.water) = 1
Min(alpha.vapor) = -8.20677e-13 Max(alpha.vapor) = 0.999588
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
smoothSolver: Solving for T, Initial residual = 4.32259e-05, Final residual = 2.38488e-09, No Iterations 2
min(T) 290.144
GAMG: Solving for p_rgh, Initial residual = 4.54434e-06, Final residual = 7.05483e-10, No Iterations 3
max(U) 13.9186
min(p_rgh) 1843.8
GAMGPCG: Solving for p_rgh, Initial residual = 3.62757e-07, Final residual = 4.88638e-10, No Iterations 1
max(U) 13.9184
min(p_rgh) 1843.67
ExecutionTime = 275.32 s
Integral of alpha.water = 0.00190802 [0 3 0 0 0 0 0]
fieldAverage fieldAverage1 output:
Calculating averages
Courant Number mean: 0.00487524 max: 0.135574
Time = 0.011952
MULES: Solving for alpha.water
Liquid phase volume fraction = 0.997517 Min(alpha.water) = 0.000413145 Max(alpha.water) = 1
Min(alpha.vapor) = -4.79172e-13 Max(alpha.vapor) = 0.999587
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
smoothSolver: Solving for T, Initial residual = 4.324e-05, Final residual = 2.42709e-09, No Iterations 2
min(T) 290.146
GAMG: Solving for p_rgh, Initial residual = 5.42286e-06, Final residual = 7.32723e-10, No Iterations 3
max(U) 26.57
min(p_rgh) 1813.11
GAMGPCG: Solving for p_rgh, Initial residual = 3.66982e-07, Final residual = 5.21535e-10, No Iterations 1
max(U) 25.4251
min(p_rgh) 1817.97
ExecutionTime = 275.6 s
fieldAverage fieldAverage1 output:
Calculating averages
Courant Number mean: 0.00487537 max: 0.135663
Time = 0.011953
MULES: Solving for alpha.water
Liquid phase volume fraction = 0.997517 Min(alpha.water) = 0.000412369 Max(alpha.water) = 1
Min(alpha.vapor) = -8.14016e-13 Max(alpha.vapor) = 0.999588
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
smoothSolver: Solving for T, Initial residual = 4.32537e-05, Final residual = 2.41625e-09, No Iterations 2
min(T) 290.148
GAMG: Solving for p_rgh, Initial residual = 5.31025e-06, Final residual = 6.64697e-10, No Iterations 3
max(U) 20.2828
min(p_rgh) 1797.39
GAMGPCG: Solving for p_rgh, Initial residual = 3.95326e-07, Final residual = 5.53382e-10, No Iterations 1
max(U) 20.6401
min(p_rgh) 1803.66
ExecutionTime = 275.88 s
fieldAverage fieldAverage1 output:
Calculating averages
Courant Number mean: 0.00487547 max: 0.135752
Time = 0.011954
MULES: Solving for alpha.water
Liquid phase volume fraction = 0.997516 Min(alpha.water) = 0.000412357 Max(alpha.water) = 1
Min(alpha.vapor) = -2.22555e-12 Max(alpha.vapor) = 0.999588
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
smoothSolver: Solving for T, Initial residual = 4.32478e-05, Final residual = 2.41079e-09, No Iterations 2
min(T) 290.15
GAMG: Solving for p_rgh, Initial residual = 4.91279e-06, Final residual = 6.3296e-10, No Iterations 3
max(U) 30.2344
min(p_rgh) 1778.9
GAMGPCG: Solving for p_rgh, Initial residual = 4.09173e-07, Final residual = 3.01626e-10, No Iterations 1
max(U) 29.9168
min(p_rgh) 1779.32
ExecutionTime = 276.17 s
fieldAverage fieldAverage1 output:
Calculating averages
Courant Number mean: 0.00487556 max: 0.135842
Time = 0.011955
MULES: Solving for alpha.water
Liquid phase volume fraction = 0.997516 Min(alpha.water) = 0.000412479 Max(alpha.water) = 1
Min(alpha.vapor) = -4.44089e-16 Max(alpha.vapor) = 0.999588
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
smoothSolver: Solving for T, Initial residual = 4.32198e-05, Final residual = 2.70013e-09, No Iterations 2
min(T) 290.153
GAMG: Solving for p_rgh, Initial residual = 1.71158e-05, Final residual = 7.83321e-10, No Iterations 4
max(U) 140.097
min(p_rgh) 1138.55
GAMGPCG: Solving for p_rgh, Initial residual = 1.088e-06, Final residual = 4.13587e-10, No Iterations 2
max(U) 147.712
min(p_rgh) 1226.71
ExecutionTime = 276.46 s
我仔细检查发现很可能是由于求解U方程时,某个网格上面速度突然变得很大,最终导致流场发散,目前想在U方程中 或者 P方程中限制最大速度不超过某一个值,由于U是矢量,我现在不太清楚怎么限制流场中的U不超过某一个值呢?是分别限制U某一方向的速度 还是 直接限制max(mag(U).value)呢?
麻烦哪位前辈能够指点一下呢?谢谢
谢谢前辈指点,我去试一试
各位前辈好!
我现在在计算三维水翼空化绕流,下图呈现的是alpha.water体积分数云图,现在想将三维流场进行展向平均(z方向),得到某一时刻的z方向平均流场,请问在paraView里面怎样处理呢?
哪位前辈可以指点一下思路呢?谢谢
好的,我去试一试,谢谢前辈指点
@东岳 感谢东岳老师的回复,但我看了一下流场,不管是速度 压力 还是温度,都是正常的呀,为什么老师您说是发散了呢?
麻烦哪位好心人给一下openfoam3.0.0的安装包呢?官网上竟然下载不了,谢谢
各位前辈好!
自己现在在学校的超算系统上跑case,调用了自己账户下面安装的of3.0的compressibleInterFoam(自己修改了求解器里面的部分代码),并行计算调用了openmpi 2.1.5,但并行计算经常会突然出现下面这个错误
A process has executed an operation involving a call to the
"fork()" system call to create a child process. Open MPI is currently
operating in a condition that could result in memory corruption or
other system errors; your job may hang, crash, or produce silent
data corruption. The use of fork() (or system() or other calls that
create child processes) is strongly discouraged.
The process that invoked fork was:
Local host: [[37777,0],5] (PID 31599)
If you are *absolutely sure* that your application will successfully
and correctly survive a call to fork(), you may disable this warning
by setting the mpi_warn_on_fork MCA parameter to 0.
--------------------------------------------------------------------------
[5] #0 Foam::error::printStack(Foam::Ostream&) at ??:?
[5] #1 Foam::sigSegv::sigHandler(int) at ??:?
[5] #2 ? in "/lib64/libc.so.6"
[5] #3 ? at btl_vader_component.c:?
[5] #4 opal_progress in "/software/openmpi/2.1.5/lib/libopen-pal.so.20"
[5] #5 ompi_request_default_wait_all in "/software/openmpi/2.1.5/lib/libmpi.so.20"
[5] #6 PMPI_Waitall in "/software/openmpi/2.1.5/lib/libmpi.so.20"
[5] #7 Foam::UPstream::waitRequests(int) at ??:?
[5] #8 Foam::lduMatrix::updateMatrixInterfaces(Foam::FieldField<Foam::Field, double> const&, Foam::UPtrList<Foam::lduInterfaceField const> const&, Foam::Field<double> const&, Foam::Field<double>&, unsigned char) const at ??:?
[5] #9 Foam::lduMatrix::Amul(Foam::Field<double>&, Foam::tmp<Foam::Field<double> > const&, Foam::FieldField<Foam::Field, double> const&, Foam::UPtrList<Foam::lduInterfaceField const> const&, unsigned char) const at ??:?
[5] #10 Foam::PCG::solve(Foam::Field<double>&, Foam::Field<double> const&, unsigned char) const at ??:?
[5] #11 Foam::GAMGSolver::solveCoarsestLevel(Foam::Field<double>&, Foam::Field<double> const&) const at ??:?
[5] #12 Foam::GAMGSolver::Vcycle(Foam::PtrList<Foam::lduMatrix::smoother> const&, Foam::Field<double>&, Foam::Field<double> const&, Foam::Field<double>&, Foam::Field<double>&, Foam::Field<double>&, Foam::Field<double>&, Foam::Field<double>&, Foam::PtrList<Foam::Field<double> >&, Foam::PtrList<Foam::Field<double> >&, unsigned char) const at ??:?
[5] #13 Foam::GAMGPreconditioner::precondition(Foam::Field<double>&, Foam::Field<double> const&, unsigned char) const at ??:?
[5] #14 Foam::PCG::solve(Foam::Field<double>&, Foam::Field<double> const&, unsigned char) const at ??:?
[5] #15 Foam::fvMatrix<double>::solveSegregated(Foam::dictionary const&) at ??:?
[5] #16 Foam::fvMatrix<double>::solve(Foam::dictionary const&) at ??:?
[5] #17 ? at ??:?
[5] #18 __libc_start_main in "/lib64/libc.so.6"
[5] #19 ? at ??:?
srun: error: n0025: task 5: Segmentation fault
仔细检查发现流场没有问题,怀疑是超算并行的问题,换节点和分区依然没有什么效果,
请问大家用超算的时候有没有出现过类似的错误呢?难道是我自己在账户下面安装的of3.0哪里出了问题吗?
各位前辈好!
我目前想在tecplot2017里面输出of计算的某一时刻所有结点的坐标和速度场,但利用file->write data的时候发现,只能输出单元上的速度场,在下图中勾选point之后会报错
我自己感觉是openfoam导入tecplot2017里面默认的都是单元上的值,怎样能够输出结点上的值呢?
麻烦哪位前辈指点一下呢?谢谢
谢谢东岳老师指点,我刚刚测试过在空化流里面 R设置为7255或者3000之类的数值 对最后结果确实影响很小
各位前辈好!
自己目前研究了一下各种状态方程,对于perfectFluid里面的rho_0和R需要用户在thermophysicalProperties.water子字典里面设置的,参考openfoam自带的case里面的设置,发现R的取值为7255或者3000 J/(kg.K),
case1:
tutorials\multiphase\compressibleMultiphaseInterFoam\laminar\damBreak4phase\constant
thermoType
{
type heRhoThermo;
mixture pureMixture;
transport const;
thermo hConst;
equationOfState perfectFluid;
specie specie;
energy sensibleInternalEnergy;
}
mixture
{
specie
{
nMoles 1;
molWeight 18.0;
}
equationOfState
{
R 7255;
rho0 1027;
}
//剩下代码忽略
case2地址:
\tutorials\multiphase\compressibleInterDyMFoam\ras\sloshingTank2D\constant
thermoType
{
type heRhoThermo;
mixture pureMixture;
transport const;
thermo hConst;
equationOfState perfectFluid;
specie specie;
energy sensibleInternalEnergy;
}
mixture
{
specie
{
nMoles 1;
molWeight 18.0;
}
equationOfState
{
R 3000;
rho0 1027;
}
我现在不太明白,perfectFluid里面的R的设置参考什么呢?3000和7255是怎么来的呢??虽然对于液体来说,可能R差了1个量级对液体密度的影响并不是很大吧
@bestucan 感谢前辈的热心回复,目前问题已经解决,问题出现在类phaseChangeTwoPhaseMixture的make文件的files文件里面,
LIB = $(FOAM_USER_LIBBIN)/libphaseChangeTwoPhaseMixtures //会报错
LIB = (FOAM_USER_LIBBIN)/libtwoPhaseChange //随便叫一个名字均可,均可编译通过,但不能是libphaseChangeTwoPhaseMixtures
自己也是偶然发现的,但也比较困惑为什么这么神奇
不过最终问题还是解决了,很感谢前辈耐心的解答 ,自己后面也应该好好补一点C++知识
@小考拉 alpha方程如下:
各位前辈们好!
我目前尝试在compressibleInterFoam里面添加空化模型,前期经过热心前辈的指点,现在终于可以跑了,在此表示特别感谢!但是跑起来发现求解相方程alpha.water竟然越界了!!
Courant Number mean: 0.000805796 max: 0.474105
Time = 5e-07
PIMPLE: iteration 1
MULES: Solving for alpha.water
Liquid phase volume fraction = 1 Min(alpha.water) = 1 Max(alpha.water) = 1
Min(alpha.vapor) = -2.22045e-16 Max(alpha.vapor) = 2.22045e-16
diagonal: Solving for rho, Initial residual = 0, Final residual = 0, No Iterations 0
smoothSolver: Solving for T, Initial residual = 0.97202, Final residual = 9.69394e-06, No Iterations 100
min(T) 293.15
GAMGPCG: Solving for p_rgh, Initial residual = 1, Final residual = 0.000777804, No Iterations 1
max(U) 10.3973
min(p_rgh) 7567.84
GAMGPCG: Solving for p_rgh, Initial residual = 0.040294, Final residual = 4.4669e-05, No Iterations 1
max(U) 10.3357
min(p_rgh) 17859.6
PIMPLE: iteration 2
MULES: Solving for alpha.water
Liquid phase volume fraction = 1 Min(alpha.water) = 1 Max(alpha.water) = 1
Min(alpha.vapor) = -4.44089e-16 Max(alpha.vapor) = 4.44089e-16
查找了好多论坛里面好多前辈讨论的帖子,自己分析是alpha方程里面源项的处理有问题,alpha方程如下:![D5TYQKE_0X{1C46}Z](LLAB.png](/assets/uploads/files/1593657820208-d5tyqke_0x-1c46-z-llab.png)
我的alpha方程中源项离散代码如下:
Pair<tmp<volScalarField>> vDotAlphal =
mixture->vDotAlphal();
const volScalarField& vDotcAlphal = vDotAlphal[0]();
const volScalarField& vDotvAlphal = vDotAlphal[1]();
const volScalarField vDotvmcAlphal(vDotvAlphal - vDotcAlphal);
for (int gCorr=0; gCorr<nAlphaCorr; gCorr++)
{
volScalarField::Internal Sp
(
IOobject
(
"Sp",
runTime.timeName(),
mesh
),
vDotvmcAlphal //这里参考的是interPhaseChangeFoam的alpha方程MULES:explicitSolve中Sp的设置
);
volScalarField::Internal Su
(
IOobject
(
"Su",
runTime.timeName(),
mesh
),
// Divergence term is handled explicitly to be
// consistent with the explicit transport solution
divU*min(alpha1, scalar(1))+vDotcAlphal //这里参考的是interPhaseChangeFoam的alpha方程MULES:explicitSolve中Su的设置
);
forAll(dgdt, celli)
{
if (dgdt[celli] > 0.0 && alpha1[celli] > 0.0)
{
Sp[celli] -= dgdt[celli]*alpha1[celli];
Su[celli] += dgdt[celli]*alpha1[celli];
}
else if (dgdt[celli] < 0.0 && alpha1[celli] < 1.0)
{
Sp[celli] += dgdt[celli]*(1.0 - alpha1[celli]);
}
}
surfaceScalarField alphaPhi1//对流项与人工压缩项的通量
(
fvc::flux
(
phi,
alpha1,
alphaScheme
)
+ fvc::flux
(
-fvc::flux(-phir, alpha2, alpharScheme),
alpha1,
alpharScheme
)
);
MULES::explicitSolve
(
geometricOneField(),
alpha1,
phi,
alphaPhi1,
Sp,
Su,
1,
0
);
等式右端前两项的离散参考的是东岳老师compressibleInterFoam解析中的方法,在此不做任何改动。最后一项空化源项的离散参考interPhaseChangeFoam中alpha方程中显式MULES中Sp和Su的处理,
由于alpha.water求解的大于1,推断源项离散出了问题,查找资料发现源项离散要保证Sp<0,,,在这里我添加了vDotvmcAlphal
(即蒸发率-冷凝率),这一项在不可压求解器的显式MULES中直接设置为了Sp,不可压求解器相方程对应代码如下:
else
{
MULES::explicitSolve
(
geometricOneField(),
alpha1,
phi,
talphaPhiCorr.ref(),
vDotvmcAlphal, //Sp部分
(divU*alpha1 + vDotcAlphal)(),//Su部分
1,
0
);
按照道理我直接将这一项加到可压缩求解器中的Sp里面,逻辑上应该没有问题,,但确实alpha求解出现了越界问题
麻烦各位前辈能不能指点一下我这个思路存在哪些问题呢?或者能够给我提供一点建议呢?十分感谢