MFEM v4.8.0
Finite element discretization library
Loading...
Searching...
No Matches
mfem::KnotVector Class Reference

A vector of knots in one dimension, with B-spline basis functions of a prescribed order. More...

#include <nurbs.hpp>

Collaboration diagram for mfem::KnotVector:
[legend]

Public Member Functions

 KnotVector ()
 Create an empty KnotVector.
 
 KnotVector (std::istream &input)
 Create a KnotVector by reading data from stream input. Two integers are read, for order and number of control points.
 
 KnotVector (int order, int NCP)
 Create a KnotVector with undefined knots (initialized to -1) of order order and number of control points NCP.
 
 KnotVector (int order, const Vector &intervals, const Array< int > &continuity)
 Create a KnotVector by passing in a degree, a Vector of interval lengths of length n, and a list of continuity of length n + 1.
 
 KnotVector (const KnotVector &kv)
 Copy constructor.
 
KnotVectoroperator= (const KnotVector &kv)
 
int GetNE () const
 Return the number of elements, defined by distinct knots.
 
int GetNCP () const
 Return the number of control points.
 
int GetOrder () const
 Return the order.
 
int Size () const
 Return the number of knots, including multiplicities.
 
void GetElements ()
 Count the number of elements.
 
bool isElement (int i) const
 Return whether the knot index Order plus i is the beginning of an element.
 
int GetNKS () const
 Return the number of control points minus the order. This is not the number of knot spans, but it gives the number of knots to be checked with isElement for non-empty knot spans (elements).
 
real_t getKnotLocation (real_t xi, int ni) const
 Return the parameter for element reference coordinate xi in [0,1], for the element beginning at knot ni.
 
int findKnotSpan (real_t u) const
 Return the index of the knot span containing parameter u.
 
void CalcShape (Vector &shape, int i, real_t xi) const
 Calculate the nonvanishing shape function values in shape for the element corresponding to knot index i and element reference coordinate xi.
 
void CalcDShape (Vector &grad, int i, real_t xi) const
 Calculate derivatives of the nonvanishing shape function values in grad for the element corresponding to knot index i and element reference coordinate xi.
 
void CalcDnShape (Vector &gradn, int n, int i, real_t xi) const
 Calculate n-th derivatives (order n) of the nonvanishing shape function values in grad for the element corresponding to knot index i and element reference coordinate xi.
 
void CalcD2Shape (Vector &grad2, int i, real_t xi) const
 Calculate second-order shape function derivatives, using CalcDnShape.
 
void FindMaxima (Array< int > &ks, Vector &xi, Vector &u) const
 Gives the locations of the maxima of the KnotVector in reference space. The function gives the knot span ks, the coordinate in the knot span xi, and the coordinate of the maximum in parameter space u.
 
void FindInterpolant (Array< Vector * > &x)
 Global curve interpolation through the points x (overwritten). x is an array with the length of the spatial dimension containing vectors with spatial coordinates. The control points of the interpolated curve are returned in x in the same form.
 
void Difference (const KnotVector &kv, Vector &diff) const
 
void UniformRefinement (Vector &newknots, int rf) const
 Uniformly refine by factor rf, by inserting knots in each span.
 
void Refinement (Vector &newknots, int rf) const
 Refine with refinement factor rf.
 
int GetCoarseningFactor () const
 
Vector GetFineKnots (const int cf) const
 
KnotVectorDegreeElevate (int t) const
 Return a new KnotVector with elevated degree by repeating the endpoints of the KnotVector.
 
void Flip ()
 Reverse the knots.
 
void Print (std::ostream &os) const
 Print the order, number of control points, and knots.
 
void PrintFunctions (std::ostream &os, int samples=11) const
 Prints the non-zero shape functions and their first and second derivatives associated with the KnotVector per element. Use GetElements() to count the elements before using this function. samples is the number of samples of the shape functions per element.
 
 ~KnotVector ()
 Destroys KnotVector.
 
real_toperator[] (int i)
 Access function to knot i.
 
const real_toperator[] (int i) const
 Const access function to knot i.
 

Public Attributes

std::shared_ptr< SpacingFunctionspacing
 Function to define the distribution of knots for any number of knot spans.
 
bool coarse
 

Protected Attributes

Vector knot
 Stores the values of all knots.
 
int Order
 Order of the B-spline basis functions.
 
int NumOfControlPoints
 Number of control points.
 
int NumOfElements
 Number of elements, defined by distinct knots.
 

Static Protected Attributes

static const int MaxOrder = 10
 

Detailed Description

A vector of knots in one dimension, with B-spline basis functions of a prescribed order.

Note
Order is defined in the sense of "The NURBS book" - 2nd ed - Piegl and Tiller, cf. section 2.2.

Definition at line 39 of file nurbs.hpp.

Constructor & Destructor Documentation

◆ KnotVector() [1/5]

mfem::KnotVector::KnotVector ( )
inline

Create an empty KnotVector.

Definition at line 58 of file nurbs.hpp.

◆ KnotVector() [2/5]

mfem::KnotVector::KnotVector ( std::istream & input)

Create a KnotVector by reading data from stream input. Two integers are read, for order and number of control points.

Definition at line 30 of file nurbs.cpp.

◆ KnotVector() [3/5]

mfem::KnotVector::KnotVector ( int order,
int NCP )

Create a KnotVector with undefined knots (initialized to -1) of order order and number of control points NCP.

Definition at line 38 of file nurbs.cpp.

◆ KnotVector() [4/5]

mfem::KnotVector::KnotVector ( int order,
const Vector & intervals,
const Array< int > & continuity )

Create a KnotVector by passing in a degree, a Vector of interval lengths of length n, and a list of continuity of length n + 1.

The intervals refer to spans between unique knot values (not counting zero-size intervals at repeated knots), and the continuity values should be >= -1 (discontinuous) and <= order-1 (maximally-smooth for the given polynomial degree). Periodicity is not supported.

Definition at line 48 of file nurbs.cpp.

◆ KnotVector() [5/5]

mfem::KnotVector::KnotVector ( const KnotVector & kv)
inline

Copy constructor.

Definition at line 80 of file nurbs.hpp.

◆ ~KnotVector()

mfem::KnotVector::~KnotVector ( )
inline

Destroys KnotVector.

Definition at line 192 of file nurbs.hpp.

Member Function Documentation

◆ CalcD2Shape()

void mfem::KnotVector::CalcD2Shape ( Vector & grad2,
int i,
real_t xi ) const
inline

Calculate second-order shape function derivatives, using CalcDnShape.

Definition at line 135 of file nurbs.hpp.

◆ CalcDnShape()

void mfem::KnotVector::CalcDnShape ( Vector & gradn,
int n,
int i,
real_t xi ) const

Calculate n-th derivatives (order n) of the nonvanishing shape function values in grad for the element corresponding to knot index i and element reference coordinate xi.

Definition at line 422 of file nurbs.cpp.

◆ CalcDShape()

void mfem::KnotVector::CalcDShape ( Vector & grad,
int i,
real_t xi ) const

Calculate derivatives of the nonvanishing shape function values in grad for the element corresponding to knot index i and element reference coordinate xi.

Definition at line 364 of file nurbs.cpp.

◆ CalcShape()

void mfem::KnotVector::CalcShape ( Vector & shape,
int i,
real_t xi ) const

Calculate the nonvanishing shape function values in shape for the element corresponding to knot index i and element reference coordinate xi.

Definition at line 337 of file nurbs.cpp.

◆ DegreeElevate()

KnotVector * mfem::KnotVector::DegreeElevate ( int t) const

Return a new KnotVector with elevated degree by repeating the endpoints of the KnotVector.

Note
The returned object should be deleted by the caller.

Definition at line 103 of file nurbs.cpp.

◆ Difference()

void mfem::KnotVector::Difference ( const KnotVector & kv,
Vector & diff ) const

Set diff, comprised of knots in kv not contained in this KnotVector. kv must be of the same order as this KnotVector. The current implementation is not well defined, and the function may have undefined behavior, as diff may have unset entries at the end.

Definition at line 646 of file nurbs.cpp.

◆ FindInterpolant()

void mfem::KnotVector::FindInterpolant ( Array< Vector * > & x)

Global curve interpolation through the points x (overwritten). x is an array with the length of the spatial dimension containing vectors with spatial coordinates. The control points of the interpolated curve are returned in x in the same form.

Definition at line 584 of file nurbs.cpp.

◆ findKnotSpan()

int mfem::KnotVector::findKnotSpan ( real_t u) const

Return the index of the knot span containing parameter u.

Definition at line 617 of file nurbs.cpp.

◆ FindMaxima()

void mfem::KnotVector::FindMaxima ( Array< int > & ks,
Vector & xi,
Vector & u ) const

Gives the locations of the maxima of the KnotVector in reference space. The function gives the knot span ks, the coordinate in the knot span xi, and the coordinate of the maximum in parameter space u.

Definition at line 523 of file nurbs.cpp.

◆ Flip()

void mfem::KnotVector::Flip ( )

Reverse the knots.

Definition at line 281 of file nurbs.cpp.

◆ GetCoarseningFactor()

int mfem::KnotVector::GetCoarseningFactor ( ) const

Returns the coarsening factor needed for non-nested nonuniform spacing functions, to result in a single element from which refinement can be done. The return value is 1 if uniform or nested spacing is used.

Definition at line 153 of file nurbs.cpp.

◆ GetElements()

void mfem::KnotVector::GetElements ( )

Count the number of elements.

Definition at line 269 of file nurbs.cpp.

◆ GetFineKnots()

Vector mfem::KnotVector::GetFineKnots ( const int cf) const

For a given coarsening factor cf, find the fine knots between the coarse knots.

Definition at line 172 of file nurbs.cpp.

◆ getKnotLocation()

real_t mfem::KnotVector::getKnotLocation ( real_t xi,
int ni ) const
inline

Return the parameter for element reference coordinate xi in [0,1], for the element beginning at knot ni.

Definition at line 110 of file nurbs.hpp.

◆ GetNCP()

int mfem::KnotVector::GetNCP ( ) const
inline

Return the number of control points.

Definition at line 88 of file nurbs.hpp.

◆ GetNE()

int mfem::KnotVector::GetNE ( ) const
inline

Return the number of elements, defined by distinct knots.

Definition at line 85 of file nurbs.hpp.

◆ GetNKS()

int mfem::KnotVector::GetNKS ( ) const
inline

Return the number of control points minus the order. This is not the number of knot spans, but it gives the number of knots to be checked with isElement for non-empty knot spans (elements).

Definition at line 106 of file nurbs.hpp.

◆ GetOrder()

int mfem::KnotVector::GetOrder ( ) const
inline

Return the order.

Definition at line 91 of file nurbs.hpp.

◆ isElement()

bool mfem::KnotVector::isElement ( int i) const
inline

Return whether the knot index Order plus i is the beginning of an element.

Definition at line 101 of file nurbs.hpp.

◆ operator=()

KnotVector & mfem::KnotVector::operator= ( const KnotVector & kv)

Definition at line 91 of file nurbs.cpp.

◆ operator[]() [1/2]

real_t & mfem::KnotVector::operator[] ( int i)
inline

Access function to knot i.

Definition at line 195 of file nurbs.hpp.

◆ operator[]() [2/2]

const real_t & mfem::KnotVector::operator[] ( int i) const
inline

Const access function to knot i.

Definition at line 198 of file nurbs.hpp.

◆ Print()

void mfem::KnotVector::Print ( std::ostream & os) const

Print the order, number of control points, and knots.

The output is formatted for writing a mesh to file. This function is called by NURBSPatch::Print.

Definition at line 294 of file nurbs.cpp.

◆ PrintFunctions()

void mfem::KnotVector::PrintFunctions ( std::ostream & os,
int samples = 11 ) const

Prints the non-zero shape functions and their first and second derivatives associated with the KnotVector per element. Use GetElements() to count the elements before using this function. samples is the number of samples of the shape functions per element.

Definition at line 300 of file nurbs.cpp.

◆ Refinement()

void mfem::KnotVector::Refinement ( Vector & newknots,
int rf ) const

Refine with refinement factor rf.

Definition at line 209 of file nurbs.cpp.

◆ Size()

int mfem::KnotVector::Size ( ) const
inline

Return the number of knots, including multiplicities.

Definition at line 94 of file nurbs.hpp.

◆ UniformRefinement()

void mfem::KnotVector::UniformRefinement ( Vector & newknots,
int rf ) const

Uniformly refine by factor rf, by inserting knots in each span.

Definition at line 132 of file nurbs.cpp.

Member Data Documentation

◆ coarse

bool mfem::KnotVector::coarse

Flag to indicate whether the KnotVector has been coarsened, which means it is ready for non-nested refinement.

Definition at line 205 of file nurbs.hpp.

◆ knot

Vector mfem::KnotVector::knot
protected

Stores the values of all knots.

Definition at line 45 of file nurbs.hpp.

◆ MaxOrder

const int mfem::KnotVector::MaxOrder = 10
staticprotected

Definition at line 42 of file nurbs.hpp.

◆ NumOfControlPoints

int mfem::KnotVector::NumOfControlPoints
protected

Number of control points.

Definition at line 51 of file nurbs.hpp.

◆ NumOfElements

int mfem::KnotVector::NumOfElements
protected

Number of elements, defined by distinct knots.

Definition at line 54 of file nurbs.hpp.

◆ Order

int mfem::KnotVector::Order
protected

Order of the B-spline basis functions.

Definition at line 48 of file nurbs.hpp.

◆ spacing

std::shared_ptr<SpacingFunction> mfem::KnotVector::spacing

Function to define the distribution of knots for any number of knot spans.

Definition at line 201 of file nurbs.hpp.


The documentation for this class was generated from the following files: