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)