Skip to content
Snippets Groups Projects
Commit 162aa2fa authored by Porrmann, Maik's avatar Porrmann, Maik
Browse files

fix coefficientMatrixType to double, add printing basisFunctions

parent 78e28875
No related branches found
No related tags found
No related merge requests found
......@@ -34,15 +34,14 @@ namespace Dune
template <class D, class R>
class ArgyrisLocalBasis:
class ArgyrisLocalBasis
: public PolynomialBasisWithMatrix<
StandardEvaluator<VirtualMonomialBasis<2, D>>, SparseCoeffMatrix<D, 1>, D, R>
public PolynomialBasisWithMatrix<StandardEvaluator<VirtualMonomialBasis<2, D>>,
SparseCoeffMatrix<double, 1>, D, R>
{
public:
static constexpr unsigned int dim = 2;
using Eval = StandardEvaluator<VirtualMonomialBasis<dim, D>>;
using Base = PolynomialBasisWithMatrix<
StandardEvaluator<VirtualMonomialBasis<dim, D>>, SparseCoeffMatrix<D, 1>, D, R>;
using Base = PolynomialBasisWithMatrix<StandardEvaluator<VirtualMonomialBasis<dim, D>>,
SparseCoeffMatrix<double, 1>, D, R>;
using Traits =
LocalBasisTraits<D, dim, FieldVector<D, dim>, R, 1, FieldVector<R, 1>, FieldMatrix<R, 1, dim>>;
......@@ -64,7 +63,7 @@ namespace Dune
5)) // Use monomials up to order 5!
{
assert(coeffSize == this->basis().size());
this->fill(PolynomialBasisCoefficients::getArgyrisCoefficients<D>());
this->fill(PolynomialBasisCoefficients::getArgyrisCoefficients<double>());
}
ArgyrisLocalBasis(std::bitset<numberOfEdges> edgeOrientation) : ArgyrisLocalBasis()
......
......@@ -33,13 +33,13 @@ namespace Dune
*/
template <class D, class R, unsigned int dim>
class HermiteLocalBasis
: public PolynomialBasisWithMatrix<
StandardEvaluator<VirtualMonomialBasis<dim, D>>, SparseCoeffMatrix<D, 1>, D, R>
class HermiteLocalBasis:
public PolynomialBasisWithMatrix<StandardEvaluator<VirtualMonomialBasis<dim, D>>,
SparseCoeffMatrix<double, 1>, D, R>
{
public:
using Eval = StandardEvaluator<VirtualMonomialBasis<dim, D>>;
using Base = PolynomialBasisWithMatrix<Eval, SparseCoeffMatrix<D, 1>, D, R>;
using Base = PolynomialBasisWithMatrix<Eval, SparseCoeffMatrix<double, 1>, D, R>;
using Traits = LocalBasisTraits<D, dim, FieldVector<D, dim>, R, 1, FieldVector<R, 1>, FieldMatrix<R, 1, dim>>;
private:
......@@ -55,7 +55,7 @@ namespace Dune
if (dim <= 3)
{
this->fill(PolynomialBasisCoefficients::getHermiteCoefficients<D, dim>());
this->fill(PolynomialBasisCoefficients::getHermiteCoefficients<double, dim>());
}
else
DUNE_THROW(Dune::NotImplemented, "only implemented for dim <= 3");
......
......@@ -35,12 +35,12 @@ namespace Dune
template <class D, class R>
class MorleyLocalBasis:
public PolynomialBasisWithMatrix<StandardEvaluator<VirtualMonomialBasis<2, D>>,
SparseCoeffMatrix<D, 1>, D, R>
SparseCoeffMatrix<double, 1>, D, R>
{
public:
static constexpr unsigned int dim = 2;
using Eval = StandardEvaluator<VirtualMonomialBasis<2, D>>;
using Base = PolynomialBasisWithMatrix<Eval, SparseCoeffMatrix<D, 1>, D, R>;
using Base = PolynomialBasisWithMatrix<Eval, SparseCoeffMatrix<double, 1>, D, R>;
using Traits = LocalBasisTraits<D, 2, FieldVector<D, 2>, R, 1, FieldVector<R, 1>, FieldMatrix<R, 1, 2>>;
private:
......@@ -61,7 +61,7 @@ namespace Dune
{
assert(coeffSize == this->basis().size());
Base::fill(PolynomialBasisCoefficients::getMorleyCoefficients<D>());
Base::fill(PolynomialBasisCoefficients::getMorleyCoefficients<double>());
}
/**
......
......@@ -6,13 +6,15 @@
#include <dune/localfunctions/utility/polynomialbasis.hh>
#include <dune/localfunctions/hermite.hh>
#include <dune/localfunctions/argyris.hh>
int main(int argc, char *argv[])
{
constexpr unsigned int dim = 2;
typedef Dune::MultiIndex<dim, int> MI;
typedef Dune::MultiIndex<dim, double> MI;
typedef Dune::MonomialBasis<Dune::GeometryTypes::simplex(dim).toId(), MI> MIBasis;
MIBasis basis(3);
MIBasis basis(5);
Dune::FieldVector<MI, dim> x;
/*
* Init MultiIndices
......@@ -29,5 +31,19 @@ int main(int argc, char *argv[])
std::cout << "Monomial Basis " << std::endl
<< val << std::endl;
Dune::Impl::HermiteLocalBasis<MI, MI, 2> hermite;
val.resize(hermite.size());
hermite.evaluate(x, val);
std::cout << "Hermite Basis 2d " << std::endl << val << std::endl;
Dune::Impl::ArgyrisLocalBasis<MI, MI> argyris;
val.resize(argyris.size());
argyris.evaluate(x, val);
std::cout << "Argyris Basis " << std::endl << val << std::endl;
std::vector<decltype(argyris)::Traits::JacobianType> jacs;
argyris.evaluateJacobian(x, jacs);
std::cout << "Argyris Basis Jacobian " << std::endl << jacs << std::endl;
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment