Skip to content

OpenFOAM

OpenFOAM交流区

4.8k 主题 28.5k 帖子
  • 2 帖子
    2k 浏览
    C

    可以试试reactingFoam,把燃烧关闭。

  • 利用interPhaseChangeFoam求解器模拟2D水翼空化

    1
    1 帖子
    2k 浏览
    yhdthuY

    最近在做关于NACA0015水翼的空化模拟,但总是无法模拟出空化的效果,个人觉得算例并不是很难,不知道哪里出了问题,还请大家指教!
    OF版本1606。RANS模型是realizibleke模型。0_1481543566957_NACA0015.tar.gz

  • compressibleFoam &求解器编写思路探讨

    2
    2 帖子
    3k 浏览
    C

    看到官方的求解器,根本摸不清楚边界条件和有限体积是如何交互的。有人能解释一下这和我上述思路的差别和联系吗?

    粗略看了下,这个求解器完全没用openfoam的思路来,采用的他自己的思路,就像你说的,他在开发这个求解器的时候,可能是有其他的代码(比如同组的Fortran)转过来的。并且完全是面向过程的思想。

    如果你要用OpenFOAM求解的思路,还是看OpenFOAM的求解器比较好他这个就是把求解的过程自己实现了,然而没有使用OpenFOAM自带的方法。

    他的main函数已经写的很清楚了:

    int main(int argc, char *argv[]) { #include "setRootCase.H" #include "createTime.H" #include "createMesh.H" #include "setInputValues.H" #include "createFields.H" #include "readFluxScheme.H" /// Time step loop /// Posts the non-blocking send/recv of fields long int iter = 0; while( runTime.loop() ) { /// 构造通量 #include "constructFaceFlux.H" /// 有限体积离散 #include "sumFlux.H" /// 边界通量修正 #include "boundaryFlux.H" Info << "Iteration = " << ++iter << " "; /// 矩阵计算 #include "stateUpdateLTS.H" Info << " Max residue = " << rhoResidMax << endl; /// 输出结果 runTime.write(); } return 0; }
  • 10 帖子
    8k 浏览
    .J..

    @cfd-china 我看你网站上有这个模型文档的翻译。你是专门研究这个的?

  • 执行Mach出现not implement的错误

    1
    1 帖子
    2k 浏览
    A

    在后处理求解马赫数的时候,用Mach执行,但出现如下的错误:

    Time = 0.00056 Selecting thermodynamics package { type hePsiThermo; mixture pureMixture; transport sutherland; thermo eConst; equationOfState perfectGas; specie specie; energy sensibleInternalEnergy; } --> FOAM FATAL ERROR: Not Implemented Trying to construct an genericFvPatchField on patch boundaryInner of field e From function genericFvPatchField<Type>::genericFvPatchField(const fvPatch& p, const DimensionedField<Type, volMesh>& iF) in file genericFvPatchField/genericFvPatchField.C at line 44. FOAM aborting #0 Foam::error::printStack(Foam::Ostream&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libOpenFOAM.so" #1 Foam::error::abort() in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libOpenFOAM.so" #2 Foam::fvPatchField<double>::addpatchConstructorToTable<Foam::genericFvPatchField<double> >::New(Foam::fvPatch const&, Foam::DimensionedField<double, Foam::volMesh> const&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libgenericPatchFields.so" #3 Foam::fvPatchField<double>::New(Foam::word const&, Foam::word const&, Foam::fvPatch const&, Foam::DimensionedField<double, Foam::volMesh> const&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/bin/Mach" #4 Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>::GeometricBoundaryField::GeometricBoundaryField(Foam::fvBoundaryMesh const&, Foam::DimensionedField<double, Foam::volMesh> const&, Foam::List<Foam::word> const&, Foam::List<Foam::word> const&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libfluidThermophysicalModels.so" #5 Foam::heThermo<Foam::psiThermo, Foam::pureMixture<Foam::sutherlandTransport<Foam::species::thermo<Foam::eConstThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleInternalEnergy> > > >::heThermo(Foam::fvMesh const&, Foam::word const&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libfluidThermophysicalModels.so" #6 Foam::fluidThermo::addfvMeshConstructorToTable<Foam::hePsiThermo<Foam::psiThermo, Foam::pureMixture<Foam::sutherlandTransport<Foam::species::thermo<Foam::eConstThermo<Foam::perfectGas<Foam::specie> >, Foam::sensibleInternalEnergy> > > > >::New(Foam::fvMesh const&, Foam::word const&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libfluidThermophysicalModels.so" #7 Foam::fluidThermo::New(Foam::fvMesh const&, Foam::word const&) in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/lib/libfluidThermophysicalModels.so" #8 ? in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/bin/Mach" #9 ? in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/bin/Mach" #10 ? in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/bin/Mach" #11 __libc_start_main in "/lib64/libc.so.6" #12 ? in "/WORK/app/OpenFOAM/OpenFOAM-2.4.0/platforms/linux64IccDPOpt/bin/Mach" Aborted (core dumped)

    这种情况我之前是没有遇到过的,于是检查了一下Mach.C的源码:

    #include "calc.H" #include "fluidThermo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // void Foam::calc(const argList& args, const Time& runTime, const fvMesh& mesh) { bool writeResults = !args.optionFound("noWrite"); IOobject Uheader ( "U", runTime.timeName(), mesh, IOobject::MUST_READ ); IOobject Theader ( "T", runTime.timeName(), mesh, IOobject::MUST_READ ); // Check U and T exists if (Uheader.headerOk() && Theader.headerOk()) { autoPtr<volScalarField> MachPtr; volVectorField U(Uheader, mesh); if ( IOobject ( "thermophysicalProperties", runTime.constant(), mesh ).headerOk() ) { // thermophysical Mach autoPtr<fluidThermo> thermo ( fluidThermo::New(mesh) ); volScalarField Cp(thermo->Cp()); volScalarField Cv(thermo->Cv()); MachPtr.set ( new volScalarField ( IOobject ( "Ma", runTime.timeName(), mesh ), mag(U)/(sqrt((Cp/Cv)*(Cp - Cv)*thermo->T())) ) ); } else { // thermodynamic Mach IOdictionary thermoProps ( IOobject ( "thermodynamicProperties", runTime.constant(), mesh, IOobject::MUST_READ_IF_MODIFIED, IOobject::NO_WRITE ) ); dimensionedScalar R(thermoProps.lookup("R")); dimensionedScalar Cv(thermoProps.lookup("Cv")); volScalarField T(Theader, mesh); MachPtr.set ( new volScalarField ( IOobject ( "Ma", runTime.timeName(), mesh ), mag(U)/(sqrt(((Cv + R)/Cv)*R*T)) ) ); } Info<< "Mach max : " << max(MachPtr()).value() << endl; if (writeResults) { MachPtr().write(); } } else { Info<< " Missing U or T" << endl; } Info<< "\nEnd\n" << endl; }

    代码中只要有U,T 和热力学模型就好了,不知道为什么错误提示要构造e这个场?谢谢各位!

  • 边界条件write函数触发

    9
    9 帖子
    8k 浏览
    W

    @supersoldier OpenFOAM大量使用了C++面向对象的设计思想,不能用一般面向过程的编程思维去阅读代码。了解面向过程的设计思想有助于去理解OpenFOAM的框架和具体实现。

  • 关于几个公式的疑问

    4
    4 帖子
    4k 浏览
    C

    方程实际要求的是:
    \begin{equation}
    \frac{\partial \rho\mathbf{U}}{\partial t}+\nabla\cdot(\rho\mathbf{U}\mathbf{U})=0
    \end{equation}
    对应:

    fvVectorMatrix UEqn ( fvm::ddt(rho, U) + fvm::div(rhoPhi, U)

    连续性方程:
    \begin{equation}
    \frac{\partial \rho}{\partial t}+\nabla\cdot(\rho\mathbf{U})=0
    \end{equation}
    对应:

    - fvm::Sp(fvc::ddt(rho) + fvc::div(rhoPhi), U)

    因此实际求解的就是:

    fvVectorMatrix UEqn ( fvm::ddt(rho, U) + fvm::div(rhoPhi, U) + turbulence->divDevRhoReff(rho, U) );

    把- fvm::Sp(fvc::ddt(rho) + fvc::div(rhoPhi), U)包含进来的原因为这有利于使求解变量有界以更好地收敛。

  • p_rgh迭代次数过大

    6
    6 帖子
    6k 浏览
    Y

    是不是可以设置一下relTol

  • of的初始化

    3
    3 帖子
    3k 浏览
    M

    @cfd-china 就是能否给定初始场,像fluent每次在计算之前都要进行initialize那样:confused:

  • 关于max()函数的疑问

    2
    2 帖子
    3k 浏览
    H

    nevermind,用gMax代替max就可以了

  • 单核计算没问题,mpi并行无法计算?

    4
    4 帖子
    4k 浏览
    C

    @cfd-china 我自己写的边界条件里面的,单核计算没有问题,如果不是昨天停电都快算完了,结果也还可以。

  • OF里可否进行并行重构?

    7
    7 帖子
    6k 浏览
    M

    @cfd-china 哦,直接后处理的话要挨个打开有点麻烦呀

  • 一个关于安装openmpi的问题

    3
    3 帖子
    3k 浏览
    .J..

    @cfd-china 厉害,知道怎么配置吗?刚学

  • 加密网格

    2
    2 帖子
    9k 浏览
    H

    你用什么做的网格?如果是icem的话改一下scale factor就可以。

  • 程序调试中的debug标识怎么设置呢?

    3
    3 帖子
    3k 浏览
    Y

    :kiss:

  • 关于 phi 和 fvVectorMatrix 的两个问题

    23
    23 帖子
    22k 浏览
    WayneW

    厉害了我的哥哥姐姐们

  • 关于可压缩高速流求解sonicFoam求解器

    3
    3 帖子
    5k 浏览
    V

    谢谢东岳大神的回复,看了您推荐的,感觉有点明白了,还在挣扎中。

  • compressibleTwoPhaseEulerFoam中的假定:密度为常数

    2
    2 帖子
    3k 浏览
    李东岳

    对了,这个问题我在2015年曾经汇报过bug,Henry直接表示建议采用高版本的OpenFOAM:sunglasses:

  • bubbleFoam

    18
    18 帖子
    15k 浏览
    李东岳

    bubbleFoam已经消失很久了。然而作为双流体模型的首个求解器,并引以为傲的引入了Henry的速度Phase intensive equation。但是在后续版本中被惨痛抛弃。其中的Phase intensive equation在开发之后解决了一些相分离问题,但是被一些sci文章指出在某些情况下非守恒形式的方程会引起误差。并且在模拟工业规模的鼓泡床、萃取塔的时候,bubbleFoam没有考虑可压缩性(实际上床底和床顶压差很大),最终bubbleFoam被compressibleTwoPhaseEulerFoam(附加颗粒动理学模拟气固)完全取代。

    然而bubbleFoam依然是一个经典的求解器,或许身份等同于icoFoam。没人用,但他的意义不在于此。

  • 有关twophaseeulerfoam中的问题

    6
    6 帖子
    5k 浏览
    L

    @xpqiu 谢谢:happy: