内存和未知问题



  • 求解器编译正常,但是在求解算例的过程,出现下面的提示,但是它还可以继续求解。知道读取到createFields中的重力加速度这里,显示内存问题。之前没有遇到这样的问题,请有经验的老师们分享一下~wrong.png

    neicun.png
    wrong.doc


  • 管理员

    看起来像是你自己写的求解器没处理好runTimeSelection的声明



  • @李东岳 谢谢东岳老师的回复~第一个问题终于解决啦~
    不过第二个segmentation fault现在还没有找到解决的办法。
    我了解到的可能存在的问题有:
    网格质量不好:已经提高snappyHexMesh网格质量;
    版本问题https://blog.csdn.net/weixin_38909635/article/details/105792556
    openmpi:但是单核运算也出现同样的错误,只是单核运算的时候可以读取到turbulence结束,但是多核只能读取到turbulence前面。
    我在snappyHexMesh之后,polyMesh中的boundary并不会产生新的边界面,我怀疑是不是这里出了问题。我把我的case贴在下面,有经验的老师们可以帮忙看一下~
    链接:https://pan.baidu.com/s/1OhRKGM2zqir22WyziHVS9A
    提取码:1111


  • 管理员

    @hongjiewang内存和未知问题 中说:

    polyMesh中的boundary并不会产生新的边界面

    这种问题非常有可能,只能多调节,snappyHexMesh有的时候就是生成不成功边界层:143:



  • @李东岳 :136: 还是要多试试~我通过改一些参数 把porous这个边界加到polyMesh里面了,但是blockMesh里面的边界又都不在了~



  • @李东岳 网格问题已经解决了~我推测是我在snappyHexMesh中将介质区域设置成了faceZone,而导致没有生成patch。
    在正确的网格下运行,结果还是出现了上面的内存问题。我的求解器是在一位前辈的基础上修改的,因此我向他请教了这个问题。但是我不太懂他所说的它本身的求解器是不支持的湍流模型是什么意思,即使我已经在头文件进行了相应的引用也是不支持的吗?并且在相同的算例设置下,我运行了另一个求解器(也是包含湍流模型的)发现是可以正常运行的。请问老师这种一读取到(或者读取结束)turbulence就报错,还有什么原因导致。

    附有邮件:
    Thank you for your email. Currently the solver does not support turbulence models, which is why I suspect that your solver fails whenever you call any turbulence library in your solver. Please let me know if this knowledge fixes your issue.
    Best,
    Francisco
    

  • 管理员

    @hongjiewang 应该是在求解器层面,比如动量方程上,没有添加湍流粘度。如果你要加的话,需要1)去求解器里面增加湍流粘度,2)去求解器里面封闭湍流粘度



  • @李东岳 谢谢东岳老师~如果是老师所说的这个意思,湍流这部分之前我参考interCondensatingEvaporatingFoam这个求解器已经添加好了。运行算例会出现segmentation fault。
    我刚才验证了一下是不是我添加的turbulence不对,所以我把求解器里所有涉及到turbulence的都注释掉,编译成功之后进行跑算例。结果发现在读取到差不多行数的时候,还是会报segmentation fault。就比如之前是读取到turbulence之后报错,现在是读取完g之后报错。这样是不是可以排除turbulence添加的问题。
    基于上面的这个,我怀疑是单核导致,所以把核数增加到4,8,16分别运行还是会出现相同的错误。:136:

    Info<< "Construct interface from alpha1 distribution\n" << endl;  
    interfaceProperties interface
    (
        alpha1,
        U,
        thermo->transportPropertiesDict()
    );
        
    /*Info<< "Construct incompressible turbulence model\n" << endl;  
    autoPtr<incompressible::turbulenceModel> turbulence
    (
        incompressible::turbulenceModel::New(U, phi, thermo())
    );*/
    
    #include "readGravitationalAcceleration.H"
    #include "readhRef.H"
    

  • 管理员

    @hongjiewang 单独运行层流没问题?



  • @李东岳 单核也是会出现相同的错误的



  • 我调整了一下顺序,看有什么不同的输出。在读取interface和g中间添加一些本来是在后面才会读取到的变量(当然保证了这些变量是不会受顺序影响的)。结果发现,中间的这些变量都可以正常读取,最后又是卡在了g这个变量。

    Info<< "Construct interface from alpha1 distribution\n" << endl;  
    interfaceProperties interface
    (
        alpha1,
        U,
        thermo->transportPropertiesDict()
    );
        
    /*Info<< "Construct incompressible turbulence model\n" << endl;  
    autoPtr<incompressible::turbulenceModel> turbulence
    (
        incompressible::turbulenceModel::New(U, phi, thermo())
    );*/
    Info<< "Turbulent Prandtl number\n" << endl; 
    dimensionedScalar Prt("Prt", dimless, thermo->transportPropertiesDict());
    
    Info<< "kappaEff\n" << endl; 
    volScalarField kappaEff
    (
        IOobject
        (
            "kappaEff",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::NO_WRITE
        ),
        thermo->kappa()
    );
    
    Info<< "Need to store rho for ddt(rhoCp, U)\n" << endl;  
    volScalarField rhoCp
    (
        IOobject
        (
            "rhoCp",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::NO_WRITE
        ),
        rho*thermo->Cp()
    );
    //rhoCp.oldTime();
    
    dimensionedScalar deltaX("deltaX", dimless, thermo->transportPropertiesDict());
    
    dimensionedScalar gamma("gamma", dimless, deltaX.value()*0.75);
    
    dimensionedScalar epsilon("epsilon", dimless, deltaX.value()*3.5);
    
    dimensionedScalar deltaTau("deltaTau", dimless, deltaX.value()*0.1);
    
        dimensionedScalar dimChange
        (
            dimensionedScalar("dimChange", dimLength, 1.0)
        );
    
    
        dimensionedScalar sigma
        (
            "sigma", dimMass/dimTime/dimTime, thermo->transportPropertiesDict()
        );
        
    Info<< "MULES compressed flux is registered in case scalarTransport FO needs it\n" << endl; 
    surfaceScalarField alphaPhi
    (
        IOobject
        (
            "alphaPhi",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::NO_WRITE
        ),
        phi*fvc::interpolate(alpha1)
    );
    #include "readGravitationalAcceleration.H"
    #include "readhRef.H"
    #include "gh.H"
    

    错误显示:

    Construct interface from alpha1 distribution
    Turbulent Prandtl number
    kappaEff
    Need to store rho for ddt(rhoCp, U)
    MULES compressed flux is registered in case scalarTransport FO needs it
    Reading g
    Segmentation fault (core dumped)
    


  • 是否有老师可以提供帮助~一直卡在这里进行不下去~


  • 管理员

    卡在这一行么?

    #include "gh.H"
    


  • @李东岳
    原始createFields.H文件,运行时会卡在turbulence的读取,没有读完之后就显示内存错误;
    之后我把turbulence注释掉,结果卡在了g(g是原始文件里turbulence后一个的变量);
    然后我想着改变一下顺序看看有什么结果,把后面的一些变量放到了g变量的前面,同时也是注释掉turbulence的,修改之后中间的这些变量都可以正常读取,但是依旧卡在了g这个变量。
    错误都是Segmentation fault (core dumped)


  • 管理员

    你用Info判断一下具体是卡在哪一行代码,看log的提示看不出来哪一行代码有问题:

    Info<< "AA" << nl;
    #include "gh.H"
    Info<< "BB" << nl;
    


  • @李东岳
    老师,我把完整的createFields.H文件放在这个帖子上了,每一行都有Info输出。还是有一样的错误~
    https://cfd-china.com/topic/4467/读取变量-segmentation-fault


Log in to reply
 


CFD中文网 | 东岳流体学术 | 东岳流体商业 | 吉ICP备20003622号-1