From 7275a4feccc908c49c8ddf0a33d90886862d4f22 Mon Sep 17 00:00:00 2001 From: Knut Morten Okstad Date: Thu, 17 Nov 2016 09:38:52 +0100 Subject: [PATCH] Fixed: Loop in MxFiniteElement::write terminated one too early. Changed: Let the MxFiniteElement constructor resize each of the Nx also. Added: Small test program to check the printing and sizing. --- src/ASM/FiniteElement.C | 14 +++++++++++++- src/ASM/FiniteElement.h | 6 ++---- src/ASM/Test/TestFiniteElement.C | 30 ++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 src/ASM/Test/TestFiniteElement.C 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); +}