33#include "../../../Common/include/parallelization/omp_structure.hpp"
34#include "../../../Common/include/toolboxes/geometry_toolbox.hpp"
46template <
size_t nDim,
class Matrix,
class Scalar>
52 if (idxVel >=
static_cast<int>(varBegin) && idxVel + nDim <= varEnd) {
54 su2double normalGrad[nDim] = {}, gradNormalVel[nDim] = {};
56 for (
size_t iDim = 0; iDim < nDim; iDim++) {
59 for (
size_t jDim = 0; jDim < nDim; jDim++) {
60 gradNormalVel[jDim] += n[iDim] * gradients[idxVel + iDim][jDim];
71 for (
size_t iDim = 0; iDim < nDim; iDim++) {
72 for (
size_t jDim = 0; jDim < nDim; jDim++) {
73 gradients[idxVel + iDim][jDim] -= normalGrad[iDim] * n[jDim] + n[iDim] * gradNormalVel[jDim];
74 gradients[idxVel + iDim][jDim] += 2 * n[iDim] * normalGradNormalVel * n[jDim];
81 for (
auto iVar = varBegin; iVar < varEnd; iVar++) {
82 if (idxVel != -1 &&
static_cast<int>(iVar) >= idxVel && iVar < idxVel + nDim)
continue;
85 for (
size_t iDim = 0; iDim < nDim; iDim++) {
86 gradients[iVar][iDim] -= normalGrad * n[iDim];
106template <
size_t nDim,
class GradientType>
108 const size_t varEnd,
const int idxVel, GradientType& gradient) {
111 std::vector<unsigned short> symMarkers;
112 for (
auto iMarker = 0u; iMarker < geometry.
GetnMarker(); ++iMarker) {
115 symMarkers.push_back(iMarker);
119 for (
const auto iMarker : symMarkers) {
121 for (
size_t iVertex = 0; iVertex < geometry.
GetnVertex(iMarker); ++iVertex) {
123 const auto iPoint = geometry.
vertex[iMarker][iVertex]->
GetNode();
132 for (
auto iDim = 0u; iDim < nDim; iDim++) unitNormal[iDim] = it->second[iDim];
136 for (
auto iDim = 0u; iDim < nDim; iDim++) unitNormal[iDim] /= area;
139 detail::correctGradient<nDim>(varBegin, varEnd, idxVel, unitNormal, gradient[iPoint]);
CNewtonIntegration::Scalar Scalar
Definition CNewtonIntegration.cpp:31
A templated matrix/vector-like object.
Definition C2DContainer.hpp:374
Main class for defining the problem; basically this class reads the configuration file,...
Definition CConfig.hpp:64
unsigned short GetMarker_All_KindBC(unsigned short val_marker) const
Get the kind of boundary for each marker.
Definition CConfig.hpp:3556
Parent class for defining the geometry of the problem (complete geometry, multigrid agglomerated geom...
Definition CGeometry.hpp:75
unsigned long GetnVertex(unsigned short val_marker) const
Get number of vertices.
Definition CGeometry.hpp:637
vector< std::unordered_map< unsigned long, std::array< su2double, MAXNDIM > > > symmetryNormals
Bool if boundary-marker is straight(2D)/plane(3D) for each local marker.
Definition CGeometry.hpp:263
CVertex *** vertex
Boundary Vertex vector (dual grid information).
Definition CGeometry.hpp:255
unsigned short GetnMarker() const
Get number of markers.
Definition CGeometry.hpp:623
void GetNormal(su2double *val_normal) const override
Copy the the normal vector of a face.
Definition CVertex.hpp:94
unsigned long GetNode() const
Get the node of the vertex.
Definition CVertex.hpp:70
passivedouble su2double
Definition code_config.hpp:181
void correctGradient(const size_t varBegin, const size_t varEnd, const int idxVel, const Scalar *n, Matrix &&gradients)
Correct the gradient on a symmetry plane.
Definition correctGradientsSymmetry.hpp:47
void correctGradientsSymmetry(CGeometry &geometry, const CConfig &config, const size_t varBegin, const size_t varEnd, const int idxVel, GradientType &gradient)
Correct gradients on symmetry and Euler (slip) markers to respect the conditions:
Definition correctGradientsSymmetry.hpp:107
Definition computeGradientsGreenGauss.hpp:37
#define END_SU2_OMP_FOR
Definition omp_structure.hpp:158
#define SU2_OMP_FOR_STAT(CHUNK)
Definition omp_structure.hpp:151
@ EULER_WALL
Boundary Euler wall definition.
Definition option_structure.hpp:1815
@ SYMMETRY_PLANE
Boundary symmetry plane definition.
Definition option_structure.hpp:1817