https://mooseframework.inl.gov
Loading...
Searching...
No Matches
XFEM.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
12#include "ElementPairLocator.h"
14#include "XFEMInterface.h"
16
17#include "libmesh/vector_value.h"
18#include "libmesh/quadrature.h"
19
21
22// Forward declarations
23class SystemBase;
24
25namespace Xfem
26{
36
43
50typedef std::array<std::unordered_map<unsigned int, std::string>, 2> CachedMaterialProperties;
51
58{
59 const Elem * _parent_elem;
64 // TODO: add neighbor material properties
65 // CachedMaterialProperties _neighbor_material_properties;
66
68 : _parent_elem(nullptr),
69 _geometric_cut(nullptr),
70 _cut_subdomain_id(std::numeric_limits<CutSubdomainID>::max())
71 {
72 }
73
74 CutElemInfo(const Elem * parent_elem,
75 const GeometricCutUserObject * geometric_cut,
76 CutSubdomainID cut_subdomain_id)
77 : _parent_elem(parent_elem), _geometric_cut(geometric_cut), _cut_subdomain_id(cut_subdomain_id)
78 {
79 }
80
81 // A new child element is said to be previously healed if an entry in the old CutElemInfo has the
82 // same parent element ID, the same cut, AND the same cut subdomain ID.
83 bool match(const CutElemInfo & rhs)
84 {
87 }
88};
89} // namespace Xfem
90
91class XFEMCutElem;
93class EFANode;
94class EFAEdge;
95class EFAElement;
96class EFAElement2D;
97class EFAElement3D;
98
105// ------------------------------------------------------------
106// XFEM class definition
107class XFEM : public XFEMInterface
108{
109public:
110 explicit XFEM(const InputParameters & params);
111
112 ~XFEM();
113
114 void addGeometricCut(GeometricCutUserObject * geometric_cut);
115
116 void addStateMarkedElem(unsigned int elem_id, RealVectorValue & normal);
117 void addStateMarkedElem(unsigned int elem_id, RealVectorValue & normal, unsigned int marked_side);
118 void addStateMarkedFrag(unsigned int elem_id, RealVectorValue & normal);
119
121
128 void addGeomMarkedElem2D(const unsigned int elem_id,
129 const Xfem::GeomMarkedElemInfo2D geom_info,
130 const unsigned int interface_id);
131
138 void addGeomMarkedElem3D(const unsigned int elem_id,
139 const Xfem::GeomMarkedElemInfo3D geom_info,
140 const unsigned int interface_id);
141
146
147 virtual bool update(Real time,
148 const std::vector<std::shared_ptr<NonlinearSystemBase>> & nl,
149 AuxiliarySystem & aux) override;
150
151 virtual void initSolution(const std::vector<std::shared_ptr<NonlinearSystemBase>> & nl,
152 AuxiliarySystem & aux) override;
153
154 void buildEFAMesh();
155 bool markCuts(Real time);
157 bool markCutEdgesByState(Real time);
159 bool markCutFacesByState();
161 Point cut_origin, RealVectorValue cut_normal, Point & edge_p1, Point & edge_p2, Real & dist);
162 bool cutMeshWithEFA(const std::vector<std::shared_ptr<NonlinearSystemBase>> & nl,
163 AuxiliarySystem & aux);
164
171 bool healMesh();
172
173 virtual bool updateHeal() override;
174 Point getEFANodeCoords(EFANode * CEMnode,
175 EFAElement * CEMElem,
176 const Elem * elem,
177 MeshBase * displaced_mesh = nullptr) const;
178
182 Real getPhysicalVolumeFraction(const Elem * elem) const;
183
188 bool isPointInsidePhysicalDomain(const Elem * elem, const Point & point) const;
189
193 Real getCutPlane(const Elem * elem,
194 const Xfem::XFEM_CUTPLANE_QUANTITY quantity,
195 unsigned int plane_id) const;
196
197 bool isElemAtCrackTip(const Elem * elem) const;
198 bool isElemCut(const Elem * elem, XFEMCutElem *& xfce) const;
199 bool isElemCut(const Elem * elem) const;
200 void getFragmentFaces(const Elem * elem,
201 std::vector<std::vector<Point>> & frag_faces,
202 bool displaced_mesh = false) const;
204
205 void correctCrackExtensionDirection(const Elem * elem,
206 EFAElement2D * CEMElem,
207 EFAEdge * orig_edge,
208 Point normal,
209 Point crack_tip_origin,
210 Point crack_tip_direction,
211 Real & distance_keep,
212 unsigned int & edge_id_keep,
213 Point & normal_keep);
214
215 void getCrackTipOrigin(std::map<unsigned int, const Elem *> & elem_id_crack_tip,
216 std::vector<Point> & crack_front_points);
217
219 void setXFEMQRule(std::string & xfem_qrule);
220 void setCrackGrowthMethod(bool use_crack_growth_increment, Real crack_growth_increment);
221
227 void setDebugOutputLevel(unsigned int debug_output_level);
228
234 void setMinWeightMultiplier(Real min_weight_multiplier);
235
236 virtual bool getXFEMWeights(MooseArray<Real> & weights,
237 const Elem * elem,
238 QBase * qrule,
239 const MooseArray<Point> & q_points) override;
240 virtual bool getXFEMFaceWeights(MooseArray<Real> & weights,
241 const Elem * elem,
242 QBase * qrule,
243 const MooseArray<Point> & q_points,
244 unsigned int side) override;
245
252 virtual const ElementPairLocator::ElementPairList * getXFEMCutElemPairs(unsigned int interface_id)
253 {
254 return &_sibling_elems[interface_id];
255 }
256
264 getXFEMDisplacedCutElemPairs(unsigned int interface_id)
265 {
266 return &_sibling_displaced_elems[interface_id];
267 }
268
274 virtual unsigned int getGeometricCutID(const GeometricCutUserObject * gcu)
275 {
276 return _geom_marker_id_map[gcu];
277 };
278
279 virtual void getXFEMIntersectionInfo(const Elem * elem,
280 unsigned int plane_id,
281 Point & normal,
282 std::vector<Point> & intersectionPoints,
283 bool displaced_mesh = false) const;
284 virtual void getXFEMqRuleOnLine(std::vector<Point> & intersection_points,
285 std::vector<Point> & quad_pts,
286 std::vector<Real> & quad_wts) const;
287 virtual void getXFEMqRuleOnSurface(std::vector<Point> & intersection_points,
288 std::vector<Point> & quad_pts,
289 std::vector<Real> & quad_wts) const;
291
296 EFAElement2D * getEFAElem2D(const Elem * elem);
297
302 EFAElement3D * getEFAElem3D(const Elem * elem);
303
304 void getFragmentEdges(const Elem * elem,
305 EFAElement2D * CEMElem,
306 std::vector<std::vector<Point>> & frag_edges) const;
307 void getFragmentFaces(const Elem * elem,
308 EFAElement3D * CEMElem,
309 std::vector<std::vector<Point>> & frag_faces) const;
310
311 const std::map<const Elem *, std::vector<Point>> & getCrackTipOriginMap() const
312 {
314 }
315
323 const Elem * cut_elem,
324 const Elem * parent_elem = nullptr) const;
325
326private:
328
330
333
334 std::vector<const GeometricCutUserObject *> _geometric_cuts;
335
336 std::map<unique_id_type, XFEMCutElem *> _cut_elem_map;
337 std::set<const Elem *> _crack_tip_elems;
338 std::set<const Elem *> _crack_tip_elems_to_be_healed;
339 std::map<unsigned int, ElementPairLocator::ElementPairList> _sibling_elems;
340 std::map<unsigned int, ElementPairLocator::ElementPairList> _sibling_displaced_elems;
341
342 std::map<const Elem *, std::vector<Point>> _elem_crack_origin_direction_map;
343
344 // std::map<const Elem*, Point> _crack_propagation_direction_map;
345
346 std::map<const Elem *, RealVectorValue> _state_marked_elems;
347 std::set<const Elem *> _state_marked_frags;
348 std::map<const Elem *, unsigned int> _state_marked_elem_sides;
349
351 std::map<const Elem *, std::vector<Xfem::GeomMarkedElemInfo2D>> _geom_marked_elems_2d;
352
354 std::map<const Elem *, std::vector<Xfem::GeomMarkedElemInfo3D>> _geom_marked_elems_3d;
355
357 std::map<unsigned int, std::set<unsigned int>> _geom_marker_id_elems;
358
360 std::map<const GeometricCutUserObject *, unsigned int> _geom_marker_id_map;
361
363
370
374
382 std::map<unique_id_type, std::vector<Real>> _cached_solution;
383
391 std::map<unique_id_type, std::vector<Real>> _cached_aux_solution;
392
397 std::unordered_map<const Elem *, Xfem::CutElemInfo> _geom_cut_elems;
398
403 std::unordered_map<const Elem *, Xfem::CutElemInfo> _old_geom_cut_elems;
404
415 void storeSolutionForNode(const Node * node_to_store_to,
416 const Node * node_to_store_from,
417 SystemBase & sys,
418 std::map<unique_id_type, std::vector<Real>> & stored_solution,
419 const NumericVector<Number> & current_solution,
420 const NumericVector<Number> & old_solution,
421 const NumericVector<Number> & older_solution);
422
433 void storeSolutionForElement(const Elem * elem_to_store_to,
434 const Elem * elem_to_store_from,
435 SystemBase & sys,
436 std::map<unique_id_type, std::vector<Real>> & stored_solution,
437 const NumericVector<Number> & current_solution,
438 const NumericVector<Number> & old_solution,
439 const NumericVector<Number> & older_solution);
440
449 void setSolution(SystemBase & sys,
450 const std::map<unique_id_type, std::vector<Real>> & stored_solution,
451 NumericVector<Number> & current_solution,
452 NumericVector<Number> & old_solution,
453 NumericVector<Number> & older_solution);
454
463 void setSolutionForDOFs(const std::vector<Real> & stored_solution,
464 const std::vector<dof_id_type> & stored_solution_dofs,
465 NumericVector<Number> & current_solution,
466 NumericVector<Number> & old_solution,
467 NumericVector<Number> & older_solution);
468
475 std::vector<dof_id_type> getElementSolutionDofs(const Elem * elem, SystemBase & sys) const;
476
483 std::vector<dof_id_type> getNodeSolutionDofs(const Node * node, SystemBase & sys) const;
484
490 const GeometricCutUserObject * getGeometricCutForElem(const Elem * elem) const;
491
492 void storeMaterialPropertiesForElementHelper(const Elem * elem,
493 MaterialPropertyStorage & storage);
494
501 void storeMaterialPropertiesForElement(const Elem * parent_elem, const Elem * child_elem);
502
511 void loadMaterialPropertiesForElementHelper(const Elem * elem,
512 const Xfem::CachedMaterialProperties & cached_props,
513 MaterialPropertyStorage & storage) const;
514
522 const Elem * elem,
523 const Elem * elem_from,
524 std::unordered_map<const Elem *, Xfem::CutElemInfo> & cached_cei) const;
525
532 const Node * pickFirstPhysicalNode(const Elem * e, const Elem * e0) const;
533};
unsigned int CutSubdomainID
std::list< std::pair< const Elem *, const Elem * > > ElementPairList
This is the XFEM class.
Definition XFEM.h:108
void storeMaterialPropertiesForElementHelper(const Elem *elem, MaterialPropertyStorage &storage)
Definition XFEM.C:2192
virtual void getXFEMIntersectionInfo(const Elem *elem, unsigned int plane_id, Point &normal, std::vector< Point > &intersectionPoints, bool displaced_mesh=false) const
Definition XFEM.C:1903
std::vector< const GeometricCutUserObject * > _geometric_cuts
Definition XFEM.h:334
const Node * pickFirstPhysicalNode(const Elem *e, const Elem *e0) const
Return the first node in the provided element that is found to be in the physical domain.
Definition XFEM.C:2309
const std::map< const Elem *, std::vector< Point > > & getCrackTipOriginMap() const
Definition XFEM.h:311
virtual bool updateHeal() override
Definition XFEM.C:226
EFAElement2D * getEFAElem2D(const Elem *elem)
Get the EFAElement2D object for a specified libMesh element.
Definition XFEM.C:1753
bool markCutFacesByState()
Definition XFEM.C:897
std::map< const GeometricCutUserObject *, unsigned int > _geom_marker_id_map
Data structure for storing the GeommetricCutUserObjects and their corresponding id.
Definition XFEM.h:360
void setSolutionForDOFs(const std::vector< Real > &stored_solution, const std::vector< dof_id_type > &stored_solution_dofs, NumericVector< Number > &current_solution, NumericVector< Number > &old_solution, NumericVector< Number > &older_solution)
Set the solution for a set of DOFs.
Definition XFEM.C:2099
virtual void initSolution(const std::vector< std::shared_ptr< NonlinearSystemBase > > &nl, AuxiliarySystem &aux) override
Definition XFEM.C:312
virtual void getXFEMqRuleOnSurface(std::vector< Point > &intersection_points, std::vector< Point > &quad_pts, std::vector< Real > &quad_wts) const
Definition XFEM.C:1949
void storeSolutionForElement(const Elem *elem_to_store_to, const Elem *elem_to_store_from, SystemBase &sys, std::map< unique_id_type, std::vector< Real > > &stored_solution, const NumericVector< Number > &current_solution, const NumericVector< Number > &old_solution, const NumericVector< Number > &older_solution)
Store the solution in stored_solution for a given element.
Definition XFEM.C:2027
void storeCrackTipOriginAndDirection()
Definition XFEM.C:187
bool _has_secondary_cut
Definition XFEM.h:327
Real _crack_growth_increment
Definition XFEM.h:332
void addGeomMarkedElem3D(const unsigned int elem_id, const Xfem::GeomMarkedElemInfo3D geom_info, const unsigned int interface_id)
Add information about a new cut to be performed on a specific 3d element.
Definition XFEM.C:170
void loadMaterialPropertiesForElementHelper(const Elem *elem, const Xfem::CachedMaterialProperties &cached_props, MaterialPropertyStorage &storage) const
Load the material properties.
Definition XFEM.C:2238
void addGeometricCut(GeometricCutUserObject *geometric_cut)
Definition XFEM.C:58
bool markCutFacesByGeometry()
Definition XFEM.C:856
std::map< unsigned int, std::set< unsigned int > > _geom_marker_id_elems
Data structure for storing the elements cut by specific geometric cutters.
Definition XFEM.h:357
virtual void getXFEMqRuleOnLine(std::vector< Point > &intersection_points, std::vector< Point > &quad_pts, std::vector< Real > &quad_wts) const
Definition XFEM.C:1922
std::map< unsigned int, ElementPairLocator::ElementPairList > _sibling_displaced_elems
Definition XFEM.h:340
bool cutMeshWithEFA(const std::vector< std::shared_ptr< NonlinearSystemBase > > &nl, AuxiliarySystem &aux)
Definition XFEM.C:1108
std::map< unique_id_type, XFEMCutElem * > _cut_elem_map
Definition XFEM.h:336
virtual unsigned int getGeometricCutID(const GeometricCutUserObject *gcu)
Get the interface ID corresponding to a given GeometricCutUserObject.
Definition XFEM.h:274
bool markCutEdgesByGeometry()
Definition XFEM.C:399
ElementFragmentAlgorithm _efa_mesh
Definition XFEM.h:362
bool isElemCut(const Elem *elem, XFEMCutElem *&xfce) const
Definition XFEM.C:1713
bool markCuts(Real time)
Definition XFEM.C:382
void setDebugOutputLevel(unsigned int debug_output_level)
Controls amount of debugging information output.
Definition XFEM.C:1844
virtual const ElementPairLocator::ElementPairList * getXFEMCutElemPairs(unsigned int interface_id)
Get the list of cut element pairs corresponding to a given interface ID.
Definition XFEM.h:252
void setMinWeightMultiplier(Real min_weight_multiplier)
Controls the minimum average weight multiplier for each element.
Definition XFEM.C:1850
Point getEFANodeCoords(EFANode *CEMnode, EFAElement *CEMElem, const Elem *elem, MeshBase *displaced_mesh=nullptr) const
Definition XFEM.C:1603
~XFEM()
Definition XFEM.C:49
Real getPhysicalVolumeFraction(const Elem *elem) const
Get the volume fraction of an element that is physical.
Definition XFEM.C:1635
std::map< const Elem *, RealVectorValue > _state_marked_elems
Definition XFEM.h:346
void addStateMarkedFrag(unsigned int elem_id, RealVectorValue &normal)
Definition XFEM.C:138
Xfem::XFEM_QRULE _XFEM_qrule
Definition XFEM.h:329
std::map< unsigned int, ElementPairLocator::ElementPairList > _sibling_elems
Definition XFEM.h:339
std::map< const Elem *, std::vector< Xfem::GeomMarkedElemInfo2D > > _geom_marked_elems_2d
Data structure for storing information about all 2D elements to be cut by geometry.
Definition XFEM.h:351
std::vector< dof_id_type > getNodeSolutionDofs(const Node *node, SystemBase &sys) const
Get a vector of the dof indices for all components of all variables associated with a node.
Definition XFEM.C:2148
virtual const ElementPairLocator::ElementPairList * getXFEMDisplacedCutElemPairs(unsigned int interface_id)
Get the list of cut element pairs on the displaced mesh corresponding to a given interface ID.
Definition XFEM.h:264
bool isElemAtCrackTip(const Elem *elem) const
Definition XFEM.C:1707
virtual bool getXFEMFaceWeights(MooseArray< Real > &weights, const Elem *elem, QBase *qrule, const MooseArray< Point > &q_points, unsigned int side) override
Definition XFEM.C:1885
bool healMesh()
Potentially heal the mesh by merging some of the pairs of partial elements cut by XFEM back into sing...
Definition XFEM.C:924
void setSolution(SystemBase &sys, const std::map< unique_id_type, std::vector< Real > > &stored_solution, NumericVector< Number > &current_solution, NumericVector< Number > &old_solution, NumericVector< Number > &older_solution)
Set the solution for all locally-owned nodes/elements that have stored values.
Definition XFEM.C:2061
void getFragmentFaces(const Elem *elem, std::vector< std::vector< Point > > &frag_faces, bool displaced_mesh=false) const
Definition XFEM.C:1736
std::map< const Elem *, unsigned int > _state_marked_elem_sides
Definition XFEM.h:348
std::map< unique_id_type, std::vector< Real > > _cached_solution
Data structure to store the nonlinear solution for nodes/elements affected by XFEM For each node/elem...
Definition XFEM.h:382
void setCrackGrowthMethod(bool use_crack_growth_increment, Real crack_growth_increment)
Definition XFEM.C:1837
CutSubdomainID getCutSubdomainID(const GeometricCutUserObject *gcuo, const Elem *cut_elem, const Elem *parent_elem=nullptr) const
Determine which cut subdomain the element belongs to relative to the cut.
Definition XFEM.C:2296
void storeSolutionForNode(const Node *node_to_store_to, const Node *node_to_store_from, SystemBase &sys, std::map< unique_id_type, std::vector< Real > > &stored_solution, const NumericVector< Number > &current_solution, const NumericVector< Number > &old_solution, const NumericVector< Number > &older_solution)
Store the solution in stored_solution for a given node.
Definition XFEM.C:1993
std::unordered_map< const Elem *, Xfem::CutElemInfo > _old_geom_cut_elems
All geometrically cut elements and their CutElemInfo before the current execution of XFEM_MARK.
Definition XFEM.h:403
std::unordered_map< const Elem *, Xfem::CutElemInfo > _geom_cut_elems
All geometrically cut elements and their CutElemInfo during the current execution of XFEM_MARK.
Definition XFEM.h:397
void loadMaterialPropertiesForElement(const Elem *elem, const Elem *elem_from, std::unordered_map< const Elem *, Xfem::CutElemInfo > &cached_cei) const
Helper function to store the material properties of a healed element.
Definition XFEM.C:2262
void clearGeomMarkedElems()
Clear out the list of elements to be marked for cutting.
Definition XFEM.C:180
Real getCutPlane(const Elem *elem, const Xfem::XFEM_CUTPLANE_QUANTITY quantity, unsigned int plane_id) const
Get specified component of normal or origin for cut plane for a given element.
Definition XFEM.C:1673
void getCrackTipOrigin(std::map< unsigned int, const Elem * > &elem_id_crack_tip, std::vector< Point > &crack_front_points)
Definition XFEM.C:68
void correctCrackExtensionDirection(const Elem *elem, EFAElement2D *CEMElem, EFAEdge *orig_edge, Point normal, Point crack_tip_origin, Point crack_tip_direction, Real &distance_keep, unsigned int &edge_id_keep, Point &normal_keep)
Definition XFEM.C:451
EFAElement3D * getEFAElem3D(const Elem *elem)
Get the EFAElement3D object for a specified libMesh element.
Definition XFEM.C:1765
bool markCutEdgesByState(Real time)
Definition XFEM.C:592
void addGeomMarkedElem2D(const unsigned int elem_id, const Xfem::GeomMarkedElemInfo2D geom_info, const unsigned int interface_id)
Add information about a new cut to be performed on a specific 2d element.
Definition XFEM.C:160
void getFragmentEdges(const Elem *elem, EFAElement2D *CEMElem, std::vector< std::vector< Point > > &frag_edges) const
Definition XFEM.C:1777
Xfem::XFEM_QRULE & getXFEMQRule()
Definition XFEM.C:1820
void addStateMarkedElem(unsigned int elem_id, RealVectorValue &normal)
Definition XFEM.C:114
virtual bool update(Real time, const std::vector< std::shared_ptr< NonlinearSystemBase > > &nl, AuxiliarySystem &aux) override
Definition XFEM.C:263
virtual bool getXFEMWeights(MooseArray< Real > &weights, const Elem *elem, QBase *qrule, const MooseArray< Point > &q_points) override
Definition XFEM.C:1856
std::set< const Elem * > _crack_tip_elems
Definition XFEM.h:337
bool isPointInsidePhysicalDomain(const Elem *elem, const Point &point) const
Return true if the point is inside the element physical domain Note: if this element is not cut,...
Definition XFEM.C:1655
std::vector< dof_id_type > getElementSolutionDofs(const Elem *elem, SystemBase &sys) const
Get a vector of the dof indices for all components of all variables associated with an element.
Definition XFEM.C:2122
std::map< const Elem *, std::vector< Xfem::GeomMarkedElemInfo3D > > _geom_marked_elems_3d
Data structure for storing information about all 3D elements to be cut by geometry.
Definition XFEM.h:354
unsigned int _debug_output_level
Controls amount of debugging output information 0: None 1: Summary 2: Details on modifications to mes...
Definition XFEM.h:369
void storeMaterialPropertiesForElement(const Elem *parent_elem, const Elem *child_elem)
Helper function to store the material properties of a healed element.
Definition XFEM.C:2210
std::map< const Elem *, std::vector< Point > > _elem_crack_origin_direction_map
Definition XFEM.h:342
const GeometricCutUserObject * getGeometricCutForElem(const Elem *elem) const
Get the GeometricCutUserObject associated with an element.
Definition XFEM.C:2180
void setXFEMQRule(std::string &xfem_qrule)
Definition XFEM.C:1826
bool has_secondary_cut()
Definition XFEM.h:290
void buildEFAMesh()
Definition XFEM.C:343
bool initCutIntersectionEdge(Point cut_origin, RealVectorValue cut_normal, Point &edge_p1, Point &edge_p2, Real &dist)
Definition XFEM.C:905
Real _min_weight_multiplier
The minimum average multiplier applied by XFEM to the standard quadrature weights to integrate partia...
Definition XFEM.h:373
std::map< unique_id_type, std::vector< Real > > _cached_aux_solution
Data structure to store the auxiliary solution for nodes/elements affected by XFEM For each node/elem...
Definition XFEM.h:391
std::set< const Elem * > _crack_tip_elems_to_be_healed
Definition XFEM.h:338
std::set< const Elem * > _state_marked_frags
Definition XFEM.h:347
bool _use_crack_growth_increment
Definition XFEM.h:331
void clearStateMarkedElems()
Definition XFEM.C:152
Definition XFEM.h:26
XFEM_CUTPLANE_QUANTITY
Definition XFEM.h:28
@ NORMAL_X
Definition XFEM.h:32
@ ORIGIN_Y
Definition XFEM.h:30
@ ORIGIN_Z
Definition XFEM.h:31
@ NORMAL_Z
Definition XFEM.h:34
@ NORMAL_Y
Definition XFEM.h:33
@ ORIGIN_X
Definition XFEM.h:29
std::array< std::unordered_map< unsigned int, std::string >, 2 > CachedMaterialProperties
Convenient typedef for local storage of stateful material properties.
Definition XFEM.h:50
XFEM_QRULE
Definition XFEM.h:38
@ DIRECT
Definition XFEM.h:41
@ VOLFRAC
Definition XFEM.h:39
@ MOMENT_FITTING
Definition XFEM.h:40
Information about a cut element.
Definition XFEM.h:58
CachedMaterialProperties _elem_material_properties
Definition XFEM.h:62
bool match(const CutElemInfo &rhs)
Definition XFEM.h:83
CutSubdomainID _cut_subdomain_id
Definition XFEM.h:61
const Elem * _parent_elem
Definition XFEM.h:59
CutElemInfo(const Elem *parent_elem, const GeometricCutUserObject *geometric_cut, CutSubdomainID cut_subdomain_id)
Definition XFEM.h:74
const GeometricCutUserObject * _geometric_cut
Definition XFEM.h:60
CachedMaterialProperties _bnd_material_properties
Definition XFEM.h:63
Data structure describing geometrically described cut through 2D element.
Data structure describing geometrically described cut through 3D element.