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

Merge branch 'feature/mesh-flat-face-boundary' into 'develop'

Add handling of flat boundaries made of faces

See merge request !100
parents 6a007018 11aa89b4
No related branches found
No related tags found
1 merge request!100Add handling of flat boundaries made of faces
...@@ -18,6 +18,7 @@ add_library( ...@@ -18,6 +18,7 @@ add_library(
MeshBuilderBase.cpp MeshBuilderBase.cpp
MeshDataManager.cpp MeshDataManager.cpp
MeshFaceBoundary.cpp MeshFaceBoundary.cpp
MeshFlatFaceBoundary.cpp
MeshFlatNodeBoundary.cpp MeshFlatNodeBoundary.cpp
MeshLineNodeBoundary.cpp MeshLineNodeBoundary.cpp
MeshNodeBoundary.cpp MeshNodeBoundary.cpp
......
#include <mesh/MeshFlatFaceBoundary.hpp>
#include <mesh/Connectivity.hpp>
#include <mesh/Mesh.hpp>
#include <mesh/MeshFlatNodeBoundary.hpp>
template <size_t Dimension>
MeshFlatFaceBoundary<Dimension>
getMeshFlatFaceBoundary(const Mesh<Connectivity<Dimension>>& mesh, const IBoundaryDescriptor& boundary_descriptor)
{
for (size_t i_ref_face_list = 0; i_ref_face_list < mesh.connectivity().template numberOfRefItemList<ItemType::face>();
++i_ref_face_list) {
const auto& ref_face_list = mesh.connectivity().template refItemList<ItemType::face>(i_ref_face_list);
const RefId& ref = ref_face_list.refId();
if (ref == boundary_descriptor) {
MeshFlatNodeBoundary<Dimension> mesh_flat_node_boundary = getMeshFlatNodeBoundary(mesh, boundary_descriptor);
return MeshFlatFaceBoundary<Dimension>{mesh, ref_face_list, mesh_flat_node_boundary.outgoingNormal()};
}
}
std::ostringstream ost;
ost << "cannot find surface with name " << rang::fgB::red << boundary_descriptor << rang::style::reset;
throw NormalError(ost.str());
}
template MeshFlatFaceBoundary<2> getMeshFlatFaceBoundary(const Mesh<Connectivity<2>>&, const IBoundaryDescriptor&);
template MeshFlatFaceBoundary<3> getMeshFlatFaceBoundary(const Mesh<Connectivity<3>>&, const IBoundaryDescriptor&);
#ifndef MESH_FLAT_FACE_BOUNDARY_HPP
#define MESH_FLAT_FACE_BOUNDARY_HPP
#include <mesh/MeshFaceBoundary.hpp>
template <size_t Dimension>
class MeshFlatFaceBoundary final : public MeshFaceBoundary<Dimension> // clazy:exclude=copyable-polymorphic
{
public:
using Rd = TinyVector<Dimension, double>;
private:
const Rd m_outgoing_normal;
public:
const Rd&
outgoingNormal() const
{
return m_outgoing_normal;
}
MeshFlatFaceBoundary& operator=(const MeshFlatFaceBoundary&) = default;
MeshFlatFaceBoundary& operator=(MeshFlatFaceBoundary&&) = default;
template <size_t MeshDimension>
friend MeshFlatFaceBoundary<MeshDimension> getMeshFlatFaceBoundary(const Mesh<Connectivity<MeshDimension>>& mesh,
const IBoundaryDescriptor& boundary_descriptor);
private:
template <typename MeshType>
MeshFlatFaceBoundary(const MeshType& mesh, const RefFaceList& ref_face_list, const Rd& outgoing_normal)
: MeshFaceBoundary<Dimension>(mesh, ref_face_list), m_outgoing_normal(outgoing_normal)
{}
public:
MeshFlatFaceBoundary() = default;
MeshFlatFaceBoundary(const MeshFlatFaceBoundary&) = default;
MeshFlatFaceBoundary(MeshFlatFaceBoundary&&) = default;
~MeshFlatFaceBoundary() = default;
};
template <size_t Dimension>
MeshFlatFaceBoundary<Dimension> getMeshFlatFaceBoundary(const Mesh<Connectivity<Dimension>>& mesh,
const IBoundaryDescriptor& boundary_descriptor);
#endif // MESH_FLAT_FACE_BOUNDARY_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment