Dune Core Modules (2.9.0)
Prebasis for Bspline basis. More...
#include <dune/functions/functionspacebases/bsplinebasis.hh>
Public Types  
using  GridView = GV 
The grid view that the FE space is defined on.  
Public Member Functions  
BSplinePreBasis (const GridView &gridView, const std::vector< double > &knotVector, unsigned int order, bool makeOpen=true)  
Construct a Bspline basis for a given grid view and set of knot vectors. More...  
BSplinePreBasis (const GridView &gridView, const FieldVector< double, dim > &lowerLeft, const FieldVector< double, dim > &upperRight, const std::array< unsigned int, dim > &elements, unsigned int order, bool makeOpen=true)  
Construct a Bspline basis for a given grid view with uniform knot vectors. More...  
void  initializeIndices () 
Initialize the global indices.  
const GridView &  gridView () const 
Obtain the grid view that the basis is defined on.  
void  update (const GridView &gv) 
Update the stored grid view, to be called if the grid has changed.  
Node  makeNode () const 
Create tree node.  
template<class ST , int i>  
size_type  size (const Dune::ReservedVector< ST, i > &prefix) const 
Return number of possible values for next position in multi index.  
size_type  dimension () const 
Get the total dimension of the space spanned by this basis.  
size_type  maxNodeSize () const 
Get the maximal number of DOFs associated to node for any element.  
template<typename It >  
It  indices (const Node &node, It it) const 
Maps from subtree index set [0..size1] to a globally unique multi index in global basis.  
unsigned int  size () const 
Total number of Bspline basis functions.  
unsigned int  size (size_t d) const 
Number of shape functions in one direction.  
void  evaluateFunction (const FieldVector< typename GV::ctype, dim > &in, std::vector< FieldVector< R, 1 > > &out, const std::array< unsigned, dim > ¤tKnotSpan) const 
Evaluate all Bspline basis functions at a given point.  
void  evaluateJacobian (const FieldVector< typename GV::ctype, dim > &in, std::vector< FieldMatrix< R, 1, dim > > &out, const std::array< unsigned, dim > ¤tKnotSpan) const 
Evaluate Jacobian of all Bspline basis functions. More...  
template<size_type k>  
void  evaluate (const typename std::array< int, k > &directions, const FieldVector< typename GV::ctype, dim > &in, std::vector< FieldVector< R, 1 > > &out, const std::array< unsigned, dim > ¤tKnotSpan) const 
Evaluate Derivatives of all Bspline basis functions.  
Static Public Member Functions  
static std::array< unsigned int, dim >  getIJK (typename GridView::IndexSet::IndexType idx, std::array< unsigned int, dim > elements) 
Compute integer element coordinates from the element index. More...  
static void  evaluateFunction (const typename GV::ctype &in, std::vector< R > &out, const std::vector< R > &knotVector, unsigned int order, unsigned int currentKnotSpan) 
Evaluate all onedimensional Bspline functions for a given coordinate direction. More...  
static void  evaluateFunctionFull (const typename GV::ctype &in, DynamicMatrix< R > &out, const std::vector< R > &knotVector, unsigned int order, unsigned int currentKnotSpan) 
Evaluate all onedimensional Bspline functions for a given coordinate direction. More...  
static void  evaluateAll (const typename GV::ctype &in, std::vector< R > &out, bool evaluateJacobian, std::vector< R > &outJac, bool evaluateHessian, std::vector< R > &outHess, const std::vector< R > &knotVector, unsigned int order, unsigned int currentKnotSpan) 
Evaluate the second derivatives of all onedimensional Bspline functions for a given coordinate direction. More...  
Public Attributes  
std::array< unsigned int, dim >  order_ 
Order of the Bspline for each space dimension.  
std::array< std::vector< double >, dim >  knotVectors_ 
The knot vectors, one for each space dimension.  
std::array< unsigned, dim >  elements_ 
Number of grid elements in the different coordinate directions.  
Detailed Description
template<typename GV>
class Dune::Functions::BSplinePreBasis< GV >
Prebasis for Bspline basis.
 Template Parameters

GV The GridView that the space is defined on
The BSplinePreBasis can be used to embed a BSplineBasis in a larger basis for the construction of product spaces.
Constructor & Destructor Documentation
◆ BSplinePreBasis() [1/2]

inline 
Construct a Bspline basis for a given grid view and set of knot vectors.
The grid must match the knot vectors, i.e.:
 The grid must be structured and Cartesian, and have cube elements only
 The number of elements in each direction must match the number of knot spans in that direction
 In fact, the element spacing in any direction must match the knot spacing in that direction (disregarding knot multiplicities)
 When ordering the grid elements according to their indices, the resulting order must be lexicographical, with the xindex increasing fastest.
Unfortunately, not all of these conditions can be checked for automatically.
 Parameters

knotVector A single knot vector, which will be used for all coordinate directions order Bspline order, will be used for all coordinate directions makeOpen If this is true, then knots are prepended and appended to the knot vector to make the knot vector 'open'. i.e., start and end with 'order+1' identical knots. Basis functions from such knot vectors are interpolatory at the end of the parameter interval.
 Todo:
 maybe test whether the knot vector is already open?
References Dune::Hybrid::accumulate(), Dune::Functions::BSplinePreBasis< GV >::elements_, Dune::Functions::BSplinePreBasis< GV >::knotVectors_, Dune::Functions::BSplinePreBasis< GV >::order_, and Dune::TypeTree::push_back().
◆ BSplinePreBasis() [2/2]

inline 
Construct a Bspline basis for a given grid view with uniform knot vectors.
The grid must match the knot vectors, i.e.:
 The grid must be structured and Cartesian, and have cube elements only
 Bounding box and number of elements of the grid must match the corresponding arguments given to this constructor.
 The element spacing must be uniform
 When ordering the grid elements according to their indices, the resulting order must be lexicographical, with the xindex increasing fastest.
Unfortunately, not all of these conditions can be checked for automatically.
 Parameters

gridView The grid we are defining the basis on lowerLeft Lower left corner of the structured grid upperRight Upper right corner of the structured grid elements Number of elements in each coordinate direction order Bspline order, will be used for all coordinate directions makeOpen If this is true, then knots are prepended and appended to the knot vector to make the knot vector 'open'. i.e., start and end with 'order+1' identical knots. Basis functions from such knot vectors are interpolatory at the end of the parameter interval.
 Todo:
 maybe test whether the knot vector is already open?
References Dune::Hybrid::accumulate(), Dune::Functions::BSplinePreBasis< GV >::elements_, Dune::Functions::BSplinePreBasis< GV >::knotVectors_, Dune::Functions::BSplinePreBasis< GV >::order_, and Dune::TypeTree::push_back().
Member Function Documentation
◆ evaluateAll()

inlinestatic 
Evaluate the second derivatives of all onedimensional Bspline functions for a given coordinate direction.
 Parameters

in Scalar(!) coordinate where to evaluate the functions enableEvaluations switches calculation of desired derivatives on [out] out Vector containing the values of all Bspline derivatives at 'in' [out] outJac Vector containing the first derivatives of all Bspline derivatives at 'in' (only if calculation was switched on by enableEvaluations) [out] outHess Vector containing the second derivatives of all Bspline derivatives at 'in' (only if calculation was switched on by enableEvaluations)
References Dune::Functions::BSplinePreBasis< GV >::evaluateFunctionFull(), Dune::Functions::BSplinePreBasis< GV >::evaluateJacobian(), Dune::Simd::Overloads::max(), and Dune::DynamicMatrix< K >::resize().
Referenced by Dune::Functions::BSplinePreBasis< GV >::evaluate().
◆ evaluateFunction()

inlinestatic 
Evaluate all onedimensional Bspline functions for a given coordinate direction.
This implementations was based on the explanations in the book of Cottrell, Hughes, Bazilevs, "Isogeometric Analysis"
 Parameters

in Scalar(!) coordinate where to evaluate the functions [out] out Vector containing the values of all Bspline functions at 'in'
 Todo:
 We only hand out function values for those basis functions whose support overlaps the current knot span. However, in the preceding loop we still computed all values_. This won't scale.
References Dune::Simd::Overloads::max().
◆ evaluateFunctionFull()

inlinestatic 
Evaluate all onedimensional Bspline functions for a given coordinate direction.
This implementations was based on the explanations in the book of Cottrell, Hughes, Bazilevs, "Isogeometric Analysis"
 Todo:
 This method is a hack! I computes the derivatives of ALL Bsplines, even the ones that are zero on the current knot span. I need it as an intermediate step to get the derivatives working. It will/must be removed as soon as possible.
 Parameters

in Scalar(!) coordinate where to evaluate the functions [out] out Vector containing the values of all Bspline functions at 'in'
References Dune::DynamicMatrix< K >::resize().
Referenced by Dune::Functions::BSplinePreBasis< GV >::evaluateAll(), and Dune::Functions::BSplinePreBasis< GV >::evaluateJacobian().
◆ evaluateJacobian()

inline 
Evaluate Jacobian of all Bspline basis functions.
In theory this is easy: just look up the formula in a Bspline text of your choice. The challenge is compute only the values needed for the current knot span.
References Dune::Functions::BSplinePreBasis< GV >::evaluateFunctionFull(), Dune::Functions::BSplinePreBasis< GV >::knotVectors_, Dune::Simd::Overloads::max(), Dune::Functions::BSplinePreBasis< GV >::order_, and Dune::Functions::BSplinePreBasis< GV >::size().
Referenced by Dune::Functions::BSplinePreBasis< GV >::evaluateAll().
◆ getIJK()

inlinestatic 
Compute integer element coordinates from the element index.
 Warning
 This method makes strong assumptions about the grid, namely that it is structured, and that indices are given in a xfastest fashion.
Referenced by Dune::Functions::BSplinePreBasis< GV >::indices().
The documentation for this class was generated from the following file:
 dune/functions/functionspacebases/bsplinebasis.hh