codedfixedvalue实现运动边界速度的指定
-
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无法识别导致的,但我不知道问题出在哪儿。