CFD中文网

    CFD中文网

    • 登录
    • 搜索
    • 最新

    内存和未知问题

    OpenFOAM
    2
    16
    2230
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • H
      hongjiewang 最后由 编辑

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

      neicun.png
      wrong.doc

      1 条回复 最后回复 回复 引用
      • 李东岳
        李东岳 管理员 最后由 编辑

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

        线上CFD课程开始报名:http://www.dyfluid.com/class.html

        CFD高性能服务器 http://dyfluid.com/servers.html

        H 1 条回复 最后回复 回复 引用
        • H
          hongjiewang @李东岳 最后由 编辑

          @李东岳 谢谢东岳老师的回复~第一个问题终于解决啦~
          不过第二个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

          1 条回复 最后回复 回复 引用
          • 李东岳
            李东岳 管理员 最后由 编辑

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

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

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

            线上CFD课程开始报名:http://www.dyfluid.com/class.html

            CFD高性能服务器 http://dyfluid.com/servers.html

            H 2 条回复 最后回复 回复 引用
            • H
              hongjiewang @李东岳 最后由 编辑

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

              1 条回复 最后回复 回复 引用
              • H
                hongjiewang @李东岳 最后由 编辑

                @李东岳 网格问题已经解决了~我推测是我在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
                
                李东岳 1 条回复 最后回复 回复 引用
                • 李东岳
                  李东岳 管理员 @hongjiewang 最后由 编辑

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

                  线上CFD课程开始报名:http://www.dyfluid.com/class.html

                  CFD高性能服务器 http://dyfluid.com/servers.html

                  H 1 条回复 最后回复 回复 引用
                  • H
                    hongjiewang @李东岳 最后由 编辑

                    @李东岳 谢谢东岳老师~如果是老师所说的这个意思,湍流这部分之前我参考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"
                    
                    1 条回复 最后回复 回复 引用
                    • 李东岳
                      李东岳 管理员 最后由 编辑

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

                      线上CFD课程开始报名:http://www.dyfluid.com/class.html

                      CFD高性能服务器 http://dyfluid.com/servers.html

                      H 1 条回复 最后回复 回复 引用
                      • H
                        hongjiewang @李东岳 最后由 编辑

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

                        1 条回复 最后回复 回复 引用
                        • 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)
                          
                          H 1 条回复 最后回复 回复 引用
                          • H
                            hongjiewang @hongjiewang 最后由 编辑

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

                            1 条回复 最后回复 回复 引用
                            • 李东岳
                              李东岳 管理员 最后由 编辑

                              卡在这一行么?

                              #include "gh.H"
                              

                              线上CFD课程开始报名:http://www.dyfluid.com/class.html

                              CFD高性能服务器 http://dyfluid.com/servers.html

                              H 1 条回复 最后回复 回复 引用
                              • H
                                hongjiewang @李东岳 最后由 编辑

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

                                1 条回复 最后回复 回复 引用
                                • 李东岳
                                  李东岳 管理员 最后由 编辑

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

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

                                  线上CFD课程开始报名:http://www.dyfluid.com/class.html

                                  CFD高性能服务器 http://dyfluid.com/servers.html

                                  H 1 条回复 最后回复 回复 引用
                                  • H
                                    hongjiewang @李东岳 最后由 编辑

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

                                    1 条回复 最后回复 回复 引用
                                    • First post
                                      Last post