Loading Unstructured_mesh/Unstructured_mesh.pro.user +1 −1 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE QtCreatorProject> <!-- Written by QtCreator 4.10.0, 2019-09-20T19:57:11. --> <!-- Written by QtCreator 4.10.0, 2019-09-21T11:13:09. --> <qtcreator> <data> <variable>EnvironmentId</variable> Loading Unstructured_mesh/main.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -544,12 +544,12 @@ void testTemplate() { //MeshDataContainer<Vertex<3, double>, 0,1,2> centers2(mesh3,std::make_integer_sequence<unsigned int, 3>{}, Vertex<3, double>{}); //ComputeCenters(mesh3); ClassA p(make_custom_integer_sequence<unsigned int, 10, 0, -2>{}); ClassA p(make_custom_integer_sequence_t<unsigned int, 10, 0, -2>{}); std::tuple<double, char> t{}; t={1,2}; ClassB u(make_custom_integer_sequence<unsigned int, 2, 0, -2>{}, t); ClassB u(make_custom_integer_sequence_t<unsigned int, 2, 0, -2>{}, t); ClassC<std::integer_sequence<unsigned int, 2,0>, std::tuple<double, char>> c(make_custom_integer_sequence<unsigned int, 2, 0, -2>{}, std::tuple<double, char>{}); ClassC<std::integer_sequence<unsigned int, 2,0>, std::tuple<double, char>> c(make_custom_integer_sequence_t<unsigned int, 2, 0, -2>{}, std::tuple<double, char>{}); ClassC<std::integer_sequence<unsigned int, 2,0>, std::tuple<double, char>> cc; ClassC<std::integer_sequence<unsigned int, 2,0>, decltype(std::make_tuple(1.0, 'a'))> ccc; } Loading Unstructured_mesh/mesh_functions.h +60 −52 Original line number Diff line number Diff line Loading @@ -233,6 +233,26 @@ public: /** * MakeMeshDataContainer */ template<typename... Params> struct MakeMeshDataContainer {}; template<typename Type, unsigned int... Dimensions> struct MakeMeshDataContainer<Type, std::integer_sequence<unsigned int, Dimensions...>>{ using type = MeshDataContainer<Type, Dimensions...>; }; template<typename... Types, unsigned int... Dimensions> struct MakeMeshDataContainer<std::tuple<Types...>, std::integer_sequence<unsigned int, Dimensions...>>{ using type = MeshDataContainer<std::tuple<Types...>, Dimensions...>; }; template<typename... T> using MakeMeshDataContainer_t = typename MakeMeshDataContainer<T...>::type; template <typename Type, Type startIndex, Type EndIndex, int increment = 1, Type... t> Loading @@ -245,7 +265,7 @@ struct MakeCustomIntegerSequence<Type, EndIndex, EndIndex, increment, t...> { }; template<typename Type, Type startIndex, Type EndIndex, int increment = 1> using make_custom_integer_sequence = typename MakeCustomIntegerSequence<Type, startIndex, EndIndex, increment>::type; using make_custom_integer_sequence_t = typename MakeCustomIntegerSequence<Type, startIndex, EndIndex, increment>::type; Loading @@ -269,10 +289,12 @@ using make_custom_integer_sequence = typename MakeCustomIntegerSequence<Type, st template <unsigned int dim, unsigned int Dimension, unsigned int... DataDimensions> template <unsigned int dim, unsigned int Dimension> struct _ComputeCenters{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer<Vertex<Dimension, Real>, DataDimensions...>& centers,MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ static void compute( MakeMeshDataContainer_t<Vertex<Dimension, Real>, make_custom_integer_sequence_t<unsigned int, 1, Dimension>>& centers, MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ auto& elemCenters = centers.template GetDataDim<dim>(); auto& subElemCenters = centers.template GetDataDim<dim - 1>(); Loading @@ -291,14 +313,14 @@ struct _ComputeCenters{ } DBGMSG(dim); _ComputeCenters<dim + 1, Dimension, DataDimensions...>::compute(centers, mesh); _ComputeCenters<dim + 1, Dimension>::compute(centers, mesh); } }; template <unsigned int Dimension, unsigned int... DataDimensions> struct _ComputeCenters<Dimension, Dimension, DataDimensions...>{ template <unsigned int Dimension> struct _ComputeCenters<Dimension, Dimension>{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer<Vertex<Dimension, Real>, DataDimensions...>& centers,MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ static void compute(MakeMeshDataContainer_t<Vertex<Dimension, Real>, make_custom_integer_sequence_t<unsigned int, 1, Dimension>>& centers,MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ auto& elemCenters = centers.template GetDataDim<Dimension>(); auto& subElemCenters = centers.template GetDataDim<Dimension - 1>(); Loading @@ -322,10 +344,12 @@ struct _ComputeCenters<Dimension, Dimension, DataDimensions...>{ }; template <unsigned int Dimension, unsigned int... DataDimensions> struct _ComputeCenters<1, Dimension, DataDimensions...>{ template <unsigned int Dimension> struct _ComputeCenters<1, Dimension>{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer<Vertex<Dimension, Real>, DataDimensions...>& centers,MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ static void compute( MakeMeshDataContainer_t<Vertex<Dimension, Real>, make_custom_integer_sequence_t<unsigned int, 1, Dimension>>& centers, MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ std::vector<Vertex<Dimension, Real>>& edgeCenters = centers.template GetDataDim<1>(); Loading @@ -336,32 +360,25 @@ struct _ComputeCenters<1, Dimension, DataDimensions...>{ } DBGMSG("1"); _ComputeCenters<2, Dimension, DataDimensions...>::compute(centers, mesh); _ComputeCenters<2, Dimension>::compute(centers, mesh); } }; template <unsigned int Dimension,typename IndexType, typename Real, unsigned int ...Reserve, unsigned int ... Dimensions> MeshDataContainer<Vertex<Dimension, double>, Dimensions...> ___ComputeCenters(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh, std::integer_sequence<unsigned int, Dimensions...>){ template <unsigned int Dimension,typename IndexType, typename Real, unsigned int ...Reserve> MakeMeshDataContainer_t<Vertex<Dimension, Real>, make_custom_integer_sequence_t<unsigned int, 1, Dimension>> ComputeCenters(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ MeshDataContainer<Vertex<Dimension, double>, Dimensions...> centers(mesh); MakeMeshDataContainer_t<Vertex<Dimension, Real>, make_custom_integer_sequence_t<unsigned int, 1, Dimension>> centers(mesh); _ComputeCenters<1, Dimension, Dimensions...>::compute(centers, mesh); _ComputeCenters<1, Dimension>::compute(centers, mesh); return centers; } template <unsigned int Dimension,typename IndexType, typename Real, unsigned int ...Reserve> auto ComputeCenters(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ return ___ComputeCenters(mesh, make_custom_integer_sequence<unsigned int, 1, Dimension>{}); } Loading @@ -379,10 +396,10 @@ auto ComputeCenters(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ template <unsigned int dim, unsigned int Dimension, unsigned int... DataDimensions> template <unsigned int dim, unsigned int Dimension> struct _ComputeMeasures{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer< Real, DataDimensions...>&,MeshElements<Dimension, IndexType, Real, Reserve...>&){ static void compute(MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, Dimension>>&,MeshElements<Dimension, IndexType, Real, Reserve...>&){ static_assert (Dimension > 3,"The measure computation of mesh of dimension higher than 3 is not implemented yet."); throw std::runtime_error("The measure computation of mesh of dimension higher than 3 is not implemented yet."); } Loading @@ -390,10 +407,10 @@ struct _ComputeMeasures{ template <unsigned int... DataDimensions> struct _ComputeMeasures<3, 3, DataDimensions...>{ template <> struct _ComputeMeasures<3, 3>{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer< Real, DataDimensions...>& measures,MeshElements<3, IndexType, Real, Reserve...>& mesh){ static void compute(MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, 3>>& measures,MeshElements<3, IndexType, Real, Reserve...>& mesh){ auto& cellMeasures = measures.template GetDataDim<3>(); Loading Loading @@ -442,10 +459,10 @@ struct _ComputeMeasures<3, 3, DataDimensions...>{ } }; template <unsigned int... DataDimensions> struct _ComputeMeasures<2, 2, DataDimensions...>{ template <> struct _ComputeMeasures<2, 2>{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer< Real, DataDimensions...>& measures,MeshElements<2, IndexType, Real, Reserve...>& mesh){ static void compute(MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, 2>>& measures,MeshElements<2, IndexType, Real, Reserve...>& mesh){ auto& surfaceMeasures = measures.template GetDataDim<2>(); Loading @@ -470,10 +487,10 @@ struct _ComputeMeasures<2, 2, DataDimensions...>{ template <unsigned int... DataDimensions> struct _ComputeMeasures<2, 3, DataDimensions...>{ template <> struct _ComputeMeasures<2, 3>{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer< Real, DataDimensions...>& measures,MeshElements<3, IndexType, Real, Reserve...>& mesh){ static void compute(MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, 3>>& measures,MeshElements<3, IndexType, Real, Reserve...>& mesh){ auto& surfaceMeasures = measures.template GetDataDim<2>(); Loading @@ -497,7 +514,7 @@ struct _ComputeMeasures<2, 3, DataDimensions...>{ } surfaceMeasures.at(face.GetIndex()) = measure; } _ComputeMeasures<3, 3, DataDimensions...>::compute(measures, mesh); _ComputeMeasures<3, 3>::compute(measures, mesh); } }; Loading @@ -507,10 +524,10 @@ struct _ComputeMeasures<2, 3, DataDimensions...>{ template <unsigned int Dimension, unsigned int... DataDimensions> struct _ComputeMeasures<1, Dimension, DataDimensions...>{ template <unsigned int Dimension> struct _ComputeMeasures<1, Dimension>{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer< Real, DataDimensions...>& measures,MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ static void compute(MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, Dimension>>& measures,MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ auto& edgeLengths = measures.template GetDataDim<1>(); Loading @@ -519,32 +536,23 @@ struct _ComputeMeasures<1, Dimension, DataDimensions...>{ mesh.GetVertices().at(edge.GetVertexBIndex())).NormEukleid(); } _ComputeMeasures<2, Dimension, DataDimensions...>::compute(measures, mesh); _ComputeMeasures<2, Dimension>::compute(measures, mesh); } }; template <unsigned int Dimension,typename IndexType, typename Real, unsigned int ...Reserve, unsigned int ... Dimensions> MeshDataContainer<Real, Dimensions...> ___ComputeMeasures(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh, std::integer_sequence<unsigned int, Dimensions...>){ MeshDataContainer<Real, Dimensions...> measures(mesh); template <unsigned int Dimension,typename IndexType, typename Real, unsigned int ...Reserve> MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, Dimension>> ComputeMeasures(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, Dimension>> measures(mesh); _ComputeMeasures<1, Dimension, Dimensions...>::compute(measures, mesh); _ComputeMeasures<1, Dimension>::compute(measures, mesh); return measures; } template <unsigned int Dimension,typename IndexType, typename Real, unsigned int ...Reserve> auto ComputeMeasures(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ return ___ComputeMeasures(mesh, make_custom_integer_sequence<unsigned int, 1, Dimension>{}); } Loading Loading
Unstructured_mesh/Unstructured_mesh.pro.user +1 −1 Original line number Diff line number Diff line <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE QtCreatorProject> <!-- Written by QtCreator 4.10.0, 2019-09-20T19:57:11. --> <!-- Written by QtCreator 4.10.0, 2019-09-21T11:13:09. --> <qtcreator> <data> <variable>EnvironmentId</variable> Loading
Unstructured_mesh/main.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -544,12 +544,12 @@ void testTemplate() { //MeshDataContainer<Vertex<3, double>, 0,1,2> centers2(mesh3,std::make_integer_sequence<unsigned int, 3>{}, Vertex<3, double>{}); //ComputeCenters(mesh3); ClassA p(make_custom_integer_sequence<unsigned int, 10, 0, -2>{}); ClassA p(make_custom_integer_sequence_t<unsigned int, 10, 0, -2>{}); std::tuple<double, char> t{}; t={1,2}; ClassB u(make_custom_integer_sequence<unsigned int, 2, 0, -2>{}, t); ClassB u(make_custom_integer_sequence_t<unsigned int, 2, 0, -2>{}, t); ClassC<std::integer_sequence<unsigned int, 2,0>, std::tuple<double, char>> c(make_custom_integer_sequence<unsigned int, 2, 0, -2>{}, std::tuple<double, char>{}); ClassC<std::integer_sequence<unsigned int, 2,0>, std::tuple<double, char>> c(make_custom_integer_sequence_t<unsigned int, 2, 0, -2>{}, std::tuple<double, char>{}); ClassC<std::integer_sequence<unsigned int, 2,0>, std::tuple<double, char>> cc; ClassC<std::integer_sequence<unsigned int, 2,0>, decltype(std::make_tuple(1.0, 'a'))> ccc; } Loading
Unstructured_mesh/mesh_functions.h +60 −52 Original line number Diff line number Diff line Loading @@ -233,6 +233,26 @@ public: /** * MakeMeshDataContainer */ template<typename... Params> struct MakeMeshDataContainer {}; template<typename Type, unsigned int... Dimensions> struct MakeMeshDataContainer<Type, std::integer_sequence<unsigned int, Dimensions...>>{ using type = MeshDataContainer<Type, Dimensions...>; }; template<typename... Types, unsigned int... Dimensions> struct MakeMeshDataContainer<std::tuple<Types...>, std::integer_sequence<unsigned int, Dimensions...>>{ using type = MeshDataContainer<std::tuple<Types...>, Dimensions...>; }; template<typename... T> using MakeMeshDataContainer_t = typename MakeMeshDataContainer<T...>::type; template <typename Type, Type startIndex, Type EndIndex, int increment = 1, Type... t> Loading @@ -245,7 +265,7 @@ struct MakeCustomIntegerSequence<Type, EndIndex, EndIndex, increment, t...> { }; template<typename Type, Type startIndex, Type EndIndex, int increment = 1> using make_custom_integer_sequence = typename MakeCustomIntegerSequence<Type, startIndex, EndIndex, increment>::type; using make_custom_integer_sequence_t = typename MakeCustomIntegerSequence<Type, startIndex, EndIndex, increment>::type; Loading @@ -269,10 +289,12 @@ using make_custom_integer_sequence = typename MakeCustomIntegerSequence<Type, st template <unsigned int dim, unsigned int Dimension, unsigned int... DataDimensions> template <unsigned int dim, unsigned int Dimension> struct _ComputeCenters{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer<Vertex<Dimension, Real>, DataDimensions...>& centers,MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ static void compute( MakeMeshDataContainer_t<Vertex<Dimension, Real>, make_custom_integer_sequence_t<unsigned int, 1, Dimension>>& centers, MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ auto& elemCenters = centers.template GetDataDim<dim>(); auto& subElemCenters = centers.template GetDataDim<dim - 1>(); Loading @@ -291,14 +313,14 @@ struct _ComputeCenters{ } DBGMSG(dim); _ComputeCenters<dim + 1, Dimension, DataDimensions...>::compute(centers, mesh); _ComputeCenters<dim + 1, Dimension>::compute(centers, mesh); } }; template <unsigned int Dimension, unsigned int... DataDimensions> struct _ComputeCenters<Dimension, Dimension, DataDimensions...>{ template <unsigned int Dimension> struct _ComputeCenters<Dimension, Dimension>{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer<Vertex<Dimension, Real>, DataDimensions...>& centers,MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ static void compute(MakeMeshDataContainer_t<Vertex<Dimension, Real>, make_custom_integer_sequence_t<unsigned int, 1, Dimension>>& centers,MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ auto& elemCenters = centers.template GetDataDim<Dimension>(); auto& subElemCenters = centers.template GetDataDim<Dimension - 1>(); Loading @@ -322,10 +344,12 @@ struct _ComputeCenters<Dimension, Dimension, DataDimensions...>{ }; template <unsigned int Dimension, unsigned int... DataDimensions> struct _ComputeCenters<1, Dimension, DataDimensions...>{ template <unsigned int Dimension> struct _ComputeCenters<1, Dimension>{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer<Vertex<Dimension, Real>, DataDimensions...>& centers,MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ static void compute( MakeMeshDataContainer_t<Vertex<Dimension, Real>, make_custom_integer_sequence_t<unsigned int, 1, Dimension>>& centers, MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ std::vector<Vertex<Dimension, Real>>& edgeCenters = centers.template GetDataDim<1>(); Loading @@ -336,32 +360,25 @@ struct _ComputeCenters<1, Dimension, DataDimensions...>{ } DBGMSG("1"); _ComputeCenters<2, Dimension, DataDimensions...>::compute(centers, mesh); _ComputeCenters<2, Dimension>::compute(centers, mesh); } }; template <unsigned int Dimension,typename IndexType, typename Real, unsigned int ...Reserve, unsigned int ... Dimensions> MeshDataContainer<Vertex<Dimension, double>, Dimensions...> ___ComputeCenters(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh, std::integer_sequence<unsigned int, Dimensions...>){ template <unsigned int Dimension,typename IndexType, typename Real, unsigned int ...Reserve> MakeMeshDataContainer_t<Vertex<Dimension, Real>, make_custom_integer_sequence_t<unsigned int, 1, Dimension>> ComputeCenters(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ MeshDataContainer<Vertex<Dimension, double>, Dimensions...> centers(mesh); MakeMeshDataContainer_t<Vertex<Dimension, Real>, make_custom_integer_sequence_t<unsigned int, 1, Dimension>> centers(mesh); _ComputeCenters<1, Dimension, Dimensions...>::compute(centers, mesh); _ComputeCenters<1, Dimension>::compute(centers, mesh); return centers; } template <unsigned int Dimension,typename IndexType, typename Real, unsigned int ...Reserve> auto ComputeCenters(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ return ___ComputeCenters(mesh, make_custom_integer_sequence<unsigned int, 1, Dimension>{}); } Loading @@ -379,10 +396,10 @@ auto ComputeCenters(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ template <unsigned int dim, unsigned int Dimension, unsigned int... DataDimensions> template <unsigned int dim, unsigned int Dimension> struct _ComputeMeasures{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer< Real, DataDimensions...>&,MeshElements<Dimension, IndexType, Real, Reserve...>&){ static void compute(MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, Dimension>>&,MeshElements<Dimension, IndexType, Real, Reserve...>&){ static_assert (Dimension > 3,"The measure computation of mesh of dimension higher than 3 is not implemented yet."); throw std::runtime_error("The measure computation of mesh of dimension higher than 3 is not implemented yet."); } Loading @@ -390,10 +407,10 @@ struct _ComputeMeasures{ template <unsigned int... DataDimensions> struct _ComputeMeasures<3, 3, DataDimensions...>{ template <> struct _ComputeMeasures<3, 3>{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer< Real, DataDimensions...>& measures,MeshElements<3, IndexType, Real, Reserve...>& mesh){ static void compute(MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, 3>>& measures,MeshElements<3, IndexType, Real, Reserve...>& mesh){ auto& cellMeasures = measures.template GetDataDim<3>(); Loading Loading @@ -442,10 +459,10 @@ struct _ComputeMeasures<3, 3, DataDimensions...>{ } }; template <unsigned int... DataDimensions> struct _ComputeMeasures<2, 2, DataDimensions...>{ template <> struct _ComputeMeasures<2, 2>{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer< Real, DataDimensions...>& measures,MeshElements<2, IndexType, Real, Reserve...>& mesh){ static void compute(MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, 2>>& measures,MeshElements<2, IndexType, Real, Reserve...>& mesh){ auto& surfaceMeasures = measures.template GetDataDim<2>(); Loading @@ -470,10 +487,10 @@ struct _ComputeMeasures<2, 2, DataDimensions...>{ template <unsigned int... DataDimensions> struct _ComputeMeasures<2, 3, DataDimensions...>{ template <> struct _ComputeMeasures<2, 3>{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer< Real, DataDimensions...>& measures,MeshElements<3, IndexType, Real, Reserve...>& mesh){ static void compute(MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, 3>>& measures,MeshElements<3, IndexType, Real, Reserve...>& mesh){ auto& surfaceMeasures = measures.template GetDataDim<2>(); Loading @@ -497,7 +514,7 @@ struct _ComputeMeasures<2, 3, DataDimensions...>{ } surfaceMeasures.at(face.GetIndex()) = measure; } _ComputeMeasures<3, 3, DataDimensions...>::compute(measures, mesh); _ComputeMeasures<3, 3>::compute(measures, mesh); } }; Loading @@ -507,10 +524,10 @@ struct _ComputeMeasures<2, 3, DataDimensions...>{ template <unsigned int Dimension, unsigned int... DataDimensions> struct _ComputeMeasures<1, Dimension, DataDimensions...>{ template <unsigned int Dimension> struct _ComputeMeasures<1, Dimension>{ template <typename IndexType, typename Real, unsigned int ...Reserve> static void compute(MeshDataContainer< Real, DataDimensions...>& measures,MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ static void compute(MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, Dimension>>& measures,MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ auto& edgeLengths = measures.template GetDataDim<1>(); Loading @@ -519,32 +536,23 @@ struct _ComputeMeasures<1, Dimension, DataDimensions...>{ mesh.GetVertices().at(edge.GetVertexBIndex())).NormEukleid(); } _ComputeMeasures<2, Dimension, DataDimensions...>::compute(measures, mesh); _ComputeMeasures<2, Dimension>::compute(measures, mesh); } }; template <unsigned int Dimension,typename IndexType, typename Real, unsigned int ...Reserve, unsigned int ... Dimensions> MeshDataContainer<Real, Dimensions...> ___ComputeMeasures(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh, std::integer_sequence<unsigned int, Dimensions...>){ MeshDataContainer<Real, Dimensions...> measures(mesh); template <unsigned int Dimension,typename IndexType, typename Real, unsigned int ...Reserve> MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, Dimension>> ComputeMeasures(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ MakeMeshDataContainer_t<Real, make_custom_integer_sequence_t<unsigned int, 1, Dimension>> measures(mesh); _ComputeMeasures<1, Dimension, Dimensions...>::compute(measures, mesh); _ComputeMeasures<1, Dimension>::compute(measures, mesh); return measures; } template <unsigned int Dimension,typename IndexType, typename Real, unsigned int ...Reserve> auto ComputeMeasures(MeshElements<Dimension, IndexType, Real, Reserve...>& mesh){ return ___ComputeMeasures(mesh, make_custom_integer_sequence<unsigned int, 1, Dimension>{}); } Loading