Skip to content

Commit c9f098d

Browse files
authored
Merge pull request #2472 from su2code/fix_small_AD_issues
Fix preaccumulation error, improve recording of RANS solvers
2 parents 8becc90 + a0d2d4a commit c9f098d

File tree

7 files changed

+42
-1
lines changed

7 files changed

+42
-1
lines changed

SU2_CFD/include/solvers/CTurbSolver.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,4 +140,11 @@ class CTurbSolver : public CScalarSolver<CTurbVariable> {
140140
Inlet_TurbVars[val_marker][val_vertex][val_dim] = val_turb_var;
141141
}
142142

143+
/*!
144+
* \brief Register additional In- or Outputs for RANS.
145+
* \param[in] input - Boolean whether In- or Output should be registered.
146+
* \param[in] config - The particular config.
147+
* \returns The number of extra variables.
148+
*/
149+
unsigned long RegisterSolutionExtra(bool input, const CConfig* config) final;
143150
};

SU2_CFD/include/variables/CTurbVariable.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,5 +100,9 @@ class CTurbVariable : public CScalarVariable {
100100
*/
101101
inline void SetIntermittency(unsigned long iPoint, su2double val_intermittency) final { intermittency(iPoint) = val_intermittency; }
102102

103+
/*!
104+
* \brief Register eddy viscosity (muT) as Input or Output of an AD recording.
105+
* \param[in] input - Boolean whether In- or Output should be registered.
106+
*/
107+
void RegisterEddyViscosity(bool input);
103108
};
104-

SU2_CFD/include/variables/CVariable.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,20 @@ class CVariable {
137137
RegisterContainer(input, variable, &ad_index);
138138
}
139139

140+
void RegisterContainer(bool input, su2activevector& variable, su2vector<int>* ad_index = nullptr) {
141+
const auto nPoint = variable.rows();
142+
SU2_OMP_FOR_STAT(roundUpDiv(nPoint,omp_get_num_threads()))
143+
for (unsigned long iPoint = 0; iPoint < nPoint; ++iPoint) {
144+
145+
if (input) AD::RegisterInput(variable(iPoint));
146+
else AD::RegisterOutput(variable(iPoint));
147+
148+
if (ad_index) AD::SetIndex((*ad_index)(iPoint), variable(iPoint));
149+
150+
}
151+
END_SU2_OMP_FOR
152+
}
153+
140154
public:
141155
/*--- Disable copy and assignment. ---*/
142156
CVariable(const CVariable&) = delete;

SU2_CFD/src/solvers/CDiscAdjSolver.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ void CDiscAdjSolver::RegisterSolution(CGeometry *geometry, CConfig *config) {
162162
/*--- Boolean true indicates that an input is registered ---*/
163163
direct_solver->GetNodes()->RegisterSolution(true);
164164

165+
/*--- Register quantities that are no solver variables but further inputs/outputs of the (outer) iteration. ---*/
165166
direct_solver->RegisterSolutionExtra(true, config);
166167

167168
if (time_n_needed)

SU2_CFD/src/solvers/CTurbSolver.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,3 +236,12 @@ void CTurbSolver::Impose_Fixed_Values(const CGeometry *geometry, const CConfig *
236236
}
237237

238238
}
239+
240+
unsigned long CTurbSolver::RegisterSolutionExtra(bool input, const CConfig* config) {
241+
242+
/*--- Register muT as input/output of a RANS iteration. ---*/
243+
nodes->RegisterEddyViscosity(input);
244+
245+
/*--- We don't need to save adjoint values for muT. ---*/
246+
return 0;
247+
}

SU2_CFD/src/variables/CNSVariable.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ void CNSVariable::SetRoe_Dissipation_FD(unsigned long iPoint, su2double val_wall
114114
AD::SetPreaccIn(Primitive(iPoint, indices.EddyViscosity()));
115115
/*--- Laminar viscosity --- */
116116
AD::SetPreaccIn(Primitive(iPoint, indices.LaminarViscosity()));
117+
/*--- Density; GetDensity reads from Solution (not Primitive) at index 0 ---*/
118+
AD::SetPreaccIn(Solution(iPoint, 0));
117119

118120
su2double uijuij = 0.0;
119121

SU2_CFD/src/variables/CTurbVariable.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,7 @@ CTurbVariable::CTurbVariable(unsigned long npoint, unsigned long ndim, unsigned
3636
intermittency.resize(nPoint) = su2double(1.0);
3737

3838
}
39+
40+
void CTurbVariable::RegisterEddyViscosity(bool input) {
41+
RegisterContainer(input, muT);
42+
}

0 commit comments

Comments
 (0)