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

Simplify code

Actually one avoids some useless copy/paste
parent 17c37aa7
No related branches found
No related tags found
1 merge request!42Feature/diamond dual mesh manager
......@@ -102,13 +102,19 @@ class MeshToDualDataMapper
template <size_t Dimension>
void
DiamondDualMeshBuilder::_buildDualDiamondMeshFrom(
const Mesh<Connectivity<Dimension>>& primal_mesh,
const std::shared_ptr<const Connectivity<Dimension>>& p_diamond_connectivity)
DiamondDualMeshBuilder::_buildDualDiamondMeshFrom(const std::shared_ptr<const IMesh>& p_i_mesh)
{
using ConnectivityType = Connectivity<Dimension>;
using MeshType = Mesh<Connectivity<Dimension>>;
std::shared_ptr p_primal_mesh = std::dynamic_pointer_cast<const MeshType>(p_i_mesh);
const MeshType& primal_mesh = *p_primal_mesh;
DiamondDualConnectivityManager& manager = DiamondDualConnectivityManager::instance();
std::shared_ptr<const ConnectivityType> p_diamond_connectivity =
manager.getDiamondDualConnectivity(primal_mesh.connectivity());
const ConnectivityType& diamond_connectivity = *p_diamond_connectivity;
const NodeValue<const TinyVector<Dimension>> primal_xr = primal_mesh.xr();
......@@ -124,74 +130,21 @@ DiamondDualMeshBuilder::_buildDualDiamondMeshFrom(
m_mesh = std::make_shared<MeshType>(p_diamond_connectivity, diamond_xr);
}
// template <>
// void
// DiamondDualMeshBuilder::_buildDualDiamondMeshFrom(const Mesh<Connectivity<1>>& primal_mesh,
// const std::shared_ptr<const Connectivity<1>>&
// p_diamond_connectivity)
// {
// using ConnectivityType = Connectivity<1>;
// using MeshType = Mesh<Connectivity<1>>;
// const ConnectivityType& diamond_connectivity = *p_diamond_connectivity;
// const NodeValue<const TinyVector<1>> primal_xr = primal_mesh.xr();
// MeshData<1>& primal_mesh_data = MeshDataManager::instance().getMeshData(primal_mesh);
// const CellValue<const TinyVector<1>> primal_xj = primal_mesh_data.xj();
// MeshToDualDataMapper<1> mesh_to_dual_data_mapper{primal_mesh.connectivity(), diamond_connectivity};
// NodeValue<TinyVector<1>> diamond_xr{diamond_connectivity};
// mesh_to_dual_data_mapper.toDualNode(primal_xr, primal_xj, diamond_xr);
// m_mesh = std::make_shared<MeshType>(p_diamond_connectivity, diamond_xr);
// }
DiamondDualMeshBuilder::DiamondDualMeshBuilder(const std::shared_ptr<const IMesh>& p_mesh)
{
std::cout << "building DiamondDualMesh\n";
switch (p_mesh->dimension()) {
case 1: {
using ConnectivityType = Connectivity<1>;
using MeshType = Mesh<ConnectivityType>;
std::shared_ptr mesh = std::dynamic_pointer_cast<const MeshType>(p_mesh);
DiamondDualConnectivityManager& manager = DiamondDualConnectivityManager::instance();
std::shared_ptr<const ConnectivityType> p_diamond_connectivity =
manager.getDiamondDualConnectivity(mesh->connectivity());
this->_buildDualDiamondMeshFrom(*mesh, p_diamond_connectivity);
this->_buildDualDiamondMeshFrom<1>(p_mesh);
break;
}
case 2: {
using ConnectivityType = Connectivity<2>;
using MeshType = Mesh<ConnectivityType>;
std::shared_ptr mesh = std::dynamic_pointer_cast<const MeshType>(p_mesh);
DiamondDualConnectivityManager& manager = DiamondDualConnectivityManager::instance();
std::shared_ptr<const ConnectivityType> p_diamond_connectivity =
manager.getDiamondDualConnectivity(mesh->connectivity());
this->_buildDualDiamondMeshFrom(*mesh, p_diamond_connectivity);
this->_buildDualDiamondMeshFrom<2>(p_mesh);
break;
}
case 3: {
using ConnectivityType = Connectivity<3>;
using MeshType = Mesh<ConnectivityType>;
std::shared_ptr mesh = std::dynamic_pointer_cast<const MeshType>(p_mesh);
DiamondDualConnectivityManager& manager = DiamondDualConnectivityManager::instance();
std::shared_ptr<const ConnectivityType> p_diamond_connectivity =
manager.getDiamondDualConnectivity(mesh->connectivity());
this->_buildDualDiamondMeshFrom(*mesh, p_diamond_connectivity);
this->_buildDualDiamondMeshFrom<3>(p_mesh);
break;
}
default: {
......
......@@ -5,18 +5,11 @@
#include <memory>
template <size_t>
class Connectivity;
template <typename ConnectivityType>
class Mesh;
class DiamondDualMeshBuilder : public MeshBuilderBase
{
private:
template <size_t Dimension>
void _buildDualDiamondMeshFrom(const Mesh<Connectivity<Dimension>>&,
const std::shared_ptr<const Connectivity<Dimension>>&);
void _buildDualDiamondMeshFrom(const std::shared_ptr<const IMesh>&);
friend class DiamondDualMeshManager;
DiamondDualMeshBuilder(const std::shared_ptr<const IMesh>&);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment