19#include "dune/common/fvector.hh"
20#include "dune/common/fmatrix.hh"
31 template <
class CoordType,
int dim>
36 for (
int i=0; i<dim; ++i)
47 constexpr CoordType eps = std::numeric_limits<CoordType>::epsilon();
48 for (
int i=0; i<=dim; ++i)
49 if (std::abs(zeta[i]) < 100*eps)
61 template <
class CoordType,
int dim,
62 std::enable_if_t<std::is_floating_point_v<CoordType>,
int> = 0>
65 constexpr CoordType eps = std::numeric_limits<CoordType>::epsilon();
68 b /= (b.one_norm()+eps);
70 std::copy(b.begin(),b.begin()+dim,x.begin());
89 template <
class CoordType,
int dim>
94 for (
int i=0; i<dim; ++i) {
104 constexpr CoordType eps = std::numeric_limits<CoordType>::epsilon();
105 for (
int i=0; i<=dim; ++i)
106 if (std::abs(zeta[i]) < 100*eps)
121 template <
class CoordType,
int dim>
125 for (
int i=0; i<dim; ++i)
147 template <
size_t dim>
148 std::array<int,dim+1>
barycentric(std::array<int,dim>
const& x,
int bsum)
150 std::array<int,dim+1> zeta;
151 std::copy(begin(x),end(x),begin(zeta));
152 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.