两个简单的随时间变化的边界条件

这一篇里介绍OpenFOAM自带的两个简单的随时间变化的边界条件: uniformFixedValueflowRateInletVelocity

1. uniformFixedValue

这个边界属于第一类边界,即直接指定边界上某个量的值。跟 fixedValue 的不同之处在于,这个边界条件允许边界上的值随着时间变化。一般的用法如下:

1
2
3
4
5
6
7
8
type            uniformFixedValue;
uniformValue table
(
(0.000 (0 0 0.002))
(0.010 (0 0 0.002))
(0.011 (0.011 0 0.011))
(0.100 (0.10 0 0.100))
);

上面这一段指定的是速度 U (也可以是其他矢量,或者标量)的边界条件,通过一个 table 来定义边界随时间的变化行为,具体解释如下(假定时间步长等于0.001 s):

  • 当 0.00 <= t <= 0.01 s 时,速度值为 (0 0 0.002);
  • 当 t = 0.011 s 时,速度变为 (0.011 0 0.011);
  • 0.011 <= t <= 0.100 之间,速度的每个分量均为线性变化的;
  • 当 t > 0.100 s 以后,速度保持 (0.10 0 0.100) 不变。

除了通过 table 来定义随时间分段线性变化边界条件,还可以定义多项式变化的边界,比如:

1
2
3
4
5
6
7
type uniformFixedValue;
uniformValue polynomial
(
((1 0 0) (0 0 0))
((2 2 0) (1 2 0))
((3 5 0) (2 4 0))
);

以上这段定义的是这样一个边界:x 分量,$U_x=1+2\cdot t+3\cdot t^2$;y 分量,$U_y=2\cdot t^2+5\cdot t^4$; z 分量,$U_z=0$。
需要注意的是, polynomial 这种方式,目前测试在 2.3.x 以及以下版本不能使用,在最新的 3.0.x 版中可以使用。

此外,还有其他的一些定义方式,列举如下(参考这个网站):

固定值
1
2
3
4
5
inlet
{
type uniformFixedValue;
uniformValue constant (10 0 0);
}

这种方式与 fixedValue 效果是一样的。

tableFile
1
2
3
4
5
6
7
8
9
10
inlet 
{
type uniformFixedValue;
uniformValue tableFile;
tableFileCoeffs
{
fileName "$FOAM_CASE/velocity"
outOfBounds clamp;
}
}

这个跟 table 那种类似,只不过将上面 table 的内容写到一个文件里了(这里是 velocity 文件)。 velocity 文件的格式为

1
2
3
4
(
(0 (0 0 0))
(0.01 (10 0 0))
);

outOfBounds 的可选项及其含义有:

  • clamp:当实际时间超过 tableFile 里的最大时间(比如上述示例文件里,最大时间为0.01s)以后,保持 tableFile 最大时间定义的那个值(对上述示例文件,为(10 0 0))不变;
  • repeat:重复前面的变化模式,比如上上述示例中,0 < t < 0.01 时,$U_x=1000\cdot t$,当 t 超过0.01 时,计算方法为 $U_x = 1000\cdot (t-0.01)$;
  • error:t > 0.01 时,报错退出;
  • warn:给出警告,但是程序继续运行,边界值计算方法同 clamp。
csvFile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
inlet 
{
type uniformFixedValue;
uniformValue csvFile;
csvFileCoeffs
{
fileName "$FOAM_CASE/velocity.csv"
outOfBounds clamp;
nHeaderLine 1;
mergeSeparators no;
separator ",";
refColumn 0;
componentColumns (1 2 3);
}
}

这种方式是通过一个 csv 格式的文件来定义分段函数,文件格式为

1
2
3
time,velocity-x,velocity-y,velocity-z
0,0,0,0
0.01,10,0,0

2. flowRateInletVelocity

这个边界条件指定的是界面上的体积流量或者质量流量,并根据流量来反推速度。速度的方向为垂直边界并指向区域内部。一般的用法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
myPatch
{
type flowRateInletVelocity;
volumetricFlowRate 0.2; // 体积流量
value uniform (0 0 0);
}


myPatch
{
type flowRateInletVelocity;
massFlowRate 0.2; // 质量流量
rho rho; //要指定密度场的名字
rhoInlet 1.0; //如果上述指定的密度场不存在,则使用这里指定的值作为边界上的密度
}

类似的,前面 uniformFixedValue 边界里的那些类型,tabletableFile csvFilepolynomial 也都可以使用,而且格式是类似的,这里就不重复了,更多细节可以参考这个页面