@@ -66,10 +66,13 @@ void CTurboIteration::InitTurboPerformance(CGeometry* geometry, CConfig** config
6666}
6767
6868void CTurboIteration::TurboRamp (CGeometry**** geometry_container, CConfig** config_container, unsigned long iter, unsigned short iZone, unsigned short ramp_flag) {
69-
69+ /* --- Generic function for handling turbomachinery ramps ---*/
70+ // Grid updates (i.e. rotation/translation) handled seperately to boundary (i.e. pressure/mass flow) updates
7071 auto * config = config_container[iZone];
7172 auto * geometry = geometry_container[iZone][INST_0][ZONE_0];
7273
74+ /* --- Lambda function for selecting correct ramp variables ---*/
75+ // Ramp coefficient variables
7376 auto GetRamp_Coeff = [&](CConfig* &config, unsigned short int x) {
7477 if (ramp_flag == TURBO_RAMP_TYPE::GRID && config->GetRampRotatingFrame ()) return config->GetRampRotatingFrame_Coeff (x);
7578 else if (ramp_flag == TURBO_RAMP_TYPE::GRID && config->GetRampTranslationFrame ()) return config->GetRampTranslationFrame_Coeff (x);
@@ -78,16 +81,19 @@ void CTurboIteration::TurboRamp(CGeometry**** geometry_container, CConfig** conf
7881 else return config->GetRampRotatingFrame_Coeff (x); // No ramp specified, does nothing
7982 };
8083
84+ // Grid movement rate
8185 auto SetRate = [&](CConfig* &config, su2double val) {
8286 if (ramp_flag == TURBO_RAMP_TYPE::GRID && config->GetRampRotatingFrame ()) config->SetRotation_Rate (2 , val);
8387 else if (ramp_flag == TURBO_RAMP_TYPE::GRID && config->GetRampTranslationFrame ()) config->SetTranslation_Rate (1 , val);
8488 };
8589
90+ // Grid velocity
8691 auto SetVelocity = [&](CGeometry* &geometry, CConfig* &config, bool print) {
8792 if (ramp_flag == TURBO_RAMP_TYPE::GRID && config->GetRampRotatingFrame ()) geometry->SetRotationalVelocity (config, print);
8893 else if (ramp_flag == TURBO_RAMP_TYPE::GRID && config->GetRampTranslationFrame ()) geometry->SetTranslationalVelocity (config, print);
8994 };
9095
96+ // Final value of ramp
9197 auto GetFinalValue = [&](CConfig* &config) {
9298 if (ramp_flag == TURBO_RAMP_TYPE::GRID && config->GetRampRotatingFrame ()) return config->GetFinalRotation_Rate_Z ();
9399 else if (ramp_flag == TURBO_RAMP_TYPE::GRID && config->GetRampTranslationFrame ()) return config->GetFinalTranslation_Rate_Y ();
@@ -113,8 +119,9 @@ void CTurboIteration::TurboRamp(CGeometry**** geometry_container, CConfig** conf
113119 const long unsigned finalRamp_Iter = SU2_TYPE::Int (GetRamp_Coeff (config, 2 ));
114120 const auto ini_vel = GetRamp_Coeff (config, 0 );
115121 const bool print = (config->GetComm_Level () == COMM_FULL);
116-
117- if (iter % rampFreq == 0 && iter <= finalRamp_Iter){
122+
123+ // Two options needed as if finalRamp_Iter % rampFreq != 0 final value is not set correctly
124+ if ((iter % rampFreq == 0 && iter < finalRamp_Iter) || (iter == finalRamp_Iter)){
118125 const auto final_vel = GetFinalValue (config);
119126 if (fabs (final_vel) > 0.0 ) {
120127 const auto vel = ini_vel + iter * (final_vel - ini_vel)/finalRamp_Iter;
@@ -123,6 +130,7 @@ void CTurboIteration::TurboRamp(CGeometry**** geometry_container, CConfig** conf
123130 SetVelocity (geometry, config, print);
124131 geometry->SetShroudVelocity (config);
125132 }
133+ // Update average turbo values
126134 geometry->SetAvgTurboValue (config, iZone, INFLOW, false );
127135 geometry->SetAvgTurboValue (config, iZone, OUTFLOW, false );
128136 geometry->GatherInOutAverageValues (config, false );
@@ -133,6 +141,7 @@ void CTurboIteration::TurboRamp(CGeometry**** geometry_container, CConfig** conf
133141 }
134142 }
135143
144+ // Boundary ramps (pressure/mass flow)
136145 if (ramp_flag == TURBO_RAMP_TYPE::BOUNDARY){
137146 const long unsigned rampFreq = SU2_TYPE::Int (GetRamp_Coeff (config, 1 ));
138147 const long unsigned finalRamp_Iter = SU2_TYPE::Int (GetRamp_Coeff (config, 2 ));
0 commit comments