OOFEM 3.0
Loading...
Searching...
No Matches
space3delementevaluator.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
37#include "floatarray.h"
38#include "floatmatrix.h"
39#include "domain.h"
40#include "node.h"
41#include "element.h"
42#include "gausspoint.h"
44#include "matresponsemode.h"
45#include "crosssection.h"
46#include "mathfem.h"
47#include "iga/iga.h"
48
49namespace oofem {
50/* 3D Space Elements */
52{
54 Element *element = this->giveElement();
55 FEInterpolation *interp = element->giveInterpolation();
56
58
59 answer.beNMatrixOf(N, 3);
60}
61
63{
65 Element *element = this->giveElement();
66 FEInterpolation *interp = element->giveInterpolation();
67 // this uses FEInterpolation::nodes2coords - quite inefficient in this case (large num of dofmans)
69
70
71 answer.resize(6, d.giveNumberOfRows() * 3);
72 answer.zero();
73
74 for ( int i = 1; i <= d.giveNumberOfRows(); i++ ) {
75 answer.at(1, i * 3 - 2) = d.at(i, 1);
76 answer.at(2, i * 3 - 1) = d.at(i, 2);
77 answer.at(3, i * 3 - 0) = d.at(i, 3);
78
79 answer.at(4, 3 * i - 1) = d.at(i, 3);
80 answer.at(4, 3 * i - 0) = d.at(i, 2);
81
82 answer.at(5, 3 * i - 2) = d.at(i, 3);
83 answer.at(5, 3 * i - 0) = d.at(i, 1);
84
85 answer.at(6, 3 * i - 2) = d.at(i, 2);
86 answer.at(6, 3 * i - 1) = d.at(i, 1);
87 }
88}
89
91{
92 double determinant = fabs(this->giveElement()->giveInterpolation()
93 ->giveTransformationJacobian(gp->giveNaturalCoordinates(),
95 gp->giveIntegrationRule()->giveKnotSpan() ) ) );
96 return determinant * gp->giveWeight();
97}
98
99
101{
102 answer = static_cast< StructuralCrossSection * >( this->giveElement()->giveCrossSection() )->giveRealStress_3d(strain, gp, tStep);
103}
104
105
107{
108 answer = static_cast< StructuralCrossSection * >( this->giveElement()->giveCrossSection() )->giveStiffnessMatrix_3d(rMode, gp, tStep);
109}
110
111/*
112 * void Space3dStructuralElementEvaluator :: computeConstitutiveMatrix_dPdF_At(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
113 * {
114 * answer = static_cast< StructuralCrossSection * >( this->giveElement()->giveCrossSection() )->giveStiffnessMatrix_dPdF_3d(rMode, gp, tStep);
115 * }
116 */
117} // end namespace oofem
#define N(a, b)
virtual FEInterpolation * giveInterpolation() const
Definition element.h:648
CrossSection * giveCrossSection()
Definition element.C:534
virtual void evalN(FloatArray &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
virtual double evaldNdx(FloatMatrix &answer, const FloatArray &lcoords, const FEICellGeometry &cellgeo) const =0
void resize(Index rows, Index cols)
Definition floatmatrix.C:79
void beNMatrixOf(const FloatArray &n, int nsd)
void zero()
Zeroes all coefficient of receiver.
int giveNumberOfRows() const
Returns number of rows of receiver.
double at(std::size_t i, std::size_t j) const
const FloatArray & giveNaturalCoordinates() const
Returns coordinate array of receiver.
Definition gausspoint.h:138
IntegrationRule * giveIntegrationRule()
Returns corresponding integration rule to receiver.
Definition gausspoint.h:185
double giveWeight()
Returns integration weight of receiver.
Definition gausspoint.h:180
virtual const IntArray * giveKnotSpan()
Returns receiver sub patch indices (if apply).
void computeNMatrixAt(FloatMatrix &answer, GaussPoint *gp) override
void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep) override
void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep) override
void computeBMatrixAt(FloatMatrix &answer, GaussPoint *gp) override
double computeVolumeAround(GaussPoint *gp) override
virtual Element * giveElement()=0

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