diff --git a/Common/src/grid_movement/CVolumetricMovement.cpp b/Common/src/grid_movement/CVolumetricMovement.cpp index 7be3d23435dd..ee0191271077 100644 --- a/Common/src/grid_movement/CVolumetricMovement.cpp +++ b/Common/src/grid_movement/CVolumetricMovement.cpp @@ -356,68 +356,8 @@ void CVolumetricMovement::ComputenNonconvexElements(CGeometry *geometry, bool Sc nNonconvexElements++; } } - } else if (false) { - - /*--- 3D elements ---*/ - unsigned short iNode, iFace, nFaceNodes; - - for (iElem = 0; iElem < geometry->GetnElem(); iElem++){ - for (iFace = 0; iFace < geometry->elem[iElem]->GetnFaces(); iFace++){ - nFaceNodes = geometry->elem[iElem]->GetnNodesFace(iFace); - - su2double minCrossProductLength = 1.e6, maxCrossProductLength = -1.e6; - for (iNode = 0; iNode < nFaceNodes; iNode++) { - su2double crossProductLength = 0.0; - - /*--- Get coords of node face_point_i and its adjacent nodes in the face ---*/ - unsigned long face_point_i, face_point_j, face_point_k; - - face_point_i = geometry->elem[iElem]->GetNode(geometry->elem[iElem]->GetFaces(iFace, iNode)); - - /// TODO: Faces may have up to 4 nodes, not all posibilities are covered - - if (iNode == 0) { - face_point_j = geometry->elem[iElem]->GetNode(geometry->elem[iElem]->GetFaces(iFace, nFaceNodes-1)); - face_point_k = geometry->elem[iElem]->GetNode(geometry->elem[iElem]->GetFaces(iFace, iNode+1)); - } else if (iNode == nFaceNodes-1) { - face_point_j = geometry->elem[iElem]->GetNode(geometry->elem[iElem]->GetFaces(iFace, iNode-1)); - face_point_k = geometry->elem[iElem]->GetNode(geometry->elem[iElem]->GetFaces(iFace, 0)); - } - - const auto Coords_i = geometry->nodes->GetCoord(face_point_i); - const auto Coords_j = geometry->nodes->GetCoord(face_point_j); - const auto Coords_k = geometry->nodes->GetCoord(face_point_k); - - /*--- Get edge vectors from point k to i and point j to i ---*/ - su2double edgeVector_i[3], edgeVector_j[3]; - GeometryToolbox::Distance(nDim, Coords_k, Coords_i, edgeVector_i); - GeometryToolbox::Distance(nDim, Coords_j, Coords_i, edgeVector_j); - - /*--- Calculate cross product of edge vectors and its length---*/ - su2double crossProduct[3]; - GeometryToolbox::CrossProduct(edgeVector_i, edgeVector_j, crossProduct); - - /// TODO: This logic is incorrect, the norm will never be less than 0 - - crossProductLength = GeometryToolbox::Norm(nDim, crossProduct); - - /*--- Check if length is minimum or maximum ---*/ - if (crossProductLength < minCrossProductLength) { - minCrossProductLength = crossProductLength; - } else if (crossProductLength > maxCrossProductLength) { - maxCrossProductLength = crossProductLength; - } - } - - /*--- If minimum cross product length is smaller than 0, - face (and therefore element) is not convex ---*/ - if (minCrossProductLength < 0) { - nNonconvexElements++; - break; - } - - } - } + } else if (rank == MASTER_NODE) { + cout << "\nWARNING: Convexity is not checked for 3D elements (issue #1171).\n" << endl; } unsigned long nNonconvexElements_Local = nNonconvexElements; nNonconvexElements = 0; diff --git a/SU2_CFD/include/output/CAdjFlowCompOutput.hpp b/SU2_CFD/include/output/CAdjFlowCompOutput.hpp index d18e6aa462c4..1c6f2db616dc 100644 --- a/SU2_CFD/include/output/CAdjFlowCompOutput.hpp +++ b/SU2_CFD/include/output/CAdjFlowCompOutput.hpp @@ -97,6 +97,6 @@ class CAdjFlowCompOutput final: public COutput { * \param[in] config - Definition of the particular problem. * \return if the residuals should be initialized. */ - bool SetInit_Residuals(CConfig *config) override; + bool SetInit_Residuals(const CConfig *config) override; }; diff --git a/SU2_CFD/include/output/CAdjFlowIncOutput.hpp b/SU2_CFD/include/output/CAdjFlowIncOutput.hpp index e4c974b68c1c..02f402043478 100644 --- a/SU2_CFD/include/output/CAdjFlowIncOutput.hpp +++ b/SU2_CFD/include/output/CAdjFlowIncOutput.hpp @@ -100,6 +100,6 @@ class CAdjFlowIncOutput final: public COutput { * \param[in] config - Definition of the particular problem. * \return if the residuals should be initialized. */ - bool SetInit_Residuals(CConfig *config) override; + bool SetInit_Residuals(const CConfig *config) override; }; diff --git a/SU2_CFD/include/output/CElasticityOutput.hpp b/SU2_CFD/include/output/CElasticityOutput.hpp index b79ad3df54a4..00792c688990 100644 --- a/SU2_CFD/include/output/CElasticityOutput.hpp +++ b/SU2_CFD/include/output/CElasticityOutput.hpp @@ -87,6 +87,6 @@ class CElasticityOutput final: public COutput { * \param[in] config - Definition of the particular problem. * \return if the residuals should be initialized. */ - bool SetInit_Residuals(CConfig *config) override; + bool SetInit_Residuals(const CConfig *config) override; }; diff --git a/SU2_CFD/include/output/CFlowCompFEMOutput.hpp b/SU2_CFD/include/output/CFlowCompFEMOutput.hpp index 748be9c21a85..063cb3499f49 100644 --- a/SU2_CFD/include/output/CFlowCompFEMOutput.hpp +++ b/SU2_CFD/include/output/CFlowCompFEMOutput.hpp @@ -101,6 +101,6 @@ class CFlowCompFEMOutput final: public CFlowOutput { * \param[in] config - Definition of the particular problem. * \return if the residuals should be initialized. */ - bool SetInit_Residuals(CConfig *config) override; + bool SetInit_Residuals(const CConfig *config) override; }; diff --git a/SU2_CFD/include/output/CFlowCompOutput.hpp b/SU2_CFD/include/output/CFlowCompOutput.hpp index 7af5d70a6a66..fde484afbfd5 100644 --- a/SU2_CFD/include/output/CFlowCompOutput.hpp +++ b/SU2_CFD/include/output/CFlowCompOutput.hpp @@ -40,7 +40,6 @@ class CFlowCompOutput final: public CFlowOutput { private: unsigned short turb_model; //!< Kind of turbulence model - unsigned long lastInnerIter; public: @@ -50,12 +49,6 @@ class CFlowCompOutput final: public CFlowOutput { */ CFlowCompOutput(CConfig *config, unsigned short nDim); - /*! - * \brief Destructor of the class. - */ - ~CFlowCompOutput(void) override; - - /*! * \brief Load the history output field values * \param[in] config - Definition of the particular problem. @@ -100,23 +93,17 @@ class CFlowCompOutput final: public CFlowOutput { * \param[in] config - Definition of the particular problem. * \return if the residuals should be initialized. */ - bool SetInit_Residuals(CConfig *config) override; + bool SetInit_Residuals(const CConfig *config) override; /*! * \brief Write any additional output defined for the current solver. * \param[in] config - Definition of the particular problem per zone. */ - void SetAdditionalScreenOutput(CConfig *config) override; - - /*! - * \brief Write additional output for fixed CL mode. - * \param[in] config - Definition of the particular problem per zone. - */ - void SetFixedCLScreenOutput(CConfig *config); + void SetAdditionalScreenOutput(const CConfig *config) override; /*! * \brief Determines if the history file output. * \param[in] config - Definition of the particular problem. */ - bool WriteHistoryFile_Output(CConfig *config) override; + bool WriteHistoryFile_Output(const CConfig *config) override; }; diff --git a/SU2_CFD/include/output/CFlowIncOutput.hpp b/SU2_CFD/include/output/CFlowIncOutput.hpp index 9e1618c697ee..338060bb4ebd 100644 --- a/SU2_CFD/include/output/CFlowIncOutput.hpp +++ b/SU2_CFD/include/output/CFlowIncOutput.hpp @@ -102,6 +102,6 @@ class CFlowIncOutput final: public CFlowOutput { * \param[in] config - Definition of the particular problem. * \return if the residuals should be initialized. */ - bool SetInit_Residuals(CConfig *config) override; + bool SetInit_Residuals(const CConfig *config) override; }; diff --git a/SU2_CFD/include/output/CFlowOutput.hpp b/SU2_CFD/include/output/CFlowOutput.hpp index b5665420442c..81168fb872d5 100644 --- a/SU2_CFD/include/output/CFlowOutput.hpp +++ b/SU2_CFD/include/output/CFlowOutput.hpp @@ -31,19 +31,15 @@ #include "../variables/CVariable.hpp" class CFlowOutput : public CFVMOutput{ -public: +protected: + unsigned long lastInnerIter; + /*! * \brief Constructor of the class * \param[in] config - Definition of the particular problem. */ CFlowOutput(CConfig *config, unsigned short nDim, bool femOutput); - /*! - * \brief Destructor of the class. - */ - ~CFlowOutput(void) override; - -protected: /*! * \brief Add flow surface output fields * \param[in] config - Definition of the particular problem. @@ -104,7 +100,7 @@ class CFlowOutput : public CFVMOutput{ * \brief Write information to meta data file * \param[in] config - Definition of the particular problem per zone. */ - void WriteMetaData(CConfig *config); + void WriteMetaData(const CConfig *config); /*! * \brief Write any additional files defined for the current solver. @@ -142,4 +138,10 @@ class CFlowOutput : public CFVMOutput{ */ void LoadTimeAveragedData(unsigned long iPoint, CVariable *node_flow); + /*! + * \brief Write additional output for fixed CL mode. + * \param[in] config - Definition of the particular problem per zone. + */ + void SetFixedCLScreenOutput(const CConfig *config); + }; diff --git a/SU2_CFD/include/output/CMultizoneOutput.hpp b/SU2_CFD/include/output/CMultizoneOutput.hpp index 28ff8d1b5557..537fc7baf61b 100644 --- a/SU2_CFD/include/output/CMultizoneOutput.hpp +++ b/SU2_CFD/include/output/CMultizoneOutput.hpp @@ -86,17 +86,17 @@ class CMultizoneOutput final: public COutput { * \brief Determines if the history file output. * \param[in] config - Definition of the particular problem. */ - bool WriteHistoryFile_Output(CConfig *config) override; + bool WriteHistoryFile_Output(const CConfig *config) override; /*! * \brief Determines if the screen header should be written. * \param[in] config - Definition of the particular problem. */ - bool WriteScreen_Header(CConfig *config) override; + bool WriteScreen_Header(const CConfig *config) override; /*! * \brief Determines if the screen header should be written. * \param[in] config - Definition of the particular problem. */ - bool WriteScreen_Output(CConfig *config) override; + bool WriteScreen_Output(const CConfig *config) override; }; diff --git a/SU2_CFD/include/output/CNEMOCompOutput.hpp b/SU2_CFD/include/output/CNEMOCompOutput.hpp index 434536cd1c0f..517c0d7be6c7 100644 --- a/SU2_CFD/include/output/CNEMOCompOutput.hpp +++ b/SU2_CFD/include/output/CNEMOCompOutput.hpp @@ -41,8 +41,6 @@ class CNEMOCompOutput final: public CFlowOutput { unsigned short turb_model, /*!< \brief Kind of turbulence model */ iSpecies, /*!< \brief Species index */ nSpecies; /*!< \brief Number of species */ - unsigned long lastInnerIter; - public: /*! @@ -51,12 +49,6 @@ class CNEMOCompOutput final: public CFlowOutput { */ CNEMOCompOutput(CConfig *config, unsigned short nDim); - /*! - * \brief Destructor of the class. - */ - ~CNEMOCompOutput(void) override; - - /*! * \brief Load the history output field values * \param[in] config - Definition of the particular problem. @@ -101,23 +93,17 @@ class CNEMOCompOutput final: public CFlowOutput { * \param[in] config - Definition of the particular problem. * \return if the residuals should be initialized. */ - bool SetInit_Residuals(CConfig *config) override; + bool SetInit_Residuals(const CConfig *config) override; /*! * \brief Write any additional output defined for the current solver. * \param[in] config - Definition of the particular problem per zone. */ - void SetAdditionalScreenOutput(CConfig *config) override; - - /*! - * \brief Write additional output for fixed CL mode. - * \param[in] config - Definition of the particular problem per zone. - */ - void SetFixedCLScreenOutput(CConfig *config); + void SetAdditionalScreenOutput(const CConfig *config) override; /*! * \brief Determines if the history file output. * \param[in] config - Definition of the particular problem. */ - bool WriteHistoryFile_Output(CConfig *config) override; + bool WriteHistoryFile_Output(const CConfig *config) override; }; diff --git a/SU2_CFD/include/output/COutput.hpp b/SU2_CFD/include/output/COutput.hpp index 08c8213aa709..403b614fc3ec 100644 --- a/SU2_CFD/include/output/COutput.hpp +++ b/SU2_CFD/include/output/COutput.hpp @@ -490,26 +490,25 @@ class COutput { * \brief Set the history file header * \param[in] config - Definition of the particular problem. */ - void SetHistoryFile_Header(CConfig *config); + void SetHistoryFile_Header(const CConfig *config); /*! * \brief Write the history file output * \param[in] config - Definition of the particular problem. */ - void SetHistoryFile_Output(CConfig *config); + void SetHistoryFile_Output(const CConfig *config); /*! * \brief Write the screen header. * \param[in] config - Definition of the particular problem. */ - void SetScreen_Header(CConfig *config); - + void SetScreen_Header(const CConfig *config); /*! * \brief Write the screen output. * \param[in] config - Definition of the particular problem. */ - void SetScreen_Output(CConfig *config); + void SetScreen_Output(const CConfig *config); /*! * \brief Add a new field to the history output. @@ -691,19 +690,19 @@ class COutput { * \brief Determines if the history file output. * \param[in] config - Definition of the particular problem. */ - virtual bool WriteHistoryFile_Output(CConfig *config); + virtual bool WriteHistoryFile_Output(const CConfig *config); /*! * \brief Determines if the screen header should be written. * \param[in] config - Definition of the particular problem. */ - virtual bool WriteScreen_Header(CConfig *config); + virtual bool WriteScreen_Header(const CConfig *config); /*! * \brief Determines if the screen header should be written. * \param[in] config - Definition of the particular problem. */ - virtual bool WriteScreen_Output(CConfig *config); + virtual bool WriteScreen_Output(const CConfig *config); /*! * \brief Determines if the the volume output should be written. @@ -739,7 +738,7 @@ class COutput { * \param[in] config - Definition of the particular problem. * \return if the residuals should be initialized. */ - inline virtual bool SetInit_Residuals(CConfig *config) {return false;} + inline virtual bool SetInit_Residuals(const CConfig *config) {return false;} /*! * \brief Set the values of the volume output fields for a surface point. @@ -798,6 +797,6 @@ class COutput { * \brief Write any additional output defined for the current solver. * \param[in] config - Definition of the particular problem per zone. */ - inline virtual void SetAdditionalScreenOutput(CConfig *config){} + inline virtual void SetAdditionalScreenOutput(const CConfig *config){} }; diff --git a/SU2_CFD/src/output/CAdjFlowCompOutput.cpp b/SU2_CFD/src/output/CAdjFlowCompOutput.cpp index 2cf99b95e396..c5bb5d16ff5e 100644 --- a/SU2_CFD/src/output/CAdjFlowCompOutput.cpp +++ b/SU2_CFD/src/output/CAdjFlowCompOutput.cpp @@ -460,7 +460,7 @@ void CAdjFlowCompOutput::LoadSurfaceData(CConfig *config, CGeometry *geometry, C } -bool CAdjFlowCompOutput::SetInit_Residuals(CConfig *config){ +bool CAdjFlowCompOutput::SetInit_Residuals(const CConfig *config){ return ((config->GetTime_Marching() != TIME_MARCHING::STEADY) && (curInnerIter == 0)) || ((config->GetTime_Marching() == TIME_MARCHING::STEADY) && (curInnerIter < 2)); diff --git a/SU2_CFD/src/output/CAdjFlowIncOutput.cpp b/SU2_CFD/src/output/CAdjFlowIncOutput.cpp index 8bcec5adeb9c..c96e0a54b4a4 100644 --- a/SU2_CFD/src/output/CAdjFlowIncOutput.cpp +++ b/SU2_CFD/src/output/CAdjFlowIncOutput.cpp @@ -524,7 +524,7 @@ void CAdjFlowIncOutput::LoadSurfaceData(CConfig *config, CGeometry *geometry, CS } -bool CAdjFlowIncOutput::SetInit_Residuals(CConfig *config){ +bool CAdjFlowIncOutput::SetInit_Residuals(const CConfig *config){ return (config->GetTime_Marching() != TIME_MARCHING::STEADY && (curInnerIter == 0))|| (config->GetTime_Marching() == TIME_MARCHING::STEADY && (curTimeIter < 2)); diff --git a/SU2_CFD/src/output/CElasticityOutput.cpp b/SU2_CFD/src/output/CElasticityOutput.cpp index c48dab833dba..1ecc83330b20 100644 --- a/SU2_CFD/src/output/CElasticityOutput.cpp +++ b/SU2_CFD/src/output/CElasticityOutput.cpp @@ -265,7 +265,7 @@ void CElasticityOutput::SetVolumeOutputFields(CConfig *config){ } } -bool CElasticityOutput::SetInit_Residuals(CConfig *config){ +bool CElasticityOutput::SetInit_Residuals(const CConfig *config){ return (config->GetTime_Domain() == NO && (curInnerIter == 0)); diff --git a/SU2_CFD/src/output/CFlowCompFEMOutput.cpp b/SU2_CFD/src/output/CFlowCompFEMOutput.cpp index 5eb60cbe660d..3fba86dfbd1e 100644 --- a/SU2_CFD/src/output/CFlowCompFEMOutput.cpp +++ b/SU2_CFD/src/output/CFlowCompFEMOutput.cpp @@ -272,7 +272,7 @@ void CFlowCompFEMOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, C } -bool CFlowCompFEMOutput::SetInit_Residuals(CConfig *config){ +bool CFlowCompFEMOutput::SetInit_Residuals(const CConfig *config){ return (config->GetTime_Marching() != TIME_MARCHING::STEADY && (curInnerIter == 0))|| (config->GetTime_Marching() == TIME_MARCHING::STEADY && (curTimeIter < 2)); diff --git a/SU2_CFD/src/output/CFlowCompOutput.cpp b/SU2_CFD/src/output/CFlowCompOutput.cpp index 0126222cf4ec..f4bf29ed537a 100644 --- a/SU2_CFD/src/output/CFlowCompOutput.cpp +++ b/SU2_CFD/src/output/CFlowCompOutput.cpp @@ -34,7 +34,6 @@ CFlowCompOutput::CFlowCompOutput(CConfig *config, unsigned short nDim) : CFlowOutput(config, nDim, false) { turb_model = config->GetKind_Turb_Model(); - lastInnerIter = curInnerIter; gridMovement = config->GetDynamic_Grid(); /*--- Set the default history fields if nothing is set in the config file ---*/ @@ -105,10 +104,6 @@ CFlowCompOutput::CFlowCompOutput(CConfig *config, unsigned short nDim) : CFlowOu } } -CFlowCompOutput::~CFlowCompOutput(void) {} - - - void CFlowCompOutput::SetHistoryOutputFields(CConfig *config){ @@ -703,60 +698,20 @@ void CFlowCompOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSol } -bool CFlowCompOutput::SetInit_Residuals(CConfig *config){ +bool CFlowCompOutput::SetInit_Residuals(const CConfig *config){ return (config->GetTime_Marching() != TIME_MARCHING::STEADY && (curInnerIter == 0))|| (config->GetTime_Marching() == TIME_MARCHING::STEADY && (curInnerIter < 2)); } -void CFlowCompOutput::SetAdditionalScreenOutput(CConfig *config){ +void CFlowCompOutput::SetAdditionalScreenOutput(const CConfig *config){ if (config->GetFixed_CL_Mode()){ SetFixedCLScreenOutput(config); } } -void CFlowCompOutput::SetFixedCLScreenOutput(CConfig *config){ - PrintingToolbox::CTablePrinter FixedCLSummary(&cout); - - if (fabs(historyOutput_Map["CL_DRIVER_COMMAND"].value) > 1e-16){ - FixedCLSummary.AddColumn("Fixed CL Mode", 40); - FixedCLSummary.AddColumn("Value", 30); - FixedCLSummary.SetAlign(PrintingToolbox::CTablePrinter::LEFT); - FixedCLSummary.PrintHeader(); - FixedCLSummary << "Current CL" << historyOutput_Map["LIFT"].value; - FixedCLSummary << "Target CL" << config->GetTarget_CL(); - FixedCLSummary << "Previous AOA" << historyOutput_Map["PREV_AOA"].value; - if (config->GetFinite_Difference_Mode()){ - FixedCLSummary << "Changed AoA by (Finite Difference step)" << historyOutput_Map["CL_DRIVER_COMMAND"].value; - lastInnerIter = curInnerIter - 1; - } - else - FixedCLSummary << "Changed AoA by" << historyOutput_Map["CL_DRIVER_COMMAND"].value; - FixedCLSummary.PrintFooter(); - SetScreen_Header(config); - } - - else if (config->GetFinite_Difference_Mode() && historyOutput_Map["AOA"].value == historyOutput_Map["PREV_AOA"].value){ - FixedCLSummary.AddColumn("Fixed CL Mode (Finite Difference)", 40); - FixedCLSummary.AddColumn("Value", 30); - FixedCLSummary.SetAlign(PrintingToolbox::CTablePrinter::LEFT); - FixedCLSummary.PrintHeader(); - FixedCLSummary << "Delta CL / Delta AoA" << config->GetdCL_dAlpha(); - FixedCLSummary << "Delta CD / Delta CL" << config->GetdCD_dCL(); - if (nDim == 3){ - FixedCLSummary << "Delta CMx / Delta CL" << config->GetdCMx_dCL(); - FixedCLSummary << "Delta CMy / Delta CL" << config->GetdCMy_dCL(); - } - FixedCLSummary << "Delta CMz / Delta CL" << config->GetdCMz_dCL(); - FixedCLSummary.PrintFooter(); - curInnerIter = lastInnerIter; - WriteMetaData(config); - curInnerIter = config->GetInnerIter(); - } -} - -bool CFlowCompOutput::WriteHistoryFile_Output(CConfig *config) { +bool CFlowCompOutput::WriteHistoryFile_Output(const CConfig *config) { return !config->GetFinite_Difference_Mode() && COutput::WriteHistoryFile_Output(config); } diff --git a/SU2_CFD/src/output/CFlowIncOutput.cpp b/SU2_CFD/src/output/CFlowIncOutput.cpp index 57398f448e82..377eeb2e6f71 100644 --- a/SU2_CFD/src/output/CFlowIncOutput.cpp +++ b/SU2_CFD/src/output/CFlowIncOutput.cpp @@ -681,7 +681,7 @@ void CFlowIncOutput::LoadSurfaceData(CConfig *config, CGeometry *geometry, CSolv } -bool CFlowIncOutput::SetInit_Residuals(CConfig *config){ +bool CFlowIncOutput::SetInit_Residuals(const CConfig *config){ return (config->GetTime_Marching() != TIME_MARCHING::STEADY && (curInnerIter == 0))|| (config->GetTime_Marching() == TIME_MARCHING::STEADY && (curInnerIter < 2)); diff --git a/SU2_CFD/src/output/CFlowOutput.cpp b/SU2_CFD/src/output/CFlowOutput.cpp index 27d5d78fec48..d25a861c8c41 100644 --- a/SU2_CFD/src/output/CFlowOutput.cpp +++ b/SU2_CFD/src/output/CFlowOutput.cpp @@ -32,10 +32,9 @@ CFlowOutput::CFlowOutput(CConfig *config, unsigned short nDim, bool fem_output) : CFVMOutput (config, nDim, fem_output){ + lastInnerIter = curInnerIter; } -CFlowOutput::~CFlowOutput(void){} - void CFlowOutput::AddAnalyzeSurfaceOutput(CConfig *config){ @@ -862,7 +861,7 @@ void CFlowOutput::WriteAdditionalFiles(CConfig *config, CGeometry *geometry, CSo } -void CFlowOutput::WriteMetaData(CConfig *config){ +void CFlowOutput::WriteMetaData(const CConfig *config){ ofstream meta_file; @@ -2710,7 +2709,6 @@ void CFlowOutput::WriteForcesBreakdown(CConfig *config, CGeometry *geometry, CSo } - bool CFlowOutput::WriteVolume_Output(CConfig *config, unsigned long Iter, bool force_writing){ if (config->GetTime_Domain()){ @@ -2801,3 +2799,43 @@ void CFlowOutput::LoadTimeAveragedData(unsigned long iPoint, CVariable *Node_Flo SetVolumeOutputValue("VWPRIME", iPoint, -(vmean*wmean - vwmean)); } } + +void CFlowOutput::SetFixedCLScreenOutput(const CConfig *config){ + PrintingToolbox::CTablePrinter FixedCLSummary(&cout); + + if (fabs(historyOutput_Map["CL_DRIVER_COMMAND"].value) > 1e-16){ + FixedCLSummary.AddColumn("Fixed CL Mode", 40); + FixedCLSummary.AddColumn("Value", 30); + FixedCLSummary.SetAlign(PrintingToolbox::CTablePrinter::LEFT); + FixedCLSummary.PrintHeader(); + FixedCLSummary << "Current CL" << historyOutput_Map["LIFT"].value; + FixedCLSummary << "Target CL" << config->GetTarget_CL(); + FixedCLSummary << "Previous AOA" << historyOutput_Map["PREV_AOA"].value; + if (config->GetFinite_Difference_Mode()){ + FixedCLSummary << "Changed AoA by (Finite Difference step)" << historyOutput_Map["CL_DRIVER_COMMAND"].value; + lastInnerIter = curInnerIter - 1; + } + else + FixedCLSummary << "Changed AoA by" << historyOutput_Map["CL_DRIVER_COMMAND"].value; + FixedCLSummary.PrintFooter(); + SetScreen_Header(config); + } + + else if (config->GetFinite_Difference_Mode() && historyOutput_Map["AOA"].value == historyOutput_Map["PREV_AOA"].value){ + FixedCLSummary.AddColumn("Fixed CL Mode (Finite Difference)", 40); + FixedCLSummary.AddColumn("Value", 30); + FixedCLSummary.SetAlign(PrintingToolbox::CTablePrinter::LEFT); + FixedCLSummary.PrintHeader(); + FixedCLSummary << "Delta CL / Delta AoA" << config->GetdCL_dAlpha(); + FixedCLSummary << "Delta CD / Delta CL" << config->GetdCD_dCL(); + if (nDim == 3){ + FixedCLSummary << "Delta CMx / Delta CL" << config->GetdCMx_dCL(); + FixedCLSummary << "Delta CMy / Delta CL" << config->GetdCMy_dCL(); + } + FixedCLSummary << "Delta CMz / Delta CL" << config->GetdCMz_dCL(); + FixedCLSummary.PrintFooter(); + curInnerIter = lastInnerIter; + WriteMetaData(config); + curInnerIter = config->GetInnerIter(); + } +} diff --git a/SU2_CFD/src/output/CMultizoneOutput.cpp b/SU2_CFD/src/output/CMultizoneOutput.cpp index c5b6037cb0f8..7042ede5adb2 100644 --- a/SU2_CFD/src/output/CMultizoneOutput.cpp +++ b/SU2_CFD/src/output/CMultizoneOutput.cpp @@ -141,7 +141,7 @@ void CMultizoneOutput::SetMultizoneHistoryOutputFields(COutput **output, CConfig } } -bool CMultizoneOutput::WriteScreen_Header(CConfig *config) { +bool CMultizoneOutput::WriteScreen_Header(const CConfig *config) { /*--- Print header if the outer iteration is zero or zonal convergence is printed ---*/ @@ -157,7 +157,7 @@ bool CMultizoneOutput::WriteScreen_Header(CConfig *config) { return false; } -bool CMultizoneOutput::WriteScreen_Output(CConfig *config) { +bool CMultizoneOutput::WriteScreen_Output(const CConfig *config) { unsigned long ScreenWrt_Freq_Outer = config->GetScreen_Wrt_Freq(1); unsigned long ScreenWrt_Freq_Time = config->GetScreen_Wrt_Freq(0); @@ -183,7 +183,7 @@ bool CMultizoneOutput::WriteScreen_Output(CConfig *config) { return true; } -bool CMultizoneOutput::WriteHistoryFile_Output(CConfig *config){ +bool CMultizoneOutput::WriteHistoryFile_Output(const CConfig *config){ unsigned long HistoryWrt_Freq_Outer = config->GetHistory_Wrt_Freq(1); unsigned long HistoryWrt_Freq_Time = config->GetHistory_Wrt_Freq(0); diff --git a/SU2_CFD/src/output/CNEMOCompOutput.cpp b/SU2_CFD/src/output/CNEMOCompOutput.cpp index 779b72aa86af..81061fc11924 100644 --- a/SU2_CFD/src/output/CNEMOCompOutput.cpp +++ b/SU2_CFD/src/output/CNEMOCompOutput.cpp @@ -43,7 +43,6 @@ CNEMOCompOutput::CNEMOCompOutput(CConfig *config, unsigned short nDim) : CFlowOutput(config, nDim, false) { turb_model = config->GetKind_Turb_Model(); - lastInnerIter = curInnerIter; gridMovement = config->GetDynamic_Grid(); nSpecies = config->GetnSpecies(); @@ -117,8 +116,6 @@ CNEMOCompOutput::CNEMOCompOutput(CConfig *config, unsigned short nDim) : CFlowOu } } -CNEMOCompOutput::~CNEMOCompOutput(void) {} - void CNEMOCompOutput::SetHistoryOutputFields(CConfig *config){ /// BEGIN_GROUP: RMS_RES, DESCRIPTION: The root-mean-square residuals of the SOLUTION variables. @@ -694,60 +691,20 @@ void CNEMOCompOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSol } -bool CNEMOCompOutput::SetInit_Residuals(CConfig *config){ +bool CNEMOCompOutput::SetInit_Residuals(const CConfig *config){ return (config->GetTime_Marching() != TIME_MARCHING::STEADY && (curInnerIter == 0))|| (config->GetTime_Marching() == TIME_MARCHING::STEADY && (curInnerIter < 2)); } -void CNEMOCompOutput::SetAdditionalScreenOutput(CConfig *config){ +void CNEMOCompOutput::SetAdditionalScreenOutput(const CConfig *config){ if (config->GetFixed_CL_Mode()){ SetFixedCLScreenOutput(config); } } -void CNEMOCompOutput::SetFixedCLScreenOutput(CConfig *config){ - PrintingToolbox::CTablePrinter FixedCLSummary(&cout); - - if (fabs(historyOutput_Map["CL_DRIVER_COMMAND"].value) > 1e-16){ - FixedCLSummary.AddColumn("Fixed CL Mode", 40); - FixedCLSummary.AddColumn("Value", 30); - FixedCLSummary.SetAlign(PrintingToolbox::CTablePrinter::LEFT); - FixedCLSummary.PrintHeader(); - FixedCLSummary << "Current CL" << historyOutput_Map["LIFT"].value; - FixedCLSummary << "Target CL" << config->GetTarget_CL(); - FixedCLSummary << "Previous AOA" << historyOutput_Map["PREV_AOA"].value; - if (config->GetFinite_Difference_Mode()){ - FixedCLSummary << "Changed AoA by (Finite Difference step)" << historyOutput_Map["CL_DRIVER_COMMAND"].value; - lastInnerIter = curInnerIter - 1; - } - else - FixedCLSummary << "Changed AoA by" << historyOutput_Map["CL_DRIVER_COMMAND"].value; - FixedCLSummary.PrintFooter(); - SetScreen_Header(config); - } - - else if (config->GetFinite_Difference_Mode() && historyOutput_Map["AOA"].value == historyOutput_Map["PREV_AOA"].value){ - FixedCLSummary.AddColumn("Fixed CL Mode (Finite Difference)", 40); - FixedCLSummary.AddColumn("Value", 30); - FixedCLSummary.SetAlign(PrintingToolbox::CTablePrinter::LEFT); - FixedCLSummary.PrintHeader(); - FixedCLSummary << "Delta CL / Delta AoA" << config->GetdCL_dAlpha(); - FixedCLSummary << "Delta CD / Delta CL" << config->GetdCD_dCL(); - if (nDim == 3){ - FixedCLSummary << "Delta CMx / Delta CL" << config->GetdCMx_dCL(); - FixedCLSummary << "Delta CMy / Delta CL" << config->GetdCMy_dCL(); - } - FixedCLSummary << "Delta CMz / Delta CL" << config->GetdCMz_dCL(); - FixedCLSummary.PrintFooter(); - curInnerIter = lastInnerIter; - WriteMetaData(config); - curInnerIter = config->GetInnerIter(); - } -} - -bool CNEMOCompOutput::WriteHistoryFile_Output(CConfig *config) { +bool CNEMOCompOutput::WriteHistoryFile_Output(const CConfig *config) { return !config->GetFinite_Difference_Mode() && COutput::WriteHistoryFile_Output(config); } diff --git a/SU2_CFD/src/output/COutput.cpp b/SU2_CFD/src/output/COutput.cpp index fe736fbccb99..c37bcab5a650 100644 --- a/SU2_CFD/src/output/COutput.cpp +++ b/SU2_CFD/src/output/COutput.cpp @@ -980,7 +980,7 @@ bool COutput::MonitorTimeConvergence(CConfig *config, unsigned long TimeIteratio return TimeConvergence; } -void COutput::SetHistoryFile_Header(CConfig *config) { +void COutput::SetHistoryFile_Header(const CConfig *config) { unsigned short iField_Output = 0, iReqField = 0, @@ -1024,7 +1024,7 @@ void COutput::SetHistoryFile_Header(CConfig *config) { } -void COutput::SetHistoryFile_Output(CConfig *config) { +void COutput::SetHistoryFile_Output(const CConfig *config) { unsigned short iField_Output = 0, iReqField = 0, @@ -1060,14 +1060,14 @@ void COutput::SetHistoryFile_Output(CConfig *config) { histFile.flush(); } -void COutput::SetScreen_Header(CConfig *config) { +void COutput::SetScreen_Header(const CConfig *config) { if (config->GetMultizone_Problem()) multiZoneHeaderTable->PrintHeader(); convergenceTable->PrintHeader(); } -void COutput::SetScreen_Output(CConfig *config) { +void COutput::SetScreen_Output(const CConfig *config) { string RequestedField; @@ -1815,7 +1815,7 @@ void COutput::Postprocess_HistoryFields(CConfig *config){ } } -bool COutput::WriteScreen_Header(CConfig *config) { +bool COutput::WriteScreen_Header(const CConfig *config) { unsigned long RestartIter = 0; @@ -1867,7 +1867,7 @@ bool COutput::WriteScreen_Header(CConfig *config) { return false; } -bool COutput::WriteScreen_Output(CConfig *config) { +bool COutput::WriteScreen_Output(const CConfig *config) { unsigned long ScreenWrt_Freq_Inner = config->GetScreen_Wrt_Freq(2); unsigned long ScreenWrt_Freq_Outer = config->GetScreen_Wrt_Freq(1); @@ -1908,7 +1908,7 @@ bool COutput::WriteScreen_Output(CConfig *config) { } -bool COutput::WriteHistoryFile_Output(CConfig *config) { +bool COutput::WriteHistoryFile_Output(const CConfig *config) { unsigned long HistoryWrt_Freq_Inner = config->GetHistory_Wrt_Freq(2); unsigned long HistoryWrt_Freq_Outer = config->GetHistory_Wrt_Freq(1); diff --git a/SU2_CFD/src/solvers/CEulerSolver.cpp b/SU2_CFD/src/solvers/CEulerSolver.cpp index 19ee3038c6f6..3b68949a6bd4 100644 --- a/SU2_CFD/src/solvers/CEulerSolver.cpp +++ b/SU2_CFD/src/solvers/CEulerSolver.cpp @@ -4272,10 +4272,8 @@ void CEulerSolver::ReadActDisk_InputFile(CGeometry *geometry, CSolver **solver_c void CEulerSolver::SetFarfield_AoA(CGeometry *geometry, CSolver **solver_container, CConfig *config, unsigned short iMesh, bool Output) { - su2double AoA = 0.0, Vel_Infty[3], Vel_Infty_Mag; - unsigned short iDim; - unsigned long InnerIter = config->GetInnerIter(); - su2double Beta = config->GetAoS(); + const auto InnerIter = config->GetInnerIter(); + const su2double AoS = config->GetAoS()*PI_NUMBER/180.0; /* --- Initialize values at first iteration --- */ @@ -4292,7 +4290,7 @@ void CEulerSolver::SetFarfield_AoA(CGeometry *geometry, CSolver **solver_contain /*--- Retrieve the AoA (degrees) ---*/ - AoA = config->GetAoA(); + su2double AoA = config->GetAoA(); /* --- Set new AoA if needed --- */ @@ -4311,63 +4309,38 @@ void CEulerSolver::SetFarfield_AoA(CGeometry *geometry, CSolver **solver_contain /*--- Compute a new value for AoA on the fine mesh only (degrees)---*/ - if (iMesh == MESH_0) AoA = AoA + AoA_inc; - else { AoA = config->GetAoA(); } - - /*--- Only the fine mesh stores the updated values for AoA in config ---*/ - if (iMesh == MESH_0) { + AoA = AoA + AoA_inc; config->SetAoA(AoA); } - /*--- Update the freestream velocity vector at the farfield ---*/ - - for (iDim = 0; iDim < nDim; iDim++) - Vel_Infty[iDim] = GetVelocity_Inf(iDim); - - /*--- Compute the magnitude of the free stream velocity ---*/ + AoA *= PI_NUMBER/180.0; - Vel_Infty_Mag = 0; - for (iDim = 0; iDim < nDim; iDim++) - Vel_Infty_Mag += Vel_Infty[iDim]*Vel_Infty[iDim]; - Vel_Infty_Mag = sqrt(Vel_Infty_Mag); + /*--- Update the freestream velocity vector at the farfield + * Compute the new freestream velocity with the updated AoA, + * "Velocity_Inf" is shared with config. ---*/ - /*--- Compute the new freestream velocity with the updated AoA ---*/ + const su2double Vel_Infty_Mag = GeometryToolbox::Norm(nDim, Velocity_Inf); if (nDim == 2) { - Vel_Infty[0] = cos(AoA*PI_NUMBER/180.0)*Vel_Infty_Mag; - Vel_Infty[1] = sin(AoA*PI_NUMBER/180.0)*Vel_Infty_Mag; - } - if (nDim == 3) { - Vel_Infty[0] = cos(AoA*PI_NUMBER/180.0)*cos(Beta*PI_NUMBER/180.0)*Vel_Infty_Mag; - Vel_Infty[1] = sin(Beta)*Vel_Infty_Mag; - Vel_Infty[2] = sin(AoA*PI_NUMBER/180.0)*cos(Beta*PI_NUMBER/180.0)*Vel_Infty_Mag; + Velocity_Inf[0] = cos(AoA)*Vel_Infty_Mag; + Velocity_Inf[1] = sin(AoA)*Vel_Infty_Mag; } - - /*--- Store the new freestream velocity vector for the next iteration ---*/ - - for (iDim = 0; iDim < nDim; iDim++) { - Velocity_Inf[iDim] = Vel_Infty[iDim]; - } - - /*--- Only the fine mesh stores the updated values for velocity in config ---*/ - - if (iMesh == MESH_0) { - for (iDim = 0; iDim < nDim; iDim++) - config->SetVelocity_FreeStreamND(Vel_Infty[iDim], iDim); + else { + Velocity_Inf[0] = cos(AoA)*cos(AoS)*Vel_Infty_Mag; + Velocity_Inf[1] = sin(AoS)*Vel_Infty_Mag; + Velocity_Inf[2] = sin(AoA)*cos(AoS)*Vel_Infty_Mag; } - } } bool CEulerSolver::FixedCL_Convergence(CConfig* config, bool convergence) { - su2double Target_CL = config->GetTarget_CL(); - unsigned long curr_iter = config->GetInnerIter(); - unsigned long Iter_dCL_dAlpha = config->GetIter_dCL_dAlpha(); + const su2double Target_CL = config->GetTarget_CL(); + const auto curr_iter = config->GetInnerIter(); + const auto Iter_dCL_dAlpha = config->GetIter_dCL_dAlpha(); bool fixed_cl_conv = false; AoA_inc = 0.0; - /*--- if in Fixed CL mode, before finite differencing --- */ if (!Start_AoA_FD){ @@ -4450,7 +4423,6 @@ bool CEulerSolver::FixedCL_Convergence(CConfig* config, bool convergence) { if (convergence && (curr_iter - Iter_Update_AoA) > config->GetStartConv_Iter()) End_AoA_FD = true; - /* --- If Finite Difference mode is ending, reset AoA and calculate Coefficient Gradients --- */ if (End_AoA_FD){ @@ -4464,17 +4436,19 @@ bool CEulerSolver::FixedCL_Convergence(CConfig* config, bool convergence) { } void CEulerSolver::SetCoefficient_Gradients(CConfig *config) const{ - su2double dCL_dAlpha_, dCD_dCL_, dCMx_dCL_, dCMy_dCL_, dCMz_dCL_; - su2double AoA = config->GetAoA(); - if (AoA != AoA_Prev) { - /* --- Calculate gradients of coefficients w.r.t. CL --- */ + const su2double AoA = config->GetAoA(); - dCL_dAlpha_ = (TotalCoeff.CL-Total_CL_Prev)/(AoA - AoA_Prev); - dCD_dCL_ = (TotalCoeff.CD-Total_CD_Prev)/(TotalCoeff.CL-Total_CL_Prev); - dCMx_dCL_ = (TotalCoeff.CMx-Total_CMx_Prev)/(TotalCoeff.CL-Total_CL_Prev); - dCMy_dCL_ = (TotalCoeff.CMy-Total_CMy_Prev)/(TotalCoeff.CL-Total_CL_Prev); - dCMz_dCL_ = (TotalCoeff.CMz-Total_CMz_Prev)/(TotalCoeff.CL-Total_CL_Prev); + if (AoA == AoA_Prev) return; + + /*--- Calculate gradients of coefficients w.r.t. CL ---*/ + + const su2double dCL = TotalCoeff.CL - Total_CL_Prev; + const su2double dCL_dAlpha_ = dCL / (AoA - AoA_Prev); + const su2double dCD_dCL_ = (TotalCoeff.CD-Total_CD_Prev) / dCL; + const su2double dCMx_dCL_ = (TotalCoeff.CMx-Total_CMx_Prev) / dCL; + const su2double dCMy_dCL_ = (TotalCoeff.CMy-Total_CMy_Prev) / dCL; + const su2double dCMz_dCL_ = (TotalCoeff.CMz-Total_CMz_Prev) / dCL; /*--- Set the value of the dOF/dCL in the config file ---*/ @@ -4483,7 +4457,6 @@ void CEulerSolver::SetCoefficient_Gradients(CConfig *config) const{ config->SetdCMy_dCL(dCMy_dCL_); config->SetdCMz_dCL(dCMz_dCL_); config->SetdCL_dAlpha(dCL_dAlpha_); - } } void CEulerSolver::UpdateCustomBoundaryConditions(CGeometry **geometry_container, CConfig *config){