OOFEM 3.0
Loading...
Searching...
No Matches
feinterpol.C
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#include "feinterpol.h"
36#include "element.h"
38
39namespace oofem {
40int FEIElementGeometryWrapper :: giveNumberOfVertices() const { return elem->giveNumberOfNodes(); }
41
42
48
54
55
56
57int
59{
60 return elem->giveNumberOfNodes();
61}
62
63
64const FloatArray
66{
67 FloatArray actualCoords = elem->giveNode(i)->giveCoordinates();
68 if ( tStep != NULL ) {
69 FloatArray u;
70 elem->giveNode(i)->giveUnknownVector(u, { D_u, D_v, D_w }, VM_Total, tStep);
71 u.times(alpha);
72 actualCoords.add(u);
73 }
74 return actualCoords;
75}
76
77
78
79
80double
81FEInterpolation :: giveTransformationJacobian(const FloatArray &lcoords, const FEICellGeometry &cellgeo) const
82{
83 FloatMatrix jacobianMatrix;
84 this->giveJacobianMatrixAt(jacobianMatrix, lcoords, cellgeo);
85 return jacobianMatrix.giveDeterminant();
86}
87
88
89std::unique_ptr<IntegrationRule>
91{
93 auto iRule = std::make_unique<GaussIntegrationRule>(1, nullptr);
94
95 int points = iRule->getRequiredNumberOfIntegrationPoints(id, order + this->order);
96 iRule->SetUpPointsOnLine(points, _Unknown);
97 return std::move(iRule);
98}
99
100std::unique_ptr<IntegrationRule>
102{
103 integrationDomain id = this->giveBoundaryIntegrationDomain(boundary, egt);
104 auto iRule = std::make_unique<GaussIntegrationRule>(1, nullptr);
105
106 int points = iRule->getRequiredNumberOfIntegrationPoints(id, order + this->order);
107 iRule->setUpIntegrationPoints(id, points, _Unknown);
108 return std::move(iRule);
109}
110
111std::unique_ptr<IntegrationRule>
113{
115 auto iRule = std::make_unique<GaussIntegrationRule>(1, nullptr);
116
117 int points = iRule->getRequiredNumberOfIntegrationPoints(id, order + this->order);
118 iRule->setUpIntegrationPoints(id, points, _Unknown);
119 return std::move(iRule);
120}
121
122std::unique_ptr<IntegrationRule>
124{
126 auto iRule = std::make_unique<GaussIntegrationRule>(1, nullptr);
127
128 int points = iRule->getRequiredNumberOfIntegrationPoints(id, order + this->order);
129 iRule->setUpIntegrationPoints(id, points, _Unknown);
130 return std::move(iRule);
131}
132
133} // end namespace oofem
int giveNumberOfVertices() const override
Definition feinterpol.C:58
FEIElementDeformedGeometryWrapper(const Element *elem)
Definition feinterpol.C:43
const FloatArray giveVertexCoordinates(int i) const override
Definition feinterpol.C:65
virtual std::unique_ptr< IntegrationRule > giveBoundaryIntegrationRule(int order, int boundary, const Element_Geometry_Type) const
Definition feinterpol.C:101
virtual std::unique_ptr< IntegrationRule > giveBoundaryEdgeIntegrationRule(int order, int boundary, const Element_Geometry_Type) const
Definition feinterpol.C:112
virtual integrationDomain giveBoundarySurfaceIntegrationDomain(int boundary, const Element_Geometry_Type) const =0
Returns boundary integration domain.
virtual integrationDomain giveBoundaryIntegrationDomain(int boundary, const Element_Geometry_Type) const =0
Returns boundary integration domain.
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 integrationDomain giveIntegrationDomain(const Element_Geometry_Type) const =0
virtual std::unique_ptr< IntegrationRule > giveBoundarySurfaceIntegrationRule(int order, int boundary, const Element_Geometry_Type) const
Definition feinterpol.C:123
virtual std::unique_ptr< IntegrationRule > giveIntegrationRule(int order, const Element_Geometry_Type) const
Definition feinterpol.C:90
void add(const FloatArray &src)
Definition floatarray.C:218
void times(double s)
Definition floatarray.C:834
double giveDeterminant() const

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