Skip to content

Commit 20cebb7

Browse files
committed
fix AD build and a bug in AddQCR
1 parent 3842409 commit 20cebb7

3 files changed

Lines changed: 39 additions & 38 deletions

File tree

Common/include/linear_algebra/blas_structure.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -455,7 +455,7 @@ class CBlasStructure {
455455
template<class Mat, class Vec, class W>
456456
static void EigenDecomposition(const Mat& A_ij, Mat& Eig_Vec, Vec& Eig_Val, int n, W& e) {
457457
for (int iDim = 0; iDim < n; iDim++){
458-
e[iDim] = 0;
458+
e[iDim] = 0.0;
459459
for (int jDim = 0; jDim < n; jDim++){
460460
Eig_Vec[iDim][jDim] = A_ij[iDim][jDim];
461461
}

SU2_CFD/include/numerics/CNumerics.hpp

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -449,15 +449,15 @@ class CNumerics {
449449
* \param[in] nDim - 2 or 3
450450
* \param[out] rateofstrain - Rate of strain matrix
451451
* \param[in] velgrad - A velocity gradient matrix.
452-
* \tparam TWOINDICES_1 - any type that supports the [][] interface
453-
* \tparam TWOINDICES_2 - any type that supports the [][] interface
452+
* \tparam Mat1 - any type that supports the [][] interface
453+
* \tparam Mat2 - any type that supports the [][] interface
454454
*/
455-
template<class TWOINDICES_1, class TWOINDICES_2>
456-
inline static void ComputeMeanRateOfStrainMatrix(unsigned short nDim, TWOINDICES_1& rateofstrain, const TWOINDICES_2& velgrad){
455+
template<class Mat1, class Mat2>
456+
FORCEINLINE static void ComputeMeanRateOfStrainMatrix(size_t nDim, Mat1& rateofstrain, const Mat2& velgrad){
457457

458458
/* --- Calculate the rate of strain tensor, using mean velocity gradients --- */
459459

460-
if (nDim == 3){
460+
if (nDim == 3) {
461461
rateofstrain[0][0] = velgrad[0][0];
462462
rateofstrain[1][1] = velgrad[1][1];
463463
rateofstrain[2][2] = velgrad[2][2];
@@ -501,17 +501,17 @@ class CNumerics {
501501
* \tparam Mat2 - any type that supports the [][] interface
502502
*/
503503
template<class Mat1, class Mat2, class Scalar>
504-
FORCEINLINE static void ComputeStressTensor(int nDim, Mat1& stress, const Mat2& velgrad,
504+
FORCEINLINE static void ComputeStressTensor(size_t nDim, Mat1& stress, const Mat2& velgrad,
505505
Scalar viscosity, Scalar density=0.0,
506506
Scalar turb_ke=0.0, bool reynolds3x3=false){
507507
Scalar divVel = 0.0;
508-
for (int iDim = 0; iDim < nDim; iDim++) {
508+
for (size_t iDim = 0; iDim < nDim; iDim++) {
509509
divVel += velgrad[iDim][iDim];
510510
}
511511
Scalar pTerm = 2./3. * (divVel * viscosity + density * turb_ke);
512512

513-
for (int iDim = 0; iDim < nDim; iDim++){
514-
for (int jDim = 0; jDim < nDim; jDim++){
513+
for (size_t iDim = 0; iDim < nDim; iDim++){
514+
for (size_t jDim = 0; jDim < nDim; jDim++){
515515
stress[iDim][jDim] = viscosity * (velgrad[iDim][jDim]+velgrad[jDim][iDim]);
516516
}
517517
stress[iDim][iDim] -= pTerm;
@@ -534,42 +534,43 @@ class CNumerics {
534534
* \param[in,out] tau: Shear stress tensor.
535535
*/
536536
template <class Mat1, class Mat2>
537-
FORCEINLINE static void AddQCR(int nDim, const Mat1& gradvel, Mat2& tau) {
537+
FORCEINLINE static void AddQCR(size_t nDim, const Mat1& gradvel, Mat2& tau) {
538+
using Scalar = typename std::decay<decltype(gradvel[0][0])>::type;
538539

539-
const su2double c_cr1= 0.3;
540+
const Scalar c_cr1 = 0.3;
540541

541542
/*--- Denominator Antisymmetric normalized rotation tensor ---*/
542543

543-
su2double den_aux = 0.0;
544-
for (int iDim = 0; iDim < nDim; iDim++)
545-
for (int jDim = 0; jDim < nDim; jDim++)
546-
den_aux += gradvel[iDim][jDim] * gradvel[iDim][jDim];
547-
den_aux = sqrt(max(den_aux,1E-10));
544+
Scalar factor = 0.0;
545+
for (size_t iDim = 0; iDim < nDim; iDim++)
546+
for (size_t jDim = 0; jDim < nDim; jDim++)
547+
factor += gradvel[iDim][jDim] * gradvel[iDim][jDim];
548+
factor = 1.0 / sqrt(max(factor,1E-10));
548549

549550
/*--- Adding the QCR contribution ---*/
550551

551-
su2double tauQCR[MAXNDIM][MAXNDIM] = {{0.0}};
552+
Scalar tauQCR[MAXNDIM][MAXNDIM] = {{0.0}};
552553

553-
for (int iDim = 0; iDim < nDim; iDim++){
554-
for (int jDim = 0; jDim < nDim; jDim++){
555-
for (int kDim = 0; kDim < nDim; kDim++){
556-
su2double O_ik = (gradvel[iDim][kDim] - gradvel[kDim][iDim])/ den_aux;
557-
su2double O_jk = (gradvel[jDim][kDim] - gradvel[kDim][jDim])/ den_aux;
558-
tauQCR[iDim][jDim] = c_cr1 * ((O_ik * tau[jDim][kDim]) + (O_jk * tau[iDim][kDim]));
554+
for (size_t iDim = 0; iDim < nDim; iDim++){
555+
for (size_t jDim = 0; jDim < nDim; jDim++){
556+
for (size_t kDim = 0; kDim < nDim; kDim++){
557+
Scalar O_ik = (gradvel[iDim][kDim] - gradvel[kDim][iDim]) * factor;
558+
Scalar O_jk = (gradvel[jDim][kDim] - gradvel[kDim][jDim]) * factor;
559+
tauQCR[iDim][jDim] += O_ik * tau[jDim][kDim] + O_jk * tau[iDim][kDim];
559560
}
560561
}
561562
}
562563

563-
for (int iDim = 0; iDim < nDim; iDim++)
564-
for (int jDim = 0; jDim < nDim; jDim++)
565-
tau[iDim][jDim] -= tauQCR[iDim][jDim];
564+
for (size_t iDim = 0; iDim < nDim; iDim++)
565+
for (size_t jDim = 0; jDim < nDim; jDim++)
566+
tau[iDim][jDim] -= c_cr1 * tauQCR[iDim][jDim];
566567
}
567568

568569
/*!
569570
* \brief Perturb the Reynolds stress tensor based on parameters.
570571
* \param[in] nDim - Dimension of the flow problem, 2 or 3.
571572
* \param[in] uq_eigval_comp - Component 1C 2C 3C.
572-
* \param[in] uq_permute - Whether to swap order of eigen values.
573+
* \param[in] uq_permute - Whether to swap order of eigen vectors.
573574
* \param[in] uq_delta_b - Delta_b parameter.
574575
* \param[in] uq_urlx - Relaxation factor.
575576
* \param[in] velgrad - A velocity gradient matrix.
@@ -579,20 +580,20 @@ class CNumerics {
579580
* \param[out] MeanPerturbedRSM - Perturbed stress tensor.
580581
*/
581582
template<class Mat1, class Mat2, class Scalar>
582-
FORCEINLINE static void ComputePerturbedRSM(int nDim, int uq_eigval_comp, bool uq_permute, su2double uq_delta_b,
583+
NEVERINLINE static void ComputePerturbedRSM(size_t nDim, size_t uq_eigval_comp, bool uq_permute, su2double uq_delta_b,
583584
su2double uq_urlx, const Mat1& velgrad, Scalar density,
584585
Scalar viscosity, Scalar turb_ke, Mat2& MeanPerturbedRSM) {
585586
Scalar MeanReynoldsStress[3][3];
586587
ComputeStressTensor(nDim, MeanReynoldsStress, velgrad, viscosity, density, turb_ke, true);
587-
for (int iDim = 0; iDim < 3; iDim++)
588-
for (int jDim = 0; jDim < 3; jDim++)
588+
for (size_t iDim = 0; iDim < 3; iDim++)
589+
for (size_t jDim = 0; jDim < 3; jDim++)
589590
MeanReynoldsStress[iDim][jDim] /= -density;
590591

591592
/* --- Calculate anisotropic part of Reynolds Stress tensor --- */
592593

593594
Scalar A_ij[3][3];
594-
for (int iDim = 0; iDim < 3; iDim++) {
595-
for (int jDim = 0; jDim < 3; jDim++) {
595+
for (size_t iDim = 0; iDim < 3; iDim++) {
596+
for (size_t jDim = 0; jDim < 3; jDim++) {
596597
A_ij[iDim][jDim] = .5 * MeanReynoldsStress[iDim][jDim] / turb_ke;
597598
}
598599
A_ij[iDim][iDim] -= 1.0/3.0;
@@ -643,19 +644,19 @@ class CNumerics {
643644

644645
/* permute eigenvectors if required */
645646
if (uq_permute) {
646-
for (int jDim=0; jDim<3; jDim++)
647+
for (size_t jDim = 0; jDim < 3; jDim++)
647648
swap(Eig_Vec[0][jDim], Eig_Vec[2][jDim]);
648649
}
649650

650651
CBlasStructure::EigenRecomposition(A_ij, Eig_Vec, Eig_Val, 3);
651652

652653
/* compute perturbed Reynolds stress matrix; using under-relaxation factor (uq_urlx)*/
653-
for (int iDim = 0; iDim < 3; iDim++) {
654-
for (int jDim = 0; jDim < 3; jDim++) {
654+
for (size_t iDim = 0; iDim < 3; iDim++) {
655+
for (size_t jDim = 0; jDim < 3; jDim++) {
655656
auto delta_ij = (jDim==iDim)? 1.0 : 0.0;
656657
MeanPerturbedRSM[iDim][jDim] = 2.0 * turb_ke * (A_ij[iDim][jDim] + 1.0/3.0 * delta_ij);
657658
MeanPerturbedRSM[iDim][jDim] = MeanReynoldsStress[iDim][jDim] +
658-
uq_urlx*(MeanPerturbedRSM[iDim][jDim] - MeanReynoldsStress[iDim][jDim]);
659+
uq_urlx*(MeanPerturbedRSM[iDim][jDim] - MeanReynoldsStress[iDim][jDim]);
659660
}
660661
}
661662
}

SU2_CFD/src/numerics/flow/flow_diffusion.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ void CAvgGrad_Base::SetStressTensor(const su2double *val_primvar,
139139
} else {
140140
// compute both parts in one step
141141
const su2double total_viscosity = val_laminar_viscosity + val_eddy_viscosity;
142-
ComputeStressTensor(nDim, tau, val_gradprimvar+1, total_viscosity, Density, 0.0); // TODO why ignore turb_ke?
142+
ComputeStressTensor(nDim, tau, val_gradprimvar+1, total_viscosity, Density, su2double(0.0)); // TODO why ignore turb_ke?
143143
}
144144
}
145145

0 commit comments

Comments
 (0)