diff --git a/src/ASM/FiniteElement.C b/src/ASM/FiniteElement.C index 6dd77c40..82d6e188 100644 --- a/src/ASM/FiniteElement.C +++ b/src/ASM/FiniteElement.C @@ -39,10 +39,22 @@ std::ostream& FiniteElement::write (std::ostream& os) const } +MxFiniteElement::MxFiniteElement (const std::vector& n, size_t ip) + : FiniteElement(n.front(),ip) +{ + Nx.resize(n.size()-1); + for (size_t b = 1; b < n.size(); b++) + Nx[b-1].resize(n[b]); + + dNxdX.resize(Nx.size()); + d2NxdX2.resize(Nx.size()); +} + + std::ostream& MxFiniteElement::write (std::ostream& os) const { this->FiniteElement::write(os); - for (size_t b = 0; b+1 < Nx.size(); b++) + for (size_t b = 0; b < Nx.size(); b++) { os <<"Basis "<< b+2 <<":\n"; if (!Nx[b].empty()) os <<"N:"<< Nx[b]; diff --git a/src/ASM/FiniteElement.h b/src/ASM/FiniteElement.h index 07edfc0d..1e35b54a 100644 --- a/src/ASM/FiniteElement.h +++ b/src/ASM/FiniteElement.h @@ -88,10 +88,8 @@ public: class MxFiniteElement : public FiniteElement { public: - //! \brief Default constructor. - MxFiniteElement(const std::vector& n, size_t i = 0) : - FiniteElement(n.front(),i), Nx(n.size()-1), dNxdX(n.size()-1), d2NxdX2(n.size()-1) - {} + //! \brief The constructor initializes the size of each basis. + MxFiniteElement(const std::vector& n, size_t ip = 0); //! \brief Empty destructor. virtual ~MxFiniteElement() {} diff --git a/src/ASM/Test/TestFiniteElement.C b/src/ASM/Test/TestFiniteElement.C new file mode 100644 index 00000000..d9198b2f --- /dev/null +++ b/src/ASM/Test/TestFiniteElement.C @@ -0,0 +1,30 @@ +//============================================================================== +//! +//! \file TestFiniteElement.C +//! +//! \date Nov 17 2016 +//! +//! \author Knut Morten Okstad / SINTEF +//! +//! \brief Unit tests for FiniteElement. +//! +//============================================================================== + +#include "FiniteElement.h" + +#include "gtest/gtest.h" + + +TEST(TestFiniteElement, Print) +{ + FiniteElement fe1(4); + MxFiniteElement fe2({3,2,4}); + + std::cout << fe1 << std::endl; + std::cout << fe2 << std::endl; + + ASSERT_EQ((int)fe1.N.size(),4); + ASSERT_EQ((int)fe2.basis(1).size(),3); + ASSERT_EQ((int)fe2.basis(2).size(),2); + ASSERT_EQ((int)fe2.basis(3).size(),4); +}