OOFEM 3.0
Loading...
Searching...
No Matches
shell7basexfem.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 Shell7BaseXFEM_h
36#define Shell7BaseXFEM_h
37
41#include "fei3dtrquad.h"
42
44
45#define _IFT_Shell7BaseXFEM_CohesiveZoneMaterial "czmaterial"
47
48
49namespace oofem {
50class FEI3dTrQuad;
51class BoundaryLoad;
52class EnrichmentItem;
53class ShellCrack;
54class ParamKey;
62#define _ExportCZ
64{
65protected:
67
69 void updateYourself(TimeStep *tStep) override;
70 void postInitialize() override;
71 void computeOrderingArray(IntArray &orderingArray, IntArray &activeDofsArray, EnrichmentItem *ei);
72
73 FloatMatrixF<3,3> evalCovarBaseVectorsAt(const FloatArrayF<3> &lCoords, FloatArray &solVec, TimeStep *tStep) override;
74 void discGiveInitialSolutionVector(FloatArray &answer, IntArray &eiDofIdArray); // should be replaced with general function
75 void computeDiscGeneralizedStrainVector(FloatArray &dGenEps, const FloatArray &lCoords, EnrichmentItem *ei, TimeStep *tStep);
76 void computeDiscSolutionVector(IntArray &dofIdArray , TimeStep *tStep, FloatArray &solVecD);
77 FloatArrayF<3> computeInterfaceJumpAt(int interf, const FloatArrayF<3> &lCoords, TimeStep *tStep);
78
79 // Internal forces
80 void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord) override;
81 void discComputeSectionalForces(FloatArray &answer, TimeStep *tStep, FloatArray &solVec, FloatArray &solVecD, EnrichmentItem *ei);
82 FloatArray computeSectionalForcesAt(IntegrationPoint *ip, Material *mat, TimeStep *tStep, FloatArray &genEps, double zeta);
83
84 double evaluateLevelSet(const FloatArray &lCoords, EnrichmentItem *ei);
85// double edgeEvaluateLevelSet(const FloatArray &lCoords, EnrichmentItem *ei, const int edge);
86 double evaluateHeavisideXi(double xi, ShellCrack *ei);
87 double evaluateHeavisideXi(double xi, Delamination *ei);
88 double evaluateCutHeaviside(const double xi, const double xiBottom, const double xiTop) const;
89 void computeCohesiveForces(FloatArray &answer, TimeStep *tStep, FloatArray &solVec, FloatArray &solVecD, EnrichmentItem *ei, EnrichmentItem *coupledToEi);
90
91 // Tangent matrices
92 std::array<FloatMatrixF<3,18>, 3> computeLambdaGMatricesDis(double zeta);
94 virtual void OLDcomputeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep);
95 void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep) override;
96
97 virtual void discComputeBulkTangentMatrix(FloatMatrix &KdIJ, IntegrationPoint *ip, EnrichmentItem *eiI, EnrichmentItem *eiJ, int layer, FloatMatrix A [ 3 ] [ 3 ], TimeStep *tStep);
98 virtual void discComputeStiffness(FloatMatrix &LCC, FloatMatrix &LDD, FloatMatrix &LDC, IntegrationPoint *ip, int layer, FloatMatrix A [ 3 ] [ 3 ], TimeStep *tStep);
99
100 double EvaluateEnrFuncInDofMan(int dofManNum, EnrichmentItem *ei);
101 void computeEnrichedBmatrixAt(const FloatArray &lCoords, FloatMatrix &answer, EnrichmentItem *ei);
102 void computeEnrichedNmatrixAt(const FloatArray &lCoords, FloatMatrix &answer, EnrichmentItem *ei);
103 void computeCohesiveNmatrixAt(const FloatArray &lCoords, FloatMatrix &answer, EnrichmentItem *ei);
104
105 void edgeGiveUpdatedSolutionVector(FloatArray &answer, const int iedge, TimeStep *tStep) override;
106
107 FloatMatrixF<3,3> edgeEvalEnrCovarBaseVectorsAt(const FloatArrayF<3> &lCoords, const int iedge, TimeStep *tStep, EnrichmentItem *ei);
108 void computeCohesiveTangent(FloatMatrix &answer, TimeStep *tStep);
110
111 void edgeComputeEnrichedNmatrixAt(const FloatArray &lCoords, FloatMatrix &answer, EnrichmentItem *ei, const int edge);
112 void edgeComputeEnrichedBmatrixAt(const FloatArray &lCoords, FloatMatrix &answer, EnrichmentItem *ei, const int edge);
113
114 void computePressureTangentMatrixDis(FloatMatrix &KCC, FloatMatrix &KCD, FloatMatrix &KDD, IntegrationPoint *ip, Load *load, const int iSurf, TimeStep *tStep);
115
116 // External loads
117 // Overloaded, as the element is using enhanced approximation
118 void computeBoundaryEdgeLoadVector(FloatArray &answer, BoundaryLoad *load, int boundary, CharType type, ValueModeType mode, TimeStep *tStep, bool global) override;
119 // overloaded, the computeBoundaryEdgeLoadVector returns full element DOFs
120 void giveBoundaryLocationArray(IntArray &locationArray, const IntArray &bNodes, const UnknownNumberingScheme &s, IntArray *dofIdArray) override
121 { this->giveLocationArray (locationArray, s, dofIdArray);}
122
123 void computeEnrTractionForce(FloatArray &answer, const int iedge, BoundaryLoad *edgeLoad, TimeStep *tStep,
124 ValueModeType mode, EnrichmentItem *ei);
125
126 // Mass matrices
127 void computeMassMatrixNum(FloatMatrix &answer, TimeStep *tStep) override;
128
129 // VTK
130 void giveCompositeExportData(std::vector < ExportRegion > &vtkPieces, IntArray &primaryVarsToExport, IntArray &internalVarsToExport, IntArray cellVarsToExport, TimeStep *tStep ) override;
131 void giveCompositeExportData(ExportRegion &vtkPiece, IntArray &primaryVarsToExport, IntArray &internalVarsToExport, IntArray cellVarsToExport, TimeStep *tStep ) override;
132 void giveShellExportData(ExportRegion &vtkPiece, IntArray &primaryVarsToExport, IntArray &internalVarsToExport, IntArray cellVarsToExport, TimeStep *tStep ) override;
133 void giveCZExportData(ExportRegion &vtkPiece, IntArray &primaryVarsToExport, IntArray &internalVarsToExport, IntArray cellVarsToExport, TimeStep *tStep );
134
135 FloatArrayF<3> vtkEvalUpdatedGlobalCoordinateAt(const FloatArrayF<3> &localCoords, int layer, TimeStep *tStep) override;
136 void giveDisUnknownsAt(const FloatArrayF<3> &lCoords, EnrichmentItem *ei, const FloatArray &solVec, FloatArrayF<3> &x, FloatArrayF<3> &m, double &gam, TimeStep *tStep);
139
140
141 // Subdivision
142 std :: vector< Triangle > allTri;
143
144 std :: vector < std :: vector< Triangle > > crackSubdivisions;
146
147 std::vector<FloatArray> giveFictiousNodeCoordsForExport(int layer, int subCell);
148 std::vector<FloatArray> giveFictiousCZNodeCoordsForExport(int layer, int subCell);
149 std::vector<FloatArray> giveFictiousUpdatedNodeCoordsForExport(int layer, TimeStep *tStep, int subCell);
150 std::vector<FloatArray> giveFictiousUpdatedCZNodeCoordsForExport(int layer, TimeStep *tStep, int subCell);
151 void giveLocalNodeCoordsForExport(FloatArray &nodeLocalXi1Coords, FloatArray &nodeLocalXi2Coords, FloatArray &nodeLocalXi3Coords, int subCell, int layer, FloatMatrix &localNodeCoords);
152 void giveLocalCZNodeCoordsForExport(FloatArray &nodeLocalXi1Coords, FloatArray &nodeLocalXi2Coords, FloatArray &nodeLocalXi3Coords, int subCell, FloatMatrix &localNodeCoords);
153 void mapXi3FromLocalToShell(FloatArray &answer, FloatArray &local, int layer);
154 void recoverValuesFromCZIP(std::vector<FloatArray> &recoveredValues, int interfce, InternalStateType type, TimeStep *tStep);
155
158
159 std::vector< IntArray > orderingArrays;
160 std::vector< IntArray > activeDofsArrays;
161
162 void computeTripleProduct(FloatMatrix &answer, const FloatMatrix &a, const FloatMatrix &b, const FloatMatrix &c);
163
164 // Recovery of through thickness stresses by momentum balance
165 void recoverShearStress(TimeStep *tStep) override;
166
167public:
168 Shell7BaseXFEM(int n, Domain * d);
169 int checkConsistency() override;
170
171 void giveMaxCZDamages(FloatArray &answer, TimeStep *tStep);
172 const char *giveClassName() const override { return "Shell7BaseXFEM"; }
173 std :: string errorInfo(const char *func) const { return std :: string(giveClassName()) + func; }
175
176 void initializeFrom(InputRecord &ir, int priority) override;
177 void giveDofManDofIDMask(int inode, IntArray &answer) const override;
178 int giveNumberOfDofs() override;
179
180 // Recovery of through thickness stresses by momentum balance
181 void giveFailedInterfaceNumber(IntArray &failedInterfaces, FloatArray &initiationFactor, TimeStep *tStep, bool recoverStresses = true);
182 void giveAverageTransverseInterfaceStress(std::vector<FloatMatrix> &transverseStress, TimeStep *tStep);
183 void giveRecoveredTransverseInterfaceStress(std::vector<FloatMatrix> &transverseStress, TimeStep *tStep) override;
184
185 bool hasCohesiveZone(int interfaceNum);
186 std :: vector< std :: unique_ptr< IntegrationRule > > czIntegrationRulesArray;
187private:
188 void jump(FloatMatrix lambda, FloatArray deltaUnknowns);
189};
190} // end namespace oofem
191#endif
void giveLocationArray(IntArray &locationArray, const UnknownNumberingScheme &s, IntArray *dofIds=NULL) const
Definition element.C:429
Stores all neccessary data (of a region) in a VTKPiece so it can be exported later.
std::vector< IntArray > activeDofsArrays
FEI3dTrQuad interpolationForCZExport
void edgeGiveUpdatedSolutionVector(FloatArray &answer, const int iedge, TimeStep *tStep) override
void recoverShearStress(TimeStep *tStep) override
virtual void discComputeStiffness(FloatMatrix &LCC, FloatMatrix &LDD, FloatMatrix &LDC, IntegrationPoint *ip, int layer, FloatMatrix A[3][3], TimeStep *tStep)
void computeCohesiveTangent(FloatMatrix &answer, TimeStep *tStep)
double evaluateCutHeaviside(const double xi, const double xiBottom, const double xiTop) const
void giveDisUnknownsAt(const FloatArrayF< 3 > &lCoords, EnrichmentItem *ei, const FloatArray &solVec, FloatArrayF< 3 > &x, FloatArrayF< 3 > &m, double &gam, TimeStep *tStep)
FloatMatrixF< 3, 7 > computeLambdaNMatrixDis(double zeta)
void mapXi3FromLocalToShell(FloatArray &answer, FloatArray &local, int layer)
void giveBoundaryLocationArray(IntArray &locationArray, const IntArray &bNodes, const UnknownNumberingScheme &s, IntArray *dofIdArray) override
void giveCompositeExportData(std::vector< ExportRegion > &vtkPieces, IntArray &primaryVarsToExport, IntArray &internalVarsToExport, IntArray cellVarsToExport, TimeStep *tStep) override
void edgeComputeEnrichedNmatrixAt(const FloatArray &lCoords, FloatMatrix &answer, EnrichmentItem *ei, const int edge)
FloatArray computeSectionalForcesAt(IntegrationPoint *ip, Material *mat, TimeStep *tStep, FloatArray &genEps, double zeta)
static ParamKey IPK_Shell7BaseXFEM_CohesiveZoneMaterial
void computeDiscGeneralizedStrainVector(FloatArray &dGenEps, const FloatArray &lCoords, EnrichmentItem *ei, TimeStep *tStep)
std ::vector< Triangle > allTri
std::vector< FloatArray > giveFictiousCZNodeCoordsForExport(int layer, int subCell)
void computeEnrTractionForce(FloatArray &answer, const int iedge, BoundaryLoad *edgeLoad, TimeStep *tStep, ValueModeType mode, EnrichmentItem *ei)
void updateYourself(TimeStep *tStep) override
int giveNumberOfDofs() override
std ::vector< std ::unique_ptr< IntegrationRule > > czIntegrationRulesArray
int checkConsistency() override
void computeMassMatrixNum(FloatMatrix &answer, TimeStep *tStep) override
void giveFailedInterfaceNumber(IntArray &failedInterfaces, FloatArray &initiationFactor, TimeStep *tStep, bool recoverStresses=true)
void discComputeSectionalForces(FloatArray &answer, TimeStep *tStep, FloatArray &solVec, FloatArray &solVecD, EnrichmentItem *ei)
void giveAverageTransverseInterfaceStress(std::vector< FloatMatrix > &transverseStress, TimeStep *tStep)
void computeCohesiveNmatrixAt(const FloatArray &lCoords, FloatMatrix &answer, EnrichmentItem *ei)
Shell7BaseXFEM(int n, Domain *d)
FloatArrayF< 3 > computeInterfaceJumpAt(int interf, const FloatArrayF< 3 > &lCoords, TimeStep *tStep)
void recoverValuesFromCZIP(std::vector< FloatArray > &recoveredValues, int interfce, InternalStateType type, TimeStep *tStep)
void computeOrderingArray(IntArray &orderingArray, IntArray &activeDofsArray, EnrichmentItem *ei)
std ::vector< std ::vector< Triangle > > crackSubdivisions
std::vector< FloatArray > giveFictiousUpdatedNodeCoordsForExport(int layer, TimeStep *tStep, int subCell)
void computeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep) override
void computePressureTangentMatrixDis(FloatMatrix &KCC, FloatMatrix &KCD, FloatMatrix &KDD, IntegrationPoint *ip, Load *load, const int iSurf, TimeStep *tStep)
virtual void OLDcomputeStiffnessMatrix(FloatMatrix &answer, MatResponseMode rMode, TimeStep *tStep)
double evaluateHeavisideXi(double xi, ShellCrack *ei)
void jump(FloatMatrix lambda, FloatArray deltaUnknowns)
void giveInternalForcesVector(FloatArray &answer, TimeStep *tStep, int useUpdatedGpRecord) override
std::vector< FloatArray > giveFictiousUpdatedCZNodeCoordsForExport(int layer, TimeStep *tStep, int subCell)
void giveCZExportData(ExportRegion &vtkPiece, IntArray &primaryVarsToExport, IntArray &internalVarsToExport, IntArray cellVarsToExport, TimeStep *tStep)
double evaluateLevelSet(const FloatArray &lCoords, EnrichmentItem *ei)
void giveRecoveredTransverseInterfaceStress(std::vector< FloatMatrix > &transverseStress, TimeStep *tStep) override
void giveLocalNodeCoordsForExport(FloatArray &nodeLocalXi1Coords, FloatArray &nodeLocalXi2Coords, FloatArray &nodeLocalXi3Coords, int subCell, int layer, FloatMatrix &localNodeCoords)
void postInitialize() override
Performs post initialization steps.
void computeDiscSolutionVector(IntArray &dofIdArray, TimeStep *tStep, FloatArray &solVecD)
void edgeComputeEnrichedBmatrixAt(const FloatArray &lCoords, FloatMatrix &answer, EnrichmentItem *ei, const int edge)
bool hasCohesiveZone(int interfaceNum)
void computeCohesiveForces(FloatArray &answer, TimeStep *tStep, FloatArray &solVec, FloatArray &solVecD, EnrichmentItem *ei, EnrichmentItem *coupledToEi)
void discGiveInitialSolutionVector(FloatArray &answer, IntArray &eiDofIdArray)
double EvaluateEnrFuncInDofMan(int dofManNum, EnrichmentItem *ei)
std::vector< FloatArray > giveFictiousNodeCoordsForExport(int layer, int subCell)
std::array< FloatMatrixF< 3, 18 >, 3 > computeLambdaGMatricesDis(double zeta)
FloatArrayF< 3 > vtkEvalUpdatedGlobalCoordinateAt(const FloatArrayF< 3 > &localCoords, int layer, TimeStep *tStep) override
void computeFailureCriteriaQuantities(FailureCriteriaStatus *fc, TimeStep *tStep) override
Interface * giveInterface(InterfaceType it) override
void giveShellExportData(ExportRegion &vtkPiece, IntArray &primaryVarsToExport, IntArray &internalVarsToExport, IntArray cellVarsToExport, TimeStep *tStep) override
void initializeFrom(InputRecord &ir, int priority) override
void giveMaxCZDamages(FloatArray &answer, TimeStep *tStep)
const char * giveClassName() const override
void giveDofManDofIDMask(int inode, IntArray &answer) const override
void giveLocalCZNodeCoordsForExport(FloatArray &nodeLocalXi1Coords, FloatArray &nodeLocalXi2Coords, FloatArray &nodeLocalXi3Coords, int subCell, FloatMatrix &localNodeCoords)
void computeEnrichedBmatrixAt(const FloatArray &lCoords, FloatMatrix &answer, EnrichmentItem *ei)
void computeEnrichedNmatrixAt(const FloatArray &lCoords, FloatMatrix &answer, EnrichmentItem *ei)
void computeCohesiveTangentAt(FloatMatrix &answer, TimeStep *tStep, Delamination *dei, EnrichmentItem *ei_j, EnrichmentItem *ei_k)
FloatMatrixF< 3, 3 > evalCovarBaseVectorsAt(const FloatArrayF< 3 > &lCoords, FloatArray &solVec, TimeStep *tStep) override
std::string errorInfo(const char *func) const
std::vector< IntArray > orderingArrays
virtual void discComputeBulkTangentMatrix(FloatMatrix &KdIJ, IntegrationPoint *ip, EnrichmentItem *eiI, EnrichmentItem *eiJ, int layer, FloatMatrix A[3][3], TimeStep *tStep)
FEI3dWedgeQuad interpolationForExport
void computeTripleProduct(FloatMatrix &answer, const FloatMatrix &a, const FloatMatrix &b, const FloatMatrix &c)
void computeBoundaryEdgeLoadVector(FloatArray &answer, BoundaryLoad *load, int boundary, CharType type, ValueModeType mode, TimeStep *tStep, bool global) override
FloatMatrixF< 3, 3 > edgeEvalEnrCovarBaseVectorsAt(const FloatArrayF< 3 > &lCoords, const int iedge, TimeStep *tStep, EnrichmentItem *ei)
Shell7Base(int n, Domain *d)
Definition shell7base.C:63
XfemElementInterface(Element *e)
Constructor.
GaussPoint IntegrationPoint
Definition gausspoint.h:272

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