19#include "dune/common/fvector.hh"
20#include "dune/common/fmatrix.hh"
32 template <
class CoordType,
int dim>
37 for (
int i=0; i<dim; ++i)
48 constexpr CoordType eps = std::numeric_limits<CoordType>::epsilon();
49 for (
int i=0; i<=dim; ++i)
50 if (std::abs(zeta[i]) < 100*eps)
62 template <
class CoordType,
int dim,
63 std::enable_if_t<std::is_floating_point_v<CoordType>,
int> = 0>
66 constexpr CoordType eps = std::numeric_limits<CoordType>::epsilon();
69 b /= (b.one_norm()+eps);
71 std::copy(b.begin(),b.begin()+dim,x.begin());
92 template <
class CoordType,
int dim>
97 for (
int i=0; i<dim; ++i) {
107 constexpr CoordType eps = std::numeric_limits<CoordType>::epsilon();
108 for (
int i=0; i<=dim; ++i)
109 if (std::abs(zeta[i]) < 100*eps)
124 template <
class CoordType,
int dim>
128 for (
int i=0; i<dim; ++i)
150 template <
size_t dim>
151 std::array<int,dim+1>
barycentric(std::array<int,dim>
const& x,
int bsum)
153 std::array<int,dim+1> zeta;
154 std::copy(begin(x),end(x),begin(zeta));
155 zeta[dim] = bsum - std::accumulate(begin(x),end(x),0);
Dune::FieldVector< CoordType, dim+1 > barycentric(Dune::FieldVector< CoordType, dim > const &x)
Computes the barycentric coordinates of a point in the unit simplex.
Dune::FieldMatrix< CoordType, dim+1, dim > barycentric2Derivative(Dune::FieldVector< CoordType, dim > const &x)
Computes the derivative of the barycentric coordinates of a point in the unit simplex.
Dune::FieldVector< CoordType, dim+1 > barycentric2(Dune::FieldVector< CoordType, dim > const &x)
Computes barycentric coordinates of a point in the unit simplex.
Dune::FieldVector< CoordType, dim > projectToUnitSimplex(Dune::FieldVector< CoordType, dim > x)
Projects a vector onto the unit simplex.