OpenFOAM获得某个区域平均温度的方法

请问OF如何才能获得某个区域的平均温度?目前我知道的一个方法是打开算例运行后的一个时间点的T文件,将T文件的温度值相加,再除以温度点的个数,得到某个区域的平均温度。但是这样的方法太复杂了。有没有什么Utilities或者FunctionObjects可以做到的?期待各位的回复,谢谢!

这样计算的话,实际上是计算了网格 N 的平均,而不是体平均。我猜,体平均才是你想要的结果。

可以用 paraview ,很直接就可以计算,Filters --> Integrate variables ,在显示出来的窗口上面选择 Attribute 为 cell data 就可以了看到 volume 和变量的体积分,取出来除一下就可以了。
integrate_var

谢谢大佬,这是个很好的办法。但是我想请教是否可以通过代码的形式获得?因为目前我做的课题需要不断地提取某个区域的平均温度,如果每次通过paraview来获取的话,不仅效率低,而且每次都需要手动来获得。在课题的角度上是不允许的,因为需要重复这个操作上百次,编写python脚本程序获得某区域的平均温度是课题的一小部分工作。

可能你已经找到理想的答案了。但还是想分享一个用法:

    volFieldValue1
    {
        type            volFieldValue;
        libs            ("libfieldFunctionObjects.so");

        log             true;
        writeControl    writeTime;
        writeFields     true;

        regionType      cellZone;
        name            c0;
        operation       volAverage;

        weightField     alpha1;

        fields
        (
            p
            U
        );
    }
3 个赞

谢谢你的分享,我想要的就是这种FunctionObject或者Utilities可以做到的,便于代码操作,再次感谢

大神,请问一下,你上述提供的办法中的一行代码(如下所示)是什么意思?期待你的回复

weightField        alpha1;

前辈你好,请教一个问题,上次从你那里取经,明白了对某个场求体积平均,获得某个区域的平均场。如果想要得到某个面积(faceZone)的平均温度,该如何做呢?再次感谢!

surfaceFieldValue_out_core
{
    type    surfaceFieldValue;
    libs    ("libfieldFunctionObjects.so");

    log     true;
    writeControl    writeTime;
    writeFields     true;

    regionType      faceZone;
    name            out_core;
    operation       weightedAreaAverage;
    surfaceFormat   foam;

    fields
    (
        T
    );
}

类似地,我采用上面您提供的方法,将volFieldValue改为surfaceFieldValue,但是运行会报错:

[4] --> FOAM FATAL ERROR: 
[4] surfaceFieldValue surfaceFieldValue_in_core: faceZone(in_core):
    Unable to process internal faces for volume field T

似乎体积场的值不可以进行面域平均,这样的话,“面域平均”岂不是一个不可操作的后处理,但是在网站上,似乎又提到面域平均是可以做到的。该网站给的说明不多,不知大神可否指点一二?祝好!

你好,请问你的这个问题解决了吗?能否分享一下,万分感激!

还没有,若是你找到了方法,期待你的回复与交流

自带算例有这个,你可以运行一下试试。
https://github.com/OpenFOAM/OpenFOAM-dev/blob/master/tutorials/lagrangian/reactingParcelFoam/verticalChannel/system/controlDict