Skip to content

OpenFOAM

OpenFOAM交流区

5.2k 主题 30.9k 帖子
  • pr 状态方程的另一种求解方法

    7
    7 帖子
    8k 浏览
    X

    我这样写不对啊? 不知道哪位可以给看看毛病在哪@administrators @李东岳

  • OpenFOAM如何精确捕捉流动分离,计算Clmax?

    2
    2 帖子
    2k 浏览
    C

    相对于计算发散,通常存在一个致命的因素可以解决。这种关于计算不准的东西,很难断定为什么,我经常计算不准。只能看sci,调节参数,调节网格,调节各种各种,毕竟人家算收敛了,收敛表明这个设置的结果,就是这样的。

  • waveTransmissive边界条件

    4
    4 帖子
    7k 浏览
    C

    Henry最近添加了部分描述:点击查看

  • rhoCentralDyMFoam是否可以添加通量修正

    5
    5 帖子
    6k 浏览
    Z

    确实,默认的rhoCentralDyMFoam没有使用correctPhi, 而且在其他可压流求解器中有使用correctPhi,不过需要注意的是,由于我在这里涉及到的是激波模拟,因此有压力间断,但是correctPhi似乎是通过压力进行通量修正,我不敢确定这是否会对压力间断产生影响,因此目前暂时还没有使用。我尝试过网格不运动,即直接使用rhoCentralFoam情况似乎是正确的。

  • ICEM对网格进行局部加密之后,可以用mapFields么

    2
    2 帖子
    3k 浏览
    H

    只要原来的网格点都在就没问题

  • 关于dynamicMesh文件的几个问题

    2
    2 帖子
    3k 浏览
    C

    @100yearsalone
    手头没有openfoam,但是在你使用dynamicMothion...代替solidBody....之后要定义solver,在你的字典里添加solver就可以了

    solver xxx;

    也有可能是:

    solver { }
  • mesh转化之后出现乱码

    5
    5 帖子
    5k 浏览
    C

    gedit打开文件很慢,可以换个编辑器,hoho

  • 暂停后继续计算与边界条件中的write函数

    2
    2 帖子
    3k 浏览
    C

    如果从0时间步开始计算就没问题?从非0时间步开始就有问题?是这个意思么

  • movingConeTopoFvMesh怎么用

    6
    6 帖子
    7k 浏览
    L

    @zxyf1 是的,我的模型是个圆柱体,只需要让高度方向尺寸越来越小就可以,我已经实现了网格移动,就是把它用于interFoam时算的alpha场不对,目前 还在找原因,有兴趣可以一块探讨一下。

  • 关于openfoam和CFX自由面流边界条件的匹配

    2
    2 帖子
    3k 浏览
    C

    @金石为开
    不太懂CFx,因此也无法对比。不过速度入口,压力出口,我觉得你应该会知道的吧?inlet: fixedValue, outlet: zeroGradient.

  • 关于p_rgh,p,rho*gh的讨论

    12
    12 帖子
    18k 浏览
    yhdthuY

    @队长别开枪  好的,谢谢你的回复,我再看看

  • 多项流动压力模拟不准确的问题

    1
    1 帖子
    2k 浏览
    yhdthuY

    大家好,最近我做了一个二维水翼的空化模拟,其中相变的效果出来了,但是我发现压力计算总是不对。云图显示,压力除了水翼附近的压力变化,其周围环境的压力也在变,我不明白为什么?我认为就应该是水翼附近的压力在变化啊,怎么会整场的压力一起都在变呢?

  • 7 帖子
    8k 浏览

    @fahai 用komegaSST模型也能算出边界层内的速度分布?可否看看你的U+ VS. Y+的分布?

  • 2 帖子
    3k 浏览
    C

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

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

    1
    1 帖子
    2k 浏览
    yhdthuY

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

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

    2
    2 帖子
    4k 浏览
    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 帖子
    9k 浏览
    .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 帖子
    10k 浏览
    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)包含进来的原因为这有利于使求解变量有界以更好地收敛。