OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
dkt.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 - 2013 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 dkt_h
36 #define dkt_h
37 
38 #include "../sm/Elements/nlstructuralelement.h"
39 #include "../sm/CrossSections/layeredcrosssection.h"
40 #include "../sm/ErrorEstimators/zzerrorestimator.h"
41 #include "mathfem.h"
42 #include "zznodalrecoverymodel.h"
44 #include "sprnodalrecoverymodel.h"
45 
46 #define _IFT_DKTPlate_Name "dktplate"
47 
48 // enable or disable element vertex moment cache; enabling will speed up postprocessing
49 #define DKT_EnableVertexMomentsCache
50 
51 namespace oofem {
52 class FEI2dTrLin;
53 
71 {
72 protected:
75  double area;
76 #ifdef DKT_EnableVertexMomentsCache
79 #endif
80 
81 public:
82  DKTPlate(int n, Domain *d);
83  virtual ~DKTPlate() { }
84 
85  virtual FEInterpolation *giveInterpolation() const;
86  virtual FEInterpolation *giveInterpolation(DofIDItem id) const;
87 
88  virtual MaterialMode giveMaterialMode() { return _2dPlate; }
89  virtual int testElementExtension(ElementExtension ext) { return ( ( ( ext == Element_EdgeLoadSupport ) || ( ext == Element_SurfaceLoadSupport ) ) ? 1 : 0 ); }
90 
91 
92  virtual void computeEdgeNMatrix(FloatMatrix &answer, int boundaryID, const FloatArray& lcoords);
93 
94 protected:
95 
96  virtual void computeBodyLoadVectorAt(FloatArray &answer, Load *load, TimeStep *tStep, ValueModeType mode);
97  virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int = 1, int = ALL_STRAINS);
98  virtual void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer);
99 
100  virtual void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep);
101  virtual void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep);
102 
103 
104  virtual void giveNodeCoordinates(double &x1, double &x2, double &x3,
105  double &y1, double &y2, double &y3,
106  double &z1, double &z2, double &z3);
107 
108 
113  virtual void giveEdgeDofMapping(IntArray &answer, int iEdge) const;
114  virtual double computeEdgeVolumeAround(GaussPoint *gp, int iEdge);
115  virtual int computeLoadLEToLRotationMatrix(FloatMatrix &answer, int iEdge, GaussPoint *gp);
117 
121  virtual void computeSurfaceNMatrixAt(FloatMatrix &answer, int iSurf, GaussPoint *gp);
122  virtual void giveSurfaceDofMapping(IntArray &answer, int iSurf) const;
123  virtual IntegrationRule *GetSurfaceIntegrationRule(int iSurf);
124  virtual double computeSurfaceVolumeAround(GaussPoint *gp, int iSurf);
125  virtual int computeLoadLSToLRotationMatrix(FloatMatrix &answer, int iSurf, GaussPoint *gp);
127 
128 public:
129  // definition & identification
130  virtual const char *giveClassName() const { return "DKTPlate"; }
131  virtual const char *giveInputRecordName() const { return _IFT_DKTPlate_Name; }
133 
134  virtual void computeGaussPoints();
135  virtual int computeNumberOfDofs() { return 9; }
136  virtual void giveDofManDofIDMask(int inode, IntArray &) const;
137 
138  virtual void computeMidPlaneNormal(FloatArray &answer, const GaussPoint *gp);
139 
140  virtual double giveCharacteristicLength(const FloatArray &normalToCrackPlane);
141  virtual double computeVolumeAround(GaussPoint *gp);
142 
143  virtual void computeLumpedMassMatrix(FloatMatrix &answer, TimeStep *tStep);
144  virtual void computeMassMatrix(FloatMatrix &answer, TimeStep *tStep)
145  { computeLumpedMassMatrix(answer, tStep); }
146 
148 
149  virtual bool computeLocalCoordinates(FloatArray &answer, const FloatArray &gcoords);
150  virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep);
151 
153  InternalStateType type, TimeStep *tStep);
154 
156  virtual void SPRNodalRecoveryMI_giveDofMansDeterminedByPatch(IntArray &answer, int pap);
159 
160  // layered cross section support functions
161  virtual void computeStrainVectorInLayer(FloatArray &answer, const FloatArray &masterGpStrain,
162  GaussPoint *masterGp, GaussPoint *slaveGp, TimeStep *tStep);
163 
164  void computeVertexBendingMoments(FloatMatrix &answer, TimeStep *tStep);
165  // postproccess the shear forces on the element
166  void computeShearForces(FloatArray &answer, GaussPoint *gp, TimeStep *tStep);
167 
168 #ifdef __OOFEG
169  virtual void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep);
170  virtual void drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType type);
171  virtual void drawScalar(oofegGraphicContext &gc, TimeStep *tStep);
172 #endif
173 };
174 } // end namespace oofem
175 #endif // dkt_h
virtual SPRPatchType SPRNodalRecoveryMI_givePatchType()
Definition: dkt.C:570
This class implements an triangular Discrete Kirchhoff Theory (DKT) element.
Definition: dkt.h:67
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
The element interface required by NodalAvergagingRecoveryModel.
virtual void drawRawGeometry(oofegGraphicContext &gc, TimeStep *tStep)
Definition: dkt.C:803
virtual int SPRNodalRecoveryMI_giveNumberOfIP()
Definition: dkt.h:157
The element interface required by ZZNodalRecoveryModel.
virtual MaterialMode giveMaterialMode()
Returns material mode for receiver integration points.
Definition: dkt.h:88
virtual ~DKTPlate()
Definition: dkt.h:83
Class and object Domain.
Definition: domain.h:115
virtual void computeBodyLoadVectorAt(FloatArray &answer, Load *load, TimeStep *tStep, ValueModeType mode)
Computes the load vector due to body load acting on receiver, at given time step. ...
Definition: dkt.C:95
virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int=1, int=ALL_STRAINS)
Computes the geometrical matrix of receiver in given integration point.
Definition: dkt.C:139
The element interface required by ZZNodalRecoveryModel.
Abstract base class for "structural" finite elements with geometrical nonlinearities.
virtual int computeNumberOfDofs()
Computes or simply returns total number of element's local DOFs.
Definition: dkt.h:135
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
Definition: dkt.C:389
virtual void computeLumpedMassMatrix(FloatMatrix &answer, TimeStep *tStep)
Computes lumped mass matrix of receiver.
Definition: dkt.C:405
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
Definition: valuemodetype.h:78
long StateCounterType
StateCounterType type used to indicate solution state.
virtual double giveCharacteristicLength(const FloatArray &normalToCrackPlane)
Returns the size of element in the given direction, in some cases adjusted (e.g.
Definition: dkt.C:378
oofem::oofegGraphicContext gc[OOFEG_LAST_LAYER]
virtual void computeMassMatrix(FloatMatrix &answer, TimeStep *tStep)
Computes mass matrix of receiver.
Definition: dkt.h:144
virtual double computeSurfaceVolumeAround(GaussPoint *gp, int iSurf)
Computes volume related to integration point on local surface.
Definition: dkt.C:727
DKTPlate(int n, Domain *d)
Definition: dkt.C:60
virtual void computeEdgeNMatrix(FloatMatrix &answer, int boundaryID, const FloatArray &lcoords)
computes edge interpolation matrix
Definition: dkt.C:577
MaterialMode
Type representing material mode of integration point.
Definition: materialmode.h:89
virtual const char * giveClassName() const
Definition: dkt.h:130
Class implementing an array of integers.
Definition: intarray.h:61
MatResponseMode
Describes the character of characteristic material matrix.
Abstract base class representing integration rule.
virtual void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep)
Computes the stress vector of receiver at given integration point, at time step tStep.
Definition: dkt.C:312
Element extension for surface loads.
virtual void drawScalar(oofegGraphicContext &gc, TimeStep *tStep)
Definition: dkt.C:873
Class representing a general abstraction for finite element interpolation class.
Definition: feinterpol.h:132
Class representing a 2d triangular linear interpolation based on area coordinates.
Definition: fei2dtrlin.h:44
FloatMatrix vertexMoments
Definition: dkt.h:77
The element interface corresponding to ZZErrorEstimator.
virtual void computeMidPlaneNormal(FloatArray &answer, const GaussPoint *gp)
Computes mid-plane normal of receiver at integration point.
Definition: dkt.C:365
ElementExtension
Type representing element extension.
DofIDItem
Type representing particular dof type.
Definition: dofiditem.h:86
virtual int testElementExtension(ElementExtension ext)
Tests if the element implements required extension.
Definition: dkt.h:89
StateCounterType stateCounter
Definition: dkt.h:78
UnknownType
Type representing particular unknown (its physical meaning).
Definition: unknowntype.h:55
virtual int computeLoadLSToLRotationMatrix(FloatMatrix &answer, int iSurf, GaussPoint *gp)
Returns transformation matrix from local surface c.s to element local coordinate system of load vecto...
Definition: dkt.C:734
virtual FEInterpolation * giveInterpolation() const
Definition: dkt.C:72
virtual void drawDeformedGeometry(oofegGraphicContext &gc, TimeStep *tStep, UnknownType type)
Definition: dkt.C:838
virtual void computeStrainVectorInLayer(FloatArray &answer, const FloatArray &masterGpStrain, GaussPoint *masterGp, GaussPoint *slaveGp, TimeStep *tStep)
Computes full 3D strain vector in element layer.
Definition: dkt.C:596
virtual void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer)
Computes interpolation matrix for element unknowns.
Definition: dkt.C:293
virtual void giveSurfaceDofMapping(IntArray &answer, int iSurf) const
Assembles surface dof mapping mask, which provides mapping between surface local DOFs and "global" el...
Definition: dkt.C:704
#define ALL_STRAINS
int numberOfGaussPoints
Number of integration points as specified by nip.
Definition: element.h:188
double area
Definition: dkt.h:75
Class representing vector of real numbers.
Definition: floatarray.h:82
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
#define _IFT_DKTPlate_Name
Definition: dkt.h:46
virtual void NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node, InternalStateType type, TimeStep *tStep)
Computes the element value in given node.
Definition: dkt.C:528
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
virtual void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Computes constitutive matrix of receiver.
Definition: dkt.C:319
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: dkt.C:351
void computeVertexBendingMoments(FloatMatrix &answer, TimeStep *tStep)
Definition: dkt.C:740
virtual bool computeLocalCoordinates(FloatArray &answer, const FloatArray &gcoords)
Computes the element local coordinates from given global coordinates.
Definition: dkt.C:446
Class representing the general Input Record.
Definition: inputrecord.h:101
Class Interface.
Definition: interface.h:82
static FEI2dTrLin interp_lin
Element geometry approximation.
Definition: dkt.h:74
virtual const char * giveInputRecordName() const
Definition: dkt.h:131
virtual void giveDofManDofIDMask(int inode, IntArray &) const
Returns dofmanager dof mask for node.
Definition: dkt.C:358
InterfaceType
Enumerative type, used to identify interface type.
Definition: interfacetype.h:43
Load is base abstract class for all loads.
Definition: load.h:61
The element interface required by LayeredCrossSection.
virtual void giveNodeCoordinates(double &x1, double &x2, double &x3, double &y1, double &y2, double &y3, double &z1, double &z2, double &z3)
Definition: dkt.C:326
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
Definition: dkt.C:488
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual void SPRNodalRecoveryMI_giveDofMansDeterminedByPatch(IntArray &answer, int pap)
Definition: dkt.C:556
virtual IntegrationRule * GetSurfaceIntegrationRule(int iSurf)
Definition: dkt.C:718
virtual void computeSurfaceNMatrixAt(FloatMatrix &answer, int iSurf, GaussPoint *gp)
Definition: dkt.C:698
virtual int computeLoadLEToLRotationMatrix(FloatMatrix &answer, int iEdge, GaussPoint *gp)
Returns transformation matrix from local edge c.s to element local coordinate system of load vector c...
Definition: dkt.C:661
virtual void SPRNodalRecoveryMI_giveSPRAssemblyPoints(IntArray &pap)
Definition: dkt.C:546
virtual void giveEdgeDofMapping(IntArray &answer, int iEdge) const
Assembles edge dof mapping mask, which provides mapping between edge local DOFs and "global" element ...
Definition: dkt.C:618
Class representing integration point in finite element program.
Definition: gausspoint.h:93
virtual double computeEdgeVolumeAround(GaussPoint *gp, int iEdge)
Computes volume related to integration point on local edge.
Definition: dkt.C:653
Class representing solution step.
Definition: timestep.h:80
Element extension for edge loads.
virtual Interface * giveInterface(InterfaceType it)
Interface requesting service.
Definition: dkt.C:424
void computeShearForces(FloatArray &answer, GaussPoint *gp, TimeStep *tStep)
Definition: dkt.C:783
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
Definition: dkt.C:83

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:28 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011