From 2b418bb1f619f2ca5eb6ca8ad3ad4fc12491cfc2 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 9 May 2020 00:30:06 +0100 Subject: [PATCH 1/3] linear solver history for discrete adjoint solvers --- Common/include/linear_algebra/CSysSolve.hpp | 13 ++++++++++--- Common/src/linear_algebra/CSysSolve.cpp | 9 ++++++++- SU2_CFD/src/output/CAdjElasticityOutput.cpp | 6 ++++++ SU2_CFD/src/output/CAdjFlowCompOutput.cpp | 19 ++++++++++++++++++- SU2_CFD/src/output/CAdjFlowIncOutput.cpp | 19 ++++++++++++++++++- SU2_CFD/src/output/CAdjHeatOutput.cpp | 18 ++++++++++++++++-- SU2_CFD/src/output/CElasticityOutput.cpp | 4 ++-- SU2_CFD/src/output/CFlowCompFEMOutput.cpp | 6 ++++-- SU2_CFD/src/output/CHeatOutput.cpp | 12 +++++++----- SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp | 3 +++ SU2_CFD/src/solvers/CDiscAdjSolver.cpp | 3 +++ 11 files changed, 95 insertions(+), 17 deletions(-) diff --git a/Common/include/linear_algebra/CSysSolve.hpp b/Common/include/linear_algebra/CSysSolve.hpp index dce83b851626..5315cf351ef4 100644 --- a/Common/include/linear_algebra/CSysSolve.hpp +++ b/Common/include/linear_algebra/CSysSolve.hpp @@ -78,8 +78,9 @@ class CSysSolve { private: - bool mesh_deform; /*!< \brief Operate in mesh deformation mode, changes the source of solver options. */ - ScalarType Residual; /*!< \brief Residual at the end of a call to Solve. */ + bool mesh_deform; /*!< \brief Operate in mesh deformation mode, changes the source of solver options. */ + ScalarType Residual=1e-20; /*!< \brief Residual at the end of a call to Solve or Solve_b. */ + unsigned long Iterations=0;/*!< \brief Iterations done in Solve or Solve_b. */ mutable bool cg_ready; /*!< \brief Indicate if memory used by CG is allocated. */ mutable bool bcg_ready; /*!< \brief Indicate if memory used by BCGSTAB is allocated. */ @@ -313,9 +314,15 @@ class CSysSolve { unsigned long Solve_b(MatrixType & Jacobian, const CSysVector & LinSysRes, CSysVector & LinSysSol, CGeometry *geometry, CConfig *config); + /*! + * \brief Get the number of iterations. + * \return The number of iterations done by Solve or Solve_b + */ + inline ScalarType GetIterations(void) const { return Iterations; } + /*! * \brief Get the final residual. - * \return The residual at the end of Solve + * \return The residual at the end of Solve or Solve_b */ inline ScalarType GetResidual(void) const { return Residual; } diff --git a/Common/src/linear_algebra/CSysSolve.cpp b/Common/src/linear_algebra/CSysSolve.cpp index 2b14a70df339..51351eccf703 100644 --- a/Common/src/linear_algebra/CSysSolve.cpp +++ b/Common/src/linear_algebra/CSysSolve.cpp @@ -937,13 +937,17 @@ unsigned long CSysSolve::Solve(CSysMatrix & Jacobian, co Jacobian.BuildPastixPreconditioner(geometry, config, KindSolver); Jacobian.ComputePastixPreconditioner(*LinSysRes_ptr, *LinSysSol_ptr, geometry, config); IterLinSol = 1; + residual = 1e-20; break; default: SU2_MPI::Error("Unknown type of linear solver.",CURRENT_FUNCTION); } SU2_OMP_MASTER - Residual = residual; + { + Residual = residual; + Iterations = IterLinSol; + } HandleTemporariesOut(LinSysSol); @@ -1074,6 +1078,7 @@ unsigned long CSysSolve::Solve_b(CSysMatrix & Jacobian, Jacobian.BuildPastixPreconditioner(geometry, config, KindSolver, RequiresTranspose); Jacobian.ComputePastixPreconditioner(*LinSysRes_ptr, *LinSysSol_ptr, geometry, config); IterLinSol = 1; + Residual = 1e-20; break; default: SU2_MPI::Error("The specified linear solver is not yet implemented for the discrete adjoint method.", CURRENT_FUNCTION); @@ -1084,8 +1089,10 @@ unsigned long CSysSolve::Solve_b(CSysMatrix & Jacobian, delete precond; + Iterations = IterLinSol; return IterLinSol; #else + Iterations = 0; return 0; #endif } diff --git a/SU2_CFD/src/output/CAdjElasticityOutput.cpp b/SU2_CFD/src/output/CAdjElasticityOutput.cpp index 7cb3e8a0aa07..53bf706e195b 100644 --- a/SU2_CFD/src/output/CAdjElasticityOutput.cpp +++ b/SU2_CFD/src/output/CAdjElasticityOutput.cpp @@ -103,6 +103,9 @@ void CAdjElasticityOutput::SetHistoryOutputFields(CConfig *config){ AddHistoryOutput("COMBO", "ObjFun", ScreenOutputFormat::SCIENTIFIC, "COMBO", "", HistoryFieldType::COEFFICIENT); + AddHistoryOutput("LINSOL_ITER", "LinSolIter", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); + AddHistoryOutput("LINSOL_RESIDUAL", "LinSolRes", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); + } inline void CAdjElasticityOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver **solver) { @@ -131,6 +134,9 @@ inline void CAdjElasticityOutput::LoadHistoryData(CConfig *config, CGeometry *ge SetHistoryOutputValue("COMBO", solver[FEA_SOL]->GetTotal_ComboObj()); + SetHistoryOutputValue("LINSOL_ITER", solver[ADJFEA_SOL]->GetIterLinSolver()); + SetHistoryOutputValue("LINSOL_RESIDUAL", log10(solver[ADJFEA_SOL]->GetResLinSolver())); + } void CAdjElasticityOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolver **solver, unsigned long iPoint){ diff --git a/SU2_CFD/src/output/CAdjFlowCompOutput.cpp b/SU2_CFD/src/output/CAdjFlowCompOutput.cpp index 7d3958d1bb33..971d9a0519c4 100644 --- a/SU2_CFD/src/output/CAdjFlowCompOutput.cpp +++ b/SU2_CFD/src/output/CAdjFlowCompOutput.cpp @@ -193,12 +193,21 @@ void CAdjFlowCompOutput::SetHistoryOutputFields(CConfig *config){ AddHistoryOutput("SENS_TEMP", "Sens_Temp", ScreenOutputFormat::SCIENTIFIC, "SENSITIVITY", "Sensitivity of the objective function with respect to the far-field temperature.", HistoryFieldType::COEFFICIENT); /// END_GROUP + AddHistoryOutput("LINSOL_ITER", "LinSolIter", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); + AddHistoryOutput("LINSOL_RESIDUAL", "LinSolRes", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); + + if (config->GetDeform_Mesh()){ + AddHistoryOutput("DEFORM_ITER", "DeformIter", ScreenOutputFormat::INTEGER, "DEFORM", "Linear solver iterations for the mesh deformation"); + AddHistoryOutput("DEFORM_RESIDUAL", "DeformRes", ScreenOutputFormat::FIXED, "DEFORM", "Residual of the linear solver for the mesh deformation"); + } + } void CAdjFlowCompOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver **solver){ CSolver* adjflow_solver = solver[ADJFLOW_SOL]; CSolver* adjturb_solver = solver[ADJTURB_SOL]; + CSolver* mesh_solver = solver[MESH_SOL]; SetHistoryOutputValue("RMS_ADJ_DENSITY", log10(adjflow_solver->GetRes_RMS(0))); SetHistoryOutputValue("RMS_ADJ_MOMENTUM-X", log10(adjflow_solver->GetRes_RMS(1))); @@ -237,7 +246,7 @@ void CAdjFlowCompOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, C break; case SST: SetHistoryOutputValue("MAX_ADJ_TKE", log10(adjturb_solver->GetRes_Max(0))); - SetHistoryOutputValue("MAX_ADJ_DISSIPATION", log10(adjturb_solver->GetRes_Max(1))); + SetHistoryOutputValue("MAX_ADJ_DISSIPATION", log10(adjturb_solver->GetRes_Max(1))); break; default: break; } @@ -273,6 +282,14 @@ void CAdjFlowCompOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, C SetHistoryOutputValue("SENS_PRESS", adjflow_solver->GetTotal_Sens_Press()); SetHistoryOutputValue("SENS_TEMP", adjflow_solver->GetTotal_Sens_Temp()); + SetHistoryOutputValue("LINSOL_ITER", adjflow_solver->GetIterLinSolver()); + SetHistoryOutputValue("LINSOL_RESIDUAL", log10(adjflow_solver->GetResLinSolver())); + + if (config->GetDeform_Mesh()) { + SetHistoryOutputValue("DEFORM_ITER", mesh_solver->System.GetIterations()); + SetHistoryOutputValue("DEFORM_RESIDUAL", log10(mesh_solver->System.GetResidual())); + } + } void CAdjFlowCompOutput::SetVolumeOutputFields(CConfig *config){ diff --git a/SU2_CFD/src/output/CAdjFlowIncOutput.cpp b/SU2_CFD/src/output/CAdjFlowIncOutput.cpp index 03ca678c971f..33cf821abc37 100644 --- a/SU2_CFD/src/output/CAdjFlowIncOutput.cpp +++ b/SU2_CFD/src/output/CAdjFlowIncOutput.cpp @@ -203,6 +203,14 @@ void CAdjFlowIncOutput::SetHistoryOutputFields(CConfig *config){ AddHistoryOutput("SENS_PRESS_OUT", "Sens_Pout", ScreenOutputFormat::SCIENTIFIC, "SENSITIVITY", "Sensitivity of the objective function with respect to the outlet pressure.", HistoryFieldType::COEFFICIENT); /// END_GROUP + AddHistoryOutput("LINSOL_ITER", "LinSolIter", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); + AddHistoryOutput("LINSOL_RESIDUAL", "LinSolRes", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); + + if (config->GetDeform_Mesh()){ + AddHistoryOutput("DEFORM_ITER", "DeformIter", ScreenOutputFormat::INTEGER, "DEFORM", "Linear solver iterations for the mesh deformation"); + AddHistoryOutput("DEFORM_RESIDUAL", "DeformRes", ScreenOutputFormat::FIXED, "DEFORM", "Residual of the linear solver for the mesh deformation"); + } + } void CAdjFlowIncOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver **solver) { @@ -210,7 +218,8 @@ void CAdjFlowIncOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CS CSolver* adjflow_solver = solver[ADJFLOW_SOL]; CSolver* adjturb_solver = solver[ADJTURB_SOL]; CSolver* adjheat_solver = solver[ADJHEAT_SOL]; - CSolver* adjrad_solver = solver[ADJRAD_SOL]; + CSolver* adjrad_solver = solver[ADJRAD_SOL]; + CSolver* mesh_solver = solver[MESH_SOL]; SetHistoryOutputValue("RMS_ADJ_PRESSURE", log10(adjflow_solver->GetRes_RMS(0))); SetHistoryOutputValue("RMS_ADJ_VELOCITY-X", log10(adjflow_solver->GetRes_RMS(1))); @@ -303,6 +312,14 @@ void CAdjFlowIncOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CS SetHistoryOutputValue("SENS_VEL_IN", adjflow_solver->GetTotal_Sens_ModVel()); SetHistoryOutputValue("SENS_PRESS_OUT", adjflow_solver->GetTotal_Sens_BPress()); + SetHistoryOutputValue("LINSOL_ITER", adjflow_solver->GetIterLinSolver()); + SetHistoryOutputValue("LINSOL_RESIDUAL", log10(adjflow_solver->GetResLinSolver())); + + if (config->GetDeform_Mesh()) { + SetHistoryOutputValue("DEFORM_ITER", mesh_solver->System.GetIterations()); + SetHistoryOutputValue("DEFORM_RESIDUAL", log10(mesh_solver->System.GetResidual())); + } + } void CAdjFlowIncOutput::SetVolumeOutputFields(CConfig *config){ diff --git a/SU2_CFD/src/output/CAdjHeatOutput.cpp b/SU2_CFD/src/output/CAdjHeatOutput.cpp index a02fa1c66139..4d3f817a1c39 100644 --- a/SU2_CFD/src/output/CAdjHeatOutput.cpp +++ b/SU2_CFD/src/output/CAdjHeatOutput.cpp @@ -105,6 +105,14 @@ void CAdjHeatOutput::SetHistoryOutputFields(CConfig *config){ AddHistoryOutput("SENS_GEO", "Sens_Geo", ScreenOutputFormat::SCIENTIFIC, "SENSITIVITY", "Sum of the geometrical sensitivities on all markers set in MARKER_MONITORING.", HistoryFieldType::COEFFICIENT); /// END_GROUP + AddHistoryOutput("LINSOL_ITER", "LinSolIter", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); + AddHistoryOutput("LINSOL_RESIDUAL", "LinSolRes", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); + + if (config->GetDeform_Mesh()){ + AddHistoryOutput("DEFORM_ITER", "DeformIter", ScreenOutputFormat::INTEGER, "DEFORM", "Linear solver iterations for the mesh deformation"); + AddHistoryOutput("DEFORM_RESIDUAL", "DeformRes", ScreenOutputFormat::FIXED, "DEFORM", "Residual of the linear solver for the mesh deformation"); + } + } void CAdjHeatOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver **solver) { @@ -121,6 +129,13 @@ void CAdjHeatOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolv SetHistoryOutputValue("SENS_GEO", adjheat_solver->GetTotal_Sens_Geo()); + SetHistoryOutputValue("LINSOL_ITER", adjheat_solver->GetIterLinSolver()); + SetHistoryOutputValue("LINSOL_RESIDUAL", log10(adjheat_solver->GetResLinSolver())); + + if (config->GetDeform_Mesh()) { + SetHistoryOutputValue("DEFORM_ITER", solver[MESH_SOL]->System.GetIterations()); + SetHistoryOutputValue("DEFORM_RESIDUAL", log10(solver[MESH_SOL]->System.GetResidual())); + } } @@ -169,7 +184,7 @@ void CAdjHeatOutput::LoadVolumeData(CConfig *config, CGeometry *geometry, CSolve if (nDim == 3) SetVolumeOutputValue("COORD-Z", iPoint, Node_Geo->GetCoord(2)); - SetVolumeOutputValue("ADJ_TEMPERATURE", iPoint, Node_AdjHeat->GetSolution(iPoint, 0)); + SetVolumeOutputValue("ADJ_TEMPERATURE", iPoint, Node_AdjHeat->GetSolution(iPoint, 0)); // Residuals SetVolumeOutputValue("RES_ADJ_TEMPERATURE", iPoint, Node_AdjHeat->GetSolution(iPoint, 0) - Node_AdjHeat->GetSolution_Old(iPoint, 0)); @@ -187,4 +202,3 @@ void CAdjHeatOutput::LoadSurfaceData(CConfig *config, CGeometry *geometry, CSolv } - diff --git a/SU2_CFD/src/output/CElasticityOutput.cpp b/SU2_CFD/src/output/CElasticityOutput.cpp index c2148ee88cef..976875b9e598 100644 --- a/SU2_CFD/src/output/CElasticityOutput.cpp +++ b/SU2_CFD/src/output/CElasticityOutput.cpp @@ -139,8 +139,8 @@ void CElasticityOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CS void CElasticityOutput::SetHistoryOutputFields(CConfig *config){ - AddHistoryOutput("LINSOL_ITER", "LinSolIter", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); - AddHistoryOutput("LINSOL_RESIDUAL", "LinSolRes", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); + AddHistoryOutput("LINSOL_ITER", "LinSolIter", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); + AddHistoryOutput("LINSOL_RESIDUAL", "LinSolRes", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); // Residuals diff --git a/SU2_CFD/src/output/CFlowCompFEMOutput.cpp b/SU2_CFD/src/output/CFlowCompFEMOutput.cpp index 0a243c8eb2f3..ba1a41d41247 100644 --- a/SU2_CFD/src/output/CFlowCompFEMOutput.cpp +++ b/SU2_CFD/src/output/CFlowCompFEMOutput.cpp @@ -115,8 +115,9 @@ void CFlowCompFEMOutput::SetHistoryOutputFields(CConfig *config){ AddHistoryOutput("MAX_ENERGY", "max[RhoE]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of the energy.", HistoryFieldType::RESIDUAL); /// END_GROUP - /// DESCRIPTION: Linear solver iterations - AddHistoryOutput("LINSOL_ITER", "Linear_Solver_Iterations", ScreenOutputFormat::INTEGER, "LINSOL_ITER", "Number of iterations of the linear solver."); + /// DESCRIPTION: Linear solver iterations and residual + AddHistoryOutput("LINSOL_ITER", "LinSolIter", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); + AddHistoryOutput("LINSOL_RESIDUAL", "LinSolRes", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); AddHistoryOutput("CFL_NUMBER", "CFL number", ScreenOutputFormat::SCIENTIFIC, "CFL_NUMBER", "Current value of the CFL number"); @@ -264,6 +265,7 @@ void CFlowCompFEMOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, C SetHistoryOutputValue("AOA", config->GetAoA()); SetHistoryOutputValue("LINSOL_ITER", flow_solver->GetIterLinSolver()); + SetHistoryOutputValue("LINSOL_RESIDUAL", log10(flow_solver->GetResLinSolver())); SetHistoryOutputValue("CFL_NUMBER", config->GetCFL(MESH_0)); /*--- Set the analyse surface history values --- */ diff --git a/SU2_CFD/src/output/CHeatOutput.cpp b/SU2_CFD/src/output/CHeatOutput.cpp index 42bfc5361d06..10aa68218263 100644 --- a/SU2_CFD/src/output/CHeatOutput.cpp +++ b/SU2_CFD/src/output/CHeatOutput.cpp @@ -82,15 +82,16 @@ void CHeatOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver CSolver* heat_solver = solver[HEAT_SOL]; - SetHistoryOutputValue("TOTAL_HEATFLUX", heat_solver->GetTotal_HeatFlux()); + SetHistoryOutputValue("TOTAL_HEATFLUX", heat_solver->GetTotal_HeatFlux()); SetHistoryOutputValue("HEATFLUX_MAX", heat_solver->GetTotal_MaxHeatFlux()); - SetHistoryOutputValue("AVG_TEMPERATURE", heat_solver->GetTotal_AvgTemperature()); + SetHistoryOutputValue("AVG_TEMPERATURE", heat_solver->GetTotal_AvgTemperature()); SetHistoryOutputValue("RMS_TEMPERATURE", log10(heat_solver->GetRes_RMS(0))); SetHistoryOutputValue("MAX_TEMPERATURE", log10(heat_solver->GetRes_Max(0))); if (multiZone) SetHistoryOutputValue("BGS_TEMPERATURE", log10(heat_solver->GetRes_BGS(0))); SetHistoryOutputValue("LINSOL_ITER", heat_solver->GetIterLinSolver()); + SetHistoryOutputValue("LINSOL_RESIDUAL", log10(heat_solver->GetResLinSolver())); SetHistoryOutputValue("CFL_NUMBER", config->GetCFL(MESH_0)); } @@ -98,14 +99,15 @@ void CHeatOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, CSolver void CHeatOutput::SetHistoryOutputFields(CConfig *config){ - AddHistoryOutput("LINSOL_ITER", "Linear_Solver_Iterations", ScreenOutputFormat::INTEGER, "LINSOL_ITER", "Linear solver iterations"); + AddHistoryOutput("LINSOL_ITER", "LinSolIter", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); + AddHistoryOutput("LINSOL_RESIDUAL", "LinSolRes", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); AddHistoryOutput("RMS_TEMPERATURE", "rms[T]", ScreenOutputFormat::FIXED, "RMS_RES", "Root mean square residual of the temperature", HistoryFieldType::RESIDUAL); AddHistoryOutput("MAX_TEMPERATURE", "max[T]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of the temperature", HistoryFieldType::RESIDUAL); AddHistoryOutput("BGS_TEMPERATURE", "bgs[T]", ScreenOutputFormat::FIXED, "BGS_RES", "Block-Gauss seidel residual of the temperature", HistoryFieldType::RESIDUAL); - AddHistoryOutput("TOTAL_HEATFLUX", "HF", ScreenOutputFormat::SCIENTIFIC, "HEAT", "Total heatflux on all surfaces defined in MARKER_MONITORING", HistoryFieldType::COEFFICIENT); - AddHistoryOutput("HEATFLUX_MAX", "MaxHF", ScreenOutputFormat::SCIENTIFIC, "HEAT", "Total maximal heatflux on all surfaces defined in MARKER_MONITORING", HistoryFieldType::COEFFICIENT); + AddHistoryOutput("TOTAL_HEATFLUX", "HF", ScreenOutputFormat::SCIENTIFIC, "HEAT", "Total heatflux on all surfaces defined in MARKER_MONITORING", HistoryFieldType::COEFFICIENT); + AddHistoryOutput("HEATFLUX_MAX", "MaxHF", ScreenOutputFormat::SCIENTIFIC, "HEAT", "Total maximal heatflux on all surfaces defined in MARKER_MONITORING", HistoryFieldType::COEFFICIENT); AddHistoryOutput("AVG_TEMPERATURE", "AvgTemp", ScreenOutputFormat::SCIENTIFIC, "HEAT", "Total average temperature on all surfaces defined in MARKER_MONITORING", HistoryFieldType::COEFFICIENT); AddHistoryOutput("CFL_NUMBER", "CFL number", ScreenOutputFormat::SCIENTIFIC, "CFL_NUMBER", "Current value of the CFL number"); diff --git a/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp b/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp index 30779f3bb332..d95139863550 100644 --- a/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp +++ b/SU2_CFD/src/solvers/CDiscAdjFEASolver.cpp @@ -669,6 +669,9 @@ void CDiscAdjFEASolver::ExtractAdjoint_Solution(CGeometry *geometry, CConfig *co SetResidual_RMS(geometry, config); + SetIterLinSolver(direct_solver->System.GetIterations()); + SetResLinSolver(direct_solver->System.GetResidual()); + } void CDiscAdjFEASolver::ExtractAdjoint_Variables(CGeometry *geometry, CConfig *config){ diff --git a/SU2_CFD/src/solvers/CDiscAdjSolver.cpp b/SU2_CFD/src/solvers/CDiscAdjSolver.cpp index 6d85ca7d52dd..7f6baa85cba6 100644 --- a/SU2_CFD/src/solvers/CDiscAdjSolver.cpp +++ b/SU2_CFD/src/solvers/CDiscAdjSolver.cpp @@ -520,6 +520,9 @@ void CDiscAdjSolver::ExtractAdjoint_Solution(CGeometry *geometry, CConfig *confi SetResidual_RMS(geometry, config); + SetIterLinSolver(direct_solver->System.GetIterations()); + SetResLinSolver(direct_solver->System.GetResidual()); + if (time_n_needed) { for (auto iPoint = 0u; iPoint < nPoint; iPoint++) { From b9aed1167308132f9f32eccffda967cf8ba07d35 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Sat, 9 May 2020 10:40:20 +0100 Subject: [PATCH 2/3] wrong return type --- Common/include/linear_algebra/CSysSolve.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Common/include/linear_algebra/CSysSolve.hpp b/Common/include/linear_algebra/CSysSolve.hpp index 5315cf351ef4..8bcf04bc9418 100644 --- a/Common/include/linear_algebra/CSysSolve.hpp +++ b/Common/include/linear_algebra/CSysSolve.hpp @@ -318,7 +318,7 @@ class CSysSolve { * \brief Get the number of iterations. * \return The number of iterations done by Solve or Solve_b */ - inline ScalarType GetIterations(void) const { return Iterations; } + inline unsigned long GetIterations(void) const { return Iterations; } /*! * \brief Get the final residual. From 0a4b4f2b454bb6215c229522a64b8225d5aacfb6 Mon Sep 17 00:00:00 2001 From: Pedro Gomes Date: Mon, 18 May 2020 22:44:53 +0100 Subject: [PATCH 3/3] remove unused outputs for DG solver --- SU2_CFD/src/output/CFlowCompFEMOutput.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/SU2_CFD/src/output/CFlowCompFEMOutput.cpp b/SU2_CFD/src/output/CFlowCompFEMOutput.cpp index ba1a41d41247..e92acd95a56b 100644 --- a/SU2_CFD/src/output/CFlowCompFEMOutput.cpp +++ b/SU2_CFD/src/output/CFlowCompFEMOutput.cpp @@ -115,10 +115,6 @@ void CFlowCompFEMOutput::SetHistoryOutputFields(CConfig *config){ AddHistoryOutput("MAX_ENERGY", "max[RhoE]", ScreenOutputFormat::FIXED, "MAX_RES", "Maximum residual of the energy.", HistoryFieldType::RESIDUAL); /// END_GROUP - /// DESCRIPTION: Linear solver iterations and residual - AddHistoryOutput("LINSOL_ITER", "LinSolIter", ScreenOutputFormat::INTEGER, "LINSOL", "Number of iterations of the linear solver."); - AddHistoryOutput("LINSOL_RESIDUAL", "LinSolRes", ScreenOutputFormat::FIXED, "LINSOL", "Residual of the linear solver."); - AddHistoryOutput("CFL_NUMBER", "CFL number", ScreenOutputFormat::SCIENTIFIC, "CFL_NUMBER", "Current value of the CFL number"); /*--- Add analyze surface history fields --- */ @@ -264,8 +260,6 @@ void CFlowCompFEMOutput::LoadHistoryData(CConfig *config, CGeometry *geometry, C } SetHistoryOutputValue("AOA", config->GetAoA()); - SetHistoryOutputValue("LINSOL_ITER", flow_solver->GetIterLinSolver()); - SetHistoryOutputValue("LINSOL_RESIDUAL", log10(flow_solver->GetResLinSolver())); SetHistoryOutputValue("CFL_NUMBER", config->GetCFL(MESH_0)); /*--- Set the analyse surface history values --- */