OpenFOAM使用技巧总结(持续更新2019.01.06)
- 矢量数组可以新建为矢量列表形式,初始化方法为:
List<vector> a = (n,vector::zero)
生成不同数据类型的链表并初始化:
1
2
3
4
5
6
7
8
9
10#include"Tuple2.H"
List<Tuple2<label, List<scalar>>> complexData(100);
forAll(complexData, i)
{
complexData[i].first() = rndGen.integer(0, Pstream::nProcs()-1);
complexData[i].second().setSize(3);
complexData[i].second()[0] = 1;
complexData[i].second()[1] = 2;
complexData[i].second()[2] = 3;
}尽量避免循环。
例如:如果需要定义一个分段函数,可以利用pos
和neg
函数:1
2
3
4v = a, if x < b
v = c if x > b
// can be coded as
volScalarField v = neg(x - b)*a + pos(x-b)*c;多进程可以使用
Sout
或者Pout
输出全部数据- 从
dictionary
中读取vector
和scalar
不同:
例如:
1 | vector U1(dict.lookup("U1")); |
对于label
读取没有专门函数,可以以scalar
类型读取后进行强制类型转换;
dimensionedScalar
以及dimenedsionVector
的初始化:
1 | dimensionedVector gravityAccele("gravityAccele",dimensionSet(0,1,-2,0,0), vector(0,0,-9.8)); |
对于并计算:
Foam::gSum(a)
可以获取不同进程中场a的加和;Pstream::nProcs()
获取并行的进程数;Pstream::myProcNo()
获取当前的进程数对于已经画好的网格需要在某个方向平移,或者放大缩小可以采用
transformPoints
操作:
1 | transformPoints -scale "(1 1 0.5)" //z方向网格点缩小0.5倍 |
- 返回某一网格的8个顶点坐标:出自cfd-online,亲测有效
1 | const faceList & ff = mesh.faces(); |
BiCGStab solver in OpenFOAM (收敛性更佳,适合rotating meshes)出自cfd-online,
求解器网站:地址,
注意:运行makeLib.sh(OpenFOAM-x.x.x/FoamFourierAnalysis/fftw-3.3.3/文件夹下configure加执行权限)。
输出错误并跳出执行(多用于程序调试过程中)
1
2FatalErrorIn("main.cpp pressure is unregular")
<< abort(FatalError);