边界条件write函数触发



  • OpenFoam中的边界条件里面都有一个函数write,用于输出一些信息,如oscillatingFixedValue这个边界里面的write函数:0_1480843778367_Screenshot from 2016-12-04 17-27-35.png
    这个函数是怎么触发的呢?


  • OpenFOAM教授

    @supersoldier 通过求解器里面的runTime.write()触发,runTime.write()将调用Foam::Time::write()向磁盘写入所有注册对象。



  • @wwzhao 嗯,我调试了一下,确实向您说的是runTime.write()这个函数触发的。我用Info输出了一下os发现是数字1,按理说是写到一个文件里,但运行后,case目录下并没有输出相关文件。在想是不是要在etc目录下的controlDict中设置一下DebugSwitches开关,不过还是没成功。这个函数的输出可以改成Info输出,显示一些信息,但是很想知道这个函数的输出是怎么回事。
    0_1481119177474_Screenshot from 2016-12-07 21-58-53.png


  • OpenFOAM教授

    @supersoldier 你是不是搞错了,Info<< 是向终端输出,向文件输出的对应语句是 os <<



  • @wwzhao Info<<os<<endl; 是我自己写的,是输出到终端,现在想知道os.writeKeyword("neighbourFieldName")<< neighbourFieldName_
    << token::END_STATEMENT << nl;是输出到什么地方去了。


  • OpenFOAM教授

    @supersoldier

    现在想知道os.writeKeyword(“neighbourFieldName”)<< neighbourFieldName_
    << token::END_STATEMENT << nl;是输出到什么地方去了。

    这个输出到相应的GeometricField的边界当中了。

    这么说你可能不大明白,举个例子,比如你的计算域有个边界名为solid,温度场T在这个边界上的边界条件为fluidSolidCombustionTemperature,那么这个os.writeKeyword函数将把内容输出到每个时间步的T文件里面的 boundaryField 里面,类似这样:

    boundaryField
    {
    ...
        solid
        {
            type fluidSolidCombustionTemperature;
            neighbourFieldName T;
            kappa xxx;
        }
    ...
    }
    


  • @wwzhao 嗯 看了一下好像是这样,谢谢解答:happy:



  • @wwzhao 再请教一个问题,您是怎么知道这个输出的位置或是这个函数的原理的,我一开始通过输出、调试这个函数并没有搞懂它是怎么回事。很想知道您当时是通过什么途径来弄清楚的? 感觉好多OpenFOAM的函数分析起来不是很好弄清楚,可能是我对OpenFOAM的原理和C++理解掌握的还不够:sad:


  • OpenFOAM教授

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


Log in to reply