OOFEM
2.4
OOFEM.org - Object Oriented Finite Element Solver
|
Interpolation for T-splines. More...
#include <feitspline.h>
Public Member Functions | |
TSplineInterpolation (int nsd) | |
virtual | ~TSplineInterpolation () |
IRResultType | initializeFrom (InputRecord *ir) |
Initializes receiver according to object description stored in input record. More... | |
void | setNumberOfControlPoints (int num) |
virtual void | evalN (FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the array of interpolation functions (shape functions) at given point. More... | |
virtual double | evaldNdx (FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point. More... | |
virtual void | local2global (FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates global coordinates from given local ones. More... | |
virtual int | global2local (FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates local coordinates from given global ones. More... | |
virtual void | giveJacobianMatrixAt (FloatMatrix &jacobianMatrix, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Gives the jacobian matrix at the local coordinates. More... | |
virtual int | giveKnotSpanBasisFuncMask (const IntArray &knotSpan, IntArray &mask) |
Returns indices (zero based) of nonzero basis functions for given knot span. More... | |
virtual int | giveNumberOfKnotSpanBasisFunctions (const IntArray &knotSpan) |
Returns the number of nonzero basis functions at individual knot span,. More... | |
const char * | giveClassName () const |
Public Member Functions inherited from oofem::BSplineInterpolation | |
BSplineInterpolation (int nsd) | |
virtual | ~BSplineInterpolation () |
virtual integrationDomain | giveIntegrationDomain () const |
Returns the integration domain of the interpolator. More... | |
virtual Element_Geometry_Type | giveGeometryType () const |
Returns the geometry type fo the interpolator. More... | |
virtual integrationDomain | giveBoundaryIntegrationDomain (int ib) const |
Returns boundary integration domain. More... | |
virtual integrationDomain | giveBoundarySurfaceIntegrationDomain (int isurf) const |
Returns boundary integration domain. More... | |
virtual integrationDomain | giveBoundaryEdgeIntegrationDomain (int iedge) const |
Returns boundary integration domain. More... | |
virtual int | giveNsd () |
Returns number of spatial dimensions. More... | |
virtual void | boundaryEdgeGiveNodes (IntArray &answer, int boundary) |
Gives the boundary nodes for requested boundary number. More... | |
virtual void | boundaryEdgeEvalN (FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the basis functions on the requested boundary. More... | |
virtual double | boundaryEdgeGiveTransformationJacobian (int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the determinant of the transformation Jacobian on the requested boundary. More... | |
virtual void | boundaryEdgeLocal2Global (FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Maps the local boundary coordinates to global. More... | |
virtual void | boundaryGiveNodes (IntArray &answer, int boundary) |
Gives the boundary nodes for requested boundary number. More... | |
virtual void | boundaryEvalN (FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the basis functions on the requested boundary. More... | |
virtual double | boundaryEvalNormal (FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the normal on the requested boundary. More... | |
virtual double | boundaryGiveTransformationJacobian (int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the determinant of the transformation Jacobian on the requested boundary. More... | |
virtual void | boundaryLocal2Global (FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Maps the local boundary coordinates to global. More... | |
virtual int | giveNumberOfKnotSpans (int dim) |
Returns the number of knot spans of the receiver. More... | |
virtual int | giveNumberOfControlPoints (int dim) |
virtual const double *const * | giveKnotVector () |
Returns the subdivision of patch parametric space. More... | |
virtual const IntArray * | giveKnotMultiplicity (int dim) |
Returns the knot multiplicity of the receiver. More... | |
virtual const FloatArray * | giveKnotValues (int dim) |
Returns the knot values of the receiver. More... | |
virtual bool | hasSubPatchFormulation () |
Returns true, if receiver is formulated on sub-patch basis. More... | |
virtual IntegrationRule * | giveIntegrationRule (int order) |
Sets up a suitable integration rule for numerical integrating over volume. More... | |
virtual IntegrationRule * | giveBoundaryIntegrationRule (int order, int boundary) |
Sets up a suitable integration rule for integrating over the requested boundary. More... | |
virtual IntegrationRule * | giveBoundaryEdgeIntegrationRule (int order, int boundary) |
Sets up a suitable integration rule for integrating over the requested boundary. More... | |
virtual void | boundarySurfaceEvalN (FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the array of edge interpolation functions (shape functions) at given point. More... | |
virtual void | boundarySurfaceEvaldNdx (FloatMatrix &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the matrix of derivatives of edge interpolation functions (shape functions) at given point. More... | |
virtual double | boundarySurfaceEvalNormal (FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the normal out of the surface at given point. More... | |
virtual void | boundarySurfaceLocal2global (FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates edge global coordinates from given local ones. More... | |
virtual double | boundarySurfaceGiveTransformationJacobian (int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the edge jacobian of transformation between local and global coordinates. More... | |
virtual void | boundarySurfaceGiveNodes (IntArray &answer, int boundary) |
Gives the boundary nodes for requested boundary number. More... | |
Public Member Functions inherited from oofem::FEInterpolation | |
FEInterpolation (int o) | |
virtual | ~FEInterpolation () |
virtual int | giveNumberOfNodes () const |
Returns the number of geometric nodes of the receiver. More... | |
std::string | errorInfo (const char *func) const |
int | giveInterpolationOrder () |
Returns the interpolation order. More... | |
virtual void | evald2Ndx2 (FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the matrix of second derivatives of interpolation functions (shape functions) at given point. More... | |
virtual void | evaldNdxi (FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point. More... | |
virtual void | giveLocalNodeCoords (FloatMatrix &answer) |
Returns a matrix containing the local coordinates for each node corresponding to the interpolation. More... | |
virtual double | giveTransformationJacobian (const FloatArray &lcoords, const FEICellGeometry &cellgeo) |
Evaluates the determinant of the transformation. More... | |
virtual IntegrationRule * | giveBoundarySurfaceIntegrationRule (int order, int boundary) |
Sets up a suitable integration rule for integrating over the requested boundary. More... | |
virtual double | evalNXIntegral (int boundary, const FEICellGeometry &cellgeo) |
Computes the integral . More... | |
virtual int | giveNumberOfEdges () const |
Returns number of edges. More... | |
Protected Member Functions | |
double | basisFunction (double u, int p, const FloatArray &U, const int *I) |
Evaluates the middle basis function on local knot vector at u. More... | |
void | dersBasisFunction (int n, double u, int p, const FloatArray &U, const int *I, FloatArray &ders) |
Computes the middle basis function and it derivatives on local knot vector at u. More... | |
void | createLocalKnotVector (int p, const FloatArray &U, const int *I, int *prepend, int *append) |
Creates local open knot vector. More... | |
int | giveKnotSpanBasisFuncMask (const IntArray &startKnotSpan, const IntArray &endKnotSpan, IntArray &mask) |
Returns indices (zero based) of nonzero basis functions for given knot span interval. More... | |
int | giveNumberOfKnotSpanBasisFunctions (const IntArray &startKnotSpan, const IntArray &endKnotSpan) |
Returns the number of nonzero basis functions at given knot span interval. More... | |
Protected Member Functions inherited from oofem::BSplineInterpolation | |
void | basisFuns (FloatArray &N, int span, double u, int p, const double *U) |
Evaluates the nonvanishing basis functions of 1d BSpline (algorithm A2.2 from NURBS book) More... | |
void | dersBasisFuns (int n, double u, int span, int p, double *const U, FloatMatrix &ders) |
Computes nonzero basis functions and their derivatives at u. More... | |
int | findSpan (int n, int p, double u, const double *U) const |
Determines the knot span index (Algorithm A2.1 from the NURBS book) More... | |
void | giveNonzeroBasisFuncInterval (int span, int deg, int &s, int &e) |
Returns the range of nonzero basis functions for given knot span and given degree. More... | |
Protected Attributes | |
int *** | localIndexKnotVector |
Local index knot vector of the dimensions [totalNumberOfControlPoints][nsd][degree+2]. More... | |
int | totalNumberOfControlPoints |
double * | openLocalKnotVector |
Temporary open local knot vector to enable use of BSpline algorithms (common for all directions) [3*max_degree+2]. More... | |
Protected Attributes inherited from oofem::BSplineInterpolation | |
int | nsd |
Number of spatial directions. More... | |
int * | degree |
Degree in each direction. More... | |
FloatArray * | knotValues |
Knot values [nsd]. More... | |
IntArray * | knotMultiplicity |
Knot multiplicity [nsd]. More... | |
int * | numberOfControlPoints |
numberOfControlPoints[nsd] More... | |
double ** | knotVector |
Knot vectors [nsd][knot_vector_size]. More... | |
int * | numberOfKnotSpans |
Nonzero spans in each directions [nsd]. More... | |
Protected Attributes inherited from oofem::FEInterpolation | |
int | order |
Interpolation for T-splines.
Definition at line 61 of file feitspline.h.
|
inline |
Definition at line 72 of file feitspline.h.
|
virtual |
Definition at line 46 of file feitspline.C.
References localIndexKnotVector, oofem::BSplineInterpolation::nsd, oofem::BSplineInterpolation::numberOfControlPoints, and openLocalKnotVector.
|
protected |
Evaluates the middle basis function on local knot vector at u.
u | Value at which to evaluate. |
p | Degree. |
U | Global knot values. |
I | Local index knot vector. |
Definition at line 640 of file feitspline.C.
References oofem::BSplineInterpolation::basisFuns(), createLocalKnotVector(), oofem::BSplineInterpolation::findSpan(), N, and openLocalKnotVector.
Referenced by evalN(), and local2global().
|
protected |
Creates local open knot vector.
This is generally done extracting knot values from global knot vector using the local index knot vector and by prepending p times the first knot and appending p times the last knot. However, existing knot multiplicity at the start and end must be accounted for.
p | Degree. |
U | Global knot values. |
I | Local index knot vector |
prepend | Number of prepended entries |
append | Number of appended entries |
Definition at line 675 of file feitspline.C.
References oofem::FloatArray::at(), and openLocalKnotVector.
Referenced by basisFunction(), and dersBasisFunction().
|
protected |
Computes the middle basis function and it derivatives on local knot vector at u.
The result is stored in the ders vector
n | Degree of the derivation. |
u | Parametric value. |
p | Degree. |
U | Global knot values. |
I | Local index knot vector. |
ders | Vector containing the derivatives of the middle basis function. |
Definition at line 657 of file feitspline.C.
References createLocalKnotVector(), oofem::BSplineInterpolation::dersBasisFuns(), oofem::BSplineInterpolation::findSpan(), openLocalKnotVector, and oofem::FloatArray::resize().
Referenced by evaldNdx(), and giveJacobianMatrixAt().
|
virtual |
Evaluates the matrix of derivatives of interpolation functions (shape functions) at given point.
These derivatives are in global coordinate system (where the nodal coordinates are defined)
answer | Contains resulting matrix of derivatives, the member at i,j position contains value of dNi/dxj. |
lcoords | Array containing (local) coordinates. |
cellgeo | Underlying cell geometry. |
Reimplemented from oofem::BSplineInterpolation.
Definition at line 188 of file feitspline.C.
References oofem::FloatArray::at(), oofem::BSplineInterpolation::degree, dersBasisFunction(), oofem::BSplineInterpolation::findSpan(), oofem::FloatMatrix::giveDeterminant(), giveKnotSpanBasisFuncMask(), oofem::BSplineInterpolation::giveKnotValues(), oofem::IntArray::giveSize(), oofem::FEICellGeometry::giveVertexCoordinates(), oofem::FEIIGAElementGeometryWrapper::knotSpan, oofem::BSplineInterpolation::knotVector, localIndexKnotVector, oofem::BSplineInterpolation::nsd, oofem::BSplineInterpolation::numberOfControlPoints, OOFEM_ERROR, oofem::FloatMatrix::resize(), and oofem::FloatMatrix::zero().
|
virtual |
Evaluates the array of interpolation functions (shape functions) at given point.
answer | Contains resulting array of evaluated interpolation functions. |
lcoords | Array containing (local) coordinates. |
cellgeo | Underlying cell geometry. |
Reimplemented from oofem::BSplineInterpolation.
Definition at line 145 of file feitspline.C.
References oofem::FloatArray::at(), basisFunction(), oofem::BSplineInterpolation::degree, oofem::BSplineInterpolation::findSpan(), giveKnotSpanBasisFuncMask(), oofem::BSplineInterpolation::giveKnotValues(), oofem::IntArray::giveSize(), oofem::FEICellGeometry::giveVertexCoordinates(), oofem::FEIIGAElementGeometryWrapper::knotSpan, oofem::BSplineInterpolation::knotVector, localIndexKnotVector, N, oofem::BSplineInterpolation::nsd, oofem::BSplineInterpolation::numberOfControlPoints, OOFEM_ERROR, and oofem::FloatArray::resize().
|
inlinevirtual |
Reimplemented from oofem::BSplineInterpolation.
Definition at line 89 of file feitspline.h.
|
virtual |
Gives the jacobian matrix at the local coordinates.
jacobianMatrix | The requested matrix. |
lcoords | Local coordinates. |
cellgeo | Element geometry. |
Reimplemented from oofem::BSplineInterpolation.
Definition at line 372 of file feitspline.C.
References oofem::FloatArray::at(), oofem::BSplineInterpolation::degree, dersBasisFunction(), oofem::BSplineInterpolation::findSpan(), giveKnotSpanBasisFuncMask(), oofem::BSplineInterpolation::giveKnotValues(), oofem::IntArray::giveSize(), oofem::FEICellGeometry::giveVertexCoordinates(), oofem::FEIIGAElementGeometryWrapper::knotSpan, oofem::BSplineInterpolation::knotVector, localIndexKnotVector, oofem::BSplineInterpolation::nsd, oofem::BSplineInterpolation::numberOfControlPoints, OOFEM_ERROR, oofem::FloatMatrix::resize(), and oofem::FloatMatrix::zero().
|
virtual |
Returns indices (zero based) of nonzero basis functions for given knot span.
The knot span identifies the sub-region of the finite element.
Reimplemented from oofem::BSplineInterpolation.
Definition at line 485 of file feitspline.C.
References oofem::BSplineInterpolation::degree, oofem::IntArray::followedBy(), oofem::BSplineInterpolation::knotValues, oofem::BSplineInterpolation::knotVector, localIndexKnotVector, oofem::BSplineInterpolation::nsd, OOFEM_ERROR, oofem::IntArray::preallocate(), and totalNumberOfControlPoints.
Referenced by evaldNdx(), evalN(), giveJacobianMatrixAt(), and local2global().
|
protected |
Returns indices (zero based) of nonzero basis functions for given knot span interval.
Definition at line 564 of file feitspline.C.
References oofem::BSplineInterpolation::degree, oofem::IntArray::followedBy(), oofem::BSplineInterpolation::knotValues, oofem::BSplineInterpolation::knotVector, localIndexKnotVector, oofem::BSplineInterpolation::nsd, OOFEM_ERROR, oofem::IntArray::preallocate(), and totalNumberOfControlPoints.
|
virtual |
Returns the number of nonzero basis functions at individual knot span,.
Reimplemented from oofem::BSplineInterpolation.
Definition at line 530 of file feitspline.C.
References oofem::BSplineInterpolation::degree, oofem::BSplineInterpolation::knotValues, oofem::BSplineInterpolation::knotVector, localIndexKnotVector, oofem::BSplineInterpolation::nsd, and totalNumberOfControlPoints.
|
protected |
Returns the number of nonzero basis functions at given knot span interval.
Definition at line 609 of file feitspline.C.
References oofem::BSplineInterpolation::degree, oofem::BSplineInterpolation::knotValues, oofem::BSplineInterpolation::knotVector, localIndexKnotVector, oofem::BSplineInterpolation::nsd, and totalNumberOfControlPoints.
|
inlinevirtual |
Evaluates local coordinates from given global ones.
If local coordinates cannot be found (generate elements, or point far outside geometry, then the center coordinate will be used as a last resort, and the return value will be zero.
answer | Contains evaluated local coordinates. |
gcoords | Array containing global coordinates. |
cellgeo | Underlying cell geometry. |
Reimplemented from oofem::BSplineInterpolation.
Definition at line 80 of file feitspline.h.
References OOFEM_ERROR.
|
virtual |
Initializes receiver according to object description stored in input record.
Reimplemented from oofem::BSplineInterpolation.
Definition at line 62 of file feitspline.C.
References _IFT_TSplineInterpolation_localIndexKnotVectorU, _IFT_TSplineInterpolation_localIndexKnotVectorV, _IFT_TSplineInterpolation_localIndexKnotVectorW, oofem::IntArray::clear(), oofem::BSplineInterpolation::degree, oofem::IntArray::giveSize(), oofem::BSplineInterpolation::initializeFrom(), IR_GIVE_FIELD, oofem::IRRT_BAD_FORMAT, oofem::IRRT_OK, oofem::BSplineInterpolation::knotValues, localIndexKnotVector, oofem::BSplineInterpolation::nsd, OOFEM_WARNING, openLocalKnotVector, and totalNumberOfControlPoints.
|
virtual |
Evaluates global coordinates from given local ones.
answer | Contains resulting global coordinates. |
lcoords | Array containing (local) coordinates. |
cellgeo | Underlying cell geometry. |
Reimplemented from oofem::BSplineInterpolation.
Definition at line 320 of file feitspline.C.
References oofem::FloatArray::at(), basisFunction(), oofem::BSplineInterpolation::degree, oofem::BSplineInterpolation::findSpan(), giveKnotSpanBasisFuncMask(), oofem::BSplineInterpolation::giveKnotValues(), oofem::IntArray::giveSize(), oofem::FEICellGeometry::giveVertexCoordinates(), oofem::FEIIGAElementGeometryWrapper::knotSpan, oofem::BSplineInterpolation::knotVector, localIndexKnotVector, N, oofem::BSplineInterpolation::nsd, oofem::BSplineInterpolation::numberOfControlPoints, OOFEM_ERROR, oofem::FloatArray::resize(), oofem::FloatArray::times(), and oofem::FloatArray::zero().
|
inline |
Definition at line 76 of file feitspline.h.
Referenced by oofem::IGATSplineElement::initializeFrom().
|
protected |
Local index knot vector of the dimensions [totalNumberOfControlPoints][nsd][degree+2].
Definition at line 65 of file feitspline.h.
Referenced by evaldNdx(), evalN(), giveJacobianMatrixAt(), giveKnotSpanBasisFuncMask(), giveNumberOfKnotSpanBasisFunctions(), initializeFrom(), local2global(), and ~TSplineInterpolation().
|
protected |
Temporary open local knot vector to enable use of BSpline algorithms (common for all directions) [3*max_degree+2].
Definition at line 70 of file feitspline.h.
Referenced by basisFunction(), createLocalKnotVector(), dersBasisFunction(), initializeFrom(), and ~TSplineInterpolation().
|
protected |
Definition at line 66 of file feitspline.h.
Referenced by giveKnotSpanBasisFuncMask(), giveNumberOfKnotSpanBasisFunctions(), and initializeFrom().