type codedFixedValue;
value uniform (0 0 0); // 初始速度
name UM2; // 自定义边界条件名称
codeInclude
#{
#include "fvMesh.H"
#include "polyPatch.H"
#include "fvcMeshPhi.H"
#include "addToRunTimeSelectionTable.H"
#};
code
#{
// 避免重复计算
if (this->updated())
{
return;
}
// 获取网格和边界数据
const fvPatch& p = patch();
const polyPatch& pp = p.patch();
const fvMesh& mesh = internalField().mesh();
// 仅在网格运动时计算(静态网格跳过)
if (mesh.moving())
{
// 1. 计算上一时刻的面中心坐标
const pointField& oldPoints = mesh.oldPoints();
vectorField oldFc(pp.size());
forAll(oldFc, i)
{
oldFc[i] = pp[i].centre(oldPoints); // 基于上一时刻节点坐标
}
// 2. 计算几何速度(位置变化/时间步长)
scalar deltaT = mesh.time().deltaTValue();
vectorField Up = (pp.faceCentres() - oldFc) / deltaT;
// 3. 通量修正确保连续性
const volVectorField& U = static_cast<const volVectorField&>(internalField());
scalarField phip = fvc::meshPhi(U, p.index()); // 网格运动产生的通量
vectorField n = p.nf(); // 边界法向量
scalarField magSf = p.magSf(); // 面面积
tmp<scalarField> Un = phip / (magSf + vSmall); // 通量对应的法向速度
// 4. 合成最终速度:几何速度 + 法向修正
// 公式:修正速度 = 原始速度 + 法向*(通量法向速度 - 原始法向分量)
vectorField::operator=(Up + n*(Un() - (n & Up)));
}
// 调用父类方法完成更新
fixedValueFvPatchVectorField::updateCoeffs();
#};
codeOptions
#{
-I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude
#};
codeLibs
#{
-lfiniteVolume \
-lmeshTools
#};
请教一下各位大佬,我想要通过codedfixedvalue实现movingwallvelocity这个边界条件的效果,这个代码是我仿照movingwallvelocity边界条件弄得,我用自己写的这个边界条件算了涡激振动,算出来的结果和movingwallvelocity结果几乎没有差别。计算完成后,我将输出结果导入tecplot,可以正常导入,但是切片时会出现以下报错,目前没有找到问题出在哪儿,应该是我写的这个边界条件tecplot无法识别导致的,但我不知道问题出在哪儿。
641bf902-dad9-4f14-91ab-7f5bc7eda851-QQ20251011-140535.png