输出力系数关于速度和压力的偏导
-
各位老师,我在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(); }
但这样的方法并不能编译通过,想请教有其他方案或者更好的方法吗,谢谢大家。