计算Patch的面积
// 计算某个patch的面积 patchID表示面的边界条件标识符
label patchID = mesh.boundaryMesh().findPatchID("inlet");
// 创建一个polyPatch为了循环
const polyPatch& myPatch = mesh.boundaryMesh()[patchID];
// 初始化patchArea
scalar patchArea = 0.0;
// 循环polyPatch的所有面,添加其表面大小
forAll(myPatch, faceI)
{
patchArea += mesh.magSf().boundaryField()[patchID][faceI]; // 获取指定面的面积
}
获取Patch的名字
Info << "patch name is " << U.boundaryField()[patch].patch().name() << endl;
网格相关量
const scalarField& V = mesh.V(); //网格体积
const surfaceVectorField& Sf = mesh.Sf(); //网格面矢量
const surfaceScalarField& magSf = mesh.magSf(); //网格面积的模(网格面积)
const surfaceVectorField& N = Sf/magSf; //网格面法向
给定patch调用网格
如果p
是一个fvPatch
const fvMesh& mesh = p.boundaryMesh().mesh();
类内调用时间步长
假定mesh_
是类内可以调用的成员变量
const scalar deltaT = mesh_.time().deltaT().value();
如果mesh_
不可获取,U_
可获取:
const scalar deltaT = U_.mesh().time().deltaT().value();
声明一个tmp变量
dimless
是一个表示无量纲的单位类型。
下面这段代码的意思是创建一个名为deltaLambdaT
的volScalarField
类型的临时变量,该变量有指定的名称、网格和初始值(1.0),这个变量可以在后续的计算中使用。
tmp<volScalarField> deltaLambdaT
(
volScalarField::New
(
"deltaLambdaT",
mesh_,
dimensionedScalar(dimless, 1.0)
)
);
codeFixedValue
inlet
{
type codedFixedValue;
value uniform (0 0 0); //default value
name linearTBC; //name of new BC type
code
#{
//const fvPatch& boundaryPatch = patch();
//const fvBoundaryMesh& boundaryMesh = boundaryPatch.boundaryMesh();
//const fvMesh& mesh = boundaryMesh.mesh();
//const scalar &t = this->db().time().deltaTValue();
scalar inletS = 0.0;
const fvPatch& inletPatch = this->patch();
forAll(inletPatch, faceI)
{
inletS += inletPatch.magSf()[faceI];
}
scalar outletS = 0.0019304;
scalar alphain = 0.1;
vectorField& vf = *this;
forAll(vf, i)
{
vf[i].y() = 0.01*outletS/inletS/alphain;
vf[i].x() = 0.0;
vf[i].z() = 0.0;
}
#};
}
获得某个函数的计算时间
#include<chrono>
auto start = std::chrono::steady_clock::now();
// Functions here
auto end = std::chrono::steady_clock::now();
auto diff = end - start;
Info << "Calculate nodes and weights, using "
<< std::chrono::duration<double, std::milli> (diff).count() << " ms" << endl;
在某个文件夹下输出scalarField
创建一个IOField<scalar>
类型的对象,命名为utau
,用于处理标量场的输入输出操作。它定义了IO对象的属性,包括名称、路径、关联的网格等,并提供了自动写入文件的功能。
其中totalFSize
表示标量场的大小,这里根据具体的情况指定。0,0
表示初始化标量场中的元素为0。
IOField<scalar> utau
(
IOobject
(
"utau",
runTime.constant(),
"../postProcessing",
mesh,
IOobject::NO_READ,
IOobject::AUTO_WRITE
),
scalarField(totalFSize, 0, 0)
);
对网格进行赋值
forAll(T, C) // 遍历网格,T为场数据 C为索引
{
T[C] = min(nu[C], 100); //对T的第C个网格,赋值第C个网格的nu与100的最小值
}
OpenFOAM二维数组
PtrList<PtrList<scalar>> te(4);
forAll(te, i)
{
te.set(i, new PtrList<scalar>(4));
forAll(te[i], j)
{
te[i].set(j, new scalar (0.0));
}
}
OpenFOAM中将控制点缩放(改变尺寸)
// 进行缩放 将单位m改为mm
transformPoints -scale '(0.001 0.001 0.001)'