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

Beginning of BoundaryConditionDescriptor mechanism

- only symmetry descriptors are defined
- only named boundaries are allowed
parent dc71a736
No related branches found
No related tags found
No related merge requests found
......@@ -21,6 +21,8 @@
#include <TinyVector.hpp>
#include <TinyMatrix.hpp>
#include <BoundaryConditionDescriptor.hpp>
#include <GmshReader.hpp>
#include <CLI/CLI.hpp>
......@@ -211,6 +213,18 @@ int main(int argc, char *argv[])
break;
}
case 2: {
// test case boundary condition description
std::vector<std::string> sym_boundary_name_list = {"XMIN", "XMAX", "YMIN", "YMAX"};
std::vector<std::shared_ptr<BoundaryConditionDescriptor>> bc_descriptor_list;
for (auto sym_boundary_name : sym_boundary_name_list){
std::shared_ptr<BoundaryDescriptor> boudary_descriptor
= std::shared_ptr<BoundaryDescriptor>(new NamedBoundaryDescriptor(sym_boundary_name));
SymmetryBoundaryConditionDescriptor* sym_bc_descriptor
= new SymmetryBoundaryConditionDescriptor(boudary_descriptor);
bc_descriptor_list.push_back(std::shared_ptr<BoundaryConditionDescriptor>(sym_bc_descriptor));
}
typedef Connectivity2D ConnectivityType;
typedef Mesh<ConnectivityType> MeshType;
typedef MeshData<MeshType> MeshDataType;
......@@ -222,8 +236,10 @@ int main(int argc, char *argv[])
timer.reset();
MeshDataType mesh_data(mesh);
std::vector<BoundaryConditionHandler> bc_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);
......
#ifndef BOUNDARY_CONDITION_DESCRIPTOR_HPP
#define BOUNDARY_CONDITION_DESCRIPTOR_HPP
#include <RefId.hpp>
#include <memory>
class BoundaryDescriptor
{
public:
enum class Type
{
named,
numbered
};
virtual Type type() const = 0;
BoundaryDescriptor(const BoundaryDescriptor&) = default;
BoundaryDescriptor() = default;
virtual ~BoundaryDescriptor() = default;
};
class NamedBoundaryDescriptor
: public BoundaryDescriptor
{
private:
std::string m_name;
public:
Type type() const
{
return Type::named;
}
NamedBoundaryDescriptor(const NamedBoundaryDescriptor&) = default;
NamedBoundaryDescriptor(const std::string& name)
: m_name(name)
{
;
}
virtual ~NamedBoundaryDescriptor() = default;
};
class NumberedBoundaryDescriptor
: public BoundaryDescriptor
{
public:
Type type() const
{
return Type::numbered;
}
NumberedBoundaryDescriptor(const NumberedBoundaryDescriptor&) = default;
NumberedBoundaryDescriptor() = default;
virtual ~NumberedBoundaryDescriptor() = default;
};
class BoundaryConditionDescriptor
{
public:
enum class Type
{
symmetry
};
private:
std::shared_ptr<BoundaryDescriptor> m_boundary_descriptor;
public:
virtual Type type() const = 0;
const BoundaryDescriptor& boundaryDescriptor() const
{
return *m_boundary_descriptor;
}
BoundaryConditionDescriptor(std::shared_ptr<BoundaryDescriptor> boundary_descriptor)
: m_boundary_descriptor(boundary_descriptor)
{
;
}
virtual ~BoundaryConditionDescriptor() = default;
};
class SymmetryBoundaryConditionDescriptor
: public BoundaryConditionDescriptor
{
public:
Type type() const
{
return Type::symmetry;
}
SymmetryBoundaryConditionDescriptor(std::shared_ptr<BoundaryDescriptor> boundary_descriptor)
: BoundaryConditionDescriptor(boundary_descriptor)
{
;
}
SymmetryBoundaryConditionDescriptor(const SymmetryBoundaryConditionDescriptor&) = default;
~SymmetryBoundaryConditionDescriptor() = default;
};
#endif // BOUNDARY_CONDITION_DESCRIPTOR_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment