Skip to content

Commit ca16276

Browse files
committed
Template CScalarSolver on type of CVariable.
Allowing optimized acces to muT of TurbSolvers. Implementation follows what is done for CFVMFlowSolverBase.
1 parent 4055011 commit ca16276

9 files changed

Lines changed: 44 additions & 25 deletions

File tree

SU2_CFD/include/solvers/CScalarSolver.hpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
/*!
22
* \file CScalarSolver.hpp
33
* \brief Headers of the CScalarSolver class
4-
* \author A. Bueno.
54
* \version 7.2.0 "Blackbird"
65
*
76
* SU2 Project Website: https://su2code.github.io
@@ -35,10 +34,10 @@
3534

3635
/*!
3736
* \class CScalarSolver
38-
* \brief Main class for defining the turbulence model solver.
39-
* \ingroup Turbulence_Model
40-
* \author A. Bueno.
37+
* \brief Main class for defining a scalar solver.
38+
* \tparam TVariable - Class of C*Variable of the specific solver
4139
*/
40+
template<class TVariable>
4241
class CScalarSolver : public CSolver {
4342
protected:
4443
enum : size_t { MAXNDIM = 3 }; /*!< \brief Max number of space dimensions, used in some static arrays. */
@@ -75,7 +74,7 @@ class CScalarSolver : public CSolver {
7574
/*!
7675
* \brief The highest level in the variable hierarchy this solver can safely use.
7776
*/
78-
CScalarVariable* nodes = nullptr;
77+
TVariable* nodes = nullptr;
7978

8079
/*!
8180
* \brief Return nodes to allow CSolver::base_nodes to be set.
@@ -85,7 +84,7 @@ class CScalarSolver : public CSolver {
8584
/*!
8685
* \brief Compute the viscous flux for the turbulent equation at a particular edge.
8786
* \tparam SolverSpecificNumericsFunc - lambda-function, that implements solver specific contributions to numerics.
88-
* \note The functor has to implement (*geometry, *numerics, *config, *nodes, iPoint, jPoint)
87+
* \note The functor has to implement (iPoint, jPoint)
8988
* \param[in] iEdge - Edge for which we want to compute the flux
9089
* \param[in] geometry - Geometrical definition of the problem.
9190
* \param[in] solver_container - Container vector with all the solutions.
Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
/*!
2-
* \file CScalarSolver.cpp
2+
* \file CScalarSolver.inl
33
* \brief Main subrotuines of CScalarSolver class
4-
* \author F. Palacios, A. Bueno
54
* \version 7.2.0 "Blackbird"
65
*
76
* SU2 Project Website: https://su2code.github.io
@@ -30,9 +29,11 @@
3029
#include "../../../Common/include/parallelization/omp_structure.hpp"
3130
#include "../../../Common/include/toolboxes/geometry_toolbox.hpp"
3231

33-
CScalarSolver::CScalarSolver(bool conservative) : CSolver(), Conservative(conservative) {}
32+
template<class TVariable>
33+
CScalarSolver<TVariable>::CScalarSolver(bool conservative) : CSolver(), Conservative(conservative) {}
3434

35-
CScalarSolver::CScalarSolver(CGeometry* geometry, CConfig* config, bool conservative)
35+
template<class TVariable>
36+
CScalarSolver<TVariable>::CScalarSolver(CGeometry* geometry, CConfig* config, bool conservative)
3637
: CSolver(), Conservative(conservative) {
3738
nMarker = config->GetnMarker_All();
3839

@@ -74,9 +75,11 @@ CScalarSolver::CScalarSolver(CGeometry* geometry, CConfig* config, bool conserva
7475
}
7576
}
7677

77-
CScalarSolver::~CScalarSolver() { delete nodes; }
78+
template<class TVariable>
79+
CScalarSolver<TVariable>::~CScalarSolver() { delete nodes; }
7880

79-
void CScalarSolver::Upwind_Residual(CGeometry* geometry, CSolver** solver_container, CNumerics** numerics_container,
81+
template<class TVariable>
82+
void CScalarSolver<TVariable>::Upwind_Residual(CGeometry* geometry, CSolver** solver_container, CNumerics** numerics_container,
8083
CConfig* config, unsigned short iMesh) {
8184
const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT);
8285
const bool muscl = config->GetMUSCL_Turb();
@@ -236,7 +239,8 @@ void CScalarSolver::Upwind_Residual(CGeometry* geometry, CSolver** solver_contai
236239
}
237240
}
238241

239-
void CScalarSolver::SumEdgeFluxes(CGeometry* geometry) {
242+
template<class TVariable>
243+
void CScalarSolver<TVariable>::SumEdgeFluxes(CGeometry* geometry) {
240244
SU2_OMP_FOR_STAT(omp_chunk_size)
241245
for (unsigned long iPoint = 0; iPoint < nPoint; ++iPoint) {
242246
LinSysRes.SetBlock_Zero(iPoint);
@@ -251,7 +255,8 @@ void CScalarSolver::SumEdgeFluxes(CGeometry* geometry) {
251255
END_SU2_OMP_FOR
252256
}
253257

254-
void CScalarSolver::BC_Periodic(CGeometry* geometry, CSolver** solver_container, CNumerics* numerics, CConfig* config) {
258+
template<class TVariable>
259+
void CScalarSolver<TVariable>::BC_Periodic(CGeometry* geometry, CSolver** solver_container, CNumerics* numerics, CConfig* config) {
255260
/*--- Complete residuals for periodic boundary conditions. We loop over
256261
the periodic BCs in matching pairs so that, in the event that there are
257262
adjacent periodic markers, the repeated points will have their residuals
@@ -264,7 +269,8 @@ void CScalarSolver::BC_Periodic(CGeometry* geometry, CSolver** solver_container,
264269
}
265270
}
266271

267-
void CScalarSolver::PrepareImplicitIteration(CGeometry* geometry, CSolver** solver_container, CConfig* config) {
272+
template<class TVariable>
273+
void CScalarSolver<TVariable>::PrepareImplicitIteration(CGeometry* geometry, CSolver** solver_container, CConfig* config) {
268274
const auto flowNodes = solver_container[FLOW_SOL]->GetNodes();
269275

270276
/*--- Set shared residual variables to 0 and declare
@@ -323,7 +329,8 @@ void CScalarSolver::PrepareImplicitIteration(CGeometry* geometry, CSolver** solv
323329
SetResidual_RMS(geometry, config);
324330
}
325331

326-
void CScalarSolver::CompleteImplicitIteration(CGeometry* geometry, CSolver** solver_container, CConfig* config) {
332+
template<class TVariable>
333+
void CScalarSolver<TVariable>::CompleteImplicitIteration(CGeometry* geometry, CSolver** solver_container, CConfig* config) {
327334
const bool compressible = (config->GetKind_Regime() == ENUM_REGIME::COMPRESSIBLE);
328335

329336
const auto flowNodes = solver_container[FLOW_SOL]->GetNodes();
@@ -369,7 +376,8 @@ void CScalarSolver::CompleteImplicitIteration(CGeometry* geometry, CSolver** sol
369376
CompleteComms(geometry, config, SOLUTION_EDDY);
370377
}
371378

372-
void CScalarSolver::ImplicitEuler_Iteration(CGeometry* geometry, CSolver** solver_container, CConfig* config) {
379+
template<class TVariable>
380+
void CScalarSolver<TVariable>::ImplicitEuler_Iteration(CGeometry* geometry, CSolver** solver_container, CConfig* config) {
373381
PrepareImplicitIteration(geometry, solver_container, config);
374382

375383
/*--- Solve or smooth the linear system. ---*/
@@ -393,7 +401,8 @@ void CScalarSolver::ImplicitEuler_Iteration(CGeometry* geometry, CSolver** solve
393401
CompleteImplicitIteration(geometry, solver_container, config);
394402
}
395403

396-
void CScalarSolver::SetResidual_DualTime(CGeometry* geometry, CSolver** solver_container, CConfig* config,
404+
template<class TVariable>
405+
void CScalarSolver<TVariable>::SetResidual_DualTime(CGeometry* geometry, CSolver** solver_container, CConfig* config,
397406
unsigned short iRKStep, unsigned short iMesh,
398407
unsigned short RunTime_EqSystem) {
399408
const bool implicit = (config->GetKind_TimeIntScheme() == EULER_IMPLICIT);
@@ -632,7 +641,8 @@ void CScalarSolver::SetResidual_DualTime(CGeometry* geometry, CSolver** solver_c
632641
} // end dynamic grid
633642
}
634643

635-
void CScalarSolver::LoadRestart(CGeometry** geometry, CSolver*** solver, CConfig* config, int val_iter,
644+
template<class TVariable>
645+
void CScalarSolver<TVariable>::LoadRestart(CGeometry** geometry, CSolver*** solver, CConfig* config, int val_iter,
636646
bool val_update_geo) {
637647
/*--- Restart the solution from file information ---*/
638648

SU2_CFD/include/solvers/CTurbSolver.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
* \ingroup Turbulence_Model
3838
* \author A. Bueno.
3939
*/
40-
class CTurbSolver : public CScalarSolver {
40+
class CTurbSolver : public CScalarSolver<CTurbVariable> {
4141
protected:
4242

4343
vector<su2activematrix> Inlet_TurbVars; /*!< \brief Turbulence variables at inlet profiles */

SU2_CFD/obj/Makefile.am

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,6 @@ libSU2Core_sources = ../src/definition_structure.cpp \
179179
../src/solvers/CSolver.cpp \
180180
../src/solvers/CTemplateSolver.cpp \
181181
../src/solvers/CTransLMSolver.cpp \
182-
../src/solvers/CScalarSolver.cpp \
183182
../src/solvers/CTurbSolver.cpp \
184183
../src/solvers/CTurbSASolver.cpp \
185184
../src/solvers/CTurbSSTSolver.cpp \

SU2_CFD/src/meson.build

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ su2_cfd_src += files(['solvers/CSolverFactory.cpp',
102102
'solvers/CSolver.cpp',
103103
'solvers/CTemplateSolver.cpp',
104104
'solvers/CTransLMSolver.cpp',
105-
'solvers/CScalarSolver.cpp',
106105
'solvers/CTurbSolver.cpp',
107106
'solvers/CTurbSASolver.cpp',
108107
'solvers/CTurbSSTSolver.cpp'])

SU2_CFD/src/solvers/CTransLMSolver.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,15 @@
2525
* License along with SU2. If not, see <http://www.gnu.org/licenses/>.
2626
*/
2727

28-
28+
#include "../../include/solvers/CScalarSolver.inl"
2929
#include "../../include/solvers/CTransLMSolver.hpp"
3030
#include "../../include/variables/CTransLMVariable.hpp"
3131
#include "../../include/variables/CTurbSAVariable.hpp"
3232

33+
/*--- Explicit instantiation of the parent class of CTurbSolver,
34+
* to spread the compilation over multiple cpp files. ---*/
35+
template class CScalarSolver<CTurbVariable>;
36+
3337
/*--- This is the implementation of the Langtry-Menter transition model.
3438
The main reference for this model is:Langtry, Menter, AIAA J. 47(12) 2009
3539
DOI: https://doi.org/10.2514/1.42362 ---*/

SU2_CFD/src/solvers/CTurbSASolver.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,15 @@
2525
* License along with SU2. If not, see <http://www.gnu.org/licenses/>.
2626
*/
2727

28+
#include "../../include/solvers/CScalarSolver.inl"
2829
#include "../../include/solvers/CTurbSASolver.hpp"
2930
#include "../../include/variables/CTurbSAVariable.hpp"
3031
#include "../../../Common/include/parallelization/omp_structure.hpp"
3132
#include "../../../Common/include/toolboxes/geometry_toolbox.hpp"
3233

34+
/*--- Explicit instantiation of the parent class of CTurbSolver,
35+
* to spread the compilation over multiple cpp files. ---*/
36+
template class CScalarSolver<CTurbVariable>;
3337

3438
CTurbSASolver::CTurbSASolver(void) : CTurbSolver(false) { }
3539

SU2_CFD/src/solvers/CTurbSSTSolver.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,15 @@
2525
* License along with SU2. If not, see <http://www.gnu.org/licenses/>.
2626
*/
2727

28+
#include "../../include/solvers/CScalarSolver.inl"
2829
#include "../../include/solvers/CTurbSSTSolver.hpp"
2930
#include "../../include/variables/CTurbSSTVariable.hpp"
3031
#include "../../../Common/include/parallelization/omp_structure.hpp"
3132
#include "../../../Common/include/toolboxes/geometry_toolbox.hpp"
3233

34+
/*--- Explicit instantiation of the parent class of CTurbSolver,
35+
* to spread the compilation over multiple cpp files. ---*/
36+
template class CScalarSolver<CTurbVariable>;
3337

3438
CTurbSSTSolver::CTurbSSTSolver(void) : CTurbSolver(true) { }
3539

SU2_CFD/src/solvers/CTurbSolver.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@
3030
#include "../../../Common/include/toolboxes/geometry_toolbox.hpp"
3131

3232

33-
CTurbSolver::CTurbSolver(bool conservative) : CScalarSolver(conservative) { }
33+
CTurbSolver::CTurbSolver(bool conservative) : CScalarSolver<CTurbVariable>(conservative) { }
3434

35-
CTurbSolver::CTurbSolver(CGeometry* geometry, CConfig *config, bool conservative) : CScalarSolver(geometry, config, conservative) { }
35+
CTurbSolver::CTurbSolver(CGeometry* geometry, CConfig *config, bool conservative) : CScalarSolver<CTurbVariable>(geometry, config, conservative) { }
3636

3737
CTurbSolver::~CTurbSolver() {
3838

0 commit comments

Comments
 (0)