OOFEM 3.0
Loading...
Searching...
No Matches
xfemelementinterface.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 xfemelementinterface_h
36#define xfemelementinterface_h
37
38#include "interface.h"
39#include "xfemmanager.h"
40#include "geometry.h"
41#include "matresponsemode.h"
42#include "materialmode.h"
43
44#define _IFT_XfemElementInterface_CohesiveZoneMaterial "czmaterial"
45#define _IFT_XfemElementInterface_NumIntPointsCZ "nipcz"
46#define _IFT_XfemElementInterface_PlaneStrain "useplanestrain"
47
48namespace oofem {
49class FloatArray;
50class FloatMatrix;
51class Triangle;
52class Element;
53class GaussPoint;
54class Element;
55class XfemManager;
56class IntegrationRule;
57class MaterialStatus;
58class ParamKey;
59
65{
66protected:
70
71public:
73
74
76 std :: vector< int >mCZEnrItemIndices; // TODO: Not nice. /ES
77
83 std :: vector< std :: vector< int > >mCZTouchingEnrItemIndices;
84
87
88 const char *giveClassName() const override { return "XfemElementInterface"; }
89 std :: string errorInfo(const char *func) const { return std :: string( giveClassName() ) + func; }
90
91public:
94
95 virtual ~XfemElementInterface();
97 XfemElementInterface &operator = (const XfemElementInterface &src) = delete;
98
101
104
109 void ComputeBOrBHMatrix(FloatMatrix &oAnswer, GaussPoint &iGP, Element &iEl, bool iComputeBH, const FloatArray &iNaturalGpCoord);
110
112 void XfemElementInterface_createEnrNmatrixAt(FloatMatrix &oAnswer, const FloatArray &iLocCoord, Element &iEl, bool iSetDiscontContribToZero);
113
117 void XfemElementInterface_createEnrNmatrixAt(FloatMatrix &oAnswer, const FloatArray &iLocCoord, Element &iEl, const std :: vector< int > &iLocNodeInd, bool iSetDiscontContribToZero);
118
123
125 virtual void XfemElementInterface_partitionElement(std :: vector< Triangle > &oTriangles, const std :: vector< FloatArray > &iPoints);
128
130 virtual void XfemElementInterface_prepareNodesForDelaunay(std :: vector< std :: vector< FloatArray > > &oPointPartitions, double &oCrackStartXi, double &oCrackEndXi, int iEnrItemIndex, bool &oIntersection);
131 virtual void XfemElementInterface_prepareNodesForDelaunay(std :: vector< std :: vector< FloatArray > > &oPointPartitions, double &oCrackStartXi, double &oCrackEndXi, const Triangle &iTri, int iEnrItemIndex, bool &oIntersection);
132
133 // Help functions for partitioning
134 void putPointsInCorrectPartition(std :: vector< std :: vector< FloatArray > > &oPointPartitions, const std :: vector< FloatArray > &iIntersecPoints, const std :: vector< const FloatArray * > &iNodeCoord) const;
135
141 void partitionEdgeSegment(int iBndIndex, std :: vector< Line > &oSegments, std :: vector< FloatArray > &oIntersectionPoints, const double &iTangDistPadding = 0.0);
142
143 // TODO: Move to XfemStructuralElementInterface
144 std :: vector< std :: unique_ptr< IntegrationRule > >mpCZIntegrationRules;
145
146 // For non-standard CZ formulation
147 std :: vector< std :: unique_ptr< IntegrationRule > >mpCZExtraIntegrationRules;
148
149
150 // Temporary storage to facilitate state variable mapping
151 std :: vector< std :: unique_ptr< IntegrationRule > >mpCZIntegrationRules_tmp;
152 std :: vector< std :: unique_ptr< IntegrationRule > >mpCZExtraIntegrationRules_tmp;
153 std :: vector< std :: unique_ptr< IntegrationRule > >mIntRule_tmp;
154
155 MaterialMode giveMaterialMode();
156
157 void updateYourselfCZ(TimeStep *tStep);
158
159 void computeDisplacementJump(GaussPoint &iGP, FloatArray &oJump, const FloatArray &iSolVec, const FloatMatrix &iNMatrix);
160
164 void computeNCohesive(FloatMatrix &oN, GaussPoint &iGP, int iEnrItemIndex, const std :: vector< int > &iTouchingEnrItemIndices);
165};
166} // end namespace oofem
167#endif // xfemelementinterface_h
Interface()
Constructor.
Definition interface.h:86
std ::vector< std ::unique_ptr< IntegrationRule > > mIntRule_tmp
XfemElementInterface(const XfemElementInterface &src)=delete
void computeDisplacementJump(GaussPoint &iGP, FloatArray &oJump, const FloatArray &iSolVec, const FloatMatrix &iNMatrix)
static ParamKey IPK_XfemElementInterface_CohesiveZoneMaterial
std::string errorInfo(const char *func) const
void XfemElementInterface_createEnrBmatrixAt(FloatMatrix &oAnswer, GaussPoint &iGP, Element &iEl)
Creates enriched B-matrix.
std ::vector< std ::unique_ptr< IntegrationRule > > mpCZExtraIntegrationRules
void XfemElementInterface_createEnrBHmatrixAt(FloatMatrix &oAnswer, GaussPoint &iGP, Element &iEl)
Creates enriched BH-matrix.
virtual void XfemElementInterface_partitionElement(std ::vector< Triangle > &oTriangles, const std ::vector< FloatArray > &iPoints)
Partitions the element into patches by a triangulation.
std ::vector< std ::unique_ptr< IntegrationRule > > mpCZExtraIntegrationRules_tmp
void ComputeBOrBHMatrix(FloatMatrix &oAnswer, GaussPoint &iGP, Element &iEl, bool iComputeBH, const FloatArray &iNaturalGpCoord)
void putPointsInCorrectPartition(std ::vector< std ::vector< FloatArray > > &oPointPartitions, const std ::vector< FloatArray > &iIntersecPoints, const std ::vector< const FloatArray * > &iNodeCoord) const
std ::vector< std ::vector< int > > mCZTouchingEnrItemIndices
XfemElementInterface(Element *e)
Constructor.
virtual void XfemElementInterface_prepareNodesForDelaunay(std ::vector< std ::vector< FloatArray > > &oPointPartitions, double &oCrackStartXi, double &oCrackEndXi, int iEnrItemIndex, bool &oIntersection)
Returns an array of array of points. Each array of points defines the points of a subregion of the el...
virtual bool XfemElementInterface_updateIntegrationRule()
Updates integration rule based on the triangulation.
static ParamKey IPK_XfemElementInterface_NumIntPointsCZ
const char * giveClassName() const override
std ::vector< std ::unique_ptr< IntegrationRule > > mpCZIntegrationRules
void computeNCohesive(FloatMatrix &oN, GaussPoint &iGP, int iEnrItemIndex, const std ::vector< int > &iTouchingEnrItemIndices)
void XfemElementInterface_createEnrNmatrixAt(FloatMatrix &oAnswer, const FloatArray &iLocCoord, Element &iEl, bool iSetDiscontContribToZero)
Creates enriched N-matrix.
void partitionEdgeSegment(int iBndIndex, std ::vector< Line > &oSegments, std ::vector< FloatArray > &oIntersectionPoints, const double &iTangDistPadding=0.0)
void updateYourselfCZ(TimeStep *tStep)
std ::vector< int > mCZEnrItemIndices
Index of enrichment items associated with cohesive zones.
bool mUsePlaneStrain
Flag that tells if plane stress or plane strain is assumed.
int XfemElementInterface_giveNumDofManEnrichments(const DofManager &iDMan, XfemManager &iXMan) const
std ::vector< std ::unique_ptr< IntegrationRule > > mpCZIntegrationRules_tmp
static ParamKey IPK_XfemElementInterface_PlaneStrain
#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