diff --git a/src/mesh/MeshData.hpp b/src/mesh/MeshData.hpp index 4086090a27f7c6b21b69e8f65e66ad7ee8c77630..79c8cbba1662f325a43e4f2afe13d14ee766d31a 100644 --- a/src/mesh/MeshData.hpp +++ b/src/mesh/MeshData.hpp @@ -24,8 +24,8 @@ public: private: const MeshType& m_mesh; NodeByCellData<Rd> m_Cjr; - Kokkos::View<double**> m_ljr; - Kokkos::View<Rd**> m_njr; + NodeByCellData<double> m_ljr; + NodeByCellData<Rd> m_njr; Kokkos::View<Rd*> m_xj; Kokkos::View<double*> m_Vj; @@ -88,22 +88,16 @@ private: } }); - Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){ - const auto& cell_nodes = m_mesh.connectivity().m_cell_to_node_matrix.rowConst(j); - for (size_t R=0; R<cell_nodes.length; ++R) { - const Rd& Cjr = m_Cjr(j,R); - m_ljr(j,R) = l2Norm(Cjr); - } + const NodeByCellData<Rd>& Cjr = m_Cjr; + Kokkos::parallel_for(m_Cjr.numberOfValues(), KOKKOS_LAMBDA(const int& j){ + m_ljr.value(j) = l2Norm(Cjr.value(j)); }); - Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){ - const auto& cell_nodes = m_mesh.connectivity().m_cell_to_node_matrix.rowConst(j); - for (size_t R=0; R<cell_nodes.length; ++R) { - const Rd& Cjr = m_Cjr(j,R); - const double inv_ljr = 1./m_ljr(j,R); - m_njr(j,R) = inv_ljr*Cjr; - } + const NodeByCellData<double>& ljr = m_ljr; + Kokkos::parallel_for(m_Cjr.numberOfValues(), KOKKOS_LAMBDA(const int& j){ + m_njr.value(j) = (1./ljr.value(j))*Cjr.value(j); }); + } else if (dimension ==3) { const Kokkos::View<const Rd*> xr = m_mesh.xr(); @@ -155,21 +149,14 @@ private: } }); - Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) { - const auto& cell_nodes = m_mesh.connectivity().m_cell_to_node_matrix.rowConst(j); - for (size_t R=0; R<cell_nodes.length; ++R) { - const Rd& Cjr = m_Cjr(j,R); - m_ljr(j,R) = l2Norm(Cjr); - } + const NodeByCellData<Rd>& Cjr = m_Cjr; + Kokkos::parallel_for(m_Cjr.numberOfValues(), KOKKOS_LAMBDA(const int& j){ + m_ljr.value(j) = l2Norm(Cjr.value(j)); }); - Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) { - const auto& cell_nodes = m_mesh.connectivity().m_cell_to_node_matrix.rowConst(j); - for (size_t R=0; R<cell_nodes.length; ++R) { - const Rd& Cjr = m_Cjr(j,R); - const double inv_ljr = 1./m_ljr(j,R); - m_njr(j,R) = inv_ljr*Cjr; - } + const NodeByCellData<double>& ljr = m_ljr; + Kokkos::parallel_for(m_Cjr.numberOfValues(), KOKKOS_LAMBDA(const int& j){ + m_njr.value(j) = (1./ljr.value(j))*Cjr.value(j); }); } static_assert((dimension<=3), "only 1d, 2d and 3d are implemented"); @@ -186,12 +173,12 @@ public: return m_Cjr; } - const Kokkos::View<const double**> ljr() const + const NodeByCellData<double>& ljr() const { return m_ljr; } - const Kokkos::View<const Rd**> njr() const + const NodeByCellData<Rd>& njr() const { return m_njr; } @@ -216,8 +203,8 @@ public: MeshData(const MeshType& mesh) : m_mesh(mesh), m_Cjr(mesh.connectivity().m_node_id_per_cell_matrix), - m_ljr("ljr", mesh.numberOfCells(), mesh.connectivity().maxNbNodePerCell()), - m_njr("njr", mesh.numberOfCells(), mesh.connectivity().maxNbNodePerCell()), + m_ljr(mesh.connectivity().m_node_id_per_cell_matrix), + m_njr(mesh.connectivity().m_node_id_per_cell_matrix), m_xj("xj", mesh.numberOfCells()), m_Vj("Vj", mesh.numberOfCells()) { @@ -228,6 +215,7 @@ public: m_Cjr(j,1)= 1; }); // in 1d njr=Cjr +#warning set equality between njr and Cjr Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) { m_njr(j,0)=-1; m_njr(j,1)= 1; diff --git a/src/scheme/AcousticSolver.hpp b/src/scheme/AcousticSolver.hpp index e814a1434ffbcab623abe69aac02ed8b1a41503b..b0037cb511a068f909a158f4590be7a73b40ef5e 100644 --- a/src/scheme/AcousticSolver.hpp +++ b/src/scheme/AcousticSolver.hpp @@ -82,10 +82,10 @@ private: KOKKOS_INLINE_FUNCTION void computeAjr(const Kokkos::View<const double*>& rhocj, - const Kokkos::View<const double**>& ljr, - const Kokkos::View<const Rd**>& njr) + const NodeByCellData<Rd>& Cjr, + const NodeByCellData<double>& ljr, + const NodeByCellData<Rd>& njr) { - const NodeByCellData<Rd>& Cjr = m_mesh_data.Cjr(); Kokkos::parallel_for("new nested Ajr", m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j) { const size_t& nb_nodes =m_Ajr.numberOfSubValues(j); const double& rho_c = rhocj(j); @@ -222,11 +222,10 @@ private: const Kokkos::View<const double*>& cj, const Kokkos::View<const double*>& Vj, const NodeByCellData<Rd>& Cjr, - const Kokkos::View<const double**>& ljr, - const Kokkos::View<const Rd**>& njr) { + const NodeByCellData<double>& ljr, + const NodeByCellData<Rd>& njr) { const Kokkos::View<const double*> rhocj = computeRhoCj(rhoj, cj); - // const Kokkos::View<const Rdd**> Ajr = - computeAjr(rhocj, ljr, njr); + computeAjr(rhocj, Cjr, ljr, njr); const Kokkos::View<const Rdd*> Ar = computeAr(m_Ajr); const Kokkos::View<const Rd*> br = computeBr(m_Ajr, Cjr, uj, pj); @@ -271,7 +270,7 @@ public: double acoustic_dt(const Kokkos::View<const double*>& Vj, const Kokkos::View<const double*>& cj) const { - const Kokkos::View<const double**> ljr = m_mesh_data.ljr(); + const NodeByCellData<double>& ljr = m_mesh_data.ljr(); Kokkos::parallel_for(m_mesh.numberOfCells(), KOKKOS_LAMBDA(const int& j){ const auto& cell_nodes = m_mesh.connectivity().m_cell_to_node_matrix.rowConst(j); @@ -305,8 +304,8 @@ public: const Kokkos::View<const Rd*> xj = m_mesh_data.xj(); const Kokkos::View<const double*> Vj = m_mesh_data.Vj(); const NodeByCellData<Rd>& Cjr = m_mesh_data.Cjr(); - const Kokkos::View<const double**> ljr = m_mesh_data.ljr(); - const Kokkos::View<const Rd**> njr = m_mesh_data.njr(); + const NodeByCellData<double>& ljr = m_mesh_data.ljr(); + const NodeByCellData<Rd>& njr = m_mesh_data.njr(); Kokkos::View<Rd*> xr = m_mesh.xr(); computeExplicitFluxes(xr, xj, rhoj, uj, pj, cj, Vj, Cjr, ljr, njr);