Skip to content
Snippets Groups Projects
Commit a074cb30 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Added RefNodeList to store sets of points related to a reference

- re-plugged sets of read references for gmsh reader
- removed node lists from RefFaceList
parent bc8f449d
No related branches found
No related tags found
No related merge requests found
......@@ -224,7 +224,8 @@ int main(int argc, char *argv[])
std::vector<BoundaryConditionHandler> bc_list;
{
for (size_t i_ref_face_list=0; i_ref_face_list<mesh.connectivity().numberOfRefFaceList(); ++i_ref_face_list) {
for (size_t i_ref_face_list=0; i_ref_face_list<mesh.connectivity().numberOfRefFaceList();
++i_ref_face_list) {
const RefFaceList& ref_face_list = mesh.connectivity().refFaceList(i_ref_face_list);
const RefId& ref = ref_face_list.refId();
......@@ -238,10 +239,31 @@ int main(int argc, char *argv[])
break;
}
const Kokkos::View<const unsigned int*> nodes_ids = ref_face_list.nodeList();
std::vector<unsigned int> node_boundary_vector(nodes_ids.extent(0));
for (size_t r=0; r<nodes_ids.extent(0); ++r) {
node_boundary_vector[r] = nodes_ids[r];
std::set<unsigned int> node_id_set;
const Kokkos::View<const unsigned int**> face_nodes = mesh.connectivity().faceNodes();
const Kokkos::View<const unsigned int*>& face_id_list = ref_face_list.faceList();
for (unsigned int l=0; l<face_id_list.extent(0); ++l) {
for (unsigned short r=0; r<2; ++r) {
node_id_set.insert(face_nodes(face_id_list[l],r));
}
}
Kokkos::View<unsigned int*> node_id_list("node_id_list", node_id_set.size());
{
int r=0;
for (auto node_id : node_id_set) {
node_id_list[r] = node_id;
++r;
}
}
RefNodeList ref_node_list(ref, node_id_list);
std::vector<unsigned int> node_boundary_vector(node_id_list.extent(0));
for (size_t r=0; r<node_id_list.extent(0); ++r) {
node_boundary_vector[r] = node_id_list[r];
}
SymmetryBoundaryCondition<MeshType::dimension>* sym_bc
= new SymmetryBoundaryCondition<MeshType::dimension>(node_boundary_vector, normal);
......
......@@ -11,6 +11,7 @@
#include <algorithm>
#include <RefId.hpp>
#include <RefNodeList.hpp>
#include <RefFaceList.hpp>
class Connectivity2D
......@@ -19,6 +20,7 @@ public:
static constexpr size_t dimension = 2;
std::vector<RefFaceList> m_ref_face_list;
std::vector<RefNodeList> m_ref_node_list;
private:
const size_t m_number_of_cells;
......@@ -194,6 +196,21 @@ private:
return m_ref_face_list[i];
}
void addRefNodeList(const RefNodeList& ref_node_list)
{
m_ref_node_list.push_back(ref_node_list);
}
size_t numberOfRefNodeList() const
{
return m_ref_node_list.size();
}
const RefNodeList& refNodeList(const size_t& i) const
{
return m_ref_node_list[i];
}
const size_t& numberOfNodes() const
{
return m_number_of_nodes;
......
......@@ -838,7 +838,7 @@ GmshReader::__proceedData()
face_list[j]=ref_face_list.second[j];
}
const PhysicalRefId& physical_ref_id = m_physical_ref_map.at(ref_face_list.first);
connectivity.addRefFaceList(RefFaceList(connectivity, physical_ref_id.refId(), face_list));
connectivity.addRefFaceList(RefFaceList(physical_ref_id.refId(), face_list));
}
const Kokkos::View<const unsigned int**> face_nodes = connectivity.faceNodes();
......@@ -856,7 +856,7 @@ GmshReader::__proceedData()
point_list[j]=ref_point_list.second[j];
}
const PhysicalRefId& physical_ref_id = m_physical_ref_map.at(ref_point_list.first);
std::cout << rang::fgB::red << "point list (corners?) not handled anymore" << rang::style::reset << '\n';
connectivity.addRefNodeList(RefNodeList(physical_ref_id.refId(), point_list));
}
typedef Mesh<Connectivity2D> MeshType;
......
......@@ -4,14 +4,11 @@
#include <Kokkos_Core.hpp>
#include <RefId.hpp>
#include <set>
class RefFaceList
{
private:
RefId m_ref_id;
Kokkos::View<const unsigned int*> m_face_id_list;
Kokkos::View<const unsigned int*> m_node_id_list;
const RefId m_ref_id;
const Kokkos::View<const unsigned int*> m_face_id_list;
public:
const RefId& refId() const
......@@ -24,37 +21,12 @@ class RefFaceList
return m_face_id_list;
}
[[deprecated("referenced face list should not know about nodes")]]
const Kokkos::View<const unsigned int*>& nodeList() const
{
return m_node_id_list;
}
template<typename ConnectivityType>
RefFaceList(const ConnectivityType& connectivity,
const RefId& ref_id,
RefFaceList(const RefId& ref_id,
const Kokkos::View<const unsigned int*>& face_id_list)
: m_ref_id(ref_id),
m_face_id_list(face_id_list)
{
std::set<unsigned int> node_id_set;
const Kokkos::View<const unsigned int**> face_nodes = connectivity.faceNodes();
for (unsigned int l=0; l<m_face_id_list.extent(0); ++l) {
for (unsigned short r=0; r<2; ++r) {
node_id_set.insert(face_nodes(m_face_id_list[l],r));
}
}
Kokkos::View<unsigned int*> node_id_list("node_id_list", node_id_set.size());
{
int r=0;
for (auto node_id : node_id_set) {
node_id_list[r] = node_id;
++r;
}
}
m_node_id_list = node_id_list;
;
}
RefFaceList& operator=(const RefFaceList&) = default;
......
#ifndef REF_NODE_LIST_HPP
#define REF_NODE_LIST_HPP
#include <Kokkos_Core.hpp>
#include <RefId.hpp>
class RefNodeList
{
private:
RefId m_ref_id;
Kokkos::View<const unsigned int*> m_node_id_list;
public:
const RefId& refId() const
{
return m_ref_id;
}
const Kokkos::View<const unsigned int*>& nodeList() const
{
return m_node_id_list;
}
RefNodeList(const RefId& ref_id,
const Kokkos::View<const unsigned int*>& node_id_list)
: m_ref_id(ref_id),
m_node_id_list(node_id_list)
{
;
}
RefNodeList& operator=(const RefNodeList&) = default;
RefNodeList& operator=(RefNodeList&&) = default;
RefNodeList() = default;
RefNodeList(const RefNodeList&) = default;
~RefNodeList() = default;
};
#endif // REF_NODE_LIST_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment