@学流体的小明
问了AI,OpenFOAM需要手动做两次梯度计算
#include "fvCFD.H" // OpenFOAM 的核心头文件,包含 mesh、field、fvc/fvm 工具
#include "fvcGrad.H" // 显式声明 fvc::grad
int main(int argc, char *argv[])
{
#include "setRootCase.H"
#include "createTime.H"
#include "createMesh.H"
// 创建速度场 U
volVectorField U
(
IOobject
(
"U",
runTime.timeName(),
mesh,
IOobject::MUST_READ,
IOobject::AUTO_WRITE
),
mesh
);
// 把 u1 分离出来
volScalarField u1 = U.component(vector::X); // 或者 U.x()
// 1. 计算 u1 的一阶梯度 ∇u1
volVectorField gradU1 = fvc::grad(u1);
// gradU1.x() = ∂u1/∂x1
// gradU1.y() = ∂u1/∂x2
// gradU1.z() = ∂u1/∂x3
// 2. 对 ∂u1/∂x1 这个标量场,在 x2(Y)方向再求一次梯度
// fvc::grad(gradU1.x()) 是一个 volVectorField,
// 其中 .y() 即 ∂(∂u1/∂x1)/∂x2 = ∂²u1/∂x1∂x2
volScalarField d2u1dx1dx2 = fvc::grad( gradU1.x() ).y();
// 写入结果
d2u1dx1dx2.write();
return 0;
}