Repository navigation
Issues with Discrete Adjoint Objective Function in SU2 for Turbomachinery Optimization #2456
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Hi everyone,
I am trying to perform shape optimization for turbomachinery using the discrete adjoint method. From what I have learned, the discrete adjoint functionality in the latest version of the turbine module is currently broken (the developers are working on a fix, but it will take time). Based on recommendations, I have explored older versions of SU2, including V7.5.1_master and V5_feature_turbomachinery.
In V7.5.1_master, there are three built-in objective functions: ENTROPY_GENERATION, FLOW_ANGLE_OUT, and MASS_FLOW_IN. I tested them using the configuration and mesh files from TestCases/disc_adj_turbomachinery, making only minor modifications to the FFD settings and the objective function type. So, I believe the test cases should be reasonable.
For ENTROPY_GENERATION and FLOW_ANGLE_OUT, the adjoint solver in SU2 produces sensitivity results that match well with finite-difference approximations. However, MASS_FLOW_IN shows a significant discrepancy. Since I don’t frequently use MASS_FLOW_IN, I ignored this issue.
Following the implementation of the built-in objective functions (ENTROPY_GENERATION and FLOW_ANGLE_OUT) and referring to V5_feature_turbomachinery, I added TOTAL_PRESSURE_LOSS and KINETIC_ENERGY_LOSS to the V7.5.1_master source code. Unfortunately, the accuracy of the sensitivity verification is quite poor.
I have a basic understanding of discrete adjoint automatic differentiation principles, but I am unfamiliar with the specific code implementation. At this stage, my understanding is that in void CDiscAdjSinglezoneDriver::SetObjFunction(), ObjFunc retrieves the corresponding objective function using a specific get method, and the variable returned by the get method is implemented in output_physics.cpp. Am I missing any important steps?
Additionally, I understand that SU2 uses CoDiPack for automatic differentiation. Do I need to study CoDiPack in detail to solve this issue? (If possible, I would prefer to avoid this.)
Any help would be greatly appreciated!
All reactions