0.OF4 中添加计算某个面的平均速度等值的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
patchAvgU
{
type surfaceRegion;
libs ("libfieldFunctionObjects.so");
writeControl writeTime;
log true;

// 核心修正点:必须显式告诉它是否写入面场数据
writeFields false;
surfaceFormat null; // 如果不需要导出面几何,设为 null

regionType patch;
name outlet; // 确保这个名字在 constant/polyMesh/boundary 中存在

operation areaAverage;

fields
(
U
);
}

Paraview中验证

在 ParaView 中计算某个平面的平均速度,通常分为截取平面整合数据计算平均三个步骤。

以下是标准的操作流程:

1. 截取目标平面 (Slice 或 Extract Block)

首先,你需要确定要计算哪里的平均速度:

  • 如果是内部截面:点击工具栏的 Slice 按钮(切片),调整平面位置。
  • 如果是边界(如 Outlet):在左侧 Pipeline Browser 选中你的 .foam 文件,在 Properties 面板的 Mesh Regions 中只勾选 outlet,或者使用 Extract Block 过滤器选中该边界。

2. 计算速度矢量的大小 (可选)

如果你想计算的是速度的大小(Scalar)而不是矢量(Vector)的分量平均值:

  1. 选中 Slice 或边界,点击 Calculator 过滤器。
  2. 在 Result Array Name 输入 magU
  3. 在表达式框输入 mag(U)
  4. 点击 Apply

3. 使用整合过滤器 (Integrate Variables)

这是最关键的一步,用于计算面积分:

  1. 选中你的 Slice(或刚才的 Calculator)。
  2. 点击菜单栏 Filters -> Alphabetical -> Integrate Variables
  3. 点击 Apply
  4. 此时会弹出一个表格(SpreadSheet View)。

4. 计算最终平均值

在弹出的表格中,你会看到很多数据。请按以下公式换算:

目标值 表格中的列名 计算方法
总面积 Area 直接读取该列的值
面平均速度 (矢量分量) U $\text{Average } U_y = \frac{\text{表格中的 } U_y}{\text{Area}}$
面平均速率 (标量大小) magU $\text{Average Speed} = \frac{\text{表格中的 } magU}{\text{Area}}$

注意Integrate Variables 实际上计算的是 $\int U , dA$。为了得到平均值 $\bar{U} = \frac{\int U , dA}{\int dA}$,你必须手动用结果除以面积 Area


进阶技巧:直接在 ParaView 里显示结果

如果你不想手动除以面积,可以使用 Python Calculator

  1. 选中 Slice。
  2. 添加 Python Calculator 过滤器。
  3. Expression 框输入:sum(U)/sum(Area)(计算矢量平均)或 sum(mag(U))/sum(Area)(计算标量平均)。
  4. Array Association 选择 Row Data
  5. 点击 Apply,结果会直接显示在表格里。

对比建议:

你之前通过 OpenFOAM controlDict 得到的 areaAverage(U) 是最准确的,因为它直接利用了求解器的原始离散格式。ParaView 的计算结果可能会因为插值(Slice 时的插值)产生微小的数值差异。