OOFEM 3.0
Loading...
Searching...
No Matches
feinterpol.h
Go to the documentation of this file.
1/*
2 *
3 * ##### ##### ###### ###### ### ###
4 * ## ## ## ## ## ## ## ### ##
5 * ## ## ## ## #### #### ## # ##
6 * ## ## ## ## ## ## ## ##
7 * ## ## ## ## ## ## ## ##
8 * ##### ##### ## ###### ## ##
9 *
10 *
11 * OOFEM : Object Oriented Finite Element Code
12 *
13 * Copyright (C) 1993 - 2025 Borek Patzak
14 *
15 *
16 *
17 * Czech Technical University, Faculty of Civil Engineering,
18 * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19 *
20 * This library is free software; you can redistribute it and/or
21 * modify it under the terms of the GNU Lesser General Public
22 * License as published by the Free Software Foundation; either
23 * version 2.1 of the License, or (at your option) any later version.
24 *
25 * This program is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28 * Lesser General Public License for more details.
29 *
30 * You should have received a copy of the GNU Lesser General Public
31 * License along with this library; if not, write to the Free Software
32 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33 */
34
35#ifndef feinterpol_h
36#define feinterpol_h
37
38#include "oofemenv.h"
39#include "error.h"
40#include "inputrecord.h"
41#include "intarray.h"
42#include "integrationdomain.h"
43#include "elementgeometrytype.h"
44#include "materialmode.h"
45#include "node.h"
46#include "element.h"
47
48namespace oofem {
49class Element;
50class FloatArray;
51class FloatMatrix;
52class IntArray;
53class IntegrationRule;
55
56template <std::size_t N> class FloatArrayF;
57template <std::size_t N, std::size_t M> class FloatMatrixF;
58
67{
68public:
70 virtual ~FEICellGeometry() { }
71 virtual int giveNumberOfVertices() const = 0;
72 virtual const FloatArray giveVertexCoordinates(int i) const = 0;
73 virtual const Element_Geometry_Type giveGeometryType() const = 0;
74 virtual const FEInterpolation* getGeometryInterpolation() const {return nullptr;};
75};
76
77
83{
85public:
88 int giveNumberOfVertices() const override
89 {
90 OOFEM_ERROR("no reference geometry");
91 }
92 const FloatArray giveVertexCoordinates(int i) const override
93 {
94 OOFEM_ERROR("no reference geometry");
95 }
97 {
98 return EGT_unknown;
99 }
100 std :: string errorInfo(const char *func) const { return func; }
101};
102
103
108{
109protected:
110 const Element *elem;
111public:
115 int giveNumberOfVertices() const override;
116 const FloatArray giveVertexCoordinates(int i) const override
117 {
118 return elem->giveNode(i)->giveCoordinates();
119 }
121 return elem->giveGeometryType();
122 }
123 const FEInterpolation* getGeometryInterpolation() const override {return elem->getGeometryInterpolation();}
124};
125
126
131{
132protected:
133 const Element *elem;
135 double alpha;
136
137public:
141 int giveNumberOfVertices() const override;
142 const FloatArray giveVertexCoordinates(int i) const override;
143 void setTimeStep(TimeStep *ts) { tStep = ts; }
144 void setAlpha(double val) { this->alpha = val; }
146 return elem->giveGeometryType();}
147};
148
149
150
151
156{
157protected:
158 const std::vector< FloatArray > &coords;
160
161public:
162 FEIVertexListGeometryWrapper(const std::vector< FloatArray > &coords, const Element_Geometry_Type gt) :
165 int giveNumberOfVertices() const override { return (int)this->coords.size(); }
166 const FloatArray giveVertexCoordinates(int i) const override { return this->coords [ i - 1 ]; }
167 const Element_Geometry_Type giveGeometryType() const override {return gtype;}
168};
169
175{
176protected:
177 int order = 0;
178
179public:
180 FEInterpolation(int o) : order(o) { }
181 virtual ~FEInterpolation() = default;
183 virtual void initializeFrom(InputRecord &ir, ParameterManager&pm, int elnum, int priority) { }
184 virtual void postInitialize(ParameterManager&pm, int elnum) {}
185
186 /* @name basic interpolation services */
188
195 virtual const Element_Geometry_Type giveGeometryType() const = 0;
199 int giveInterpolationOrder() const { return order; }
208 virtual void giveCellDofMans(IntArray& nodes, IntArray& internalDofMans, Element* elem) const {}
215 virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
224 virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
232 virtual void evald2Ndx2(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
233 {
234 OOFEM_ERROR("not implemented");
235 }
236
243 virtual void evaldNdxi(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
244 {
245 OOFEM_ERROR("not implemented");
246 }
247
250 virtual void giveLocalNodeCoords(FloatMatrix &answer, const Element_Geometry_Type) const
251 {
252 OOFEM_ERROR("FEInterpolation::giveLocalNodeCoords: not implemented");
253 }
254
260 virtual void local2global(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
270 virtual int global2local(FloatArray &answer, const FloatArray &gcoords, const FEICellGeometry &cellgeo) const = 0;
277 virtual double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo) const;
284 virtual void giveJacobianMatrixAt(FloatMatrix &jacobianMatrix, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
285 { OOFEM_ERROR("Not overloaded."); }
286
292 virtual std::unique_ptr<IntegrationRule> giveIntegrationRule(int order, const Element_Geometry_Type) const;
294
299
309 virtual void boundaryEdgeEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
318 virtual double boundaryEdgeEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
327 virtual double boundaryEdgeGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
336 virtual void boundaryEdgeLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
345 virtual std::unique_ptr<IntegrationRule> giveBoundaryEdgeIntegrationRule(int order, int boundary, const Element_Geometry_Type) const ;
352 virtual IntArray boundaryEdgeGiveNodes(int boundary, const Element_Geometry_Type, bool includeHierarchical=false) const = 0;
354
359
366 virtual void boundarySurfaceEvalN(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
375 virtual void boundarySurfaceEvaldNdx(FloatMatrix &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
384 virtual double boundarySurfaceEvalNormal(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
385
394 virtual void boundarySurfaceLocal2global(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0;
402 virtual double boundarySurfaceGiveTransformationJacobian(int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
411 virtual std::unique_ptr<IntegrationRule> giveBoundarySurfaceIntegrationRule(int order, int boundary, const Element_Geometry_Type) const ;
418 virtual IntArray boundarySurfaceGiveNodes(int boundary, const Element_Geometry_Type, bool includeHierarchical=false) const = 0;
420
427
433 virtual IntArray boundaryGiveNodes(int boundary, const Element_Geometry_Type) const = 0;
443 virtual void boundaryEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
452 virtual double boundaryEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
461 virtual double boundaryGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
470 virtual void boundaryLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const = 0;
477 virtual double evalNXIntegral(int boundary, const FEICellGeometry &cellgeo) const
478 {
479 OOFEM_ERROR("Not implemented");
480 }
481
489 virtual std::unique_ptr<IntegrationRule> giveBoundaryIntegrationRule(int order, int boundary, const Element_Geometry_Type) const;
493 virtual const Element_Geometry_Type giveBoundaryGeometryType(int boundary) const = 0;
495
501 virtual void surfaceEvaldNdxi(FloatMatrix &answer, const FloatArray &lcoords) const {;}
507 virtual void surfaceEvald2Ndxi2(FloatMatrix &answer, const FloatArray &lcoords) const {;}
508
511
517 virtual int giveKnotSpanBasisFuncMask(const IntArray &knotSpan, IntArray &mask) const { return 0; }
522 virtual int giveNumberOfKnotSpanBasisFunctions(const IntArray &knotSpan) const { return 0; }
526 virtual bool hasSubPatchFormulation() const { return false; }
530 virtual const FloatArray *giveKnotVector() const { return nullptr; }
534 virtual int giveNumberOfKnotSpans(int dim) const { return 0; }
538 virtual const FloatArray *giveKnotValues(int dim) const { return nullptr; }
542 virtual const IntArray *giveKnotMultiplicity(int dim) const { return nullptr; }
546 virtual int giveNsd(const Element_Geometry_Type) const = 0;
550 virtual int giveNumberOfEdges(const Element_Geometry_Type) const
551 { OOFEM_ERROR("FEInterpolation :: giveNumberOfEdges : Not overloaded."); }
552
553
558 { OOFEM_ERROR("giveNumberOfNodes: Not overloaded."); }
559
560
562 virtual void initializeCell(Element* e) const {}
563
564 std :: string errorInfo(const char *func) const { return func; }
565};
566
567
569{
570public:
573 const Element_Geometry_Type giveGeometryType() const override {return EGT_unknown;}
574 void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
575 answer.clear();
576 }
577
578 double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
579 answer.clear();
580 return 0.;
581 }
582
583 void local2global(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
584 answer.clear();
585 }
586
587 int global2local(FloatArray &answer, const FloatArray &gcoords, const FEICellGeometry &cellgeo) const override {
588 answer.clear();
589 return 0;
590 }
591
592 double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
593 return 0.;
594 }
595
596 void boundaryEdgeEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
597 answer.clear();
598 }
599
600 double boundaryEdgeEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
601 answer.clear();
602 return 0.;
603 }
604
605 double boundaryEdgeGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
606 return 0.;
607 }
608
609 void boundaryEdgeLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
610 answer.clear();
611 }
612
614
615 IntArray boundaryEdgeGiveNodes(int boundary, const Element_Geometry_Type, bool includeHierarchical=false) const override {
616 return IntArray();
617 }
618
619
620 void boundarySurfaceEvalN(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
621 answer.clear();
622 }
623
624 void boundarySurfaceEvaldNdx(FloatMatrix &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
625 answer.clear();
626 }
627
628 double boundarySurfaceEvalNormal(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
629 answer.clear();
630 return 0.;
631 }
632
633 double boundarySurfaceGiveTransformationJacobian(int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
634 return 0.;
635 }
636
637 void boundarySurfaceLocal2global(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
638 answer.clear();
639 }
640
642
643 IntArray boundarySurfaceGiveNodes(int boundary, const Element_Geometry_Type, bool includeHierarchical=false) const override {
644 return IntArray();
645 }
646
647 void boundaryLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
648 answer.clear();
649 }
650
651 void boundaryEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
652 answer.clear();
653 }
654 double boundaryEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
655 answer.clear();
656 return 0.;
657 }
658 double boundaryGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override {
659 return 0.;
660 }
661
662 IntArray boundaryGiveNodes(int boundary, const Element_Geometry_Type) const override {
663 return IntArray();
664 }
666
667 double evalNXIntegral(int boundary, const FEICellGeometry &cellgeo) const override {
668 return 0.;
669 }
670
671 int giveNsd(const Element_Geometry_Type) const override {
672 return 0;
673 }
674
675 int giveNumberOfEdges(const Element_Geometry_Type) const override {
676 return 0;
677 }
678
679 int giveNumberOfNodes(const Element_Geometry_Type) const override {
680 return 0;
681 }
682 const Element_Geometry_Type giveBoundaryGeometryType(int boundary) const override {return EGT_unknown;}
683};
684
685
686} // end namespace oofem
687#endif // feinterpol_h
IntArray boundaryGiveNodes(int boundary, const Element_Geometry_Type) const override
Definition feinterpol.h:662
IntArray boundaryEdgeGiveNodes(int boundary, const Element_Geometry_Type, bool includeHierarchical=false) const override
Definition feinterpol.h:615
double boundaryEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:654
double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:592
double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:578
double boundarySurfaceGiveTransformationJacobian(int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:633
double boundaryEdgeGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:605
integrationDomain giveBoundaryIntegrationDomain(int boundary, const Element_Geometry_Type) const override
Returns boundary integration domain.
Definition feinterpol.h:665
double boundarySurfaceEvalNormal(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:628
integrationDomain giveIntegrationDomain(const Element_Geometry_Type) const override
Definition feinterpol.h:572
const Element_Geometry_Type giveGeometryType() const override
Definition feinterpol.h:573
double evalNXIntegral(int boundary, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:667
void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:574
void boundarySurfaceEvalN(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:620
void boundaryEdgeLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:609
void boundaryEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:651
void boundaryLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:647
double boundaryEdgeEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:600
IntArray boundarySurfaceGiveNodes(int boundary, const Element_Geometry_Type, bool includeHierarchical=false) const override
Definition feinterpol.h:643
void boundarySurfaceLocal2global(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:637
int giveNsd(const Element_Geometry_Type) const override
Definition feinterpol.h:671
integrationDomain giveBoundarySurfaceIntegrationDomain(int boundary, const Element_Geometry_Type) const override
Returns boundary integration domain.
Definition feinterpol.h:641
void boundarySurfaceEvaldNdx(FloatMatrix &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:624
int giveNumberOfEdges(const Element_Geometry_Type) const override
Definition feinterpol.h:675
int giveNumberOfNodes(const Element_Geometry_Type) const override
Definition feinterpol.h:679
const Element_Geometry_Type giveBoundaryGeometryType(int boundary) const override
Definition feinterpol.h:682
integrationDomain giveBoundaryEdgeIntegrationDomain(int boundary, const Element_Geometry_Type) const override
Returns boundary integration domain.
Definition feinterpol.h:613
void local2global(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:583
void boundaryEdgeEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:596
double boundaryGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:658
int global2local(FloatArray &answer, const FloatArray &gcoords, const FEICellGeometry &cellgeo) const override
Definition feinterpol.h:587
virtual int giveNumberOfVertices() const =0
virtual const FloatArray giveVertexCoordinates(int i) const =0
virtual const FEInterpolation * getGeometryInterpolation() const
Definition feinterpol.h:74
virtual const Element_Geometry_Type giveGeometryType() const =0
virtual ~FEICellGeometry()
Definition feinterpol.h:70
FEIElementDeformedGeometryWrapper(const Element *elem)
Definition feinterpol.C:43
const Element_Geometry_Type giveGeometryType() const override
Definition feinterpol.h:145
const Element_Geometry_Type giveGeometryType() const override
Definition feinterpol.h:120
const FEInterpolation * getGeometryInterpolation() const override
Definition feinterpol.h:123
const FloatArray giveVertexCoordinates(int i) const override
Definition feinterpol.h:116
FEIElementGeometryWrapper(const Element *elem)
Definition feinterpol.h:112
FEIVertexListGeometryWrapper(const std::vector< FloatArray > &coords, const Element_Geometry_Type gt)
Definition feinterpol.h:162
const Element_Geometry_Type giveGeometryType() const override
Definition feinterpol.h:167
const FloatArray giveVertexCoordinates(int i) const override
Definition feinterpol.h:166
const std::vector< FloatArray > & coords
Definition feinterpol.h:158
int giveNumberOfVertices() const override
Definition feinterpol.h:165
const FloatArray giveVertexCoordinates(int i) const override
Definition feinterpol.h:92
const Element_Geometry_Type giveGeometryType() const override
Definition feinterpol.h:96
int giveNumberOfVertices() const override
Definition feinterpol.h:88
std::string errorInfo(const char *func) const
Definition feinterpol.h:100
virtual std::unique_ptr< IntegrationRule > giveBoundaryIntegrationRule(int order, int boundary, const Element_Geometry_Type) const
Definition feinterpol.C:101
virtual int giveNumberOfKnotSpans(int dim) const
Definition feinterpol.h:534
virtual std::unique_ptr< IntegrationRule > giveBoundaryEdgeIntegrationRule(int order, int boundary, const Element_Geometry_Type) const
Definition feinterpol.C:112
virtual const Element_Geometry_Type giveGeometryType() const =0
virtual integrationDomain giveBoundarySurfaceIntegrationDomain(int boundary, const Element_Geometry_Type) const =0
Returns boundary integration domain.
virtual void evald2Ndx2(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
Definition feinterpol.h:232
virtual void boundarySurfaceEvaldNdx(FloatMatrix &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual IntArray boundaryEdgeGiveNodes(int boundary, const Element_Geometry_Type, bool includeHierarchical=false) const =0
virtual const Element_Geometry_Type giveBoundaryGeometryType(int boundary) const =0
virtual void boundaryEdgeLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual int giveKnotSpanBasisFuncMask(const IntArray &knotSpan, IntArray &mask) const
Definition feinterpol.h:517
virtual IntArray boundaryGiveNodes(int boundary, const Element_Geometry_Type) const =0
virtual ~FEInterpolation()=default
virtual int giveNumberOfNodes(const Element_Geometry_Type) const
Definition feinterpol.h:557
virtual void initializeCell(Element *e) const
Definition feinterpol.h:562
std::string errorInfo(const char *func) const
Definition feinterpol.h:564
virtual bool hasSubPatchFormulation() const
Definition feinterpol.h:526
virtual double boundarySurfaceGiveTransformationJacobian(int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual int global2local(FloatArray &answer, const FloatArray &gcoords, const FEICellGeometry &cellgeo) const =0
virtual double boundaryGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual void postInitialize(ParameterManager &pm, int elnum)
Definition feinterpol.h:184
virtual integrationDomain giveBoundaryIntegrationDomain(int boundary, const Element_Geometry_Type) const =0
Returns boundary integration domain.
virtual int giveNumberOfEdges(const Element_Geometry_Type) const
Definition feinterpol.h:550
virtual double boundaryEdgeGiveTransformationJacobian(int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual double giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
Definition feinterpol.C:81
virtual void boundaryEdgeEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual void boundarySurfaceLocal2global(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual void boundarySurfaceEvalN(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual void evaldNdxi(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
Definition feinterpol.h:243
virtual IntArray boundarySurfaceGiveNodes(int boundary, const Element_Geometry_Type, bool includeHierarchical=false) const =0
virtual int giveNumberOfKnotSpanBasisFunctions(const IntArray &knotSpan) const
Definition feinterpol.h:522
virtual integrationDomain giveBoundaryEdgeIntegrationDomain(int boundary, const Element_Geometry_Type) const =0
Returns boundary integration domain.
virtual void giveJacobianMatrixAt(FloatMatrix &jacobianMatrix, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
Definition feinterpol.h:284
virtual void surfaceEvaldNdxi(FloatMatrix &answer, const FloatArray &lcoords) const
Definition feinterpol.h:501
virtual void initializeFrom(InputRecord &ir, ParameterManager &pm, int elnum, int priority)
Initializes receiver according to object description stored in input record.
Definition feinterpol.h:183
virtual integrationDomain giveIntegrationDomain(const Element_Geometry_Type) const =0
virtual void giveCellDofMans(IntArray &nodes, IntArray &internalDofMans, Element *elem) const
Returns list of element nodes (and list of internal dof managers) (including on edges and surfaces) d...
Definition feinterpol.h:208
virtual std::unique_ptr< IntegrationRule > giveBoundarySurfaceIntegrationRule(int order, int boundary, const Element_Geometry_Type) const
Definition feinterpol.C:123
virtual double boundaryEdgeEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual double evalNXIntegral(int boundary, const FEICellGeometry &cellgeo) const
Definition feinterpol.h:477
virtual void surfaceEvald2Ndxi2(FloatMatrix &answer, const FloatArray &lcoords) const
Definition feinterpol.h:507
int giveInterpolationOrder() const
Definition feinterpol.h:199
virtual void boundaryLocal2Global(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual double boundarySurfaceEvalNormal(FloatArray &answer, int isurf, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual const FloatArray * giveKnotValues(int dim) const
Definition feinterpol.h:538
virtual const FloatArray * giveKnotVector() const
Definition feinterpol.h:530
virtual void giveLocalNodeCoords(FloatMatrix &answer, const Element_Geometry_Type) const
Definition feinterpol.h:250
virtual double boundaryEvalNormal(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual const IntArray * giveKnotMultiplicity(int dim) const
Definition feinterpol.h:542
virtual int giveNsd(const Element_Geometry_Type) const =0
virtual void boundaryEvalN(FloatArray &answer, int boundary, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual void local2global(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
*Sets size of receiver to be an empty matrix It will have zero rows and zero columns size void clear()
#define OOFEM_ERROR(...)
Definition error.h:79
@ _UnknownIntegrationDomain
#define OOFEM_EXPORT
Definition oofemcfg.h:7

This page is part of the OOFEM-3.0 documentation. Copyright Copyright (C) 1994-2025 Borek Patzak Bořek Patzák
Project e-mail: oofem@fsv.cvut.cz
Generated at for OOFEM by doxygen 1.15.0 written by Dimitri van Heesch, © 1997-2011