Gradient Computation: finite differences and adjoint method
I have been trying to compare the different gradient computation methods in SU2 for a NACA0012 airfoil with Hicks-Henne bumps as design variable (the test case provided).
Comparing the results obtained with the Adjoint methods (and SU2_GPC) with the results obtained with the finite_differences.py script, I have observed that values can be quite different between the two ways to obtain the gradient.
The difference is especially big when the bumps are located near the leading edge. Is there any reason why it should be the case ?
I thought that it could be due to the way the gradient is computed with the adjoint method.
As the continuous adjoint method is used, after an adjoint computation, we have
dF/ dSn which is the sensitivity of F for an infinitesimal displacement of the surface in the direction of the local normal to the surface.
In the SU2_GPC file, (and in the files computing the deformation of the surface), one compute (D is the "deformation")
dD/dPm ~= (delta x, delta y, delta z) / Pm where delta x, delta y, delta z are the displacement of a surface point due to the m-th Hicks-Henne bump of amplitude Pm.
Thus, the gradient computed is given by the projection of the displacement over the local normal direction (1n) summed over the whole surface :
dF / dPm = sum_(points of the surface) dF/dSn * 1n * dD/dPm
However, in reality, the total displacement also has a tangential component, so isn't there an approximation which is made there which could explain the discrepancy between the gradient computed near the leading edge (as there the local normal is really different from the direction of deformation of the Hicks-Henne bump which is done perpendicularly to the chord) ?
The gradient would be exact if the Hicks-Henne bump was applied normally to the surface right ?
Can someone tell me if I understood the way the gradient is computed correctly ?
Thank you very much for your answer.
Thanks for a great question. The type of continuous adjoint formulation in SU2 takes advantage of shape calculus in order to find analytic expressions for the surface sensitivity. This is done assuming small perturbations in the local normal direction alone, without loss of generality. Tangential and normal components can be taken into account (and have been in previous work), but this is not necessary.
Please see the attached description of how we compute gradients using projection for some more information.
Hope this helps clear things up,
p.s. Don't forget that finite differencing is prone to truncation/subtractive cancelation error.. it can often take a few tries to find the appropriate step size. It is typical that we find some discrepancy between the two gradients.
|All times are GMT -4. The time now is 06:59.|