Skip to content
Snippets Groups Projects
Select Git revision
  • 5b71490ecaf766468b7d3d28e5ba310896715ebf
  • develop default protected
  • save_clemence
  • feature/gmsh-reader
  • origin/stage/bouguettaia
  • feature/kinetic-schemes
  • feature/reconstruction
  • feature/local-dt-fsi
  • feature/composite-scheme-sources
  • feature/composite-scheme-other-fluxes
  • feature/serraille
  • feature/variational-hydro
  • feature/composite-scheme
  • hyperplastic
  • feature/polynomials
  • feature/gks
  • feature/implicit-solver-o2
  • feature/coupling_module
  • feature/implicit-solver
  • feature/merge-local-dt-fsi
  • master protected
  • v0.5.0 protected
  • v0.4.1 protected
  • v0.4.0 protected
  • v0.3.0 protected
  • v0.2.0 protected
  • v0.1.0 protected
  • Kidder
  • v0.0.4 protected
  • v0.0.3 protected
  • v0.0.2 protected
  • v0 protected
  • v0.0.1 protected
33 results

Mesh.hpp

Blame
  • Mesh.hpp 2.72 KiB
    #ifndef MESH_HPP
    #define MESH_HPP
    
    #include <Kokkos_Core.hpp>
    #include <TinyVector.hpp>
    
    class Connectivity1D
    {
    public:
      static constexpr size_t dimension = 1;
    
    private:
      const size_t m_number_of_cells;
      const size_t m_number_of_nodes;
    
      Kokkos::View<size_t*[2]> m_cell_nodes;
      Kokkos::View<size_t*> m_node_nb_cells;
      Kokkos::View<size_t*[2]> m_node_cells;
      Kokkos::View<size_t*[2]> m_node_cell_local_node;
    
    public:
      const size_t& numberOfNodes() const
      {
        return m_number_of_nodes;
      }
    
      const size_t& numberOfCells() const
      {
        return m_number_of_cells;
      }
    
      const Kokkos::View<const size_t*[2]> cellNodes() const
      {
        return m_cell_nodes;
      }
    
      const Kokkos::View<const size_t*> nodeNbCells() const
      {
        return m_node_nb_cells;
      }
    
      const Kokkos::View<const size_t*[2]> nodeCells() const
      {
        return m_node_cells;
      }
    
      const Kokkos::View<const size_t*[2]> nodeCellLocalNode() const
      {
        return m_node_cell_local_node;
      }
    
      Connectivity1D(const Connectivity1D&) = delete;
      
      Connectivity1D(const size_t& number_of_cells)
        : m_number_of_cells (number_of_cells),
          m_number_of_nodes (number_of_cells+1),
          m_cell_nodes ("cell_nodes", m_number_of_cells),
          m_node_nb_cells ("node_nb_cells",m_number_of_nodes),
          m_node_cells ("node_cells", m_number_of_nodes),
          m_node_cell_local_node ("node_cell_local_node", m_number_of_nodes)
      {
        assert(number_of_cells>0);
    
        Kokkos::parallel_for(m_number_of_cells, KOKKOS_LAMBDA(const size_t& j) {
    	m_cell_nodes(j,0)=j;
    	m_cell_nodes(j,1)=j+1;
          });
    
        Kokkos::parallel_for(m_number_of_nodes, KOKKOS_LAMBDA(const size_t& r) {
    	m_node_nb_cells(r) = 2;
          });
        m_node_nb_cells(0) = 1;
        m_node_nb_cells(m_number_of_nodes-1) = 1;
    
    
        m_node_cells(0,0) = 0;
        Kokkos::parallel_for(m_number_of_nodes-2, KOKKOS_LAMBDA(const int& r) {
    	m_node_cells(r+1,0) = r;
    	m_node_cells(r+1,1) = r+1;
          });
        m_node_cells(m_number_of_nodes-1,0) = m_number_of_cells-1;
    
        Kokkos::parallel_for(m_number_of_nodes, KOKKOS_LAMBDA(const int& r) {
    	for (int J=0; J<m_node_nb_cells(r); ++J) {
    	  int j = m_node_cells(r,J);
    	  for (int R=0; R<2; ++R) {
    	    if (m_cell_nodes(j,R) == r) {
    	      m_node_cell_local_node(r,J) = R;
    	    }
    	  }
    	}
          });
      }
    
      ~Connectivity1D()
      {
        ;
      }
    };
    
    template <typename ConnectivityType>
    class Mesh
    {
    public:
      static constexpr size_t dimension = ConnectivityType::dimension;
      typedef TinyVector<dimension> Rd;
    
    private:
      const ConnectivityType& m_connectivity;
      Kokkos::View<Rd*> m_xr;
    
    public:
    
      const Kokkos::View<const Rd*> xr() const
      {
        return m_xr;
      }
    
      Mesh(const ConnectivityType& connectivity)
        : m_connectivity(connectivity),
          m_xr("xr", 100)
      {
        ;
      }
    
      ~Mesh()
      {
        ;
      }
    };
    
    #endif // MESH_HPP