You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.)
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
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!
Beta Was this translation helpful? Give feedback.
All reactions