OOFEM 3.0
Loading...
Searching...
No Matches
enrichmentfront.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
36#ifndef ENRICHMENTFRONT_H_
37#define ENRICHMENTFRONT_H_
38#include "oofemenv.h"
39#include <vector>
40#include "inputrecord.h"
41#include "xfem/tipinfo.h"
42
43#include <unordered_map>
44
45namespace oofem {
46class XfemManager;
47class DofManager;
48class FloatArray;
49class InputRecord;
51class GaussPoint;
52enum NodeEnrichmentType : int;
53
54struct EfInput
55{
57 EfInput(const FloatArray &iPos, const double &iLevelSet, int iNodeInd, const FloatArray &iClosestPointOnCrack, const double &iArcPos, const FloatArray &iLocalTangDir) :
58 mPos(iPos),
59 mLevelSet(iLevelSet),
60 mNodeInd(iNodeInd),
61 mClosestPointOnCrack(iClosestPointOnCrack),
62 mArcPos(iArcPos),
63 mLocalTangDir(iLocalTangDir)
64 {}
65
67
69 double mLevelSet;
72 double mArcPos;
74};
75
76
91{
92public:
93 EnrichmentFront(int iEIindex = 0) : mEIindex(iEIindex) { }
94 virtual ~EnrichmentFront() { }
95
108 virtual void MarkNodesAsFront(std :: unordered_map< int, NodeEnrichmentType > &ioNodeEnrMarkerMap, XfemManager &ixFemMan, const std :: unordered_map< int, double > &iLevelSetNormalDirMap, const std :: unordered_map< int, double > &iLevelSetTangDirMap, const TipInfo &iTipInfo) = 0;
109
110 // The number of enrichment functions applied to tip nodes.
111 virtual int giveNumEnrichments(const DofManager &iDMan) const = 0;
112 virtual int giveMaxNumEnrichments() const = 0;
113
114
115 // Evaluate the enrichment function and its derivative in front nodes.
116 virtual void evaluateEnrFuncAt(std :: vector< double > &oEnrFunc, const EfInput &iEfInput) const = 0;
117 virtual void evaluateEnrFuncDerivAt(std :: vector< FloatArray > &oEnrFuncDeriv, const EfInput &iEfInput, const FloatArray &iGradLevelSet) const = 0;
118 virtual void evaluateEnrFuncJumps(std :: vector< double > &oEnrFuncJumps, GaussPoint &iGP, int iNodeInd, bool iGPLivesOnCurrentCrack, const double &iNormalSignDist) const = 0;
119
120 std :: string errorInfo(const char *func) const { return std :: string( giveClassName() ) + func; }
121
122 virtual const char *giveClassName() const = 0;
123 virtual const char *giveInputRecordName() const = 0;
124
125 virtual void initializeFrom(InputRecord &ir) = 0;
126 virtual void giveInputRecord(DynamicInputRecord &input) = 0;
127
128 virtual double giveSupportRadius() const = 0;
129
130 virtual bool propagationIsAllowed() const { return true; }
131
132 const TipInfo &giveTipInfo() const { return mTipInfo; }
133 virtual void setTipInfo(const TipInfo &iTipInfo) { mTipInfo = iTipInfo; }
134
135 void computeCrackTangent(FloatArray &oTangent, FloatArray &oNormal, bool &oFlipTangent, const EfInput &iEfInput) const;
137
138protected:
140
145 void MarkTipElementNodesAsFront(std :: unordered_map< int, NodeEnrichmentType > &ioNodeEnrMarkerMap, XfemManager &ixFemMan, const std :: unordered_map< int, double > &iLevelSetNormalDirMap, const std :: unordered_map< int, double > &iLevelSetTangDirMap, const TipInfo &iTipInfo);
146};
147} // end namespace oofem
148
149
150#endif /* ENRICHMENTFRONT_H_ */
virtual void giveInputRecord(DynamicInputRecord &input)=0
void MarkTipElementNodesAsFront(std ::unordered_map< int, NodeEnrichmentType > &ioNodeEnrMarkerMap, XfemManager &ixFemMan, const std ::unordered_map< int, double > &iLevelSetNormalDirMap, const std ::unordered_map< int, double > &iLevelSetTangDirMap, const TipInfo &iTipInfo)
virtual void setTipInfo(const TipInfo &iTipInfo)
virtual int giveMaxNumEnrichments() const =0
const TipInfo & giveTipInfo() const
virtual void evaluateEnrFuncJumps(std ::vector< double > &oEnrFuncJumps, GaussPoint &iGP, int iNodeInd, bool iGPLivesOnCurrentCrack, const double &iNormalSignDist) const =0
virtual void MarkNodesAsFront(std ::unordered_map< int, NodeEnrichmentType > &ioNodeEnrMarkerMap, XfemManager &ixFemMan, const std ::unordered_map< int, double > &iLevelSetNormalDirMap, const std ::unordered_map< int, double > &iLevelSetTangDirMap, const TipInfo &iTipInfo)=0
virtual int giveNumEnrichments(const DofManager &iDMan) const =0
virtual void evaluateEnrFuncAt(std ::vector< double > &oEnrFunc, const EfInput &iEfInput) const =0
virtual void initializeFrom(InputRecord &ir)=0
virtual bool propagationIsAllowed() const
std::string errorInfo(const char *func) const
EnrichmentFront(int iEIindex=0)
TipInfo mTipInfo
reference to the associated enrichment item
virtual void evaluateEnrFuncDerivAt(std ::vector< FloatArray > &oEnrFuncDeriv, const EfInput &iEfInput, const FloatArray &iGradLevelSet) const =0
virtual const char * giveClassName() const =0
virtual double giveSupportRadius() const =0
virtual const char * giveInputRecordName() const =0
#define OOFEM_EXPORT
Definition oofemcfg.h:7
FloatArray mClosestPointOnCrack
FloatArray mLocalTangDir
EfInput(const FloatArray &iPos, const double &iLevelSet, int iNodeInd, const FloatArray &iClosestPointOnCrack, const double &iArcPos, const FloatArray &iLocalTangDir)

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