35 #ifndef enrichmentitem_h 36 #define enrichmentitem_h 47 #include <unordered_map> 52 #define _IFT_EnrichmentItem_domains "enrichmentdomains" 53 #define _IFT_EnrichmentItem_domain "enrichmentdomain" 54 #define _IFT_EnrichmentItem_function "enrichmentfunction" 55 #define _IFT_EnrichmentItem_front "enrichmentfront" 56 #define _IFT_EnrichmentItem_propagationlaw "propagationlaw" 58 #define _IFT_EnrichmentItem_inheritbc "inheritbc" 59 #define _IFT_EnrichmentItem_inheritorderedbc "inheritorderedbc" 65 class EnrichmentFunction;
66 class EnrichmentDomain;
67 class FractureManager;
68 class FailureCriteriaStatus;
69 class EnrichmentDomain_BG;
72 class EnrichmentFront;
73 class LinElBranchFunction;
75 class DynamicDataReader;
77 class GnuplotExportModule;
126 virtual int instanciateYourself(
DataReader &dr) = 0;
127 virtual const char *giveClassName()
const = 0;
129 int giveNumberOfEnrDofs()
const;
134 bool isElementEnriched(
const Element *element)
const;
135 inline bool isDofManEnriched(
const DofManager &iDMan)
const;
136 int giveNumDofManEnrichments(
const DofManager &iDMan)
const;
149 virtual void updateGeometry() = 0;
150 virtual void propagateFronts(
bool &oFrontsHavePropagated) = 0;
152 virtual bool hasPropagatingFronts()
const;
159 virtual int giveDofPoolSize()
const;
163 virtual void computeEnrichedDofManDofIdArray(
IntArray &oDofIdArray,
DofManager &iDMan);
165 virtual void giveEIDofIdArray(
IntArray &answer)
const;
166 virtual void givePotentialEIDofIdArray(
IntArray &answer)
const;
168 virtual void evaluateEnrFuncInNode(std :: vector< double > &oEnrFunc,
const Node &iNode)
const = 0;
170 virtual void evaluateEnrFuncAt(std :: vector< double > &oEnrFunc,
const FloatArray &iGlobalCoord,
const FloatArray &iLocalCoord,
int iNodeInd,
const Element &iEl)
const = 0;
171 virtual void evaluateEnrFuncAt(std :: vector< double > &oEnrFunc,
const FloatArray &iGlobalCoord,
const FloatArray &iLocalCoord,
int iNodeInd,
const Element &iEl,
const FloatArray &iN,
const IntArray &iElNodes)
const = 0;
173 virtual void evaluateEnrFuncDerivAt(std :: vector< FloatArray > &oEnrFuncDeriv,
const FloatArray &iGlobalCoord,
const FloatArray &iLocalCoord,
int iNodeInd,
const Element &iEl)
const = 0;
176 bool evalLevelSetNormalInNode(
double &oLevelSet,
int iNodeInd,
const FloatArray &iGlobalCoord)
const;
177 bool evalLevelSetTangInNode(
double &oLevelSet,
int iNodeInd,
const FloatArray &iGlobalCoord)
const;
178 bool evalNodeEnrMarkerInNode(
double &oNodeEnrMarker,
int iNodeInd)
const;
186 virtual void evalLevelSetNormal(
double &oLevelSet,
const FloatArray &iGlobalCoord,
const FloatArray &iN,
const IntArray &iNodeInd)
const = 0;
193 virtual void evalLevelSetTangential(
double &oLevelSet,
const FloatArray &iGlobalCoord,
const FloatArray &iN,
const IntArray &iNodeInd)
const = 0;
204 virtual void updateNodeEnrMarker(
XfemManager &ixFemMan) = 0;
208 virtual void createEnrichedDofs();
215 static double calcXiZeroLevel(
const double &iQ1,
const double &iQ2);
226 const std :: unordered_map< int, NodeEnrichmentType > &
giveEnrNodeMap()
const {
return mNodeEnrMarkerMap; }
228 virtual void giveBoundingSphere(
FloatArray &oCenter,
double &oRadius) = 0;
231 void setEnrichmentFrontStart(
EnrichmentFront *ipEnrichmentFrontStart,
bool iDeleteOld =
true);
234 void setEnrichmentFrontEnd(
EnrichmentFront *ipEnrichmentFrontEnd,
bool iDeleteOld =
true);
236 bool tipIsTouchingEI(
const TipInfo &iTipInfo);
304 return !( res == mNodeEnrMarkerMap.end() );
310 #endif // enrichmentitem_h
const std::unordered_map< int, NodeEnrichmentType > & giveEnrNodeMap() const
Abstract class representing entity, which is included in the FE model using one (or more) global func...
virtual void updateGeometry(TimeStep *tStep)
EnrichmentFront * giveEnrichmentFrontStart()
std::unordered_map< int, NodeEnrichmentType > mNodeEnrMarkerMap
bool isDofManEnriched(const DofManager &iDMan) const
Class representing the implementation of a dynamic data reader for in-code use.
int giveGlobalNumber() const
const double mLevelSetTol2
void setEnrichmentFunction(EnrichmentFunction *ipEnrichmentFunc)
bool mLevelSetsNeedUpdate
TipInfo gathers useful information about a crack tip, like its position and tangent direction...
int giveEndOfDofIdPool() const
int mPropLawIndex
mPropLawIndex: nonzero if a propagation law is present, zero otherwise.
Updates the geometry of evolving XFEM interfaces.
Abstract base class for all finite elements.
virtual void updateGeometry(FailureCriteriaStatus *fc, TimeStep *tStep)
Base class for dof managers.
static const double mLevelSetRelTol
Class representing the abstraction for input data source.
Class implementing an array of integers.
Abstract class representing global shape function Base class declares abstract interface common to al...
Base abstract class representing cross section in finite element mesh.
bool mInheritOrderedBoundaryConditions
std::unordered_map< int, double > mLevelSetTangDirMap
PropagationLaw * givePropagationLaw()
virtual void giveInputRecord(DynamicInputRecord &input)
Note the special treatment here, the "normal" syntax would be giveInputRecord(DynamicInputRecord &inp...
bool mInheritBoundaryConditions
If newly created enriched dofs should inherit boundary conditions from the node they are introduced i...
virtual bool canModifyMaterial() const
Class EnrichmentFront: describes the edge or tip of an XFEM enrichment.
int giveStartOfDofIdPool() const
std::unordered_map< int, double > mLevelSetNormalDirMap
virtual bool hasInitiationCriteria()
const IntArray * giveEnrichesDofsWithIdArray() const
Class representing vector of real numbers.
Implementation of matrix containing floating point numbers.
PropagationLaw * mpPropagationLaw
This class manages the xfem part.
IRResultType
Type defining the return values of InputRecord reading operations.
EnrichmentFront * mpEnrichmentFrontStart
EnrichmentFunction * mpEnrichmentFunc
int mEnrFrontIndex
mEnrFrontIndex: nonzero if an enrichment front is present, zero otherwise.
virtual void writeVtkDebug() const
the oofem namespace is to define a context or scope in which all oofem names are defined.
static const double mLevelSetTol
Class implementing node in finite element mesh.
(Under development) The Gnuplot export module enables OOFEM to export some data in a format that can ...
Class representing integration point in finite element program.
Class representing solution step.
The top abstract class of all classes constituting the finite element mesh.
EnrichmentFront * giveEnrichmentFrontEnd()
IntArray mpEnrichesDofsWithIdArray
Geometry associated with EnrichmentItem.