各位老师,我在openfoamv2206环境下希望输出升力系数关于压力和速度的偏导数。文章中的解析公式是这样的
但是我们实际计算中,基本是按照数值积分的方法获得的升力系数,所以我的想法是通过修改src/functionObjects/forces里的的计算来输出这个值。
void forces::calculateDerivatives()
{
scalar deltaU = 1e-6; // 自定义增量
scalar deltaP = 1e-6; // 自定义增量
// 存储基值
volVectorField U_baseline = film_.U();
volScalarField p_baseline = film_.p();
// 计算基力
vector forceBaseline = this->calcForces();
// 扰动速度并计算力
film_.U() += vector(deltaU, 0, 0); // 例如:扰动 x 方向的 U
vector forcePerturbedU = this->calcForces();
film_.U() = U_baseline; // 恢复原始速度
// 扰动压力并计算力
film_.p() += deltaP;
vector forcePerturbedP = this->calcForces();
film_.p() = p_baseline; // 恢复原始压力
// 计算导数
vector dFdU = (forcePerturbedU - forceBaseline) / deltaU;
vector dFdp = (forcePerturbedP - forceBaseline) / deltaP;
Info << "dF/dU: " << dFdU << endl;
Info << "dF/dp: " << dFdp << endl;
}
void forces::execute()
{
// 执行现有力的计算
this->calcForces();
// 调用导数计算
this->calculateDerivatives();
}
但这样的方法并不能编译通过,想请教有其他方案或者更好的方法吗,谢谢大家。