OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
mitc4.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 mitc4_h
36 #define mitc4_h
37 
38 #include "../sm/Elements/nlstructuralelement.h"
39 #include "zznodalrecoverymodel.h"
40 #include "sprnodalrecoverymodel.h"
42 #include "spatiallocalizer.h"
43 #include "load.h"
44 //#include "eleminterpmapperinterface.h"//
45 
46 #define _IFT_MITC4Shell_Name "mitc4shell"
47 #define _IFT_MITC4Shell_nipZ "nipz"
48 #define _IFT_MITC4Shell_directorType "directortype"
49 
50 namespace oofem {
51 class FEI2dQuadLin;
52 #ifndef __CHARTENSOR
53  #define __CHARTENSOR
54 enum CharTensor {
59 };
60 #endif
61 
74 {
75 protected:
84  double drillCoeff;
85 
86 public:
87 
88  MITC4Shell(int n, Domain *d);
89  virtual ~MITC4Shell() { }
90 
91  virtual FEInterpolation *giveInterpolation() const;
92  virtual FEInterpolation *giveInterpolation(DofIDItem id) const;
93  virtual int testElementExtension(ElementExtension ext) { return ( ( ( ext == Element_EdgeLoadSupport ) || ( ext == Element_SurfaceLoadSupport ) ) ? 1 : 0 ); }
94 
95  virtual Interface *giveInterface(InterfaceType interface);
96 
98  virtual void SPRNodalRecoveryMI_giveDofMansDeterminedByPatch(IntArray &answer, int pap);
102  virtual void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord);
103 
104 
105  // transformation
108  void computeLToDirectorRotationMatrix(FloatMatrix &answer1, FloatMatrix &answer2, FloatMatrix &answer3, FloatMatrix &answer4);
109  virtual int computeLoadLEToLRotationMatrix(FloatMatrix &answer, int iEdge, GaussPoint *gp);
110 
111 
112 protected:
113 
114  virtual void computeGaussPoints();
115  virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep);
116  virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int = 1, int = ALL_STRAINS);
117  virtual void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer);
118  virtual void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep);
119  virtual void computeStressVector(FloatArray &answer, const FloatArray &strain, GaussPoint *gp, TimeStep *tStep);
120 
121 
122 private:
123  void giveNodeCoordinates(double &x1, double &x2, double &x3, double &x4,
124  double &y1, double &y2, double &y3, double &y4,
125  double &z1, double &z2, double &z3, double &z4);
128  void giveThickness(double &a1, double &a2, double &a3, double &a4);
129  void giveJacobian(FloatArray lcoords, FloatMatrix &jacobianMatrix);
130  void giveLocalCoordinates(FloatArray &answer, FloatArray &global);
132  virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep);
133  void giveCharacteristicTensor(FloatMatrix &answer, CharTensor type, GaussPoint *gp, TimeStep *tStep);
134  virtual void printOutputAt(FILE *file, TimeStep *tStep);
135  virtual int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords);
136  virtual bool computeLocalCoordinates(FloatArray &answer, const FloatArray &coords);
137  virtual double computeVolumeAround(GaussPoint *gp);
139  void givedNdx(FloatArray &hkx, FloatArray &hky, FloatArray coords);
140 
141  void giveMidplaneIPValue(FloatArray &answer, int gpXY, InternalStateType type, TimeStep *tStep);
142 
143  // definition & identification
144  virtual const char *giveClassName() const { return "MITC4Shell"; }
145  virtual const char *giveInputRecordName() const { return _IFT_MITC4Shell_Name; }
147  virtual int computeNumberOfDofs() { return 24; }
148  virtual int computeNumberOfGlobalDofs() { return 24; }
150  virtual MaterialMode giveMaterialMode() { return _3dDegeneratedShell; }
151 
152 
153  // edge & body load
154  virtual double computeEdgeVolumeAround(GaussPoint *gp, int iEdge);
155  virtual void giveEdgeDofMapping(IntArray &answer, int iEdge) const;
156  virtual void giveDofManDofIDMask(int inode, IntArray &) const;
157  virtual double computeSurfaceVolumeAround(GaussPoint *gp, int iSurf);
158  virtual IntegrationRule *GetSurfaceIntegrationRule(int approxOrder);
159  virtual void computeSurfaceNMatrixAt(FloatMatrix &answer, int iSurf, GaussPoint *sgp);
160  virtual void giveSurfaceDofMapping(IntArray &answer, int iSurf) const;
161 
162  virtual void computeSurfaceNMatrix(FloatMatrix &answer, int boundaryID, const FloatArray &lcoords);
163  virtual void computeEdgeNMatrix(FloatMatrix &answer, int boundaryID, const FloatArray &lcoords);
164  virtual void setupIRForMassMtrxIntegration(IntegrationRule &iRule);
165 };
166 } // end namespace oofem
167 #endif // mitc4_h
void giveDirectorVectors(FloatArray &V1, FloatArray &V2, FloatArray &V3, FloatArray &V4)
Definition: mitc4.C:157
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
The element interface required by NodalAvergagingRecoveryModel.
virtual void computeConstitutiveMatrixAt(FloatMatrix &answer, MatResponseMode rMode, GaussPoint *gp, TimeStep *tStep)
Computes constitutive matrix of receiver.
Definition: mitc4.C:331
void giveCharacteristicTensor(FloatMatrix &answer, CharTensor type, GaussPoint *gp, TimeStep *tStep)
Definition: mitc4.C:985
virtual void setupIRForMassMtrxIntegration(IntegrationRule &iRule)
Setup Integration Rule Gauss Points for Mass Matrix integration.
Definition: mitc4.C:1208
virtual void giveEdgeDofMapping(IntArray &answer, int iEdge) const
Assembles edge dof mapping mask, which provides mapping between edge local DOFs and "global" element ...
Definition: mitc4.C:1399
integrationDomain
Used by integrator class to supply integration points for proper domain to be integrated (Area...
The element interface required by ZZNodalRecoveryModel.
virtual SPRPatchType SPRNodalRecoveryMI_givePatchType()
Definition: mitc4.C:138
Class and object Domain.
Definition: domain.h:115
virtual void giveSurfaceDofMapping(IntArray &answer, int iSurf) const
Assembles surface dof mapping mask, which provides mapping between surface local DOFs and "global" el...
Definition: mitc4.C:1502
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Prints output of receiver to stream, for given time step.
Definition: mitc4.C:1029
virtual const char * giveClassName() const
Definition: mitc4.h:144
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes receiver according to object description stored in input record.
Definition: mitc4.C:388
double drillCoeff
Definition: mitc4.h:84
void giveLocalDirectorVectors(FloatArray &V1, FloatArray &V2, FloatArray &V3, FloatArray &V4)
Definition: mitc4.C:245
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: mitc4.h:147
virtual ~MITC4Shell()
Definition: mitc4.h:89
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: mitc4.C:978
virtual Interface * giveInterface(InterfaceType interface)
Interface requesting service.
Definition: mitc4.C:84
const FloatMatrix * computeGtoLRotationMatrix()
Definition: mitc4.C:784
void givedNdx(FloatArray &hkx, FloatArray &hky, FloatArray coords)
Definition: mitc4.C:1164
virtual void SPRNodalRecoveryMI_giveDofMansDeterminedByPatch(IntArray &answer, int pap)
Definition: mitc4.C:111
virtual void giveDofManDofIDMask(int inode, IntArray &) const
Returns dofmanager dof mask for node.
Definition: mitc4.C:404
This class implements an quad element based on Mixed Interpolation of Tensorial Components (MITC)...
Definition: mitc4.h:71
void computeLocalBaseVectors(FloatArray &e1, FloatArray &e2, FloatArray &e3)
Definition: mitc4.C:814
MaterialMode
Type representing material mode of integration point.
Definition: materialmode.h:89
#define _IFT_MITC4Shell_Name
Definition: mitc4.h:46
static FEI2dQuadLin interp_lin
Element geometry approximation.
Definition: mitc4.h:77
virtual void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord)
Evaluates nodal representation of real internal forces.
Definition: mitc4.C:550
Class implementing an array of integers.
Definition: intarray.h:61
MatResponseMode
Describes the character of characteristic material matrix.
void giveNodeCoordinates(double &x1, double &x2, double &x3, double &x4, double &y1, double &y2, double &y3, double &y4, double &z1, double &z2, double &z3, double &z4)
Definition: mitc4.C:340
virtual const char * giveInputRecordName() const
Definition: mitc4.h:145
FloatMatrix GtoLRotationMatrix
Transformation Matrix form GtoL(3,3) is stored at the element level for computation efficiency...
Definition: mitc4.h:82
Abstract base class representing integration rule.
virtual int testElementExtension(ElementExtension ext)
Tests if the element implements required extension.
Definition: mitc4.h:93
Element extension for surface loads.
virtual double computeEdgeVolumeAround(GaussPoint *gp, int iEdge)
Computes volume related to integration point on local edge.
Definition: mitc4.C:1424
Class representing a general abstraction for finite element interpolation class.
Definition: feinterpol.h:132
virtual int computeNumberOfGlobalDofs()
Computes the total number of element's global dofs.
Definition: mitc4.h:148
void computeLToDirectorRotationMatrix(FloatMatrix &answer1, FloatMatrix &answer2, FloatMatrix &answer3, FloatMatrix &answer4)
Definition: mitc4.C:858
virtual void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
Computes the stiffness matrix of receiver.
Definition: mitc4.C:493
virtual int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
Returns the integration point corresponding value in full form.
Definition: mitc4.C:1214
virtual void computeEdgeNMatrix(FloatMatrix &answer, int boundaryID, const FloatArray &lcoords)
computes edge interpolation matrix
Definition: mitc4.C:1559
void giveLocalCoordinates(FloatArray &answer, FloatArray &global)
Definition: mitc4.C:368
int computeLoadGToLRotationMtrx(FloatMatrix &answer)
Returns transformation matrix from global coordinate system to local element coordinate system for el...
Definition: mitc4.C:1304
ElementExtension
Type representing element extension.
DofIDItem
Type representing particular dof type.
Definition: dofiditem.h:86
virtual void computeGaussPoints()
Initializes the array of integration rules member variable.
Definition: mitc4.C:145
virtual integrationDomain giveIntegrationDomain() const
Returns integration domain for receiver, used to initialize integration point over receiver volume...
Definition: mitc4.h:149
void giveThickness(double &a1, double &a2, double &a3, double &a4)
Definition: mitc4.C:768
virtual void NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node, InternalStateType type, TimeStep *tStep)
Computes the element value in given node.
Definition: mitc4.C:1324
virtual IntegrationRule * GetSurfaceIntegrationRule(int approxOrder)
Definition: mitc4.C:1517
void giveMidplaneIPValue(FloatArray &answer, int gpXY, InternalStateType type, TimeStep *tStep)
Definition: mitc4.C:1086
MITC4Shell(int n, Domain *d)
Definition: mitc4.C:60
#define ALL_STRAINS
virtual int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords)
Computes the global coordinates from given element's local coordinates.
Definition: mitc4.C:1286
Class representing vector of real numbers.
Definition: floatarray.h:82
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
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: mitc4.C:1458
Class representing the general Input Record.
Definition: inputrecord.h:101
virtual double computeVolumeAround(GaussPoint *gp)
Returns volume related to given integration point.
Definition: mitc4.C:412
void giveJacobian(FloatArray lcoords, FloatMatrix &jacobianMatrix)
Definition: mitc4.C:433
Class Interface.
Definition: interface.h:82
virtual void SPRNodalRecoveryMI_giveSPRAssemblyPoints(IntArray &pap)
Definition: mitc4.C:101
virtual int SPRNodalRecoveryMI_giveNumberOfIP()
Definition: mitc4.C:131
virtual void computeNmatrixAt(const FloatArray &iLocCoord, FloatMatrix &answer)
Computes interpolation matrix for element unknowns.
Definition: mitc4.C:259
The spatial localizer element interface associated to spatial localizer.
InterfaceType
Enumerative type, used to identify interface type.
Definition: interfacetype.h:43
int directorType
Definition: mitc4.h:83
Class representing a 2d isoparametric linear interpolation based on natural coordinates for quadrilat...
Definition: fei2dquadlin.h:45
virtual void computeSurfaceNMatrixAt(FloatMatrix &answer, int iSurf, GaussPoint *sgp)
Definition: mitc4.C:1491
virtual void computeBmatrixAt(GaussPoint *gp, FloatMatrix &answer, int=1, int=ALL_STRAINS)
Computes the geometrical matrix of receiver in given integration point.
Definition: mitc4.C:597
the oofem namespace is to define a context or scope in which all oofem names are defined.
virtual bool computeLocalCoordinates(FloatArray &answer, const FloatArray &coords)
Computes the element local coordinates from given global coordinates.
Definition: mitc4.C:1259
Class representing integration point in finite element program.
Definition: gausspoint.h:93
Class representing solution step.
Definition: timestep.h:80
virtual MaterialMode giveMaterialMode()
Returns material mode for receiver integration points.
Definition: mitc4.h:150
virtual double computeSurfaceVolumeAround(GaussPoint *gp, int iSurf)
Computes volume related to integration point on local surface.
Definition: mitc4.C:1528
virtual void computeSurfaceNMatrix(FloatMatrix &answer, int boundaryID, const FloatArray &lcoords)
Computes surface interpolation matrix.
Definition: mitc4.C:1568
virtual FEInterpolation * giveInterpolation() const
Definition: mitc4.C:73
Element extension for edge loads.

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:30 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011