#ifndef MESH_HPP #define MESH_HPP #include <Kokkos_Core.hpp> #include <TinyVector.hpp> template <typename ConnectivityType> class Mesh { public: typedef ConnectivityType Connectivity; static constexpr size_t dimension = ConnectivityType::dimension; typedef TinyVector<dimension> Rd; private: const Connectivity& m_connectivity; Kokkos::View<Rd*> m_xr; public: const Connectivity& connectivity() const { return m_connectivity; } const size_t& numberOfNodes() const { return m_connectivity.numberOfNodes(); } const size_t& numberOfFaces() const { return m_connectivity.numberOfFaces(); } const size_t& numberOfCells() const { return m_connectivity.numberOfCells(); } Kokkos::View<Rd*> xr() { return m_xr; } const Kokkos::View<const Rd*> xr() const { return m_xr; } // pas constant Mesh(const Connectivity& connectivity) : m_connectivity(connectivity), m_xr("xr", connectivity.numberOfNodes()) { const double delta_x = 1./connectivity.numberOfCells(); Kokkos::parallel_for(connectivity.numberOfNodes(), KOKKOS_LAMBDA(const int& r){ m_xr[r][0] = r*delta_x; }); } // pas non constant /* Mesh(const Connectivity& connectivity) : m_connectivity(connectivity), m_xr("xr", connectivity.numberOfNodes()) { const double delta_x = 1./connectivity.numberOfCells(); Kokkos::parallel_for(connectivity.numberOfNodes(), KOKKOS_LAMBDA(const int& r){ if (r%4 == 1) { m_xr[r][0] = (r*2+1)*0.5*delta_x; } else { if (r%4==3) { m_xr[r][0] = ((r*3-1)/3.)*delta_x; } else { m_xr[r][0] = r*delta_x; } } }); } */ ~Mesh() { ; } }; #endif // MESH_HPP