转载自:http://xiaopingqiu.github.io/2015/12/12/timeVaryingBC1/这一篇里介绍OpenFOAM自带的两个简单的随时间变化的边界条件:
uniformFixedValue 和 flowRateInletVelocity 。
1. uniformFixedValue
这个边界属于第一类边界,即直接指定边界上某个量的值。跟 fixedValue 的不同之处在于,这个边界条件允许边界上的值随着时间变化。一般的用法如下:
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 来定义随时间分段线性变化边界条件,还可以定义多项式变化的边界,比如:
type uniformFixedValue;
uniformValue polynomial
(
((1 0 0) (0 0 0))
((2 2 0) (1 2 0))
((3 5 0) (2 4 0))
);
以上这段定义的是这样一个边界:x 分量,Ux=1+2⋅t+3⋅t2;y 分量,
需要注意的是, polynomial 这种方式,目前测试在 2.3.x 以及以下版本不能使用,在最新的 3.0.x 版中可以使用。
此外,还有其他的一些定义方式,列举如下(参考http://www.geocities.jp/penguinitis2002/study/OpenFOAM/time_varying_bc.html):
固定值
inlet
{
type uniformFixedValue;
uniformValue constant (10 0 0);
}
这种方式与 fixedValue 效果是一样的。
tableFile
inlet
{
type uniformFixedValue;
uniformValue tableFile;
tableFileCoeffs
{
fileName "$FOAM_CASE/velocity"
outOfBounds clamp;
}
}
这个跟 table 那种类似,只不过将上面 table 的内容写到一个文件里了(这里是velocity 文件)。 velocity 文件的格式为
(
(0 (0 0 0))
(0.01 (10 0 0))
);
outOfBounds 的可选项及其含义有:
-
clamp:当实际时间超过 tableFile 里的最大时间(比如上述示例文件里,最大时间为0.01s)以后,保持 tableFile 最大时间定义的那个值(对上述示例文件,为(10 0 0))不变;
- repeat:重复前面的变化模式,比如上上述示例中,0 < t < 0.01 时,
,当 t 超过0.01 时,计算方法为
-
error:t > 0.01 时,报错退出;
-
warn:给出警告,但是程序继续运行,边界值计算方法同 clamp。
csvFile
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 格式的文件来定义分段函数,文件格式为
time,velocity-x,velocity-y,velocity-z
0,0,0,0
0.01,10,0,0
2. flowRateInletVelocity
这个边界条件指定的是界面上的体积流量或者质量流量,并根据流量来反推速度。速度的方向为垂直边界并指向区域内部。一般的用法如下:
myPatch
{
type flowRateInletVelocity;
volumetricFlowRate 0.2; // 体积流量
value uniform (0 0 0);
}
myPatch
{
type flowRateInletVelocity;
massFlowRate 0.2; // 质量流量
rho rho; //要指定密度场的名字
rhoInlet 1.0; //如果上述指定的密度场不存在,则使用这里指定的值作为边界上的密度
}
类似的,前面 uniformFixedValue 边界里的那些类型,table, tableFilecsvFile, polynomial 也都可以使用,而且格式是类似的,这里就不重复了,更多细节可以参考http://www.geocities.jp/penguinitis2002/study/OpenFOAM/time_varying_bc.html