44#define _IFT_BSplineInterpolation_degree "degree"
45#define _IFT_BSplineInterpolation_knotVectorU "knotvectoru"
46#define _IFT_BSplineInterpolation_knotVectorV "knotvectorv"
47#define _IFT_BSplineInterpolation_knotVectorW "knotvectorw"
48#define _IFT_BSplineInterpolation_knotMultiplicityU "knotmultiplicityu"
49#define _IFT_BSplineInterpolation_knotMultiplicityV "knotmultiplicityv"
50#define _IFT_BSplineInterpolation_knotMultiplicityW "knotmultiplicityw"
100 }
else if (
nsd == 2 ) {
102 }
else if (
nsd == 1 ) {
115 }
else if (
nsd == 2 ) {
117 }
else if (
nsd == 1 ) {
126 }
else if (
nsd == 2 ) {
145 {
OOFEM_ERROR(
"Functions not supported for this interpolator.");}
147 {
OOFEM_ERROR(
"Functions not supported for this interpolator."); }
149 {
OOFEM_ERROR(
"Functions not supported for this interpolator.");}
151 {
OOFEM_ERROR(
"Functions not supported for this interpolator."); }
153 {
OOFEM_ERROR(
"Functions not supported for this interpolator."); }
159 {
OOFEM_ERROR(
"Functions not supported for this interpolator."); }
161 {
OOFEM_ERROR(
"Functions not supported for this interpolator."); }
163 {
OOFEM_ERROR(
"Functions not supported for this interpolator."); }
165 {
OOFEM_ERROR(
"Functions not supported for this interpolator."); }
167 {
OOFEM_ERROR(
"Functions not supported for this interpolator."); }
169 {
OOFEM_ERROR(
"Functions not supported for this interpolator.");}
180 {
OOFEM_ERROR(
"boundaryGiveTransformationJacobian - Not implemented"); }
182 {
OOFEM_ERROR(
"boundaryLocal2Global - Not implemented"); }
188 return this->knotVector.
data();
199 int giveKnotSpanBasisFuncMask(
const IntArray &knotSpan,
IntArray &mask)
const override;
200 int giveNumberOfKnotSpanBasisFunctions(
const IntArray &knotSpan)
const override;
259 int findSpan(
int n,
int p,
double u,
const FloatArray &U)
const;
int giveNsd(const Element_Geometry_Type) const override
const Element_Geometry_Type giveGeometryType() const override
std::array< int, 3 > numberOfKnotSpans
Nonzero spans in each directions [nsd].
static ParamKey IPK_BSplineInterpolation_degree
void boundaryEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
double boundaryEdgeGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
integrationDomain giveBoundaryIntegrationDomain(int ib, const Element_Geometry_Type) const override
Returns boundary integration domain.
std::array< int, 3 > degree
Degree in each direction.
double boundaryEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
BSplineInterpolation(int nsd)
std::array< FloatArray, 3 > knotVector
Knot vectors [nsd][knot_vector_size].
std::array< int, 3 > numberOfControlPoints
numberOfControlPoints[nsd]
void boundaryLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
virtual int giveNumberOfControlPoints(int dim) const
double boundarySurfaceGiveTransformationJacobian(int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
const Element_Geometry_Type giveBoundaryGeometryType(int boundary) const override
bool hasSubPatchFormulation() const override
static ParamKey IPK_BSplineInterpolation_knotMultiplicityV
void boundaryEdgeEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
std::unique_ptr< IntegrationRule > giveIntegrationRule(int order, const Element_Geometry_Type) const override
static ParamKey IPK_BSplineInterpolation_knotVectorV
std::unique_ptr< IntegrationRule > giveBoundaryEdgeIntegrationRule(int order, int boundary, Element_Geometry_Type) const override
IntArray boundarySurfaceGiveNodes(int boundary, const Element_Geometry_Type, bool includeHierarchical=false) const override
const char * giveClassName() const
IntArray boundaryGiveNodes(int boundary, const Element_Geometry_Type) const override
void boundarySurfaceEvalN(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
static ParamKey IPK_BSplineInterpolation_knotVectorW
int giveNumberOfKnotSpans(int dim) const override
const FloatArray * giveKnotValues(int dim) const override
static ParamKey IPK_BSplineInterpolation_knotVectorU
void boundarySurfaceLocal2global(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
std::unique_ptr< IntegrationRule > giveBoundaryIntegrationRule(int order, int boundary, Element_Geometry_Type) const override
void giveNonzeroBasisFuncInterval(int span, int deg, int &s, int &e) const
integrationDomain giveBoundarySurfaceIntegrationDomain(int isurf, const Element_Geometry_Type) const override
Returns boundary integration domain.
int global2local(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
double boundarySurfaceEvalNormal(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
std::array< IntArray, 3 > knotMultiplicity
Knot multiplicity [nsd].
integrationDomain giveIntegrationDomain(const Element_Geometry_Type egt) const override
integrationDomain giveBoundaryEdgeIntegrationDomain(int iedge, const Element_Geometry_Type) const override
Returns boundary integration domain.
static ParamKey IPK_BSplineInterpolation_knotMultiplicityW
const FloatArray * giveKnotVector() const override
const IntArray * giveKnotMultiplicity(int dim) const override
void boundaryEdgeLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
static ParamKey IPK_BSplineInterpolation_knotMultiplicityU
int nsd
Number of spatial directions.
IntArray boundaryEdgeGiveNodes(int boundary, const Element_Geometry_Type, bool includeHierarchical=false) const override
std::array< FloatArray, 3 > knotValues
Knot values [nsd].
double boundaryEdgeEvalNormal(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
double boundaryGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
void boundarySurfaceEvaldNdx(FloatMatrix &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
const double * data() const
@ _UnknownIntegrationDomain