From 7a75a9109a2f8cdca64630132c3031ce3c1feffe Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Mon, 6 Jul 2020 22:20:49 +0200 Subject: [PATCH] Get ride of Mesh::m_mutable_xr (at last) This impacts the use of AcousticSolver since updated mesh is now returned by AcousticSolver::computeNextStep Note that the code of AcousticSolver is now quite crappy and will be reworked Closes #9 --- src/language/modules/SchemeModule.cpp | 2 +- src/main.cpp | 6 +++--- src/mesh/Mesh.hpp | 10 +--------- src/scheme/AcousticSolver.hpp | 17 +++++++++++------ 4 files changed, 16 insertions(+), 19 deletions(-) diff --git a/src/language/modules/SchemeModule.cpp b/src/language/modules/SchemeModule.cpp index 9a367ef65..b1d606882 100644 --- a/src/language/modules/SchemeModule.cpp +++ b/src/language/modules/SchemeModule.cpp @@ -180,7 +180,7 @@ struct GlaceScheme << " time=" << rang::fg::green << t << rang::style::reset << " dt=" << rang::fgB::blue << dt << rang::style::reset << '\n'; - acoustic_solver.computeNextStep(t, dt, unknowns); + m_mesh = acoustic_solver.computeNextStep(dt, unknowns); block_eos.updatePandCFromRhoE(); diff --git a/src/main.cpp b/src/main.cpp index aa9e2e3ff..daf0d4edb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -155,7 +155,7 @@ main(int argc, char* argv[]) if (t + dt > tmax) { dt = tmax - t; } - acoustic_solver.computeNextStep(t, dt, unknowns); + mesh = acoustic_solver.computeNextStep(dt, unknowns); block_eos.updatePandCFromRhoE(); @@ -272,7 +272,7 @@ main(int argc, char* argv[]) if (t + dt > tmax) { dt = tmax - t; } - acoustic_solver.computeNextStep(t, dt, unknowns); + mesh = acoustic_solver.computeNextStep(dt, unknowns); block_eos.updatePandCFromRhoE(); @@ -378,7 +378,7 @@ main(int argc, char* argv[]) if (t + dt > tmax) { dt = tmax - t; } - acoustic_solver.computeNextStep(t, dt, unknowns); + mesh = acoustic_solver.computeNextStep(dt, unknowns); block_eos.updatePandCFromRhoE(); t += dt; diff --git a/src/mesh/Mesh.hpp b/src/mesh/Mesh.hpp index 0fe378e7e..d04807650 100644 --- a/src/mesh/Mesh.hpp +++ b/src/mesh/Mesh.hpp @@ -20,7 +20,6 @@ class Mesh final : public IMesh private: const std::shared_ptr<const Connectivity> m_connectivity; NodeValue<const Rd> m_xr; - NodeValue<Rd> m_mutable_xr; public: PUGS_INLINE @@ -72,16 +71,9 @@ class Mesh final : public IMesh return m_xr; } - PUGS_INLINE - NodeValue<Rd> - mutableXr() const - { - return m_mutable_xr; - } - PUGS_INLINE Mesh(const std::shared_ptr<const Connectivity>& connectivity, NodeValue<Rd>& xr) - : m_connectivity{connectivity}, m_xr{xr}, m_mutable_xr{xr} + : m_connectivity{connectivity}, m_xr{xr} { ; } diff --git a/src/scheme/AcousticSolver.hpp b/src/scheme/AcousticSolver.hpp index 0a5ef970d..c531154bd 100644 --- a/src/scheme/AcousticSolver.hpp +++ b/src/scheme/AcousticSolver.hpp @@ -34,7 +34,7 @@ class AcousticSolver using MeshDataType = MeshData<Dimension>; using UnknownsType = FiniteVolumesEulerUnknowns<MeshDataType>; - const std::shared_ptr<MeshType> m_mesh; + std::shared_ptr<const MeshType> m_mesh; const typename MeshType::Connectivity& m_connectivity; const std::vector<BoundaryConditionHandler>& m_boundary_condition_list; @@ -229,7 +229,7 @@ class AcousticSolver CellValue<double> m_Vj_over_cj; public: - AcousticSolver(std::shared_ptr<MeshType>& p_mesh, const std::vector<BoundaryConditionHandler>& bc_list) + AcousticSolver(std::shared_ptr<const MeshType> p_mesh, const std::vector<BoundaryConditionHandler>& bc_list) : m_mesh(p_mesh), m_connectivity(m_mesh->connectivity()), m_boundary_condition_list(bc_list), @@ -268,8 +268,8 @@ class AcousticSolver return min(m_Vj_over_cj); } - void - computeNextStep(double, double dt, UnknownsType& unknowns) + [[nodiscard]] std::shared_ptr<const MeshType> + computeNextStep(double dt, UnknownsType& unknowns) { CellValue<double>& rhoj = unknowns.rhoj(); CellValue<Rd>& uj = unknowns.uj(); @@ -311,15 +311,20 @@ class AcousticSolver parallel_for( m_mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { ej[j] = Ej[j] - 0.5 * (uj[j], uj[j]); }); - NodeValue<Rd> new_xr = m_mesh->mutableXr(); + NodeValue<Rd> new_xr = copy(m_mesh->xr()); parallel_for( m_mesh->numberOfNodes(), PUGS_LAMBDA(NodeId r) { new_xr[r] += dt * ur[r]; }); MeshDataManager::instance().getMeshData(*m_mesh).updateAllData(); + m_mesh = std::make_shared<MeshType>(m_mesh->shared_connectivity(), new_xr); + CellValue<const double> new_Vj = MeshDataManager::instance().getMeshData(*m_mesh).Vj(); + const CellValue<const double> mj = unknowns.mj(); parallel_for( - m_mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { rhoj[j] = mj[j] / Vj[j]; }); + m_mesh->numberOfCells(), PUGS_LAMBDA(CellId j) { rhoj[j] = mj[j] / new_Vj[j]; }); + + return m_mesh; } }; -- GitLab