#ifndef OERSTED_FINITEELEMENTMESH_H #define OERSTED_FINITEELEMENTMESH_H #include #include "MatrixGroup.h" #include "Node.h" #include "Triangle.h" template class FiniteElementMesh {}; template class FiniteElementMesh<2,P> { public: FiniteElementMesh() {}; FiniteElementMesh(std::vector nodes, std::vector> tris) : Nodes(nodes), Triangles(tris) {}; std::vector const nodes() const { return Nodes; }; std::vector> const triangles() const { return Triangles; }; template DiagonalMatrixGroup::size> determinant() const { DiagonalMatrixGroup::size> mat(Triangles.size()); for (size_t i = 0; i != Triangles.size(); ++i) { Triangles[i].determinant(mat, Nodes); } return mat; } template SparseMatrixGroup::size> basis() const { SparseMatrixGroup::size> mat(Nodes.size(), Triangles.size(), Triangle

::NumNodes); for (size_t i = 0; i != Triangles.size(); ++i) { Triangles[i].basis(mat, Nodes); } return mat; } template DerivativeMatrixGroup::size> derivative() const { DerivativeMatrixGroup::size> df(Nodes.size(), Triangles.size(), Triangle

::NumNodes); for (size_t i = 0; i!= Triangles.size();++i) { Triangles[i].derivative(df, Nodes); } return df; } protected: std::vector Nodes; std::vector> Triangles; }; #endif //OERSTED_FINITEELEMENTMESH_H