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

Prepare diamond dual mesh construction

parent 8047b275
No related branches found
No related tags found
1 merge request!37Feature/language
......@@ -9,6 +9,7 @@
#include <language/utils/TypeDescriptor.hpp>
#include <mesh/CartesianMeshBuilder.hpp>
#include <mesh/Connectivity.hpp>
#include <mesh/DiamondDualMeshBuilder.hpp>
#include <mesh/GmshReader.hpp>
#include <mesh/Mesh.hpp>
#include <utils/Exceptions.hpp>
......@@ -177,5 +178,16 @@ MeshModule::MeshModule()
return builder.mesh();
}
));
this->_addBuiltinFunction("diamondDual",
std::make_shared<BuiltinFunctionEmbedder<std::shared_ptr<const IMesh>(
const std::shared_ptr<const IMesh>&)>>(
[](const std::shared_ptr<const IMesh>& p_mesh) -> std::shared_ptr<const IMesh> {
DiamondDualMeshBuilder builder{p_mesh};
return builder.mesh();
}
));
}
#include <mesh/DiamondDualMeshBuilder.hpp>
#include <mesh/Connectivity.hpp>
#include <mesh/ConnectivityDescriptor.hpp>
#include <mesh/ConnectivityDispatcher.hpp>
#include <mesh/RefId.hpp>
#include <utils/Array.hpp>
#include <utils/Messenger.hpp>
template <size_t Dimension>
void
DiamondDualMeshBuilder::_buildDiamondMeshFrom(const std::shared_ptr<const IMesh>& p_mesh)
{
static_assert(Dimension <= 3, "invalid dimension");
m_mesh = p_mesh;
}
DiamondDualMeshBuilder::DiamondDualMeshBuilder(const std::shared_ptr<const IMesh>& p_mesh)
{
switch (p_mesh->dimension()) {
case 1: {
this->_buildDiamondMeshFrom<1>(p_mesh);
break;
}
case 2: {
this->_buildDiamondMeshFrom<2>(p_mesh);
break;
}
case 3: {
this->_buildDiamondMeshFrom<3>(p_mesh);
break;
}
default: {
throw UnexpectedError("invalid mesh dimension: " + std::to_string(p_mesh->dimension()));
}
}
}
#ifndef DIAMOND_DUAL_MESH_BUILDER_HPP
#define DIAMOND_DUAL_MESH_BUILDER_HPP
#include <mesh/IMesh.hpp>
#include <mesh/MeshBuilderBase.hpp>
#include <memory>
class DiamondDualMeshBuilder : public MeshBuilderBase
{
private:
template <size_t Dimension>
void _buildDiamondMeshFrom(const std::shared_ptr<const IMesh>& mesh);
public:
DiamondDualMeshBuilder(const std::shared_ptr<const IMesh>& mesh);
~DiamondDualMeshBuilder() = default;
};
#endif // DIAMOND_DUAL_MESH_BUILDER_HPP
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment