
[Sponsors] 
June 10, 2014, 09:25 
Gradient Computation: finite differences and adjoint method

#1 
New Member
Join Date: May 2014
Posts: 3
Rep Power: 5 
Dear all,
I have been trying to compare the different gradient computation methods in SU2 for a NACA0012 airfoil with HicksHenne 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 mth HicksHenne 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 HicksHenne bump which is done perpendicularly to the chord) ? The gradient would be exact if the HicksHenne 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. 

June 24, 2014, 16:37 

#2 
Super Moderator
Thomas D. Economon
Join Date: Jan 2013
Location: Stanford, CA
Posts: 271
Rep Power: 7 
Hi,
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, Tom 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. 

November 17, 2017, 08:59 

#3  
New Member
Kemas Zakaria
Join Date: Nov 2017
Posts: 1
Rep Power: 0 
Quote:
Dear, I am a new user in using SU2 and right now i want to use the surface sensitivity computed by SU2 to calculate the gradient of the objective function with respect to my own design variables. From the image attached in your reply, can you explain more in detail about the term deltaSi ("area of the surface control volume surrounding node i"). Any reply would be highly appreciated Best regards, Kemas 

November 22, 2017, 06:37 

#4 
Member
Zeno Belligoli
Join Date: Sep 2013
Location: Delft, The Netherlands
Posts: 52
Rep Power: 6 
Hi Kemas,
I think reading the first 23 chapters of Thomas Economon's dissertation will give you all the info you are looking for for the mathematical insights of the SU2 adjoint formulation. Best, Z 

Thread Tools  
Display Modes  

