diff --git a/Common/include/config_structure.hpp b/Common/include/config_structure.hpp
index 699714ea4f18..4776ca081d00 100644
--- a/Common/include/config_structure.hpp
+++ b/Common/include/config_structure.hpp
@@ -2927,10 +2927,28 @@ class CConfig {
su2double *GetWeightsIntegrationADER_DG(void);
/*!
- * \brief Get the total number of boundary markers.
+ * \brief Get the total number of boundary markers including send/receive domains.
* \return Total number of boundary markers.
*/
unsigned short GetnMarker_All(void);
+
+ /*!
+ * \brief Get the total number of boundary markers in the config file.
+ * \return Total number of boundary markers.
+ */
+ unsigned short GetnMarker_CfgFile(void);
+
+ /*!
+ * \brief Get the number of Euler boundary markers.
+ * \return Number of Euler boundary markers.
+ */
+ unsigned short GetnMarker_Euler(void);
+
+ /*!
+ * \brief Get the number of symmetry boundary markers.
+ * \return Number of symmetry boundary markers.
+ */
+ unsigned short GetnMarker_SymWall(void);
/*!
* \brief Get the total number of boundary markers.
@@ -6579,6 +6597,13 @@ class CConfig {
*/
unsigned short GetMarker_Moving(string val_marker);
+ /*!
+ * \brief Get bool if marker is moving. val_marker.
+ * \param[in] val_marker - String of the marker to test.
+ * \return Bool if the marker is a moving boundary val_marker.
+ */
+ bool GetMarker_Moving_Bool(string val_marker);
+
/*!
* \brief Get the internal index for a DEFORM_MESH boundary val_marker.
* \return Internal index for a DEFORM_MESH boundary val_marker.
@@ -6590,7 +6615,7 @@ class CConfig {
* \return Internal index for a Fluid_Load boundary val_marker.
*/
unsigned short GetMarker_Fluid_Load(string val_marker);
-
+
/*!
* \brief Get the name of the surface defined in the geometry file.
* \param[in] val_marker - Value of the marker in which we are interested.
diff --git a/Common/include/config_structure.inl b/Common/include/config_structure.inl
index ff6967cd8c78..15779e16af2a 100644
--- a/Common/include/config_structure.inl
+++ b/Common/include/config_structure.inl
@@ -1432,6 +1432,12 @@ inline unsigned short CConfig::GetMarker_All_PyCustom(unsigned short val_marker)
inline unsigned short CConfig::GetnMarker_All(void) { return nMarker_All; }
+inline unsigned short CConfig::GetnMarker_CfgFile(void) { return nMarker_CfgFile; }
+
+inline unsigned short CConfig::GetnMarker_Euler(void) { return nMarker_Euler; }
+
+inline unsigned short CConfig::GetnMarker_SymWall(void) { return nMarker_SymWall; }
+
inline unsigned short CConfig::GetnMarker_Max(void) { return nMarker_Max; }
inline unsigned short CConfig::GetnMarker_EngineInflow(void) { return nMarker_EngineInflow; }
diff --git a/Common/include/geometry_structure.hpp b/Common/include/geometry_structure.hpp
index f5f31d2f429b..d5045a7f7214 100644
--- a/Common/include/geometry_structure.hpp
+++ b/Common/include/geometry_structure.hpp
@@ -321,6 +321,7 @@ class CGeometry {
CVertex*** vertex; /*!< \brief Boundary Vertex vector (dual grid information). */
CTurboVertex**** turbovertex; /*!< \brief Boundary Vertex vector ordered for turbomachinery calculation(dual grid information). */
unsigned long *nVertex; /*!< \brief Number of vertex for each marker. */
+ vector bound_is_straight; /*!< \brief Bool if boundary-marker is straight(2D)/plane(3D) for each local marker. */
unsigned short *nSpanWiseSections; /*!< \brief Number of Span wise section for each turbo marker, indexed by inflow/outflow */
unsigned short *nSpanSectionsByMarker; /*! <\brief Number of Span wise section for each turbo marker, indexed by marker. Needed for deallocation.*/
unsigned short nTurboPerf; /*!< \brief Number of Span wise section for each turbo marker. */
@@ -1036,6 +1037,16 @@ class CGeometry {
*/
virtual void SetRestricted_GridVelocity(CGeometry *fine_mesh, CConfig *config);
+ /*!
+ * \brief Check if a boundary is straight(2D) / plane(3D) for EULER_WALL and SYMMETRY_PLANE
+ * only and store the information in bound_is_straight. For all other boundary types
+ * this will return false and could therfore be wrong. Used ultimately for BC_Slip_Wall.
+ * \param[in] config - Definition of the particular problem.
+ * \param[in] print_on_screen - Boolean whether to print result on screen.
+ */
+ void ComputeSurf_Straightness(CConfig *config,
+ bool print_on_screen);
+
/*!
* \brief Find and store all vertices on a sharp corner in the geometry.
* \param[in] config - Definition of the particular problem.
diff --git a/Common/include/mpi_structure.hpp b/Common/include/mpi_structure.hpp
index b0c7c4485c31..e6001150d9b8 100644
--- a/Common/include/mpi_structure.hpp
+++ b/Common/include/mpi_structure.hpp
@@ -331,6 +331,7 @@ class CMediMPIWrapper: public CBaseMPIWrapper {
#define MPI_MIN 9
#define MPI_MAX 10
#define MPI_INT 11
+#define MPI_PROD 12
class CBaseMPIWrapper {
public:
diff --git a/Common/src/config_structure.cpp b/Common/src/config_structure.cpp
index 6a373483e7c3..9f39c39bee26 100644
--- a/Common/src/config_structure.cpp
+++ b/Common/src/config_structure.cpp
@@ -8112,6 +8112,16 @@ unsigned short CConfig::GetMarker_Moving(string val_marker) {
return iMarker_Moving;
}
+bool CConfig::GetMarker_Moving_Bool(string val_marker) {
+ unsigned short iMarker_Moving;
+
+ /*--- Find the marker for this moving boundary, if it exists. ---*/
+ for (iMarker_Moving = 0; iMarker_Moving < nMarker_Moving; iMarker_Moving++)
+ if (Marker_Moving[iMarker_Moving] == val_marker) return true;
+
+ return false;
+}
+
unsigned short CConfig::GetMarker_Deform_Mesh(string val_marker) {
unsigned short iMarker_Deform_Mesh;
diff --git a/Common/src/geometry_structure.cpp b/Common/src/geometry_structure.cpp
index 999db1d47c11..888974480a74 100644
--- a/Common/src/geometry_structure.cpp
+++ b/Common/src/geometry_structure.cpp
@@ -2796,6 +2796,149 @@ void CGeometry::UpdateCustomBoundaryConditions(CGeometry **geometry_container, C
}
}
+
+void CGeometry::ComputeSurf_Straightness(CConfig *config,
+ bool print_on_screen) {
+
+ bool RefUnitNormal_defined;
+ unsigned short iDim,
+ iMarker,
+ iMarker_Global,
+ nMarker_Global = config->GetnMarker_CfgFile();
+ unsigned long iVertex;
+ constexpr passivedouble epsilon = 1.0e-6;
+ su2double Area;
+ string Local_TagBound,
+ Global_TagBound;
+
+ vector Normal(nDim),
+ UnitNormal(nDim),
+ RefUnitNormal(nDim);
+
+ /*--- Assume now that this boundary marker is straight. As soon as one
+ AreaElement is found that is not aligend with a Reference then it is
+ certain that the boundary marker is not straight and one can stop
+ searching. Another possibility is that this process doesn't own
+ any nodes of that boundary, in that case we also have to assume the
+ boundary is straight.
+ Any boundary type other than SYMMETRY_PLANE or EULER_WALL gets
+ the value false (or see cases specified in the conditional below)
+ which could be wrong. ---*/
+ bound_is_straight.resize(nMarker);
+ fill(bound_is_straight.begin(), bound_is_straight.end(), true);
+
+ /*--- Loop over all local markers ---*/
+ for (iMarker = 0; iMarker < nMarker; iMarker++) {
+
+ Local_TagBound = config->GetMarker_All_TagBound(iMarker);
+
+ /*--- Marker has to be Symmetry or Euler. Additionally marker can't be a
+ moving surface and Grid Movement Elasticity is forbidden as well. All
+ other GridMovements are rigid. ---*/
+ if ((config->GetMarker_All_KindBC(iMarker) == SYMMETRY_PLANE ||
+ config->GetMarker_All_KindBC(iMarker) == EULER_WALL) &&
+ config->GetMarker_Moving_Bool(Local_TagBound) == false &&
+ config->GetKind_GridMovement() != ELASTICITY) {
+
+ /*--- Loop over all global markers, and find the local-global pair via
+ matching unique string tags. ---*/
+ for (iMarker_Global = 0; iMarker_Global < nMarker_Global; iMarker_Global++) {
+
+ Global_TagBound = config->GetMarker_CfgFile_TagBound(iMarker_Global);
+ if (Local_TagBound == Global_TagBound) {
+
+ RefUnitNormal_defined = false;
+ iVertex = 0;
+
+ while(bound_is_straight[iMarker] == true &&
+ iVertex < nVertex[iMarker]) {
+
+ vertex[iMarker][iVertex]->GetNormal(Normal.data());
+ UnitNormal = Normal;
+
+ /*--- Compute unit normal. ---*/
+ Area = 0.0;
+ for (iDim = 0; iDim < nDim; iDim++)
+ Area += Normal[iDim]*Normal[iDim];
+ Area = sqrt(Area);
+
+ /*--- Negate for outward convention. ---*/
+ for (iDim = 0; iDim < nDim; iDim++)
+ UnitNormal[iDim] /= -Area;
+
+ /*--- Check if unit normal is within tolerance of the Reference unit normal.
+ Reference unit normal = first unit normal found. ---*/
+ if(RefUnitNormal_defined) {
+ for (iDim = 0; iDim < nDim; iDim++) {
+ if( abs(RefUnitNormal[iDim] - UnitNormal[iDim]) > epsilon ) {
+ bound_is_straight[iMarker] = false;
+ break;
+ }
+ }
+ } else {
+ RefUnitNormal = UnitNormal; //deep copy of values
+ RefUnitNormal_defined = true;
+ }
+
+ iVertex++;
+ }//while iVertex
+ }//if Local == Global
+ }//for iMarker_Global
+ } else {
+ /*--- Enforce default value: false ---*/
+ bound_is_straight[iMarker] = false;
+ }//if sym or euler ...
+ }//for iMarker
+
+ /*--- Communicate results and print on screen. ---*/
+ if(print_on_screen) {
+
+ /*--- Additional vector which can later be MPI::Allreduce(d) to pring the results
+ on screen as nMarker (local) can vary across ranks. Default 'true' as it can
+ happen that a local rank does not contain an element of each surface marker. ---*/
+ vector bound_is_straight_Global(nMarker_Global, true);
+ /*--- Match local with global tag bound and fill a Global Marker vector. ---*/
+ for (iMarker = 0; iMarker < nMarker; iMarker++) {
+ Local_TagBound = config->GetMarker_All_TagBound(iMarker);
+ for (iMarker_Global = 0; iMarker_Global < nMarker_Global; iMarker_Global++) {
+ Global_TagBound = config->GetMarker_CfgFile_TagBound(iMarker_Global);
+
+ if(Local_TagBound == Global_TagBound)
+ bound_is_straight_Global[iMarker_Global] = bound_is_straight[iMarker];
+
+ }//for iMarker_Global
+ }//for iMarker
+
+ vector Buff_Send_isStraight(nMarker_Global),
+ Buff_Recv_isStraight(nMarker_Global);
+
+ /*--- Cast to int as std::vector can be a special construct. MPI handling using
+ is more straight-forward. ---*/
+ for (iMarker_Global = 0; iMarker_Global < nMarker_Global; iMarker_Global++)
+ Buff_Send_isStraight[iMarker_Global] = static_cast (bound_is_straight_Global[iMarker_Global]);
+
+ /*--- Product of type (bool) is equivalnt to a 'logical and' ---*/
+ SU2_MPI::Allreduce(Buff_Send_isStraight.data(), Buff_Recv_isStraight.data(),
+ nMarker_Global, MPI_INT, MPI_PROD, MPI_COMM_WORLD);
+
+ /*--- Print results on screen. ---*/
+ if(rank == MASTER_NODE) {
+ for (iMarker_Global = 0; iMarker_Global < nMarker_Global; iMarker_Global++) {
+ if (config->GetMarker_CfgFile_KindBC(config->GetMarker_CfgFile_TagBound(iMarker_Global)) == SYMMETRY_PLANE ||
+ config->GetMarker_CfgFile_KindBC(config->GetMarker_CfgFile_TagBound(iMarker_Global)) == EULER_WALL) {
+
+ cout << "Boundary marker " << config->GetMarker_CfgFile_TagBound(iMarker_Global) << " is";
+ if(Buff_Recv_isStraight[iMarker_Global] == false) cout << " NOT";
+ if(nDim == 2) cout << " a single straight." << endl;
+ if(nDim == 3) cout << " a single plane." << endl;
+ }//if sym or euler
+ }//for iMarker_Global
+ }//if rank==MASTER
+ }//if print_on_scren
+
+}
+
+
void CGeometry::ComputeSurf_Curvature(CConfig *config) {
unsigned short iMarker, iNeigh_Point, iDim, iNode, iNeighbor_Nodes, Neighbor_Node;
unsigned long Neighbor_Point, iVertex, iPoint, jPoint, iElem_Bound, iEdge, nLocalVertex, MaxLocalVertex , *Buffer_Send_nVertex, *Buffer_Receive_nVertex, TotalnPointDomain;
diff --git a/SU2_CFD/include/solver_structure.hpp b/SU2_CFD/include/solver_structure.hpp
index 790eff1baa7f..e9ba63fa2743 100644
--- a/SU2_CFD/include/solver_structure.hpp
+++ b/SU2_CFD/include/solver_structure.hpp
@@ -772,13 +772,18 @@ class CSolver {
* \brief A virtual member.
* \param[in] geometry - Geometrical definition of the problem.
* \param[in] solver_container - Container vector with all the solutions.
- * \param[in] numerics - Description of the numerical method.
+ * \param[in] conv_numerics - Description of the numerical method.
+ * \param[in] visc_numerics - Description of the numerical method.
* \param[in] config - Definition of the particular problem.
* \param[in] val_marker - Surface marker where the boundary condition is applied.
*/
- virtual void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
+ virtual void BC_Euler_Wall(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
unsigned short val_marker);
-
+
/*!
* \brief A virtual member.
* \param[in] geometry - Geometrical definition of the problem.
@@ -1013,8 +1018,12 @@ class CSolver {
* \param[in] config - Definition of the particular problem.
* \param[in] val_marker - Surface marker where the boundary condition is applied.
*/
- virtual void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
-
+ virtual void BC_Sym_Plane(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker);
/*!
* \brief A virtual member.
@@ -5101,17 +5110,22 @@ class CEulerSolver : public CSolver {
void Evaluate_ObjFunc(CConfig *config);
/*!
- * \author: G.Gori, S.Vitale, M.Pini, A.Guardone, P.Colonna
+ * \author: T. Kattmann
*
* \brief Impose via the residual the Euler wall boundary condition.
* \param[in] geometry - Geometrical definition of the problem.
* \param[in] solver_container - Container vector with all the solutions.
- * \param[in] numerics - Description of the numerical method.
+ * \param[in] conv_numerics - Description of the numerical method.
+ * \param[in] visc_numerics - Description of the numerical method.
* \param[in] config - Definition of the particular problem.
* \param[in] val_marker - Surface marker where the boundary condition is applied.
*/
- void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
- unsigned short val_marker);
+ void BC_Euler_Wall(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) override;
/*!
* \brief Impose the far-field boundary condition using characteristics.
@@ -5134,7 +5148,12 @@ class CEulerSolver : public CSolver {
* \param[in] config - Definition of the particular problem.
* \param[in] val_marker - Surface marker where the boundary condition is applied.
*/
- void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
+ void BC_Sym_Plane(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) override;
/*!
* \brief Impose the interface state across sliding meshes.
@@ -7348,16 +7367,21 @@ class CIncEulerSolver : public CSolver {
void Evaluate_ObjFunc(CConfig *config);
/*!
- * \author: G.Gori, S.Vitale, M.Pini, A.Guardone, P.Colonna
+ * \author: T. Kattmann
* \brief Impose via the residual the Euler wall boundary condition.
* \param[in] geometry - Geometrical definition of the problem.
* \param[in] solver_container - Container vector with all the solutions.
- * \param[in] numerics - Description of the numerical method.
+ * \param[in] conv_numerics - Description of the numerical method.
+ * \param[in] visc_numerics - Description of the numerical method.
* \param[in] config - Definition of the particular problem.
* \param[in] val_marker - Surface marker where the boundary condition is applied.
*/
- void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
- unsigned short val_marker);
+ void BC_Euler_Wall(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) override;
/*!
* \brief Impose the far-field boundary condition using characteristics.
@@ -7380,8 +7404,13 @@ class CIncEulerSolver : public CSolver {
* \param[in] config - Definition of the particular problem.
* \param[in] val_marker - Surface marker where the boundary condition is applied.
*/
- void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
-
+ void BC_Sym_Plane(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) override;
+
/*!
* \brief Impose a subsonic inlet boundary condition.
* \param[in] geometry - Geometrical definition of the problem.
@@ -9337,18 +9366,28 @@ class CTurbSolver : public CSolver {
* \param[in] config - Definition of the particular problem.
* \param[in] val_marker - Surface marker where the boundary condition is applied.
*/
- void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker);
+ void BC_Sym_Plane(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) override;
/*!
* \brief Impose via the residual the Euler wall boundary condition.
* \param[in] geometry - Geometrical definition of the problem.
* \param[in] solver_container - Container vector with all the solutions.
- * \param[in] numerics - Description of the numerical method.
+ * \param[in] conv_numerics - Description of the numerical method.
+ * \param[in] visc_numerics - Description of the numerical method.
* \param[in] config - Definition of the particular problem.
* \param[in] val_marker - Surface marker where the boundary condition is applied.
*/
- void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
- unsigned short val_marker);
+ void BC_Euler_Wall(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) override;
/*!
* \brief Impose via the residual the Euler wall boundary condition.
* \param[in] geometry - Geometrical definition of the problem.
@@ -10437,9 +10476,13 @@ class CAdjEulerSolver : public CSolver {
* \param[in] config - Definition of the particular problem.
* \param[in] val_marker - Surface marker where the boundary condition is applied.
*/
- void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
- unsigned short val_marker);
-
+ void BC_Euler_Wall(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) override;
+
/*!
* \brief Impose the interface boundary condition using the residual.
* \param[in] geometry - Geometrical definition of the problem.
@@ -10507,8 +10550,12 @@ class CAdjEulerSolver : public CSolver {
* \param[in] config - Definition of the particular problem.
* \param[in] val_marker - Surface marker where the boundary condition is applied.
*/
- void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
- unsigned short val_marker);
+ void BC_Sym_Plane(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) override;
/*!
* \brief Impose the boundary condition to the far field using characteristics.
@@ -11161,8 +11208,12 @@ class CWaveSolver : public CSolver {
* \param[in] config - Definition of the particular problem.
* \param[in] val_marker - Surface marker where the boundary condition is applied.
*/
- void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
- unsigned short val_marker);
+ void BC_Euler_Wall(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) override;
/*!
* \brief Impose a Dirichlet boundary condition.
@@ -12356,8 +12407,12 @@ class CTemplateSolver : public CSolver {
* \param[in] config - Definition of the particular problem.
* \param[in] val_marker - Surface marker where the boundary condition is applied.
*/
- void BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
- unsigned short val_marker);
+ void BC_Euler_Wall(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) override;
/*!
* \brief Impose the Navier-Stokes boundary condition (strong).
@@ -12416,8 +12471,12 @@ class CTemplateSolver : public CSolver {
* \param[in] config - Definition of the particular problem.
* \param[in] val_marker - Surface marker where the boundary condition is applied.
*/
- void BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
- unsigned short val_marker);
+ void BC_Sym_Plane(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) override;
/*!
* \brief Impose a custom or verification boundary condition.
diff --git a/SU2_CFD/include/solver_structure.inl b/SU2_CFD/include/solver_structure.inl
index aad715e371ba..28e9c0921f43 100644
--- a/SU2_CFD/include/solver_structure.inl
+++ b/SU2_CFD/include/solver_structure.inl
@@ -660,8 +660,12 @@ inline void CSolver::Evaluate_ObjFunc(CConfig *config) {};
inline void CSolver::Solve_System(CGeometry *geometry, CConfig *config) { }
-inline void CSolver::BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
- unsigned short val_marker) { }
+inline void CSolver::BC_Euler_Wall(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) { }
inline void CSolver::BC_Clamped(CGeometry *geometry, CNumerics *numerics, CConfig *config, unsigned short val_marker) { }
diff --git a/SU2_CFD/src/drivers/CDriver.cpp b/SU2_CFD/src/drivers/CDriver.cpp
index 96b3ede80b0b..33b1482108bb 100644
--- a/SU2_CFD/src/drivers/CDriver.cpp
+++ b/SU2_CFD/src/drivers/CDriver.cpp
@@ -695,6 +695,20 @@ void CDriver::Geometrical_Preprocessing(CConfig* config, CGeometry **&geometry,
if( fem_solver ) Partition_Analysis_FEM(geometry[MESH_0], config);
else Partition_Analysis(geometry[MESH_0], config);
#endif
+
+ /*--- Check if Euler & Symmetry markers are straight/plane. This information
+ is used in the Euler & Symmetry boundary routines. ---*/
+ if((config_container[iZone]->GetnMarker_Euler() != 0 ||
+ config_container[iZone]->GetnMarker_SymWall() != 0) &&
+ !fem_solver) {
+
+ if (rank == MASTER_NODE)
+ cout << "Checking if Euler & Symmetry markers are straight/plane:" << endl;
+
+ for (iMesh = 0; iMesh <= config_container[iZone]->GetnMGLevels(); iMesh++)
+ geometry_container[iZone][iInst][iMesh]->ComputeSurf_Straightness(config_container[iZone], (iMesh==MESH_0) );
+
+ }
}
diff --git a/SU2_CFD/src/integration_structure.cpp b/SU2_CFD/src/integration_structure.cpp
index 09636b84413b..e87782224931 100644
--- a/SU2_CFD/src/integration_structure.cpp
+++ b/SU2_CFD/src/integration_structure.cpp
@@ -113,7 +113,7 @@ void CIntegration::Space_Integration(CGeometry *geometry,
KindBC = config->GetMarker_All_KindBC(iMarker);
switch (KindBC) {
case EULER_WALL:
- solver_container[MainSolver]->BC_Euler_Wall(geometry, solver_container, numerics[CONV_BOUND_TERM], config, iMarker);
+ solver_container[MainSolver]->BC_Euler_Wall(geometry, solver_container, numerics[CONV_BOUND_TERM], numerics[VISC_BOUND_TERM], config, iMarker);
break;
case ACTDISK_INLET:
solver_container[MainSolver]->BC_ActDisk_Inlet(geometry, solver_container, numerics[CONV_BOUND_TERM], numerics[VISC_BOUND_TERM], config, iMarker);
diff --git a/SU2_CFD/src/solver_adjoint_mean.cpp b/SU2_CFD/src/solver_adjoint_mean.cpp
index 8d33d44db44a..436ff3d7a360 100644
--- a/SU2_CFD/src/solver_adjoint_mean.cpp
+++ b/SU2_CFD/src/solver_adjoint_mean.cpp
@@ -2988,7 +2988,14 @@ void CAdjEulerSolver::SetFarfield_AoA(CGeometry *geometry, CSolver **solver_cont
}
-void CAdjEulerSolver::BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config, unsigned short val_marker) {
+
+void CAdjEulerSolver::BC_Euler_Wall(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) {
+
unsigned long iVertex, iPoint;
su2double *d = NULL, *Normal, *U, *Psi_Aux, ProjVel = 0.0, bcn, vn = 0.0, Area, *UnitNormal;
su2double *Velocity, *Psi, Enthalpy = 0.0, sq_vel, phin, phis1, phis2;
diff --git a/SU2_CFD/src/solver_direct_mean.cpp b/SU2_CFD/src/solver_direct_mean.cpp
index 6d2c572994c1..5ac515b4373b 100644
--- a/SU2_CFD/src/solver_direct_mean.cpp
+++ b/SU2_CFD/src/solver_direct_mean.cpp
@@ -7822,183 +7822,296 @@ void CEulerSolver::Evaluate_ObjFunc(CConfig *config) {
}
-void CEulerSolver::BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container,
- CNumerics *numerics, CConfig *config, unsigned short val_marker) {
-
- unsigned short iDim, iVar, jVar, kVar, jDim;
- unsigned long iPoint, iVertex;
- su2double *Normal = NULL, *GridVel = NULL, Area, UnitNormal[3], *NormalArea,
- ProjGridVel = 0.0, turb_ke;
- su2double Density_b, StaticEnergy_b, Enthalpy_b, *Velocity_b, Kappa_b, Chi_b, Energy_b, VelMagnitude2_b, Pressure_b;
- su2double Density_i, *Velocity_i, ProjVelocity_i = 0.0, Energy_i, VelMagnitude2_i;
- su2double **Jacobian_b, **DubDu;
-
- bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT);
- bool tkeNeeded = (config->GetKind_Turb_Model() == SST) || (config->GetKind_Turb_Model() == SST_SUST);
-
- Normal = new su2double[nDim];
- NormalArea = new su2double[nDim];
- Velocity_b = new su2double[nDim];
- Velocity_i = new su2double[nDim];
- Jacobian_b = new su2double*[nVar];
- DubDu = new su2double*[nVar];
- for (iVar = 0; iVar < nVar; iVar++) {
- Jacobian_b[iVar] = new su2double[nVar];
- DubDu[iVar] = new su2double[nVar];
- }
-
- /*--- Loop over all the vertices on this boundary marker ---*/
-
+
+void CEulerSolver::BC_Euler_Wall(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) {
+
+ /*--- Call the equivalent symmetry plane boundary condition. ---*/
+ BC_Sym_Plane(geometry, solver_container, conv_numerics, visc_numerics, config, val_marker);
+
+}
+
+
+void CEulerSolver::BC_Sym_Plane(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) {
+
+ unsigned short iDim, iVar;
+ unsigned long iVertex, iPoint;
+
+ bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT),
+ viscous = config->GetViscous();
+
+ /*--- Allocation of variables necessary for convective fluxes. ---*/
+ su2double Area, ProjVelocity_i,
+ *V_reflected,
+ *V_domain,
+ *Normal = new su2double[nDim],
+ *UnitNormal = new su2double[nDim];
+
+ /*--- Allocation of variables necessary for viscous fluxes. ---*/
+ su2double ProjGradient, ProjNormVelGrad, ProjTangVelGrad, TangentialNorm,
+ *Tangential = new su2double[nDim],
+ *GradNormVel = new su2double[nDim],
+ *GradTangVel = new su2double[nDim];
+
+ /*--- Allocation of primitive gradient arrays for viscous fluxes. ---*/
+ su2double **Grad_Reflected = new su2double*[nPrimVarGrad];
+ for (iVar = 0; iVar < nPrimVarGrad; iVar++)
+ Grad_Reflected[iVar] = new su2double[nDim];
+
+ /*--- Loop over all the vertices on this boundary marker. ---*/
for (iVertex = 0; iVertex < geometry->nVertex[val_marker]; iVertex++) {
- iPoint = geometry->vertex[val_marker][iVertex]->GetNode();
-
- /*--- Check if the node belongs to the domain (i.e, not a halo node) ---*/
-
- if (geometry->node[iPoint]->GetDomain()) {
-
- /*--- Normal vector for this vertex (negative for outward convention) ---*/
-
- geometry->vertex[val_marker][iVertex]->GetNormal(Normal);
-
+
+ if (iVertex == 0 ||
+ geometry->bound_is_straight[val_marker] != true) {
+
+ /*----------------------------------------------------------------------------------------------*/
+ /*--- Preprocessing: ---*/
+ /*--- Compute the unit normal and (in case of viscous flow) a corresponding unit tangential ---*/
+ /*--- to that normal. On a straight(2D)/plane(3D) boundary these two vectors are constant. ---*/
+ /*--- This circumstance is checked in gemoetry->ComputeSurf_Straightness(...) and stored ---*/
+ /*--- such that the recomputation does not occur for each node. On true symmetry planes, the ---*/
+ /*--- normal is constant but this routines is used for Symmetry, Euler-Wall in inviscid flow ---*/
+ /*--- and Euler Wall in viscous flow as well. In the latter curvy boundaries are likely to ---*/
+ /*--- happen. In doubt, the conditional above which checks straightness can be thrown out ---*/
+ /*--- such that the recomputation is done for each node (which comes with a tiny performance ---*/
+ /*--- penalty). ---*/
+ /*----------------------------------------------------------------------------------------------*/
+
+ /*--- Normal vector for a random vertex (zero) on this marker (negate for outward convention). ---*/
+ geometry->vertex[val_marker][iVertex]->GetNormal(Normal);
+ for (iDim = 0; iDim < nDim; iDim++)
+ Normal[iDim] = -Normal[iDim];
+
+ /*--- Compute unit normal, to be used for unit tangential, projected velocity and velocity
+ component gradients. ---*/
Area = 0.0;
- for (iDim = 0; iDim < nDim; iDim++) Area += Normal[iDim]*Normal[iDim];
+ for (iDim = 0; iDim < nDim; iDim++)
+ Area += Normal[iDim]*Normal[iDim];
Area = sqrt (Area);
-
- for (iDim = 0; iDim < nDim; iDim++) {
- NormalArea[iDim] = -Normal[iDim];
+
+ for (iDim = 0; iDim < nDim; iDim++)
UnitNormal[iDim] = -Normal[iDim]/Area;
- }
-
- /*--- Get the state i ---*/
- VelMagnitude2_i = 0.0; ProjVelocity_i = 0.0;
- for (iDim = 0; iDim < nDim; iDim++) {
- Velocity_i[iDim] = node[iPoint]->GetVelocity(iDim);
- ProjVelocity_i += Velocity_i[iDim]*UnitNormal[iDim];
- VelMagnitude2_i += Velocity_i[iDim]*Velocity_i[iDim];
- }
- Density_i = node[iPoint]->GetDensity();
- Energy_i = node[iPoint]->GetEnergy();
+ /*--- Preprocessing: Compute unit tangential, the direction is arbitrary as long as
+ t*n=0 && |t|_2 = 1 ---*/
+ if (viscous) {
+ switch( nDim ) {
+ case 2: {
+ Tangential[0] = -UnitNormal[1];
+ Tangential[1] = UnitNormal[0];
+ break;
+ }
+ case 3: {
+ /*--- n = ai + bj + ck, if |b| > |c| ---*/
+ if( abs(UnitNormal[1]) > abs(UnitNormal[2])) {
+ /*--- t = bi + (c-a)j - bk ---*/
+ Tangential[0] = UnitNormal[1];
+ Tangential[1] = UnitNormal[2] - UnitNormal[0];
+ Tangential[2] = -UnitNormal[1];
+ } else {
+ /*--- t = ci - cj + (b-a)k ---*/
+ Tangential[0] = UnitNormal[2];
+ Tangential[1] = -UnitNormal[2];
+ Tangential[2] = UnitNormal[1] - UnitNormal[0];
+ }
+ /*--- Make it a unit vector. ---*/
+ TangentialNorm = sqrt(pow(Tangential[0],2) + pow(Tangential[1],2) + pow(Tangential[2],2));
+ Tangential[0] = Tangential[0] / TangentialNorm;
+ Tangential[1] = Tangential[1] / TangentialNorm;
+ Tangential[2] = Tangential[2] / TangentialNorm;
+ break;
+ }
+ }// switch
+ }//if viscous
+ }//if bound_is_straight
- /*--- Compute the boundary state b ---*/
+ iPoint = geometry->vertex[val_marker][iVertex]->GetNode();
- for (iDim = 0; iDim < nDim; iDim++)
- Velocity_b[iDim] = Velocity_i[iDim] - ProjVelocity_i * UnitNormal[iDim]; //Force the velocity to be tangential to the surface.
+ /*--- Check if the node belongs to the domain (i.e., not a halo node) ---*/
+ if (geometry->node[iPoint]->GetDomain()) {
- if (dynamic_grid) {
- GridVel = geometry->node[iPoint]->GetGridVel();
- ProjGridVel = 0.0;
- for (iDim = 0; iDim < nDim; iDim++) ProjGridVel += GridVel[iDim]*UnitNormal[iDim];
- for (iDim = 0; iDim < nDim; iDim++) Velocity_b[iDim] += GridVel[iDim] - ProjGridVel * UnitNormal[iDim];
- }
+ /*-------------------------------------------------------------------------------*/
+ /*--- Step 1: For the convective fluxes, create a reflected state of the ---*/
+ /*--- Primitive variables by copying all interior values to the ---*/
+ /*--- reflected. Only the velocity is mirrored along the symmetry ---*/
+ /*--- axis. Based on the Upwind_Residual routine. ---*/
+ /*-------------------------------------------------------------------------------*/
- VelMagnitude2_b = 0.0;
- for (iDim = 0; iDim < nDim; iDim++)
- VelMagnitude2_b += Velocity_b[iDim] * Velocity_b[iDim];
+ /*--- Allocate the reflected state at the symmetry boundary. ---*/
+ V_reflected = GetCharacPrimVar(val_marker, iVertex);
- /*--- Compute the residual ---*/
+ /*--- Grid movement ---*/
+ if (dynamic_grid)
+ conv_numerics->SetGridVel(geometry->node[iPoint]->GetGridVel(),
+ geometry->node[iPoint]->GetGridVel());
- turb_ke = 0.0;
- if (tkeNeeded) turb_ke = solver_container[TURB_SOL]->node[iPoint]->GetSolution(0);
+ /*--- Normal vector for this vertex (negate for outward convention). ---*/
+ geometry->vertex[val_marker][iVertex]->GetNormal(Normal);
+ for (iDim = 0; iDim < nDim; iDim++)
+ Normal[iDim] = -Normal[iDim];
+ conv_numerics->SetNormal(Normal);
- Density_b = Density_i;
- StaticEnergy_b = Energy_i - 0.5 * VelMagnitude2_i - turb_ke;
- Energy_b = StaticEnergy_b + 0.5 * VelMagnitude2_b + turb_ke;
+ /*--- Get current solution at this boundary node ---*/
+ V_domain = node[iPoint]->GetPrimitive();
- FluidModel->SetTDState_rhoe(Density_b, StaticEnergy_b);
- Kappa_b = FluidModel->GetdPde_rho() / Density_b;
- Chi_b = FluidModel->GetdPdrho_e() - Kappa_b * StaticEnergy_b;
- Pressure_b = FluidModel->GetPressure();
- Enthalpy_b = Energy_b + Pressure_b/Density_b;
+ /*--- Set the reflected state based on the boundary node. Scalars are copied and
+ the velocity is mirrored along the symmetry boundary, i.e. the velocity in
+ normal direction is substracted twice. ---*/
+ for(iVar = 0; iVar < nPrimVar; iVar++)
+ V_reflected[iVar] = node[iPoint]->GetPrimitive(iVar);
- numerics->GetInviscidProjFlux(&Density_b, Velocity_b, &Pressure_b, &Enthalpy_b, NormalArea, Residual);
+ /*--- Compute velocity in normal direction (ProjVelcity_i=(v*n)) und substract twice from
+ velocity in normal direction: v_r = v - 2 (v*n)n ---*/
+ ProjVelocity_i = 0.0;
+ for (iDim = 0; iDim < nDim; iDim++)
+ ProjVelocity_i += node[iPoint]->GetVelocity(iDim)*UnitNormal[iDim];
- /*--- Grid velocity correction to the energy term ---*/
- if (dynamic_grid) {
- GridVel = geometry->node[iPoint]->GetGridVel();
- ProjGridVel = 0.0;
- for (iDim = 0; iDim < nDim; iDim++)
- ProjGridVel += GridVel[iDim]*UnitNormal[iDim];
- Residual[nVar-1] += Pressure_b*ProjGridVel*Area;
- }
+ for (iDim = 0; iDim < nDim; iDim++)
+ V_reflected[iDim+1] = node[iPoint]->GetVelocity(iDim) - 2.0 * ProjVelocity_i*UnitNormal[iDim];
- /*--- Add the Reynolds stress tensor contribution ---*/
+ /*--- Set Primitive and Secondary for numerics class. ---*/
+ conv_numerics->SetPrimitive(V_domain, V_reflected);
+ conv_numerics->SetSecondary(node[iPoint]->GetSecondary(),
+ node[iPoint]->GetSecondary());
- if (tkeNeeded) {
- for (iDim = 0; iDim < nDim; iDim++)
- Residual[iDim+1] += (2.0/3.0)*Density_b*turb_ke*NormalArea[iDim];
- }
-
- /*--- Add value to the residual ---*/
-
+ /*--- Compute the residual using an upwind scheme. ---*/
+ conv_numerics->ComputeResidual(Residual, Jacobian_i, Jacobian_j, config);
+
+ /*--- Update residual value ---*/
LinSysRes.AddBlock(iPoint, Residual);
-
- /*--- Form Jacobians for implicit computations ---*/
-
+
+ /*--- Jacobian contribution for implicit integration. ---*/
if (implicit) {
-
- /*--- Initialize Jacobian ---*/
-
- for (iVar = 0; iVar < nVar; iVar++) {
- for (jVar = 0; jVar < nVar; jVar++)
- Jacobian_i[iVar][jVar] = 0.0;
+ Jacobian.AddBlock(iPoint, iPoint, Jacobian_i);
+ }
+
+ if (viscous) {
+
+ /*-------------------------------------------------------------------------------*/
+ /*--- Step 2: The viscous fluxes of the Navier-Stokes equations depend on the ---*/
+ /*--- Primitive variables and their gradients. The viscous numerics ---*/
+ /*--- container is filled just as the convective numerics container, ---*/
+ /*--- but the primitive gradients of the reflected state have to be ---*/
+ /*--- determined additionally such that symmetry at the boundary is ---*/
+ /*--- enforced. Based on the Viscous_Residual routine. ---*/
+ /*-------------------------------------------------------------------------------*/
+
+ /*--- Set the normal vector and the coordinates. ---*/
+ visc_numerics->SetCoord(geometry->node[iPoint]->GetCoord(),
+ geometry->node[iPoint]->GetCoord());
+ visc_numerics->SetNormal(Normal);
+
+ /*--- Set the primitive and Secondary variables. ---*/
+ visc_numerics->SetPrimitive(V_domain, V_reflected);
+ visc_numerics->SetSecondary(node[iPoint]->GetSecondary(),
+ node[iPoint]->GetSecondary());
+
+ /*--- For viscous Fluxes also the gradients of the primitives need to be determined.
+ 1. The gradients of scalars are mirrored along the sym plane just as velocity for the primitives
+ 2. The gradients of the velocity components need more attention, i.e. the gradient of the
+ normal velocity in tangential direction is mirrored and the gradient of the tangential velocity in
+ normal direction is mirrored. ---*/
+
+ /*--- Get gradients of primitives of boundary cell ---*/
+ for (iVar = 0; iVar < nPrimVarGrad; iVar++)
+ for (iDim = 0; iDim < nDim; iDim++)
+ Grad_Reflected[iVar][iDim] = node[iPoint]->GetGradient_Primitive(iVar, iDim);
+
+ /*--- Reflect the gradients for all scalars including the velocity components.
+ The gradients of the velocity components are set later with the
+ correct values: grad(V)_r = grad(V) - 2 [grad(V)*n]n, V beeing any primitive ---*/
+ for (iVar = 0; iVar < nPrimVarGrad; iVar++) {
+ if(iVar == 0 || iVar > nDim) { // Exclude velocity component gradients
+
+ /*--- Compute projected part of the gradient in a dot product ---*/
+ ProjGradient = 0.0;
+ for (iDim = 0; iDim < nDim; iDim++)
+ ProjGradient += Grad_Reflected[iVar][iDim]*UnitNormal[iDim];
+
+ for (iDim = 0; iDim < nDim; iDim++)
+ Grad_Reflected[iVar][iDim] = Grad_Reflected[iVar][iDim] - 2.0 * ProjGradient*UnitNormal[iDim];
+ }
}
-
- /*--- Compute DubDu ---*/
- for (iVar = 0; iVar < nVar; iVar++) {
- for (jVar = 0; jVar < nVar; jVar++)
- DubDu[iVar][jVar]= 0.0;
- DubDu[iVar][iVar]= 1.0;
+ /*--- Compute gradients of normal and tangential velocity:
+ grad(v*n) = grad(v_x) n_x + grad(v_y) n_y (+ grad(v_z) n_z)
+ grad(v*t) = grad(v_x) t_x + grad(v_y) t_y (+ grad(v_z) t_z) ---*/
+ for (iVar = 0; iVar < nDim; iVar++) { // counts gradient components
+ GradNormVel[iVar] = 0.0;
+ GradTangVel[iVar] = 0.0;
+ for (iDim = 0; iDim < nDim; iDim++) { // counts sum with unit normal/tangential
+ GradNormVel[iVar] += Grad_Reflected[iDim+1][iVar] * UnitNormal[iDim];
+ GradTangVel[iVar] += Grad_Reflected[iDim+1][iVar] * Tangential[iDim];
+ }
}
- for (iDim = 0; iDim < nDim; iDim++)
- for (jDim = 0; jDimGetInviscidProjJac(Velocity_b, &Enthalpy_b, &Chi_b, &Kappa_b, NormalArea, 1, Jacobian_b);
+ /*--- Transfer reflected gradients back into the Cartesian Coordinate system:
+ grad(v_x)_r = grad(v*n)_r n_x + grad(v*t)_r t_x
+ grad(v_y)_r = grad(v*n)_r n_y + grad(v*t)_r t_y
+ ( grad(v_z)_r = grad(v*n)_r n_z + grad(v*t)_r t_z ) ---*/
+ for (iVar = 0; iVar < nDim; iVar++) // loops over the velocity component gradients
+ for (iDim = 0; iDim < nDim; iDim++) // loops over the entries of the above
+ Grad_Reflected[iVar+1][iDim] = GradNormVel[iDim]*UnitNormal[iVar] + GradTangVel[iDim]*Tangential[iVar];
- // Check for grid movement, should be already considered since Jacobian b is computed from u_b
- // if (grid_movement) {
- // Jacobian_b[nVar-1][0] += 0.5*ProjGridVel*ProjGridVel;
- // for (iDim = 0; iDim < nDim; iDim++)
- // Jacobian_b[nVar-1][iDim+1] -= ProjGridVel * UnitNormal[iDim];
- // }
+ /*--- Set the primitive gradients of the boundary and reflected state. ---*/
+ visc_numerics->SetPrimVarGradient(node[iPoint]->GetGradient_Primitive(), Grad_Reflected);
- /*--- Compute numerical flux Jacobian at node i ---*/
+ /*--- Turbulent kinetic energy. ---*/
+ if (config->GetKind_Turb_Model() == SST)
+ visc_numerics->SetTurbKineticEnergy(solver_container[TURB_SOL]->node[iPoint]->GetSolution(0),
+ solver_container[TURB_SOL]->node[iPoint]->GetSolution(0));
- for (iVar = 0; iVar < nVar; iVar++)
- for (jVar = 0; jVar < nVar; jVar++)
- for (kVar = 0; kVar < nVar; kVar++)
- Jacobian_i[iVar][jVar] += Jacobian_b[iVar][kVar] * DubDu[kVar][jVar];
+ /*--- Compute and update residual. Note that the viscous shear stress tensor is computed in the
+ following routine based upon the velocity-component gradients. ---*/
+ visc_numerics->ComputeResidual(Residual, Jacobian_i, Jacobian_j, config);
- /*--- Add the Jacobian to the sparse matrix ---*/
+ LinSysRes.SubtractBlock(iPoint, Residual);
- Jacobian.AddBlock(iPoint, iPoint, Jacobian_i);
+ /*--- Jacobian contribution for implicit integration. ---*/
+ if (implicit)
+ Jacobian.SubtractBlock(iPoint, iPoint, Jacobian_i);
+ }//if viscous
+ }//if GetDomain
+ }//for iVertex
- }
- }
- }
-
+ /*--- Free locally allocated memory ---*/
delete [] Normal;
- delete [] NormalArea;
- delete [] Velocity_b;
- delete [] Velocity_i;
- for (iVar = 0; iVar < nVar; iVar++) {
- delete [] Jacobian_b[iVar];
- delete [] DubDu[iVar];
- }
- delete [] Jacobian_b;
- delete [] DubDu;
-
+ delete [] UnitNormal;
+ delete [] Tangential;
+ delete [] GradNormVel;
+ delete [] GradTangVel;
+
+ for (iVar = 0; iVar < nPrimVarGrad; iVar++)
+ delete [] Grad_Reflected[iVar];
+ delete [] Grad_Reflected;
}
+
void CEulerSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics,
CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) {
@@ -11383,257 +11496,6 @@ void CEulerSolver::BC_Engine_Exhaust(CGeometry *geometry, CSolver **solver_conta
}
-void CEulerSolver::BC_Sym_Plane(CGeometry *geometry,
- CSolver **solver_container,
- CNumerics *conv_numerics,
- CNumerics *visc_numerics,
- CConfig *config,
- unsigned short val_marker) {
-
- unsigned short iDim, iVar;
- unsigned long iVertex, iPoint;
-
- bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT);
-
- /*--- Allocation of variables necessary for convective fluxes. ---*/
- su2double Area, ProjVelocity_i;
- su2double *V_reflected, *V_domain;
- su2double *Normal = new su2double[nDim];
- su2double *UnitNormal = new su2double[nDim];
-
- /*--- Allocation of variables necessary for viscous fluxes. ---*/
- su2double ProjGradient, ProjNormVelGrad, ProjTangVelGrad;
- su2double *Tangential = new su2double[nDim];
- su2double *GradNormVel = new su2double[nDim];
- su2double *GradTangVel = new su2double[nDim];
-
- /*--- Allocation of primitive gradient arrays for viscous fluxes. ---*/
- su2double **Grad_Reflected = new su2double*[nPrimVarGrad];
- for (iVar = 0; iVar < nPrimVarGrad; iVar++)
- Grad_Reflected[iVar] = new su2double[nDim];
-
- /*---------------------------------------------------------------------------------------------*/
- /*--- Preprocessing: On a symmetry-plane, the Unit-Normal is constant. Therefore a constant ---*/
- /*--- Unit-Tangential to that Unit-Normal can be prescribed. The computation ---*/
- /*--- of these vectors is done outside the loop (over all Marker-vertices). ---*/
- /*--- The "Normal" in SU2 isan Area-Normal and is most likely not constant ---*/
- /*--- on the symmetry-plane. ---*/
- /*---------------------------------------------------------------------------------------------*/
-
- /*--- Normal vector for a random vertex (zero) on this marker (negate for outward convention). ---*/
- geometry->vertex[val_marker][0]->GetNormal(Normal);
- for (iDim = 0; iDim < nDim; iDim++)
- Normal[iDim] = -Normal[iDim];
-
- /*--- Compute unit normal, to be used for unit tangential, projected velocity and velocity component gradients. ---*/
- Area = 0.0;
- for (iDim = 0; iDim < nDim; iDim++)
- Area += Normal[iDim]*Normal[iDim];
- Area = sqrt (Area);
-
- for (iDim = 0; iDim < nDim; iDim++)
- UnitNormal[iDim] = -Normal[iDim]/Area;
-
- /*--- Preprocessing: Compute unit tangential, the direction is arbitrary as long as t*n=0 ---*/
- if (config->GetViscous()) {
- switch( nDim ) {
- case 2: {
- Tangential[0] = -UnitNormal[1];
- Tangential[1] = UnitNormal[0];
- break;
- }
- case 3: {
- /*--- Find the largest entry index of the UnitNormal, and create Tangential vector based on that. ---*/
- unsigned short Largest, Arbitrary, Zero;
- if (abs(UnitNormal[0]) >= abs(UnitNormal[1]) &&
- abs(UnitNormal[0]) >= abs(UnitNormal[2])) {Largest=0;Arbitrary=1;Zero=2;}
- else if(abs(UnitNormal[1]) >= abs(UnitNormal[0]) &&
- abs(UnitNormal[1]) >= abs(UnitNormal[2])) {Largest=1;Arbitrary=0;Zero=2;}
- else {Largest=2;Arbitrary=1;Zero=0;}
-
- Tangential[Largest] = -UnitNormal[Arbitrary]/sqrt(pow(UnitNormal[Largest],2) + pow(UnitNormal[Arbitrary],2));
- Tangential[Arbitrary] = UnitNormal[Largest]/sqrt(pow(UnitNormal[Largest],2) + pow(UnitNormal[Arbitrary],2));
- Tangential[Zero] = 0.0;
- break;
- }
- }
- }
-
- /*--- Loop over all the vertices on this boundary marker. ---*/
- for (iVertex = 0; iVertex < geometry->nVertex[val_marker]; iVertex++) {
-
- iPoint = geometry->vertex[val_marker][iVertex]->GetNode();
-
- /*--- Check if the node belongs to the domain (i.e., not a halo node) ---*/
- if (geometry->node[iPoint]->GetDomain()) {
-
- /*-------------------------------------------------------------------------------*/
- /*--- Step 1: For the convective fluxes, create a reflected state of the ---*/
- /*--- Primitive variables by copying all interior values to the ---*/
- /*--- reflected. Only the velocity is mirrored along the symmetry ---*/
- /*--- axis. Based on the Upwind_Residual routine. ---*/
- /*-------------------------------------------------------------------------------*/
-
- /*--- Allocate the reflected state at the symmetry boundary. ---*/
- V_reflected = GetCharacPrimVar(val_marker, iVertex);
-
- /*--- Grid movement ---*/
- if (dynamic_grid)
- conv_numerics->SetGridVel(geometry->node[iPoint]->GetGridVel(), geometry->node[iPoint]->GetGridVel());
-
- /*--- Normal vector for this vertex (negate for outward convention). ---*/
- geometry->vertex[val_marker][iVertex]->GetNormal(Normal);
- for (iDim = 0; iDim < nDim; iDim++)
- Normal[iDim] = -Normal[iDim];
- conv_numerics->SetNormal(Normal);
-
- /*--- Get current solution at this boundary node ---*/
- V_domain = node[iPoint]->GetPrimitive();
-
- /*--- Set the reflected state based on the boundary node. Scalars are copied and
- the velocity is mirrored along the symmetry boundary, i.e. the velocity in
- normal direction is substracted twice. ---*/
- for(iVar = 0; iVar < nPrimVar; iVar++)
- V_reflected[iVar] = node[iPoint]->GetPrimitive(iVar);
-
- /*--- Compute velocity in normal direction (ProjVelcity_i=(v*n)) und substract twice from
- velocity in normal direction: v_r = v - 2 (v*n)n ---*/
- ProjVelocity_i = 0.0;
- for (iDim = 0; iDim < nDim; iDim++)
- ProjVelocity_i += node[iPoint]->GetVelocity(iDim)*UnitNormal[iDim];
-
- for (iDim = 0; iDim < nDim; iDim++)
- V_reflected[iDim+1] = node[iPoint]->GetVelocity(iDim) - 2.0 * ProjVelocity_i*UnitNormal[iDim];
-
- /*--- Set Primitive and Secondary for numerics class. ---*/
- conv_numerics->SetPrimitive(V_domain, V_reflected);
- conv_numerics->SetSecondary(node[iPoint]->GetSecondary(), node[iPoint]->GetSecondary());
-
- /*--- Compute the residual using an upwind scheme. ---*/
- conv_numerics->ComputeResidual(Residual, Jacobian_i, Jacobian_j, config);
-
- /*--- Update residual value ---*/
- LinSysRes.AddBlock(iPoint, Residual);
-
- /*--- Jacobian contribution for implicit integration. ---*/
- if (implicit) {
- Jacobian.AddBlock(iPoint, iPoint, Jacobian_i);
- }
-
- if (config->GetViscous()) {
-
- /*-------------------------------------------------------------------------------*/
- /*--- Step 2: The viscous fluxes of the Navier-Stokes equations depend on the ---*/
- /*--- Primitive variables and their gradients. The viscous numerics ---*/
- /*--- container is filled just as the convective numerics container, ---*/
- /*--- but the primitive gradients of the reflected state have to be ---*/
- /*--- determined additionally such that symmetry at the boundary is ---*/
- /*--- enforced. Based on the Viscous_Residual routine. ---*/
- /*-------------------------------------------------------------------------------*/
-
- /*--- Set the normal vector and the coordinates. ---*/
- visc_numerics->SetCoord(geometry->node[iPoint]->GetCoord(), geometry->node[iPoint]->GetCoord());
- visc_numerics->SetNormal(Normal);
-
- /*--- Set the primitive and Secondary variables. ---*/
- visc_numerics->SetPrimitive(V_domain, V_reflected);
- visc_numerics->SetSecondary(node[iPoint]->GetSecondary(), node[iPoint]->GetSecondary());
-
- /*--- For viscous Fluxes also the gradients of the primitives need to be determined.
- 1. The gradients of scalars are mirrored along the sym plane just as velocity for the primitives
- 2. The gradients of the velocity components need more attention, i.e. the gradient of the
- normal velocity in tangential direction is mirrored and the gradient of the tangential velocity in
- normal direction is mirrored. ---*/
-
- /*--- Get gradients of primitives of boundary cell ---*/
- for (iVar = 0; iVar < nPrimVarGrad; iVar++)
- for (iDim = 0; iDim < nDim; iDim++)
- Grad_Reflected[iVar][iDim] = node[iPoint]->GetGradient_Primitive(iVar, iDim);
-
- /*--- Reflect the gradients for all scalars including the velocity components.
- The gradients of the velocity components are set later with the
- correct values: grad(V)_r = grad(V) - 2 [grad(V)*n]n, V beeing any primitive ---*/
- for (iVar = 0; iVar < nPrimVarGrad; iVar++) {
- if(iVar == 0 || iVar > nDim) { // Exclude velocity component gradients
-
- /*--- Compute projected part of the gradient in a dot product ---*/
- ProjGradient = 0.0;
- for (iDim = 0; iDim < nDim; iDim++)
- ProjGradient += Grad_Reflected[iVar][iDim]*UnitNormal[iDim];
-
- for (iDim = 0; iDim < nDim; iDim++)
- Grad_Reflected[iVar][iDim] = Grad_Reflected[iVar][iDim] - 2.0 * ProjGradient*UnitNormal[iDim];
- }
- }
-
- /*--- Compute gradients of normal and tangential velocity:
- grad(v*n) = grad(v_x) n_x + grad(v_y) n_y (+ grad(v_z) n_z)
- grad(v*t) = grad(v_x) t_x + grad(v_y) t_y (+ grad(v_z) t_z) ---*/
- for (iVar = 0; iVar < nDim; iVar++) { // counts gradient components
- GradNormVel[iVar] = 0.0;
- GradTangVel[iVar] = 0.0;
- for (iDim = 0; iDim < nDim; iDim++) { // counts sum with unit normal/tangential
- GradNormVel[iVar] += Grad_Reflected[iDim+1][iVar] * UnitNormal[iDim];
- GradTangVel[iVar] += Grad_Reflected[iDim+1][iVar] * Tangential[iDim];
- }
- }
-
- /*--- Refelect gradients in tangential and normal direction by substracting the normal/tangential
- component twice, just as done with velocity above.
- grad(v*n)_r = grad(v*n) - 2 {grad([v*n])*t}t
- grad(v*t)_r = grad(v*t) - 2 {grad([v*t])*n}n ---*/
- ProjNormVelGrad = 0.0;
- ProjTangVelGrad = 0.0;
- for (iDim = 0; iDim < nDim; iDim++) {
- ProjNormVelGrad += GradNormVel[iDim]*Tangential[iDim]; //grad([v*n])*t
- ProjTangVelGrad += GradTangVel[iDim]*UnitNormal[iDim]; //grad([v*t])*n
- }
-
- for (iDim = 0; iDim < nDim; iDim++) {
- GradNormVel[iDim] = GradNormVel[iDim] - 2.0 * ProjNormVelGrad * Tangential[iDim];
- GradTangVel[iDim] = GradTangVel[iDim] - 2.0 * ProjTangVelGrad * UnitNormal[iDim];
- }
-
- /*--- Transfer reflected gradients back into the Cartesian Coordinate system:
- grad(v_x)_r = grad(v*n)_r n_x + grad(v*t)_r t_x
- grad(v_y)_r = grad(v*n)_r n_y + grad(v*t)_r t_y
- ( grad(v_z)_r = grad(v*n)_r n_z + grad(v*t)_r t_z ) ---*/
- for (iVar = 0; iVar < nDim; iVar++) // loops over the velocity component gradients
- for (iDim = 0; iDim < nDim; iDim++) // loops over the entries of the above
- Grad_Reflected[iVar+1][iDim] = GradNormVel[iDim]*UnitNormal[iVar] + GradTangVel[iDim]*Tangential[iVar];
-
- /*--- Set the primitive gradients of the boundary and reflected state. ---*/
- visc_numerics->SetPrimVarGradient(node[iPoint]->GetGradient_Primitive(), Grad_Reflected);
-
- /*--- Turbulent kinetic energy. ---*/
- if ((config->GetKind_Turb_Model() == SST) || (config->GetKind_Turb_Model() == SST_SUST))
- visc_numerics->SetTurbKineticEnergy(solver_container[TURB_SOL]->node[iPoint]->GetSolution(0),
- solver_container[TURB_SOL]->node[iPoint]->GetSolution(0));
-
- /*--- Compute and update residual. Note that the viscous shear stress tensor is computed in the
- following routine based upon the velocity-component gradients. ---*/
- visc_numerics->ComputeResidual(Residual, Jacobian_i, Jacobian_j, config);
-
- LinSysRes.SubtractBlock(iPoint, Residual);
-
- /*--- Jacobian contribution for implicit integration. ---*/
- if (implicit)
- Jacobian.SubtractBlock(iPoint, iPoint, Jacobian_i);
- }
- }
- }
-
- /*--- Free locally allocated memory ---*/
- delete [] Normal;
- delete [] UnitNormal;
- delete [] Tangential;
- delete [] GradNormVel;
- delete [] GradTangVel;
-
- for (iVar = 0; iVar < nPrimVarGrad; iVar++)
- delete [] Grad_Reflected[iVar];
- delete [] Grad_Reflected;
-}
void CEulerSolver::BC_Fluid_Interface(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
CConfig *config) {
diff --git a/SU2_CFD/src/solver_direct_mean_inc.cpp b/SU2_CFD/src/solver_direct_mean_inc.cpp
index d45d0aaafdce..cf15c1b7bc1a 100644
--- a/SU2_CFD/src/solver_direct_mean_inc.cpp
+++ b/SU2_CFD/src/solver_direct_mean_inc.cpp
@@ -4607,87 +4607,6 @@ void CIncEulerSolver::SetPreconditioner(CConfig *config, unsigned long iPoint) {
}
-void CIncEulerSolver::BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container,
- CNumerics *numerics, CConfig *config, unsigned short val_marker) {
-
- unsigned short iDim, iVar, jVar;
- unsigned long iPoint, iVertex;
-
- su2double Density = 0.0, Pressure = 0.0, *Normal = NULL, Area, *NormalArea, turb_ke;
-
- bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT);
- bool tkeNeeded = (((config->GetKind_Solver() == INC_RANS ) || (config->GetKind_Solver() == DISC_ADJ_INC_RANS)) &&
- ((config->GetKind_Turb_Model() == SST) || (config->GetKind_Turb_Model() == SST_SUST)));
-
- Normal = new su2double[nDim];
- NormalArea = new su2double[nDim];
-
- /*--- Loop over all the vertices on this boundary marker ---*/
-
- for (iVertex = 0; iVertex < geometry->nVertex[val_marker]; iVertex++) {
- iPoint = geometry->vertex[val_marker][iVertex]->GetNode();
-
- /*--- Check if the node belongs to the domain (i.e, not a halo node) ---*/
-
- if (geometry->node[iPoint]->GetDomain()) {
-
- /*--- Normal vector for this vertex (negative for outward convention) ---*/
-
- geometry->vertex[val_marker][iVertex]->GetNormal(Normal);
-
- Area = 0.0;
- for (iDim = 0; iDim < nDim; iDim++) Area += Normal[iDim]*Normal[iDim];
- Area = sqrt (Area);
-
- for (iDim = 0; iDim < nDim; iDim++) {
- NormalArea[iDim] = -Normal[iDim];
- }
-
- /*--- Compute the residual ---*/
-
- Pressure = node[iPoint]->GetPressure();
- Density = node[iPoint]->GetDensity();
-
- Residual[0] = 0.0;
- for (iDim = 0; iDim < nDim; iDim++)
- Residual[iDim+1] = Pressure*NormalArea[iDim];
- Residual[nDim+1] = 0.0;
-
- /*--- Add the Reynolds stress tensor contribution ---*/
-
- if (tkeNeeded) {
- turb_ke = solver_container[TURB_SOL]->node[iPoint]->GetSolution(0);
- for (iDim = 0; iDim < nDim; iDim++)
- Residual[iDim+1] += (2.0/3.0)*Density*turb_ke*NormalArea[iDim];
- }
-
- /*--- Add value to the residual ---*/
-
- LinSysRes.AddBlock(iPoint, Residual);
-
- /*--- Form Jacobians for implicit computations ---*/
-
- if (implicit) {
-
- /*--- Initialize Jacobian ---*/
-
- for (iVar = 0; iVar < nVar; iVar++) {
- for (jVar = 0; jVar < nVar; jVar++)
- Jacobian_i[iVar][jVar] = 0.0;
- }
-
- for (iDim = 0; iDim < nDim; iDim++)
- Jacobian_i[iDim+1][0] = -Normal[iDim];
- Jacobian.AddBlock(iPoint, iPoint, Jacobian_i);
-
- }
- }
- }
-
- delete [] Normal;
- delete [] NormalArea;
-
-}
void CIncEulerSolver::BC_Far_Field(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics,
CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) {
@@ -5284,6 +5203,20 @@ void CIncEulerSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container,
}
+
+void CIncEulerSolver::BC_Euler_Wall(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) {
+
+ /*--- Call the equivalent symmetry plane boundary condition. ---*/
+ BC_Sym_Plane(geometry, solver_container, conv_numerics, visc_numerics, config, val_marker);
+
+}
+
+
void CIncEulerSolver::BC_Sym_Plane(CGeometry *geometry,
CSolver **solver_container,
CNumerics *conv_numerics,
@@ -5294,75 +5227,94 @@ void CIncEulerSolver::BC_Sym_Plane(CGeometry *geometry,
unsigned short iDim, iVar;
unsigned long iVertex, iPoint;
- bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT);
+ bool implicit = (config->GetKind_TimeIntScheme_Flow() == EULER_IMPLICIT),
+ viscous = config->GetViscous();
/*--- Allocation of variables necessary for convective fluxes. ---*/
- su2double Area, ProjVelocity_i;
- su2double *V_reflected, *V_domain;
- su2double *Normal = new su2double[nDim];
- su2double *UnitNormal = new su2double[nDim];
+ su2double Area, ProjVelocity_i,
+ *V_reflected,
+ *V_domain,
+ *Normal = new su2double[nDim],
+ *UnitNormal = new su2double[nDim];
/*--- Allocation of variables necessary for viscous fluxes. ---*/
- su2double ProjGradient, ProjNormVelGrad, ProjTangVelGrad;
- su2double *Tangential = new su2double[nDim];
- su2double *GradNormVel = new su2double[nDim];
- su2double *GradTangVel = new su2double[nDim];
+ su2double ProjGradient, ProjNormVelGrad, ProjTangVelGrad, TangentialNorm,
+ *Tangential = new su2double[nDim],
+ *GradNormVel = new su2double[nDim],
+ *GradTangVel = new su2double[nDim];
/*--- Allocation of primitive gradient arrays for viscous fluxes. ---*/
su2double **Grad_Reflected = new su2double*[nPrimVarGrad];
for (iVar = 0; iVar < nPrimVarGrad; iVar++)
Grad_Reflected[iVar] = new su2double[nDim];
- /*---------------------------------------------------------------------------------------------*/
- /*--- Preprocessing: On a symmetry-plane, the Unit-Normal is constant. Therefore a constant ---*/
- /*--- Unit-Tangential to that Unit-Normal can be prescribed. The computation ---*/
- /*--- of these vectors is done outside the loop (over all Marker-vertices). ---*/
- /*--- The "Normal" in SU2 isan Area-Normal and is most likely not constant ---*/
- /*--- on the symmetry-plane. ---*/
- /*---------------------------------------------------------------------------------------------*/
-
- /*--- Normal vector for a random vertex (zero) on this marker (negate for outward convention). ---*/
- geometry->vertex[val_marker][0]->GetNormal(Normal);
- for (iDim = 0; iDim < nDim; iDim++)
- Normal[iDim] = -Normal[iDim];
-
- /*--- Compute unit normal, to be used for unit tangential, projected velocity and velocity component gradients. ---*/
- Area = 0.0;
- for (iDim = 0; iDim < nDim; iDim++)
- Area += Normal[iDim]*Normal[iDim];
- Area = sqrt (Area);
-
- for (iDim = 0; iDim < nDim; iDim++)
- UnitNormal[iDim] = -Normal[iDim]/Area;
-
- /*--- Preprocessing: Compute unit tangential, the direction is arbitrary as long as t*n=0 ---*/
- if (config->GetViscous()) {
- switch( nDim ) {
- case 2: {
- Tangential[0] = -UnitNormal[1];
- Tangential[1] = UnitNormal[0];
- break;
- }
- case 3: {
- /*--- Find the largest entry index of the UnitNormal, and create Tangential vector based on that. ---*/
- unsigned short Largest, Arbitrary, Zero;
- if (abs(UnitNormal[0]) >= abs(UnitNormal[1]) &&
- abs(UnitNormal[0]) >= abs(UnitNormal[2])) {Largest=0;Arbitrary=1;Zero=2;}
- else if(abs(UnitNormal[1]) >= abs(UnitNormal[0]) &&
- abs(UnitNormal[1]) >= abs(UnitNormal[2])) {Largest=1;Arbitrary=0;Zero=2;}
- else {Largest=2;Arbitrary=1;Zero=0;}
-
- Tangential[Largest] = -UnitNormal[Arbitrary]/sqrt(pow(UnitNormal[Largest],2) + pow(UnitNormal[Arbitrary],2));
- Tangential[Arbitrary] = UnitNormal[Largest]/sqrt(pow(UnitNormal[Largest],2) + pow(UnitNormal[Arbitrary],2));
- Tangential[Zero] = 0.0;
- break;
- }
- }
- }
-
/*--- Loop over all the vertices on this boundary marker. ---*/
for (iVertex = 0; iVertex < geometry->nVertex[val_marker]; iVertex++) {
+ if (iVertex == 0 ||
+ geometry->bound_is_straight[val_marker] != true) {
+
+ /*----------------------------------------------------------------------------------------------*/
+ /*--- Preprocessing: ---*/
+ /*--- Compute the unit normal and (in case of viscous flow) a corresponding unit tangential ---*/
+ /*--- to that normal. On a straight(2D)/plane(3D) boundary these two vectors are constant. ---*/
+ /*--- This circumstance is checked in gemoetry->ComputeSurf_Straightness(...) and stored ---*/
+ /*--- such that the recomputation does not occur for each node. On true symmetry planes, the ---*/
+ /*--- normal is constant but this routines is used for Symmetry, Euler-Wall in inviscid flow ---*/
+ /*--- and Euler Wall in viscous flow as well. In the latter curvy boundaries are likely to ---*/
+ /*--- happen. In doubt, the conditional above which checks straightness can be thrown out ---*/
+ /*--- such that the recomputation is done for each node (which comes with a tiny performance ---*/
+ /*--- penalty). ---*/
+ /*----------------------------------------------------------------------------------------------*/
+
+ /*--- Normal vector for a random vertex (zero) on this marker (negate for outward convention). ---*/
+ geometry->vertex[val_marker][iVertex]->GetNormal(Normal);
+ for (iDim = 0; iDim < nDim; iDim++)
+ Normal[iDim] = -Normal[iDim];
+
+ /*--- Compute unit normal, to be used for unit tangential, projected velocity and velocity
+ component gradients. ---*/
+ Area = 0.0;
+ for (iDim = 0; iDim < nDim; iDim++)
+ Area += Normal[iDim]*Normal[iDim];
+ Area = sqrt (Area);
+
+ for (iDim = 0; iDim < nDim; iDim++)
+ UnitNormal[iDim] = -Normal[iDim]/Area;
+
+ /*--- Preprocessing: Compute unit tangential, the direction is arbitrary as long as
+ t*n=0 && |t|_2 = 1 ---*/
+ if (viscous) {
+ switch( nDim ) {
+ case 2: {
+ Tangential[0] = -UnitNormal[1];
+ Tangential[1] = UnitNormal[0];
+ break;
+ }
+ case 3: {
+ /*--- n = ai + bj + ck, if |b| > |c| ---*/
+ if( abs(UnitNormal[1]) > abs(UnitNormal[2])) {
+ /*--- t = bi + (c-a)j - bk ---*/
+ Tangential[0] = UnitNormal[1];
+ Tangential[1] = UnitNormal[2] - UnitNormal[0];
+ Tangential[2] = -UnitNormal[1];
+ } else {
+ /*--- t = ci - cj + (b-a)k ---*/
+ Tangential[0] = UnitNormal[2];
+ Tangential[1] = -UnitNormal[2];
+ Tangential[2] = UnitNormal[1] - UnitNormal[0];
+ }
+ /*--- Make it a unit vector. ---*/
+ TangentialNorm = sqrt(pow(Tangential[0],2) + pow(Tangential[1],2) + pow(Tangential[2],2));
+ Tangential[0] = Tangential[0] / TangentialNorm;
+ Tangential[1] = Tangential[1] / TangentialNorm;
+ Tangential[2] = Tangential[2] / TangentialNorm;
+ break;
+ }
+ }// switch
+ }//if viscous
+ }//if bound_is_straight
+
iPoint = geometry->vertex[val_marker][iVertex]->GetNode();
/*--- Check if the node belongs to the domain (i.e., not a halo node) ---*/
@@ -5377,7 +5329,7 @@ void CIncEulerSolver::BC_Sym_Plane(CGeometry *geometry,
/*--- Allocate the reflected state at the symmetry boundary. ---*/
V_reflected = GetCharacPrimVar(val_marker, iVertex);
-
+
/*--- Grid movement ---*/
if (dynamic_grid)
conv_numerics->SetGridVel(geometry->node[iPoint]->GetGridVel(), geometry->node[iPoint]->GetGridVel());
@@ -5408,12 +5360,13 @@ void CIncEulerSolver::BC_Sym_Plane(CGeometry *geometry,
/*--- Set Primitive and Secondary for numerics class. ---*/
conv_numerics->SetPrimitive(V_domain, V_reflected);
- conv_numerics->SetSecondary(node[iPoint]->GetSecondary(), node[iPoint]->GetSecondary());
-
+ conv_numerics->SetSecondary(node[iPoint]->GetSecondary(),
+ node[iPoint]->GetSecondary());
+
/*--- Compute the residual using an upwind scheme. ---*/
conv_numerics->ComputeResidual(Residual, Jacobian_i, Jacobian_j, config);
- /*--- Update residual value ---*/
+ /*--- Update residual value ---*/
LinSysRes.AddBlock(iPoint, Residual);
/*--- Jacobian contribution for implicit integration. ---*/
@@ -5421,8 +5374,8 @@ void CIncEulerSolver::BC_Sym_Plane(CGeometry *geometry,
Jacobian.AddBlock(iPoint, iPoint, Jacobian_i);
}
- if (config->GetViscous()) {
-
+ if (viscous) {
+
/*-------------------------------------------------------------------------------*/
/*--- Step 2: The viscous fluxes of the Navier-Stokes equations depend on the ---*/
/*--- Primitive variables and their gradients. The viscous numerics ---*/
@@ -5433,12 +5386,14 @@ void CIncEulerSolver::BC_Sym_Plane(CGeometry *geometry,
/*-------------------------------------------------------------------------------*/
/*--- Set the normal vector and the coordinates. ---*/
- visc_numerics->SetCoord(geometry->node[iPoint]->GetCoord(), geometry->node[iPoint]->GetCoord());
+ visc_numerics->SetCoord(geometry->node[iPoint]->GetCoord(),
+ geometry->node[iPoint]->GetCoord());
visc_numerics->SetNormal(Normal);
- /*--- Set the primitive and Secondary variables. ---*/
+ /*--- Set the primitive and Secondary variables. ---*/
visc_numerics->SetPrimitive(V_domain, V_reflected);
- visc_numerics->SetSecondary(node[iPoint]->GetSecondary(), node[iPoint]->GetSecondary());
+ visc_numerics->SetSecondary(node[iPoint]->GetSecondary(),
+ node[iPoint]->GetSecondary());
/*--- For viscous Fluxes also the gradients of the primitives need to be determined.
1. The gradients of scalars are mirrored along the sym plane just as velocity for the primitives
@@ -5446,7 +5401,7 @@ void CIncEulerSolver::BC_Sym_Plane(CGeometry *geometry,
normal velocity in tangential direction is mirrored and the gradient of the tangential velocity in
normal direction is mirrored. ---*/
- /*--- Get gradients of primitives of boundary cell ---*/
+ /*--- Get gradients of primitives of boundary cell ---*/
for (iVar = 0; iVar < nPrimVarGrad; iVar++)
for (iDim = 0; iDim < nDim; iDim++)
Grad_Reflected[iVar][iDim] = node[iPoint]->GetGradient_Primitive(iVar, iDim);
@@ -5520,9 +5475,9 @@ void CIncEulerSolver::BC_Sym_Plane(CGeometry *geometry,
/*--- Jacobian contribution for implicit integration. ---*/
if (implicit)
Jacobian.SubtractBlock(iPoint, iPoint, Jacobian_i);
- }
- }
- }
+ }//if viscous
+ }//if GetDomain
+ }//for iVertex
/*--- Free locally allocated memory ---*/
delete [] Normal;
@@ -5536,6 +5491,7 @@ void CIncEulerSolver::BC_Sym_Plane(CGeometry *geometry,
delete [] Grad_Reflected;
}
+
void CIncEulerSolver::BC_Fluid_Interface(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics,
CConfig *config) {
diff --git a/SU2_CFD/src/solver_direct_turbulent.cpp b/SU2_CFD/src/solver_direct_turbulent.cpp
index 122be49736cb..8f9d866fb150 100644
--- a/SU2_CFD/src/solver_direct_turbulent.cpp
+++ b/SU2_CFD/src/solver_direct_turbulent.cpp
@@ -257,14 +257,23 @@ void CTurbSolver::Viscous_Residual(CGeometry *geometry, CSolver **solver_contain
}
-void CTurbSolver::BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) {
+void CTurbSolver::BC_Sym_Plane(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) {
/*--- Convective and viscous fluxes across symmetry plane are equal to zero. ---*/
}
-void CTurbSolver::BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container,
- CNumerics *numerics, CConfig *config, unsigned short val_marker) {
+void CTurbSolver::BC_Euler_Wall(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) {
/*--- Convective fluxes across euler wall are equal to zero. ---*/
diff --git a/SU2_CFD/src/solver_template.cpp b/SU2_CFD/src/solver_template.cpp
index 7e8132b348ae..015600e4694d 100644
--- a/SU2_CFD/src/solver_template.cpp
+++ b/SU2_CFD/src/solver_template.cpp
@@ -59,8 +59,12 @@ void CTemplateSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont
void CTemplateSolver::Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,
CConfig *config, unsigned short iMesh) { }
-void CTemplateSolver::BC_Euler_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics, CConfig *config,
- unsigned short val_marker) { }
+void CTemplateSolver::BC_Euler_Wall(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) { }
void CTemplateSolver::BC_HeatFlux_Wall(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { }
@@ -73,8 +77,12 @@ void CTemplateSolver::BC_Inlet(CGeometry *geometry, CSolver **solver_container,
void CTemplateSolver::BC_Outlet(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
unsigned short val_marker) { }
-void CTemplateSolver::BC_Sym_Plane(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config,
- unsigned short val_marker) { }
+void CTemplateSolver::BC_Sym_Plane(CGeometry *geometry,
+ CSolver **solver_container,
+ CNumerics *conv_numerics,
+ CNumerics *visc_numerics,
+ CConfig *config,
+ unsigned short val_marker) { }
void CTemplateSolver::BC_Custom(CGeometry *geometry, CSolver **solver_container, CNumerics *conv_numerics, CNumerics *visc_numerics, CConfig *config, unsigned short val_marker) { }
diff --git a/TestCases/cont_adj_euler/naca0012/of_grad_cd.dat.ref b/TestCases/cont_adj_euler/naca0012/of_grad_cd.dat.ref
index b88c2809b83d..51834640461c 100644
--- a/TestCases/cont_adj_euler/naca0012/of_grad_cd.dat.ref
+++ b/TestCases/cont_adj_euler/naca0012/of_grad_cd.dat.ref
@@ -1,39 +1,39 @@
VARIABLES="VARIABLE" , "GRADIENT" , "FINDIFF_STEP"
- 0 , 0.0121759 , 0.0001
- 1 , 0.0272865 , 0.0001
- 2 , 0.0304952 , 0.0001
- 3 , 0.0225641 , 0.0001
- 4 , 0.00189418 , 0.0001
- 5 , -0.0324515 , 0.0001
- 6 , -0.0790271 , 0.0001
- 7 , -0.133195 , 0.0001
- 8 , -0.187623 , 0.0001
- 9 , -0.234388 , 0.0001
- 10 , -0.268272 , 0.0001
- 11 , -0.289773 , 0.0001
- 12 , -0.305643 , 0.0001
- 13 , -0.325714 , 0.0001
- 14 , -0.357958 , 0.0001
- 15 , -0.406806 , 0.0001
- 16 , -0.478524 , 0.0001
- 17 , -0.594511 , 0.0001
- 18 , -0.846423 , 0.0001
- 19 , 0.571036 , 0.0001
- 20 , 1.14298 , 0.0001
- 21 , 1.49778 , 0.0001
- 22 , 1.62282 , 0.0001
- 23 , 1.54317 , 0.0001
- 24 , 1.30915 , 0.0001
- 25 , 0.983187 , 0.0001
- 26 , 0.627318 , 0.0001
- 27 , 0.293707 , 0.0001
- 28 , 0.0200366 , 0.0001
- 29 , -0.170135 , 0.0001
- 30 , -0.263931 , 0.0001
- 31 , -0.256613 , 0.0001
- 32 , -0.154709 , 0.0001
- 33 , 0.0140548 , 0.0001
- 34 , 0.196136 , 0.0001
- 35 , 0.341631 , 0.0001
- 36 , 0.466779 , 0.0001
- 37 , 0.680573 , 0.0001
+ 0 , 0.00547874 , 0.0001
+ 1 , 0.0243474 , 0.0001
+ 2 , 0.0300065 , 0.0001
+ 3 , 0.0234715 , 0.0001
+ 4 , 0.00345121 , 0.0001
+ 5 , -0.0307434 , 0.0001
+ 6 , -0.0774773 , 0.0001
+ 7 , -0.13197 , 0.0001
+ 8 , -0.186782 , 0.0001
+ 9 , -0.233914 , 0.0001
+ 10 , -0.268098 , 0.0001
+ 11 , -0.289809 , 0.0001
+ 12 , -0.305806 , 0.0001
+ 13 , -0.325957 , 0.0001
+ 14 , -0.358284 , 0.0001
+ 15 , -0.407284 , 0.0001
+ 16 , -0.479307 , 0.0001
+ 17 , -0.595933 , 0.0001
+ 18 , -0.850309 , 0.0001
+ 19 , 0.566108 , 0.0001
+ 20 , 1.14466 , 0.0001
+ 21 , 1.50253 , 0.0001
+ 22 , 1.62876 , 0.0001
+ 23 , 1.54945 , 0.0001
+ 24 , 1.31552 , 0.0001
+ 25 , 0.989768 , 0.0001
+ 26 , 0.634351 , 0.0001
+ 27 , 0.301435 , 0.0001
+ 28 , 0.0285559 , 0.0001
+ 29 , -0.160999 , 0.0001
+ 30 , -0.254739 , 0.0001
+ 31 , -0.248341 , 0.0001
+ 32 , -0.148559 , 0.0001
+ 33 , 0.0172426 , 0.0001
+ 34 , 0.196759 , 0.0001
+ 35 , 0.341483 , 0.0001
+ 36 , 0.467392 , 0.0001
+ 37 , 0.683048 , 0.0001
diff --git a/TestCases/cont_adj_euler/naca0012/of_grad_cd_disc.dat.ref b/TestCases/cont_adj_euler/naca0012/of_grad_cd_disc.dat.ref
index 3467d9e06439..210df4b67cbd 100644
--- a/TestCases/cont_adj_euler/naca0012/of_grad_cd_disc.dat.ref
+++ b/TestCases/cont_adj_euler/naca0012/of_grad_cd_disc.dat.ref
@@ -1,39 +1,39 @@
VARIABLES="VARIABLE" , "GRADIENT" , "FINDIFF_STEP"
- 0 , -2052.52 , 0.001
- 1 , -8320.78 , 0.001
- 2 , -12227.1 , 0.001
- 3 , -12850.1 , 0.001
- 4 , -10995.3 , 0.001
- 5 , -7836.79 , 0.001
- 6 , -4408.79 , 0.001
- 7 , -1413.15 , 0.001
- 8 , 798.27 , 0.001
- 9 , 2134.65 , 0.001
- 10 , 2626.3 , 0.001
- 11 , 2290.98 , 0.001
- 12 , 1058.21 , 0.001
- 13 , -1219.36 , 0.001
- 14 , -4655.34 , 0.001
- 15 , -9067.26 , 0.001
- 16 , -13513.9 , 0.001
- 17 , -16619.1 , 0.001
- 18 , -24152.9 , 0.001
- 19 , -12083.3 , 0.001
- 20 , -21953.5 , 0.001
- 21 , -23671.8 , 0.001
- 22 , -22582.5 , 0.001
- 23 , -22107.7 , 0.001
- 24 , -23484.5 , 0.001
- 25 , -26233.9 , 0.001
- 26 , -28788.0 , 0.001
- 27 , -29109.6 , 0.001
- 28 , -25275.1 , 0.001
- 29 , -16096.3 , 0.001
- 30 , -1907.05 , 0.001
- 31 , 14485.4 , 0.001
- 32 , 27250.7 , 0.001
- 33 , 29092.1 , 0.001
- 34 , 16868.4 , 0.001
- 35 , -2634.53 , 0.001
- 36 , -19318.5 , 0.001
- 37 , -19575.4 , 0.001
+ 0 , -1501.32 , 0.001
+ 1 , -8853.97 , 0.001
+ 2 , -13557.1 , 0.001
+ 3 , -14434.8 , 0.001
+ 4 , -12487.9 , 0.001
+ 5 , -9091.29 , 0.001
+ 6 , -5397.59 , 0.001
+ 7 , -2149.2 , 0.001
+ 8 , 309.712 , 0.001
+ 9 , 1914.46 , 0.001
+ 10 , 2719.69 , 0.001
+ 11 , 2757.37 , 0.001
+ 12 , 1963.39 , 0.001
+ 13 , 201.471 , 0.001
+ 14 , -2599.03 , 0.001
+ 15 , -6126.72 , 0.001
+ 16 , -9129.12 , 0.001
+ 17 , -9984.02 , 0.001
+ 18 , -18443.1 , 0.001
+ 19 , -9934.24 , 0.001
+ 20 , -20497.1 , 0.001
+ 21 , -22358.1 , 0.001
+ 22 , -21058.4 , 0.001
+ 23 , -20260.3 , 0.001
+ 24 , -21304.1 , 0.001
+ 25 , -23739.6 , 0.001
+ 26 , -26013.5 , 0.001
+ 27 , -26125.3 , 0.001
+ 28 , -22227.0 , 0.001
+ 29 , -13248.5 , 0.001
+ 30 , 328.328 , 0.001
+ 31 , 15562.7 , 0.001
+ 32 , 26605.3 , 0.001
+ 33 , 26411.8 , 0.001
+ 34 , 12479.9 , 0.001
+ 35 , -7567.83 , 0.001
+ 36 , -23250.2 , 0.001
+ 37 , -23417.7 , 0.001
diff --git a/TestCases/cont_adj_euler/naca0012/of_grad_directdiff.dat.ref b/TestCases/cont_adj_euler/naca0012/of_grad_directdiff.dat.ref
index f85b494f4506..cc4b240882c1 100644
--- a/TestCases/cont_adj_euler/naca0012/of_grad_directdiff.dat.ref
+++ b/TestCases/cont_adj_euler/naca0012/of_grad_directdiff.dat.ref
@@ -1,4 +1,4 @@
VARIABLES="VARIABLE" , "MASS_FLOW_IN" , "MOMENT_Z" , "FLOW_ANGLE_OUT", "MASS_FLOW_OUT" , "FLOW_ANGLE_IN" , "FORCE_Z" , "FORCE_Y" , "FORCE_X" , "TOTAL_EFFICIENCY", "TOTAL_STATIC_EFFICIENCY", "PRESSURE_RATIO", "EFFICIENCY" , "DRAG" , "LIFT" , "TOTAL_ENTHALPY_OUT", "TOTAL_PRESSURE_LOSS", "MOMENT_Y" , "MOMENT_X" , "SIDEFORCE" , "ENTHALPY_OUT" , "KINETIC_ENERGY_LOSS", "CUSTOM_OBJFUNC", "HEAT" , "MAX_HEAT" , "SURFACE_UNIFORMITY", "SURFACE_SECONDARY", "SURFACE_MOM_DISTORTION", "SURFACE_SECOND_OVER_UNIFORM", "SURFACE_PRESSURE_DROP"
- 0 , 0.0 , 1.24882462 , 0.0 , 0.0 , 0.0 , 0.0 , -1.44670747 , 0.258530803 , 0.0 , 0.0 , 0.0 , -114.851435 , 0.226909522 , -1.45200301 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0
- 1 , 0.0 , 1.07681696 , 0.0 , 0.0 , 0.0 , 0.0 , -2.31689972 , 0.439484635 , 0.0 , 0.0 , 0.0 , -191.034982 , 0.388837148 , -2.32593567 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0
- 2 , 0.0 , 0.647287276 , 0.0 , 0.0 , 0.0 , 0.0 , -3.05682473 , 0.594572427 , 0.0 , 0.0 , 0.0 , -256.155045 , 0.527746655 , -3.06906782 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0
+ 0 , 0.0 , 1.21384701 , 0.0 , 0.0 , 0.0 , 0.0 , -1.54043628 , 0.27091816 , 0.0 , 0.0 , 0.0 , -114.312563 , 0.237249248 , -1.54597975 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0
+ 1 , 0.0 , 1.04907745 , 0.0 , 0.0 , 0.0 , 0.0 , -2.37702643 , 0.45451385 , 0.0 , 0.0 , 0.0 , -185.827593 , 0.40255113 , -2.38637593 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0
+ 2 , 0.0 , 0.629966754 , 0.0 , 0.0 , 0.0 , 0.0 , -3.0896926 , 0.607117928 , 0.0 , 0.0 , 0.0 , -245.76716 , 0.539572161 , -3.10220155 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0
diff --git a/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.ref b/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.ref
index 1afe0fdeb101..a82dace8db71 100644
--- a/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.ref
+++ b/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.ref
@@ -1,5 +1,5 @@
VARIABLES="VARIABLE" , "GRADIENT" , "FINDIFF_STEP"
- 0 , 0.0070081 , 0.0001
- 1 , 0.0047121 , 0.0001
- 2 , 0.00242381 , 0.0001
- 3 , 0.000883684 , 0.0001
+ 0 , 0.00767938 , 0.0001
+ 1 , 0.00499129 , 0.0001
+ 2 , 0.00249092 , 0.0001
+ 3 , 0.000902095 , 0.0001
diff --git a/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.refdiscrete b/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.refdiscrete
index 3bb93012a947..46d444a7a5d7 100644
--- a/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.refdiscrete
+++ b/TestCases/cont_adj_euler/wedge/of_grad_combo.dat.refdiscrete
@@ -1,5 +1,5 @@
VARIABLES="VARIABLE" , "GRADIENT" , "FINDIFF_STEP"
- 0 , 0.00651231 , 0.001
- 1 , 0.00475766 , 0.001
- 2 , 0.00253169 , 0.001
- 3 , 0.000955655 , 0.001
+ 0 , 0.00731435 , 0.001
+ 1 , 0.0050357 , 0.001
+ 2 , 0.00260408 , 0.001
+ 3 , 0.000970857 , 0.001
diff --git a/TestCases/disc_adj_fsi/Airfoil_2d/grad_young.opt.ref b/TestCases/disc_adj_fsi/Airfoil_2d/grad_young.opt.ref
index 0cb6de7dcc7f..e00dfbaeb752 100644
--- a/TestCases/disc_adj_fsi/Airfoil_2d/grad_young.opt.ref
+++ b/TestCases/disc_adj_fsi/Airfoil_2d/grad_young.opt.ref
@@ -1,2 +1,2 @@
INDEX GRAD
-0 -1.712659632640297e-03
+0 -1.735284970747917e-03
diff --git a/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref b/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref
index e61cf4a6961d..f8a53f45e461 100644
--- a/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref
+++ b/TestCases/multiple_ffd/naca0012/of_grad_cd.dat.ref
@@ -1,3 +1,3 @@
VARIABLES="VARIABLE" , "GRADIENT" , "FINDIFF_STEP"
- 0 , 0.0688615 , 0.001
- 1 , -0.124516 , 0.001
+ 0 , 0.0681378 , 0.001
+ 1 , -0.124933 , 0.001
diff --git a/TestCases/multiple_ffd/naca0012/of_grad_directdiff.dat.ref b/TestCases/multiple_ffd/naca0012/of_grad_directdiff.dat.ref
index fe0d77668a37..17e06a9de71b 100644
--- a/TestCases/multiple_ffd/naca0012/of_grad_directdiff.dat.ref
+++ b/TestCases/multiple_ffd/naca0012/of_grad_directdiff.dat.ref
@@ -1,3 +1,3 @@
VARIABLES="VARIABLE" , "MASS_FLOW_IN" , "MOMENT_Z" , "FLOW_ANGLE_OUT", "MASS_FLOW_OUT" , "FLOW_ANGLE_IN" , "FORCE_Z" , "FORCE_Y" , "FORCE_X" , "TOTAL_EFFICIENCY", "TOTAL_STATIC_EFFICIENCY", "PRESSURE_RATIO", "EFFICIENCY" , "DRAG" , "LIFT" , "TOTAL_ENTHALPY_OUT", "TOTAL_PRESSURE_LOSS", "MOMENT_Y" , "MOMENT_X" , "SIDEFORCE" , "ENTHALPY_OUT" , "KINETIC_ENERGY_LOSS", "CUSTOM_OBJFUNC", "HEAT" , "MAX_HEAT" , "SURFACE_UNIFORMITY", "SURFACE_SECONDARY", "SURFACE_MOM_DISTORTION", "SURFACE_SECOND_OVER_UNIFORM", "SURFACE_PRESSURE_DROP"
- 0 , 0.0 , 0.00113109837 , 0.0 , 0.0 , 0.0 , 0.0 , 0.144151264 , 0.0589479487 , 0.0 , 0.0 , 0.0 , -0.539364673 , 0.062078564 , 0.142831017 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0
- 1 , 0.0 , -0.0152480134 , 0.0 , 0.0 , 0.0 , 0.0 , 0.315163704 , -0.0829070269 , 0.0 , 0.0 , 0.0 , 10.4840132 , -0.0760120373 , 0.31689731 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0
+ 0 , 0.0 , 0.002242589 , 0.0 , 0.0 , 0.0 , 0.0 , 0.144713069 , 0.0592115615 , 0.0 , 0.0 , 0.0 , -0.396142792 , 0.0623543697 , 0.143386938 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0
+ 1 , 0.0 , -0.0122560782 , 0.0 , 0.0 , 0.0 , 0.0 , 0.321620498 , -0.0843395283 , 0.0 , 0.0 , 0.0 , 10.1834409 , -0.0773033435 , 0.323383818 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 0.0
diff --git a/TestCases/parallel_regression.py b/TestCases/parallel_regression.py
index 8610931908fb..d85f0db05581 100644
--- a/TestCases/parallel_regression.py
+++ b/TestCases/parallel_regression.py
@@ -57,7 +57,7 @@ def main():
channel.cfg_dir = "euler/channel"
channel.cfg_file = "inv_channel_RK.cfg"
channel.test_iter = 20
- channel.test_vals = [-2.652944, 2.813720, 0.033489, 0.002890] #last 4 columns
+ channel.test_vals = [-2.651955, 2.814536, 0.031770, 0.002870] #last 4 columns
channel.su2_exec = "parallel_computation.py -f"
channel.timeout = 1600
channel.tol = 0.00001
@@ -68,7 +68,7 @@ def main():
naca0012.cfg_dir = "euler/naca0012"
naca0012.cfg_file = "inv_NACA0012_Roe.cfg"
naca0012.test_iter = 20
- naca0012.test_vals = [-4.080618, -3.586817, 0.337090, 0.022611] #last 4 columns
+ naca0012.test_vals = [-4.052370, -3.563380, 0.336120, 0.021570] #last 4 columns
naca0012.su2_exec = "parallel_computation.py -f"
naca0012.timeout = 1600
naca0012.tol = 0.00001
@@ -79,7 +79,7 @@ def main():
wedge.cfg_dir = "euler/wedge"
wedge.cfg_file = "inv_wedge_HLLC.cfg"
wedge.test_iter = 20
- wedge.test_vals = [-0.816407, 4.925831, -0.251950, 0.044386] #last 4 columns
+ wedge.test_vals = [-0.941371, 4.787744, -0.208777, 0.036781] #last 4 columns
wedge.su2_exec = "parallel_computation.py -f"
wedge.timeout = 1600
wedge.tol = 0.00001
@@ -90,7 +90,7 @@ def main():
oneram6.cfg_dir = "euler/oneram6"
oneram6.cfg_file = "inv_ONERAM6.cfg"
oneram6.test_iter = 10
- oneram6.test_vals = [-10.392429, -9.840519, 0.282580, 0.012694] #last 4 columns
+ oneram6.test_vals = [-7.079068, -6.542899, 0.282322, 0.011804] #last 4 columns
oneram6.su2_exec = "parallel_computation.py -f"
oneram6.timeout = 3200
oneram6.tol = 0.00001
@@ -101,7 +101,7 @@ def main():
fixedCL_naca0012.cfg_dir = "fixed_cl/naca0012"
fixedCL_naca0012.cfg_file = "inv_NACA0012.cfg"
fixedCL_naca0012.test_iter = 100
- fixedCL_naca0012.test_vals = [-2.474140, 2.927471, 0.290169, 0.019080] #last 4 columns
+ fixedCL_naca0012.test_vals = [-2.437318, 2.967532, 0.290374, 0.019183] #last 4 columns
fixedCL_naca0012.su2_exec = "parallel_computation.py -f"
fixedCL_naca0012.timeout = 1600
fixedCL_naca0012.tol = 0.00001
@@ -113,7 +113,7 @@ def main():
polar_naca0012.cfg_file = "inv_NACA0012.cfg"
polar_naca0012.polar = True
polar_naca0012.test_iter = 10
- polar_naca0012.test_vals = [-1.301350, 4.133308, -0.002728, 0.008768] #last 4 columns
+ polar_naca0012.test_vals = [-1.293870, 4.141024, -0.002288, 0.008868] #last 4 columns
polar_naca0012.su2_exec = "compute_polar.py -i 11"
polar_naca0012.timeout = 1600
polar_naca0012.tol = 0.00001
@@ -124,7 +124,7 @@ def main():
bluntbody.cfg_dir = "euler/bluntbody"
bluntbody.cfg_file = "blunt.cfg"
bluntbody.test_iter = 20
- bluntbody.test_vals = [0.626808, 7.014695, -0.000000, 1.648026] #last 4 columns
+ bluntbody.test_vals = [0.553700, 6.926057, -0.000000, 1.792561] #last 4 columns
bluntbody.su2_exec = "parallel_computation.py -f"
bluntbody.timeout = 1600
bluntbody.tol = 0.00001
@@ -328,7 +328,7 @@ def main():
inc_euler_naca0012.cfg_dir = "incomp_euler/naca0012"
inc_euler_naca0012.cfg_file = "incomp_NACA0012.cfg"
inc_euler_naca0012.test_iter = 20
- inc_euler_naca0012.test_vals = [-4.821760, -3.785208, 0.505728, 0.007424] #last 4 columns
+ inc_euler_naca0012.test_vals = [-4.802192, -3.799720, 0.497093, 0.007515] #last 4 columns
inc_euler_naca0012.su2_exec = "parallel_computation.py -f"
inc_euler_naca0012.timeout = 1600
inc_euler_naca0012.tol = 0.00001
@@ -339,7 +339,7 @@ def main():
inc_nozzle.cfg_dir = "incomp_euler/nozzle"
inc_nozzle.cfg_file = "inv_nozzle.cfg"
inc_nozzle.test_iter = 20
- inc_nozzle.test_vals = [-5.852261, -4.818859, -0.000280, 0.124229] #last 4 columns
+ inc_nozzle.test_vals = [-5.959953, -4.932037, -0.000109, 0.121192] #last 4 columns
inc_nozzle.su2_exec = "parallel_computation.py -f"
inc_nozzle.timeout = 1600
inc_nozzle.tol = 0.00001
@@ -387,7 +387,7 @@ def main():
inc_lam_bend.cfg_dir = "incomp_navierstokes/bend"
inc_lam_bend.cfg_file = "lam_bend.cfg"
inc_lam_bend.test_iter = 10
- inc_lam_bend.test_vals = [-3.437518, -3.087892, -0.022290, -0.172644] #last 4 columns
+ inc_lam_bend.test_vals = [-3.437567, -3.088005, -0.022291, -0.172738] #last 4 columns
inc_lam_bend.su2_exec = "mpirun -n 2 SU2_CFD"
inc_lam_bend.timeout = 1600
inc_lam_bend.tol = 0.00001
@@ -528,7 +528,7 @@ def main():
contadj_naca0012.cfg_dir = "cont_adj_euler/naca0012"
contadj_naca0012.cfg_file = "inv_NACA0012.cfg"
contadj_naca0012.test_iter = 5
- contadj_naca0012.test_vals = [-9.783199, -15.190764, 0.300920, 0.019552] #last 4 columns
+ contadj_naca0012.test_vals = [-9.783199, -15.190764, 3.0092e-01, 1.9552e-02] #last 4 columns
contadj_naca0012.su2_exec = "parallel_computation.py -f"
contadj_naca0012.timeout = 1600
contadj_naca0012.tol = 0.00001
@@ -709,7 +709,7 @@ def main():
harmonic_balance.cfg_dir = "harmonic_balance"
harmonic_balance.cfg_file = "HB.cfg"
harmonic_balance.test_iter = 25
- harmonic_balance.test_vals = [-1.569573, 3.941896, 0.008780, 0.079775] #last 4 columns
+ harmonic_balance.test_vals = [-1.592454, 3.916019, -0.001014, 0.096794] #last 4 columns
harmonic_balance.su2_exec = "parallel_computation.py -f"
harmonic_balance.timeout = 1600
harmonic_balance.tol = 0.00001
@@ -773,7 +773,7 @@ def main():
sine_gust.cfg_dir = "gust"
sine_gust.cfg_file = "inv_gust_NACA0012.cfg"
sine_gust.test_iter = 5
- sine_gust.test_vals = [-1.977531, 3.481790, -0.009981, -0.004663] #last 4 columns
+ sine_gust.test_vals = [-1.977545, 3.481778, -0.001297, -0.005845] #last 4 columns
sine_gust.su2_exec = "parallel_computation.py -f"
sine_gust.timeout = 1600
sine_gust.tol = 0.00001
@@ -785,7 +785,7 @@ def main():
aeroelastic.cfg_dir = "aeroelastic"
aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg"
aeroelastic.test_iter = 2
- aeroelastic.test_vals = [0.078210, 0.036447, -0.001685, -0.000113] #last 4 columns
+ aeroelastic.test_vals = [0.081587, 0.033262, -0.001666, -0.000155] #last 4 columns
aeroelastic.su2_exec = "parallel_computation.py -f"
aeroelastic.timeout = 1600
aeroelastic.tol = 0.000001
@@ -825,7 +825,7 @@ def main():
edge_VW.cfg_dir = "nicf/edge"
edge_VW.cfg_file = "edge_VW.cfg"
edge_VW.test_iter = 100
- edge_VW.test_vals = [-5.187663, 0.970512, -0.000009, 0.000000] #last 4 columns
+ edge_VW.test_vals = [-5.192690, 0.944311, -0.000009, 0.000000] #last 4 columns
edge_VW.su2_exec = "parallel_computation.py -f"
edge_VW.timeout = 1600
edge_VW.tol = 0.00001
@@ -836,7 +836,7 @@ def main():
edge_PPR.cfg_dir = "nicf/edge"
edge_PPR.cfg_file = "edge_PPR.cfg"
edge_PPR.test_iter = 100
- edge_PPR.test_vals = [-5.474846, 0.666610, -0.000037, 0.000000] #last 4 columns
+ edge_PPR.test_vals = [-5.387574, 0.753373, -0.000035, 0.000000] #last 4 columns
edge_PPR.su2_exec = "parallel_computation.py -f"
edge_PPR.timeout = 1600
edge_PPR.tol = 0.00001
@@ -910,7 +910,7 @@ def main():
uniform_flow.cfg_dir = "sliding_interface/uniform_flow"
uniform_flow.cfg_file = "uniform_NN.cfg"
uniform_flow.test_iter = 50
- uniform_flow.test_vals = [-0.368877, 5.156053, 0.000000, 0.000000] #last 4 columns
+ uniform_flow.test_vals = [-0.367892, 5.156945, 0.000000, 0.000000] #last 4 columns
uniform_flow.su2_exec = "parallel_computation.py -f"
uniform_flow.timeout = 1600
uniform_flow.tol = 0.000001
@@ -922,7 +922,7 @@ def main():
channel_2D.cfg_dir = "sliding_interface/channel_2D"
channel_2D.cfg_file = "channel_2D_WA.cfg"
channel_2D.test_iter = 4
- channel_2D.test_vals = [-1.656822, 4.263197, 0.000000, 0.000000] #last 4 columns
+ channel_2D.test_vals = [-1.655365, 4.263893, 0.000000, 0.000000] #last 4 columns
channel_2D.su2_exec = "parallel_computation.py -f"
channel_2D.timeout = 100
channel_2D.tol = 0.00001
@@ -934,7 +934,7 @@ def main():
channel_3D.cfg_dir = "sliding_interface/channel_3D"
channel_3D.cfg_file = "channel_3D_WA.cfg"
channel_3D.test_iter = 2
- channel_3D.test_vals = [-1.999171, 3.956649, 0.000000, 0.000000] #last 4 columns
+ channel_3D.test_vals = [-1.996382, 3.963493, 0.000000, 0.000000] #last 4 columns
channel_3D.su2_exec = "parallel_computation.py -f"
channel_3D.timeout = 1600
channel_3D.tol = 0.00001
@@ -946,7 +946,7 @@ def main():
pipe.cfg_dir = "sliding_interface/pipe"
pipe.cfg_file = "pipe_NN.cfg"
pipe.test_iter = 2
- pipe.test_vals = [-3.503708, 3.194241, 0.000000, 0.000000] #last 4 columns
+ pipe.test_vals = [-3.504317, 3.194211, 0.000000, 0.000000] #last 4 columns
pipe.su2_exec = "parallel_computation.py -f"
pipe.timeout = 1600
pipe.tol = 0.00001
@@ -958,7 +958,7 @@ def main():
rotating_cylinders.cfg_dir = "sliding_interface/rotating_cylinders"
rotating_cylinders.cfg_file = "rot_cylinders_WA.cfg"
rotating_cylinders.test_iter = 3
- rotating_cylinders.test_vals = [-1.254634, 4.531678, 0.000000, 0.000000] #last 4 columns
+ rotating_cylinders.test_vals = [-1.149775, 4.619484, 0.000000, 0.000000] #last 4 columns
rotating_cylinders.su2_exec = "parallel_computation.py -f"
rotating_cylinders.timeout = 1600
rotating_cylinders.tol = 0.00001
@@ -970,7 +970,7 @@ def main():
supersonic_vortex_shedding.cfg_dir = "sliding_interface/supersonic_vortex_shedding"
supersonic_vortex_shedding.cfg_file = "sup_vor_shed_WA.cfg"
supersonic_vortex_shedding.test_iter = 5
- supersonic_vortex_shedding.test_vals = [-1.124271, 4.605462, 0.000000, 0.000000] #last 4 columns
+ supersonic_vortex_shedding.test_vals = [-0.211187, 5.611098, 0.000000, 0.000000] #last 4 columns
supersonic_vortex_shedding.su2_exec = "parallel_computation.py -f"
supersonic_vortex_shedding.timeout = 1600
supersonic_vortex_shedding.tol = 0.00001
@@ -1042,7 +1042,7 @@ def main():
fsi2d.cfg_dir = "fea_fsi/WallChannel_2d"
fsi2d.cfg_file = "configFSI.cfg"
fsi2d.test_iter = 4
- fsi2d.test_vals = [2.000000, 0.500000, -7.780230, -1.142095] #last 4 columns
+ fsi2d.test_vals = [2.000000, 0.500000, -6.878089, -0.260608] #last 4 columns
fsi2d.su2_exec = "parallel_computation_fsi.py -f"
fsi2d.timeout = 1600
fsi2d.tol = 0.00001
@@ -1052,8 +1052,8 @@ def main():
stat_fsi = TestCase('stat_fsi')
stat_fsi.cfg_dir = "fea_fsi/stat_fsi"
stat_fsi.cfg_file = "config.cfg"
- stat_fsi.test_iter = 7000
- stat_fsi.test_vals = [-6.762763, -6.522814, -9.205275, -10.113188] #last 4 columns
+ stat_fsi.test_iter = 5000
+ stat_fsi.test_vals = [-5.965844, -5.549896, -8.815105, -9.507963] #last 4 columns
stat_fsi.su2_exec = "SU2_CFD"
stat_fsi.timeout = 1600
stat_fsi.tol = 0.00001
@@ -1064,7 +1064,7 @@ def main():
dyn_fsi.cfg_dir = "fea_fsi/dyn_fsi"
dyn_fsi.cfg_file = "config.cfg"
dyn_fsi.test_iter = 4000
- dyn_fsi.test_vals = [-4.828420, -3.010379, -7.776603, -8.791332] #last 4 columns
+ dyn_fsi.test_vals = [-4.709724, -2.913229, -7.186948, -8.186820] #last 4 columns
dyn_fsi.su2_exec = "SU2_CFD"
dyn_fsi.timeout = 1600
dyn_fsi.tol = 0.00001
@@ -1074,8 +1074,8 @@ def main():
stat_fsi_restart = TestCase('stat_fsi_restart')
stat_fsi_restart.cfg_dir = "fea_fsi/stat_fsi"
stat_fsi_restart.cfg_file = "config_restart.cfg"
- stat_fsi_restart.test_iter = 1000
- stat_fsi_restart.test_vals = [-9.692985, -9.452006, -12.132021, -13.042439] #last 4 columns
+ stat_fsi_restart.test_iter = 3000
+ stat_fsi_restart.test_vals = [-9.371585, -9.025672, -11.623159, -12.610272] #last 4 columns
stat_fsi_restart.su2_exec = "SU2_CFD"
stat_fsi_restart.timeout = 1600
stat_fsi_restart.tol = 0.00001
@@ -1105,7 +1105,7 @@ def main():
pywrapper_naca0012.cfg_dir = "euler/naca0012"
pywrapper_naca0012.cfg_file = "inv_NACA0012_Roe.cfg"
pywrapper_naca0012.test_iter = 100
- pywrapper_naca0012.test_vals = [-6.078642, -5.482895, 0.334875, 0.022224] #last 4 columns
+ pywrapper_naca0012.test_vals = [-7.123252, -6.535236, 0.333431, 0.021236] #last 4 columns
pywrapper_naca0012.su2_exec = "mpirun -np 2 SU2_CFD.py --parallel -f"
pywrapper_naca0012.timeout = 1600
pywrapper_naca0012.tol = 0.00001
@@ -1139,7 +1139,7 @@ def main():
pywrapper_aeroelastic.cfg_dir = "aeroelastic"
pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg"
pywrapper_aeroelastic.test_iter = 2
- pywrapper_aeroelastic.test_vals = [0.078210, 0.036447, -0.001685, -0.000113] #last 4 columns
+ pywrapper_aeroelastic.test_vals = [0.081587, 0.033262, -0.001666, -0.000155] #last 4 columns
pywrapper_aeroelastic.su2_exec = "mpirun -np 2 SU2_CFD.py --parallel -f"
pywrapper_aeroelastic.timeout = 1600
pywrapper_aeroelastic.tol = 0.000001
@@ -1151,7 +1151,7 @@ def main():
pywrapper_fsi2d.cfg_dir = "fea_fsi/WallChannel_2d"
pywrapper_fsi2d.cfg_file = "configFSI.cfg"
pywrapper_fsi2d.test_iter = 4
- pywrapper_fsi2d.test_vals = [2.000000, 0.500000, -7.780230, -1.142095] #last 4 columns
+ pywrapper_fsi2d.test_vals = [2.000000, 0.500000, -6.878089, -0.260608] #last 4 columns
pywrapper_fsi2d.su2_exec = "mpirun -np 2 SU2_CFD.py --nZone 2 --fsi True --parallel -f"
pywrapper_fsi2d.timeout = 1600
pywrapper_fsi2d.tol = 0.00001
@@ -1190,7 +1190,7 @@ def main():
tutorial_inv_bump.cfg_dir = "../Tutorials/Inviscid_Bump"
tutorial_inv_bump.cfg_file = "inv_channel.cfg"
tutorial_inv_bump.test_iter = 0
- tutorial_inv_bump.test_vals = [-1.437425, 4.075857, -0.262268, 0.059163] #last 4 columns
+ tutorial_inv_bump.test_vals = [-1.437425, 4.075857, -0.134610, 0.083745] #last 4 columns
tutorial_inv_bump.su2_exec = "mpirun -np 2 SU2_CFD"
tutorial_inv_bump.timeout = 1600
tutorial_inv_bump.tol = 0.00001
@@ -1202,7 +1202,7 @@ def main():
tutorial_inv_wedge.cfg_dir = "../Tutorials/Inviscid_Wedge"
tutorial_inv_wedge.cfg_file = "inv_wedge_HLLC.cfg"
tutorial_inv_wedge.test_iter = 0
- tutorial_inv_wedge.test_vals = [-0.481460, 5.253008, -0.240968, 0.042348] #last 4 columns
+ tutorial_inv_wedge.test_vals = [-0.481460, 5.253008, -0.266096, 0.046783] #last 4 columns
tutorial_inv_wedge.su2_exec = "mpirun -np 2 SU2_CFD"
tutorial_inv_wedge.timeout = 1600
tutorial_inv_wedge.tol = 0.00001
@@ -1214,7 +1214,7 @@ def main():
tutorial_inv_onera.cfg_dir = "../Tutorials/Inviscid_ONERAM6"
tutorial_inv_onera.cfg_file = "inv_ONERAM6.cfg"
tutorial_inv_onera.test_iter = 0
- tutorial_inv_onera.test_vals = [-5.204928, -4.597762, 0.165766, 0.053239] #last 4 columns
+ tutorial_inv_onera.test_vals = [-5.204928, -4.597762, 0.256216, 0.122658] #last 4 columns
tutorial_inv_onera.su2_exec = "mpirun -np 2 SU2_CFD"
tutorial_inv_onera.timeout = 1600
tutorial_inv_onera.tol = 0.00001
@@ -1286,7 +1286,7 @@ def main():
tutorial_design_inv_naca0012.cfg_dir = "../Tutorials/Inviscid_2D_Unconstrained_NACA0012"
tutorial_design_inv_naca0012.cfg_file = "inv_NACA0012_basic.cfg"
tutorial_design_inv_naca0012.test_iter = 0
- tutorial_design_inv_naca0012.test_vals = [-3.585391, -2.989014, 0.100830, 0.176231] #last 4 columns
+ tutorial_design_inv_naca0012.test_vals = [-3.585391, -2.989014, 0.086210, 0.174381] #last 4 columns
tutorial_design_inv_naca0012.su2_exec = "mpirun -np 2 SU2_CFD"
tutorial_design_inv_naca0012.timeout = 1600
tutorial_design_inv_naca0012.tol = 0.00001
diff --git a/TestCases/parallel_regression_AD.py b/TestCases/parallel_regression_AD.py
index 1e0b4e6c53f3..e6daea0d3ba8 100644
--- a/TestCases/parallel_regression_AD.py
+++ b/TestCases/parallel_regression_AD.py
@@ -57,7 +57,7 @@ def main():
discadj_naca0012.cfg_dir = "cont_adj_euler/naca0012"
discadj_naca0012.cfg_file = "inv_NACA0012_discadj.cfg"
discadj_naca0012.test_iter = 100
- discadj_naca0012.test_vals = [-3.606841, -9.035214, -0.000000, 0.005688] #last 4 columns
+ discadj_naca0012.test_vals = [-3.610567, -9.034912, -0.000000, 0.005621] #last 4 columns
discadj_naca0012.su2_exec = "parallel_computation.py -f"
discadj_naca0012.timeout = 1600
discadj_naca0012.tol = 0.00001
@@ -68,7 +68,7 @@ def main():
discadj_cylinder3D.cfg_dir = "disc_adj_euler/cylinder3D"
discadj_cylinder3D.cfg_file = "inv_cylinder3D.cfg"
discadj_cylinder3D.test_iter = 5
- discadj_cylinder3D.test_vals = [-3.719306, -4.038129, 0.000000, 0.000000] #last 4 columns
+ discadj_cylinder3D.test_vals = [-3.757340, -3.857847, 0.000000, 0.000000] #last 4 columns
discadj_cylinder3D.su2_exec = "parallel_computation.py -f"
discadj_cylinder3D.timeout = 1600
discadj_cylinder3D.tol = 0.00001
@@ -79,7 +79,7 @@ def main():
discadj_arina2k.cfg_dir = "disc_adj_euler/arina2k"
discadj_arina2k.cfg_file = "Arina2KRS.cfg"
discadj_arina2k.test_iter = 20
- discadj_arina2k.test_vals = [2.228982, 1.717042, 4.7258e+04, 0.0000e+00] #last 4 columns
+ discadj_arina2k.test_vals = [2.275220, 1.750269, 47258.000000, 0.000000] #last 4 columns
discadj_arina2k.su2_exec = "parallel_computation.py -f"
discadj_arina2k.timeout = 8400
discadj_arina2k.tol = 0.00001
@@ -120,7 +120,7 @@ def main():
discadj_incomp_NACA0012.cfg_dir = "disc_adj_incomp_euler/naca0012"
discadj_incomp_NACA0012.cfg_file = "incomp_NACA0012_disc.cfg"
discadj_incomp_NACA0012.test_iter = 20
- discadj_incomp_NACA0012.test_vals = [-3.595580, -2.549720, 0.000000, 0.000000] #last 4 columns
+ discadj_incomp_NACA0012.test_vals = [-3.566362, -2.541739, 0.000000, 0.000000] #last 4 columns
discadj_incomp_NACA0012.su2_exec = "parallel_computation.py -f"
discadj_incomp_NACA0012.timeout = 1600
discadj_incomp_NACA0012.tol = 0.00001
@@ -208,7 +208,7 @@ def main():
discadj_pitchingNACA0012.cfg_dir = "disc_adj_euler/naca0012_pitching"
discadj_pitchingNACA0012.cfg_file = "inv_NACA0012_pitching.cfg"
discadj_pitchingNACA0012.test_iter = 4
- discadj_pitchingNACA0012.test_vals = [-2.638190, -3.106640, -7.0756e-04, 1.6333e-06] #last 4 columns
+ discadj_pitchingNACA0012.test_vals = [-2.647642, -3.115408, -0.000691, 0.000002] #last 4 columns
discadj_pitchingNACA0012.su2_exec = "parallel_computation.py -f"
discadj_pitchingNACA0012.timeout = 1600
discadj_pitchingNACA0012.tol = 0.00001
diff --git a/TestCases/serial_regression.py b/TestCases/serial_regression.py
index dbb6808f52ef..21a764d4377e 100644
--- a/TestCases/serial_regression.py
+++ b/TestCases/serial_regression.py
@@ -55,7 +55,7 @@ def main():
channel.cfg_dir = "euler/channel"
channel.cfg_file = "inv_channel_RK.cfg"
channel.test_iter = 10
- channel.test_vals = [-2.454049, 3.065639, -0.200679, 0.036298] #last 4 columns
+ channel.test_vals = [-2.475874, 3.046368, -0.203968, 0.036020] #last 4 columns
channel.su2_exec = "SU2_CFD"
channel.timeout = 1600
channel.tol = 0.00001
@@ -66,7 +66,7 @@ def main():
naca0012.cfg_dir = "euler/naca0012"
naca0012.cfg_file = "inv_NACA0012_Roe.cfg"
naca0012.test_iter = 20
- naca0012.test_vals = [-4.047448, -3.538057, 0.338691, 0.023131] #last 4 columns
+ naca0012.test_vals = [-4.021036, -3.511771, 0.339316, 0.022257] #last 4 columns
naca0012.su2_exec = "SU2_CFD"
naca0012.timeout = 1600
naca0012.tol = 0.00001
@@ -77,7 +77,7 @@ def main():
wedge.cfg_dir = "euler/wedge"
wedge.cfg_file = "inv_wedge_HLLC.cfg"
wedge.test_iter = 20
- wedge.test_vals = [-0.804690, 4.936631, -0.251188, 0.044255] #last 4 columns
+ wedge.test_vals = [-0.942862, 4.784581, -0.208106, 0.036665] #last 4 columns
wedge.su2_exec = "SU2_CFD"
wedge.timeout = 1600
wedge.tol = 0.00001
@@ -88,7 +88,7 @@ def main():
oneram6.cfg_dir = "euler/oneram6"
oneram6.cfg_file = "inv_ONERAM6.cfg"
oneram6.test_iter = 10
- oneram6.test_vals = [-10.384532, -9.835738, 0.282580, 0.012694] #last 4 columns
+ oneram6.test_vals = [-7.077986, -6.539796, 0.282344, 0.011807] #last 4 columns
oneram6.su2_exec = "SU2_CFD"
oneram6.timeout = 9600
oneram6.tol = 0.00001
@@ -99,7 +99,7 @@ def main():
fixedCL_naca0012.cfg_dir = "fixed_cl/naca0012"
fixedCL_naca0012.cfg_file = "inv_NACA0012.cfg"
fixedCL_naca0012.test_iter = 100
- fixedCL_naca0012.test_vals = [-2.582897, 2.820443, 0.295158, 0.019324] #last 4 columns
+ fixedCL_naca0012.test_vals = [-2.552012, 2.855343, 0.295861, 0.019466] #last 4 columns
fixedCL_naca0012.su2_exec = "SU2_CFD"
fixedCL_naca0012.timeout = 1600
fixedCL_naca0012.tol = 0.00001
@@ -111,7 +111,7 @@ def main():
polar_naca0012.cfg_file = "inv_NACA0012.cfg"
polar_naca0012.polar = True
polar_naca0012.test_iter = 10
- polar_naca0012.test_vals = [-1.319488, 4.112397, 0.011954, 0.009584] #last 4 columns
+ polar_naca0012.test_vals = [-1.308958, 4.123692, 0.011587, 0.009698] #last 4 columns
polar_naca0012.su2_exec = "compute_polar.py -n 1 -i 11"
polar_naca0012.timeout = 1600
polar_naca0012.tol = 0.00001
@@ -122,7 +122,7 @@ def main():
bluntbody.cfg_dir = "euler/bluntbody"
bluntbody.cfg_file = "blunt.cfg"
bluntbody.test_iter = 20
- bluntbody.test_vals = [0.626808, 7.014695, -0.000000, 1.648024] #last 4 columns
+ bluntbody.test_vals = [0.553700, 6.926057, -0.000000, 1.792561] #last 4 columns
bluntbody.su2_exec = "SU2_CFD"
bluntbody.timeout = 1600
bluntbody.tol = 0.00001
@@ -327,7 +327,7 @@ def main():
inc_euler_naca0012.cfg_dir = "incomp_euler/naca0012"
inc_euler_naca0012.cfg_file = "incomp_NACA0012.cfg"
inc_euler_naca0012.test_iter = 20
- inc_euler_naca0012.test_vals = [-4.880274, -3.797906, 0.501143, 0.007051] #last 4 columns
+ inc_euler_naca0012.test_vals = [-4.858287, -3.810487, 0.491850, 0.007002] #last 4 columns
inc_euler_naca0012.su2_exec = "SU2_CFD"
inc_euler_naca0012.timeout = 1600
inc_euler_naca0012.tol = 0.00001
@@ -338,7 +338,7 @@ def main():
inc_nozzle.cfg_dir = "incomp_euler/nozzle"
inc_nozzle.cfg_file = "inv_nozzle.cfg"
inc_nozzle.test_iter = 20
- inc_nozzle.test_vals = [-5.799445, -4.785945, -0.000443, 0.124533] #last 4 columns
+ inc_nozzle.test_vals = [-5.971283, -4.911145, -0.000201, 0.121631] #last 4 columns
inc_nozzle.su2_exec = "SU2_CFD"
inc_nozzle.timeout = 1600
inc_nozzle.tol = 0.00001
@@ -386,7 +386,7 @@ def main():
inc_lam_bend.cfg_dir = "incomp_navierstokes/bend"
inc_lam_bend.cfg_file = "lam_bend.cfg"
inc_lam_bend.test_iter = 10
- inc_lam_bend.test_vals = [-3.450832, -3.083603, -0.020698, -0.168320] #last 4 columns
+ inc_lam_bend.test_vals = [-3.450879, -3.083720, -0.020699, -0.168420] #last 4 columns
inc_lam_bend.su2_exec = "SU2_CFD"
inc_lam_bend.timeout = 1600
inc_lam_bend.tol = 0.00001
@@ -527,7 +527,7 @@ def main():
contadj_naca0012.cfg_dir = "cont_adj_euler/naca0012"
contadj_naca0012.cfg_file = "inv_NACA0012.cfg"
contadj_naca0012.test_iter = 5
- contadj_naca0012.test_vals = [-9.787554, -15.192510, 0.300920, 0.019552] #last 4 columns
+ contadj_naca0012.test_vals = [-9.787554, -15.192510, 3.0092e-01, 1.9552e-02] #last 4 columns
contadj_naca0012.su2_exec = "SU2_CFD"
contadj_naca0012.timeout = 1600
contadj_naca0012.tol = 0.001
@@ -708,7 +708,7 @@ def main():
harmonic_balance.cfg_dir = "harmonic_balance"
harmonic_balance.cfg_file = "HB.cfg"
harmonic_balance.test_iter = 25
- harmonic_balance.test_vals = [-1.569573, 3.941896, 0.008780, 0.079775] #last 4 columns
+ harmonic_balance.test_vals = [-1.592454, 3.916019, -0.001014, 0.096794] #last 4 columns
harmonic_balance.su2_exec = "SU2_CFD"
harmonic_balance.timeout = 1600
harmonic_balance.tol = 0.00001
@@ -772,7 +772,7 @@ def main():
sine_gust.cfg_dir = "gust"
sine_gust.cfg_file = "inv_gust_NACA0012.cfg"
sine_gust.test_iter = 5
- sine_gust.test_vals = [-1.977531, 3.481790, -0.006222, -0.001342] #last 4 columns
+ sine_gust.test_vals = [-1.977545, 3.481778, 0.001295, -0.003793] #last 4 columns
sine_gust.su2_exec = "SU2_CFD"
sine_gust.timeout = 1600
sine_gust.tol = 0.00001
@@ -784,7 +784,7 @@ def main():
aeroelastic.cfg_dir = "aeroelastic"
aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg"
aeroelastic.test_iter = 2
- aeroelastic.test_vals = [0.077106, 0.036449, -1.684916e-03, -1.131735e-04] #last 4 columns
+ aeroelastic.test_vals = [0.080202, 0.033233, -0.001666, -0.000155] #last 4 columns
aeroelastic.su2_exec = "SU2_CFD"
aeroelastic.timeout = 1600
aeroelastic.tol = 0.000001
@@ -835,7 +835,7 @@ def main():
edge_VW.cfg_dir = "nicf/edge"
edge_VW.cfg_file = "edge_VW.cfg"
edge_VW.test_iter = 20
- edge_VW.test_vals = [-0.720910, 5.481122, -0.000853, 0.000000] #last 4 columns
+ edge_VW.test_vals = [-0.711006, 5.491025, -0.000971, 0.000000] #last 4 columns
edge_VW.su2_exec = "SU2_CFD"
edge_VW.timeout = 1600
edge_VW.tol = 0.00001
@@ -846,7 +846,7 @@ def main():
edge_PPR.cfg_dir = "nicf/edge"
edge_PPR.cfg_file = "edge_PPR.cfg"
edge_PPR.test_iter = 20
- edge_PPR.test_vals = [-1.688033, 4.505202, 0.000916, 0.000000] #last 4 columns
+ edge_PPR.test_vals = [-1.671554, 4.521719, 0.001027, 0.000000] #last 4 columns
edge_PPR.su2_exec = "SU2_CFD"
edge_PPR.timeout = 1600
edge_PPR.tol = 0.00001
@@ -922,7 +922,7 @@ def main():
uniform_flow.cfg_dir = "sliding_interface/uniform_flow"
uniform_flow.cfg_file = "uniform_NN.cfg"
uniform_flow.test_iter = 50
- uniform_flow.test_vals = [-0.368877, 5.156053, 0.000000, 0.000000] #last 4 columns
+ uniform_flow.test_vals = [-0.367892, 5.156945, 0.000000, 0.000000] #last 4 columns
uniform_flow.su2_exec = "SU2_CFD"
uniform_flow.timeout = 1600
uniform_flow.tol = 0.000001
@@ -934,7 +934,7 @@ def main():
channel_2D.cfg_dir = "sliding_interface/channel_2D"
channel_2D.cfg_file = "channel_2D_WA.cfg"
channel_2D.test_iter = 4
- channel_2D.test_vals = [-1.656843, 4.263137, 0.000000, 0.000000] #last 4 columns
+ channel_2D.test_vals = [-1.655354, 4.263889, 0.000000, 0.000000] #last 4 columns
channel_2D.su2_exec = "SU2_CFD"
channel_2D.timeout = 100
channel_2D.tol = 0.00001
@@ -946,7 +946,7 @@ def main():
channel_3D.cfg_dir = "sliding_interface/channel_3D"
channel_3D.cfg_file = "channel_3D_WA.cfg"
channel_3D.test_iter = 1
- channel_3D.test_vals = [-1.899946, 4.032882, 0.000000, 0.000000] #last 4 columns
+ channel_3D.test_vals = [-1.901349, 4.033664, 0.000000, 0.000000] #last 4 columns
channel_3D.su2_exec = "SU2_CFD"
channel_3D.timeout = 1600
channel_3D.tol = 0.00001
@@ -958,7 +958,7 @@ def main():
pipe.cfg_dir = "sliding_interface/pipe"
pipe.cfg_file = "pipe_NN.cfg"
pipe.test_iter = 2
- pipe.test_vals = [-3.503708, 3.194241, 0.000000, 0.000000] #last 4 columns
+ pipe.test_vals = [-3.504317, 3.194211, 0.000000, 0.000000] #last 4 columns
pipe.su2_exec = "SU2_CFD"
pipe.timeout = 1600
pipe.tol = 0.00001
@@ -970,7 +970,7 @@ def main():
rotating_cylinders.cfg_dir = "sliding_interface/rotating_cylinders"
rotating_cylinders.cfg_file = "rot_cylinders_WA.cfg"
rotating_cylinders.test_iter = 3
- rotating_cylinders.test_vals = [-1.254672, 4.530738, 0.000000, 0.000000] #last 4 columns
+ rotating_cylinders.test_vals = [-1.149732, 4.619521, 0.000000, 0.000000] #last 4 columns
rotating_cylinders.su2_exec = "SU2_CFD"
rotating_cylinders.timeout = 1600
rotating_cylinders.tol = 0.00001
@@ -982,7 +982,7 @@ def main():
supersonic_vortex_shedding.cfg_dir = "sliding_interface/supersonic_vortex_shedding"
supersonic_vortex_shedding.cfg_file = "sup_vor_shed_WA.cfg"
supersonic_vortex_shedding.test_iter = 5
- supersonic_vortex_shedding.test_vals = [-1.129027, 4.597113, 0.000000, 0.000000] #last 4 columns
+ supersonic_vortex_shedding.test_vals = [-0.211274, 5.611055, 0.000000, 0.000000] #last 4 columns
supersonic_vortex_shedding.su2_exec = "SU2_CFD"
supersonic_vortex_shedding.timeout = 1600
supersonic_vortex_shedding.tol = 0.00001
@@ -1065,7 +1065,7 @@ def main():
fsi2d.cfg_dir = "fea_fsi/WallChannel_2d"
fsi2d.cfg_file = "configFSI.cfg"
fsi2d.test_iter = 4
- fsi2d.test_vals = [2.000000, 0.500000, -7.780236, -1.142100] #last 4 columns
+ fsi2d.test_vals = [2.000000, 0.500000, -6.878090, -0.260609] #last 4 columns
fsi2d.su2_exec = "SU2_CFD"
fsi2d.timeout = 1600
fsi2d.tol = 0.00001
@@ -1075,8 +1075,8 @@ def main():
stat_fsi = TestCase('stat_fsi')
stat_fsi.cfg_dir = "fea_fsi/stat_fsi"
stat_fsi.cfg_file = "config.cfg"
- stat_fsi.test_iter = 7000
- stat_fsi.test_vals = [-6.762763, -6.522814, -9.205275, -10.113188] #last 4 columns
+ stat_fsi.test_iter = 5000
+ stat_fsi.test_vals = [-5.965844, -5.549896, -8.815105, -9.507963] #last 4 columns
stat_fsi.su2_exec = "SU2_CFD"
stat_fsi.timeout = 1600
stat_fsi.tol = 0.00001
@@ -1086,8 +1086,8 @@ def main():
stat_fsi_restart = TestCase('stat_fsi_restart')
stat_fsi_restart.cfg_dir = "fea_fsi/stat_fsi"
stat_fsi_restart.cfg_file = "config_restart.cfg"
- stat_fsi_restart.test_iter = 1000
- stat_fsi_restart.test_vals = [-9.692985, -9.452006, -12.132021, -13.042439] #last 4 columns
+ stat_fsi_restart.test_iter = 3000
+ stat_fsi_restart.test_vals = [-9.371585, -9.025672, -11.623159, -12.610272] #last 4 columns
stat_fsi_restart.su2_exec = "SU2_CFD"
stat_fsi_restart.timeout = 1600
stat_fsi_restart.tol = 0.00001
@@ -1098,7 +1098,7 @@ def main():
dyn_fsi.cfg_dir = "fea_fsi/dyn_fsi"
dyn_fsi.cfg_file = "config.cfg"
dyn_fsi.test_iter = 4000
- dyn_fsi.test_vals = [-4.828422, -3.010379, -7.776602, -8.791331] #last 4 columns
+ dyn_fsi.test_vals = [-4.709724, -2.913229, -7.186948, -8.186820] #last 4 columns
dyn_fsi.su2_exec = "SU2_CFD"
dyn_fsi.timeout = 1600
dyn_fsi.tol = 0.00001
@@ -1108,8 +1108,8 @@ def main():
airfoilRBF = TestCase('airfoil_fsi_rbf')
airfoilRBF.cfg_dir = "fea_fsi/Airfoil_RBF"
airfoilRBF.cfg_file = "config.cfg"
- airfoilRBF.test_iter = 29
- airfoilRBF.test_vals = [-13.119469, -3.766228, -11.642909, 1404500.000000] #last 4 columns
+ airfoilRBF.test_iter = 19
+ airfoilRBF.test_vals = [-10.592268, -6.311998, -16.845204, 1.3902e+06] #last 4 columns
airfoilRBF.su2_exec = "SU2_CFD"
airfoilRBF.timeout = 1600
airfoilRBF.tol = 0.00001
@@ -1416,7 +1416,7 @@ def main():
shape_opt_euler_py.cfg_dir = "optimization_euler/steady_naca0012"
shape_opt_euler_py.cfg_file = "inv_NACA0012_adv.cfg"
shape_opt_euler_py.test_iter = 1
- shape_opt_euler_py.test_vals = [1, 1, 2.134974E-05, 3.829535E-03] #last 4 columns
+ shape_opt_euler_py.test_vals = [1, 1, 2.134974E-05, 0.003847] #last 4 columns
shape_opt_euler_py.su2_exec = "shape_optimization.py -g CONTINUOUS_ADJOINT -f"
shape_opt_euler_py.timeout = 1600
shape_opt_euler_py.tol = 0.00001
@@ -1442,7 +1442,7 @@ def main():
opt_multiobj_py.cfg_dir = "optimization_euler/multiobjective_wedge"
opt_multiobj_py.cfg_file = "inv_wedge_ROE_multiobj.cfg"
opt_multiobj_py.test_iter = 1
- opt_multiobj_py.test_vals = [1, 1, 1.084701E+02, 3.799222E+00] #last 4 columns
+ opt_multiobj_py.test_vals = [1.000000, 1.000000, 108.011100, 2.191747] #last 4 columns
opt_multiobj_py.su2_exec = "shape_optimization.py -g CONTINUOUS_ADJOINT -f"
opt_multiobj_py.timeout = 1600
opt_multiobj_py.tol = 0.00001
@@ -1454,7 +1454,7 @@ def main():
opt_multiobjcombo_py.cfg_dir = "optimization_euler/multiobjective_wedge"
opt_multiobjcombo_py.cfg_file = "inv_wedge_ROE_multiobj_combo.cfg"
opt_multiobjcombo_py.test_iter = 1
- opt_multiobjcombo_py.test_vals = [1, 1, 1.084701E+02, 3.789322E+00] #last 4 columns
+ opt_multiobjcombo_py.test_vals = [1.000000, 1.000000, 108.011100, 2.226539] #last 4 columns
opt_multiobjcombo_py.su2_exec = "shape_optimization.py -g CONTINUOUS_ADJOINT -f"
opt_multiobjcombo_py.timeout = 1600
opt_multiobjcombo_py.tol = 0.00001
@@ -1466,7 +1466,7 @@ def main():
opt_multiobj1surf_py.cfg_dir = "optimization_euler/multiobjective_wedge"
opt_multiobj1surf_py.cfg_file = "inv_wedge_ROE_multiobj_1surf.cfg"
opt_multiobj1surf_py.test_iter = 1
- opt_multiobj1surf_py.test_vals = [1, 1, 3.083034E+01, 3.789380E+00] #last 4 columns
+ opt_multiobj1surf_py.test_vals = [1.000000, 1.000000, 30.371350, 2.226610] #last 4 columns
opt_multiobj1surf_py.su2_exec = "shape_optimization.py -g CONTINUOUS_ADJOINT -f"
opt_multiobj1surf_py.timeout = 1600
opt_multiobj1surf_py.tol = 0.00001
@@ -1478,7 +1478,7 @@ def main():
opt_2surf1obj_py.cfg_dir = "optimization_euler/multiobjective_wedge"
opt_2surf1obj_py.cfg_file = "inv_wedge_ROE_2surf_1obj.cfg"
opt_2surf1obj_py.test_iter = 1
- opt_2surf1obj_py.test_vals = [1.000000, 1.000000, 2.005657, 0.000341] #last 4 columns
+ opt_2surf1obj_py.test_vals = [1.000000, 1.000000, 2.005700, 0.000203] #last 4 columns
opt_2surf1obj_py.su2_exec = "shape_optimization.py -g CONTINUOUS_ADJOINT -f"
opt_2surf1obj_py.timeout = 1600
opt_2surf1obj_py.tol = 0.00001
@@ -1494,7 +1494,7 @@ def main():
pywrapper_naca0012.cfg_dir = "euler/naca0012"
pywrapper_naca0012.cfg_file = "inv_NACA0012_Roe.cfg"
pywrapper_naca0012.test_iter = 20
- pywrapper_naca0012.test_vals = [-4.047448, -3.538057, 0.338691, 0.023131] #last 4 columns
+ pywrapper_naca0012.test_vals = [-4.021036, -3.511771, 0.339316, 0.022257] #last 4 columns
pywrapper_naca0012.su2_exec = "SU2_CFD.py -f"
pywrapper_naca0012.timeout = 1600
pywrapper_naca0012.tol = 0.00001
@@ -1531,7 +1531,7 @@ def main():
pywrapper_aeroelastic.cfg_dir = "aeroelastic"
pywrapper_aeroelastic.cfg_file = "aeroelastic_NACA64A010.cfg"
pywrapper_aeroelastic.test_iter = 2
- pywrapper_aeroelastic.test_vals = [0.077106, 0.036449, -1.684916e-03, -1.131735e-04] #last 4 columns
+ pywrapper_aeroelastic.test_vals = [0.080202, 0.033233, -0.001666, -0.000155] #last 4 columns
pywrapper_aeroelastic.su2_exec = "SU2_CFD.py -f"
pywrapper_aeroelastic.timeout = 1600
pywrapper_aeroelastic.tol = 0.000001
@@ -1544,7 +1544,7 @@ def main():
pywrapper_fsi2d.cfg_dir = "fea_fsi/WallChannel_2d"
pywrapper_fsi2d.cfg_file = "configFSI.cfg"
pywrapper_fsi2d.test_iter = 4
- pywrapper_fsi2d.test_vals = [2.000000, 0.500000, -7.780236, -1.142100] #last 4 columns
+ pywrapper_fsi2d.test_vals = [2.000000, 0.500000, -6.878090, -0.260609] #last 4 columns
pywrapper_fsi2d.su2_exec = "SU2_CFD.py --nZone 2 --fsi True -f"
pywrapper_fsi2d.timeout = 1600
pywrapper_fsi2d.tol = 0.00001
diff --git a/TestCases/serial_regression_AD.py b/TestCases/serial_regression_AD.py
index 3f639d84bfe0..8a1026ea8707 100644
--- a/TestCases/serial_regression_AD.py
+++ b/TestCases/serial_regression_AD.py
@@ -57,7 +57,7 @@ def main():
discadj_naca0012.cfg_dir = "cont_adj_euler/naca0012"
discadj_naca0012.cfg_file = "inv_NACA0012_discadj.cfg"
discadj_naca0012.test_iter = 100
- discadj_naca0012.test_vals = [-3.606839, -9.035212, -0.000000, 0.005688] #last 4 columns
+ discadj_naca0012.test_vals = [-3.610567, -9.034912, -0.000000, 0.005621] #last 4 columns
discadj_naca0012.su2_exec = "SU2_CFD_AD"
discadj_naca0012.timeout = 1600
discadj_naca0012.tol = 0.00001
@@ -68,7 +68,7 @@ def main():
discadj_cylinder3D.cfg_dir = "disc_adj_euler/cylinder3D"
discadj_cylinder3D.cfg_file = "inv_cylinder3D.cfg"
discadj_cylinder3D.test_iter = 5
- discadj_cylinder3D.test_vals = [-3.724711, -4.052467, -0.000000, 0.000000] #last 4 columns
+ discadj_cylinder3D.test_vals = [-3.758796, -3.863529, -0.000000, 0.000000] #last 4 columns
discadj_cylinder3D.su2_exec = "SU2_CFD_AD"
discadj_cylinder3D.timeout = 1600
discadj_cylinder3D.tol = 0.00001
@@ -79,7 +79,7 @@ def main():
discadj_arina2k.cfg_dir = "disc_adj_euler/arina2k"
discadj_arina2k.cfg_file = "Arina2KRS.cfg"
discadj_arina2k.test_iter = 20
- discadj_arina2k.test_vals = [-0.776022, -0.795092, 319.800000, 0.000000] #last 4 columns
+ discadj_arina2k.test_vals = [-0.779038, -0.816868, 319.800000, 0.000000] #last 4 columns
discadj_arina2k.su2_exec = "SU2_CFD_AD"
discadj_arina2k.timeout = 8400
discadj_arina2k.tol = 0.00001
@@ -120,7 +120,7 @@ def main():
discadj_incomp_NACA0012.cfg_dir = "disc_adj_incomp_euler/naca0012"
discadj_incomp_NACA0012.cfg_file = "incomp_NACA0012_disc.cfg"
discadj_incomp_NACA0012.test_iter = 20
- discadj_incomp_NACA0012.test_vals = [-3.633197, -2.544956, 0.000000, 0.000000] #last 4 columns
+ discadj_incomp_NACA0012.test_vals = [-3.606555, -2.538181, 0.000000, 0.000000] #last 4 columns
discadj_incomp_NACA0012.su2_exec = "SU2_CFD_AD"
discadj_incomp_NACA0012.timeout = 1600
discadj_incomp_NACA0012.tol = 0.00001
@@ -208,7 +208,7 @@ def main():
discadj_pitchingNACA0012.cfg_dir = "disc_adj_euler/naca0012_pitching"
discadj_pitchingNACA0012.cfg_file = "inv_NACA0012_pitching.cfg"
discadj_pitchingNACA0012.test_iter = 4
- discadj_pitchingNACA0012.test_vals = [-2.641237, -3.110423, -7.0498e-04, 1.2996e-06] #last 4 columns
+ discadj_pitchingNACA0012.test_vals = [-2.650611, -3.119337, -0.000687, 0.000001] #last 4 columns
discadj_pitchingNACA0012.su2_exec = "SU2_CFD_AD"
discadj_pitchingNACA0012.timeout = 1600
discadj_pitchingNACA0012.tol = 0.00001
@@ -348,7 +348,7 @@ def main():
pywrapper_FEA_AD_FlowLoad.cfg_dir = "py_wrapper/disc_adj_flow/mesh_disp_sens"
pywrapper_FEA_AD_FlowLoad.cfg_file = "configAD_flow.cfg"
pywrapper_FEA_AD_FlowLoad.test_iter = 1000
- pywrapper_FEA_AD_FlowLoad.test_vals = [30, -2.4701936842091294, 1.4366255094753457, 0.0] #last 4 columns
+ pywrapper_FEA_AD_FlowLoad.test_vals = [30.000000, -2.518695, 1.390150, 0.000000] #last 4 columns
pywrapper_FEA_AD_FlowLoad.su2_exec = "python run_adjoint.py -f"
pywrapper_FEA_AD_FlowLoad.timeout = 1600
pywrapper_FEA_AD_FlowLoad.tol = 0.00001
diff --git a/config_template.cfg b/config_template.cfg
index 349f371d776c..3d533e42d2dd 100644
--- a/config_template.cfg
+++ b/config_template.cfg
@@ -556,6 +556,7 @@ BODY_FORCE_VECTOR= ( 0.0, 0.0, 0.0 )
% -------------------- BOUNDARY CONDITION DEFINITION --------------------------%
%
% Euler wall boundary marker(s) (NONE = no marker)
+% Implementation identical to MARKER_SYM.
MARKER_EULER= ( airfoil )
%
% Navier-Stokes (no-slip), constant heat flux wall marker(s) (NONE = no marker)
@@ -570,6 +571,7 @@ MARKER_ISOTHERMAL= ( NONE )
MARKER_FAR= ( farfield )
%
% Symmetry boundary marker(s) (NONE = no marker)
+% Implementation identical to MARKER_EULER.
MARKER_SYM= ( NONE )
%
% Internal boundary marker(s) e.g. no boundary condition (NONE = no marker)