OpenFOAM

4.5k Topics 26.4k Posts
  • 1 Posts
    1k Views

    simpleForm与icoFoam这些求解器在运行时如何通过MPE监测API的调用频次与时间呢?

    相似问题:http://www.cfd-china.com/topic/734/采用什么工具可以评估mpi调用过程中每个api调用的频次还有api执行所花费的时间呢

  • 4 Posts
    2k Views

    @wwzhao MPE怎么监测simpleFoam或者icoFoam这些求解器的API调用呢?我看MPE手册上需要通过“mpecc -mpilog p1.c -o executable”这种手段编译源代码

  • 4 Posts
    4k Views

    @cfd-china 谢谢老师的回复!我直接从官网下载Paraview的win64版本,运行后报错,报错信息如下:
    问题签名:
    问题事件名称: BEX64
    应用程序名: paraview.exe
    应用程序版本: 0.0.0.0
    应用程序时间戳: 58c358af
    故障模块名称: StackHash_1dc2
    故障模块版本: 0.0.0.0
    故障模块时间戳: 00000000
    异常偏移: 0000000000000000
    异常代码: c0000005
    异常数据: 0000000000000008
    OS 版本: 6.1.7601.2.1.0.256.1
    区域设置 ID: 2052
    其他信息 1: 1dc2
    其他信息 2: 1dc22fb1de37d348f27e54dbb5278e7d
    其他信息 3: eae3
    其他信息 4: eae36a4b5ffb27c9d33117f4125a75c2
    重复了很多次都这样子,请问老师我该怎么处理呢?

  • fvOptions

    1 Posts
    1k Views

    新手初学,请教fvOptions中CodeSource的用法,能否提供一个编译成功的codeSource实例

  • 14 Posts
    14k Views

    @程迪

    对于fvm算子生成的fvMatrix和fvc生成的volScalarField相加生成fvMatrix的时候,volScalarField会被自动乘以网格体积?

    没错,参考 https://github.com/OpenFOAM/OpenFOAM-dev/blob/master/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C#L1691

    template<class Type> Foam::tmp<Foam::fvMatrix<Type>> Foam::operator+ ( const fvMatrix<Type>& A, const tmp<GeometricField<Type, fvPatchField, volMesh>>& tsu ) { checkMethod(A, tsu(), "+"); tmp<fvMatrix<Type>> tC(new fvMatrix<Type>(A)); tC.ref().source() -= tsu().mesh().V()*tsu().primitiveField(); tsu.clear(); return tC; }

    感觉A是除以了体积的对角系数

    没错,参考 https://github.com/OpenFOAM/OpenFOAM-dev/blob/master/src/finiteVolume/fvMatrices/fvMatrix/fvMatrix.C#L724

    template<class Type> Foam::tmp<Foam::volScalarField> Foam::fvMatrix<Type>::A() const { tmp<volScalarField> tAphi ( new volScalarField ( IOobject ( "A("+psi_.name()+')', psi_.instance(), psi_.mesh(), IOobject::NO_READ, IOobject::NO_WRITE ), psi_.mesh(), dimensions_/psi_.dimensions()/dimVol, extrapolatedCalculatedFvPatchScalarField::typeName ) ); tAphi.ref().primitiveFieldRef() = D()/psi_.mesh().V(); tAphi.ref().correctBoundaryConditions(); return tAphi; }
  • 3 Posts
    2k Views

    好滴,谢谢啦~

  • 9 Posts
    5k Views

    @HydroJames 我暂时还查不到原因,测试过程中我还引入了其他差异,比如我进行过换硬盘的操作

  • 4 Posts
    3k Views
    forAll(walls.boundaryField(), patch) { walls.boundaryField()[patch] = L*hFlux[patch]/kappa; }

    可以写如上代码计算,非常简单。上述代码没测试可能需要改动。

  • 5 Posts
    3k Views

    @李东岳

    没,还是不知道那个公式咋来的,不过基本解决了flux limiter 和slope/gradient limiter的等价关系问题。

    但是这玩意儿也是个大坑,对于多维网格带skew和non-uniform的情况,限制器设计和计算量都挺大。

    OpenFOAM具体实现还没看太懂。有一个先有鸡还是先有蛋的问题,到底是interpolation先调用gradient呢?还是gradient调用interpolation?

    我看的文章里是先leastSquare算gradient,不用Gauss的情况下是不用插值的。然后interpolation可以用一些limited gradient。

    暂时只看懂了cellLimited, faceLimited没看懂。

  • 稳态求解器simpleFoam的迭代问题

    17 Posts
    13k Views

    @aufalpen 谢谢,公众号我早已经关注过了😄我去看看那个网页,多理解理解理论,还请多指教

  • 5 Posts
    4k Views

    边界条件不直接修改patchInternalField,而是通过改变离散后的系数矩阵起作用。

  • 2 Posts
    2k Views

    @李东岳 之前发过pdf,不过后来好像删了,你问问他。

  • 关于自适应网格仿真

    2 Posts
    2k Views

    单水滴破碎的倒是见过,多水滴碰撞的还没见过,楼主找到没有?

  • 2 Posts
    2k Views

    没用过gmsh...

  • openfoam网格大小

    2 Posts
    9k Views

    网格体积:mesh.V()
    网格面矢量 mesh.Sf()
    网格面大小 mesh.magSf()

  • ParaView-streamline 问题

    Moved
    3 Posts
    4k Views

    #问题1 自我解决,感觉像是bug.
    0_1488141087886_streamline.png

  • 3 Posts
    3k Views

    @cfd-china 谢谢回复,我研究了源码已经搞懂了,顺便附上我总结的链接laplacian项离散解码

  • pr 状态方程的另一种求解方法

    7 Posts
    5k Views

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

  • 2 Posts
    2k Views

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

  • waveTransmissive边界条件

    4 Posts
    5k Views

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

  • 5 Posts
    4k Views

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

  • 2 Posts
    2k Views

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

  • 关于dynamicMesh文件的几个问题

    2 Posts
    2k Views

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

    solver xxx;

    也有可能是:

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

    5 Posts
    3k Views

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

  • 2 Posts
    2k Views

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

  • movingConeTopoFvMesh怎么用

    6 Posts
    5k Views

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

  • 2 Posts
    2k Views

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

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

    12 Posts
    12k Views

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

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

    1 Posts
    1k Views

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

  • 7 Posts
    5k Views

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

  • 2 Posts
    2k Views

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

  • 1 Posts
    1k Views

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

  • 2 Posts
    2k Views

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

    粗略看了下,这个求解器完全没用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 Posts
    6k Views

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

  • 执行Mach出现not implement的错误

    1 Posts
    2k Views

    在后处理求解马赫数的时候,用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 Posts
    6k Views

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

  • 关于几个公式的疑问

    4 Posts
    3k Views

    方程实际要求的是:
    \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 Posts
    4k Views

    是不是可以设置一下relTol

  • of的初始化

    3 Posts
    3k Views

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

  • 关于max()函数的疑问

    2 Posts
    2k Views

    nevermind,用gMax代替max就可以了

  • 4 Posts
    3k Views

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

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

    7 Posts
    5k Views

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

  • 一个关于安装openmpi的问题

    3 Posts
    3k Views

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

  • 加密网格

    2 Posts
    9k Views

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

  • 3 Posts
    2k Views

    :kiss:

  • 23 Posts
    17k Views

    厉害了我的哥哥姐姐们

  • 3 Posts
    4k Views

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

  • 2 Posts
    2k Views

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

  • bubbleFoam

    18 Posts
    12k Views

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

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

  • 有关twophaseeulerfoam中的问题

    6 Posts
    4k Views

    @xpqiu 谢谢:happy: