www.mooseframework.org
XFEMCutElem.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 <vector>
13 
14 #include "MooseTypes.h"
15 #include "XFEM.h"
16 
17 using namespace libMesh;
18 
19 namespace libMesh
20 {
21 class MeshBase;
22 class Elem;
23 class Node;
24 class QBase;
25 }
26 class EFANode;
27 class EFAElement;
28 
30 {
31 public:
38  XFEMCutElem(Elem * elem, unsigned int n_qpoints, unsigned int n_sides);
39  virtual ~XFEMCutElem();
40 
41 protected:
42  unsigned int _n_nodes;
43  unsigned int _n_qpoints;
44  unsigned int _n_sides;
45  std::vector<Node *> _nodes;
46  std::vector<Point> _qp_points;
47  std::vector<Real> _qp_weights;
49  std::vector<Real> _elem_side_area;
51  std::vector<Real> _physical_areafrac;
53  std::vector<bool> _have_face_weights;
55  std::vector<Real> _new_weights;
57  std::vector<std::vector<Real>> _new_face_weights;
58  virtual Point getNodeCoordinates(EFANode * node, MeshBase * displaced_mesh = NULL) const = 0;
59 
60 public:
61  void setQuadraturePointsAndWeights(const std::vector<Point> & qp_points,
62  const std::vector<Real> & qp_weights);
66  virtual void computePhysicalVolumeFraction() = 0;
67 
71  Real getPhysicalVolumeFraction() const;
72 
77  virtual void computePhysicalFaceAreaFraction(unsigned int side) = 0;
78 
83  Real getPhysicalFaceAreaFraction(unsigned int side) const;
84 
85  virtual void computeMomentFittingWeights() = 0;
86  Real getMomentFittingWeight(unsigned int i_qp) const;
87  virtual Point getCutPlaneOrigin(unsigned int plane_id,
88  MeshBase * displaced_mesh = NULL) const = 0;
89  virtual Point getCutPlaneNormal(unsigned int plane_id,
90  MeshBase * displaced_mesh = NULL) const = 0;
91  virtual void
92  getCrackTipOriginAndDirection(unsigned tip_id, Point & origin, Point & direction) const = 0;
93  virtual void getFragmentFaces(std::vector<std::vector<Point>> & frag_faces,
94  MeshBase * displaced_mesh = NULL) const = 0;
95  virtual const EFAElement * getEFAElement() const = 0;
96  virtual unsigned int numCutPlanes() const = 0;
97  void getWeightMultipliers(MooseArray<Real> & weights,
98  QBase * qrule,
99  Xfem::XFEM_QRULE xfem_qrule,
100  const MooseArray<Point> & q_points);
101  void getFaceWeightMultipliers(MooseArray<Real> & face_weights,
102  QBase * qrule,
103  Xfem::XFEM_QRULE xfem_qrule,
104  const MooseArray<Point> & q_points,
105  unsigned int side);
106 
113  void computeXFEMWeights(QBase * qrule,
114  Xfem::XFEM_QRULE xfem_qrule,
115  const MooseArray<Point> & q_points);
116 
125  void computeXFEMFaceWeights(QBase * qrule,
126  Xfem::XFEM_QRULE xfem_qrule,
127  const MooseArray<Point> & q_points,
128  unsigned int side);
129  bool isPointPhysical(const Point & p) const;
130  virtual void getIntersectionInfo(unsigned int plane_id,
131  Point & normal,
132  std::vector<Point> & intersectionPoints,
133  MeshBase * displaced_mesh = NULL) const = 0;
134 };
XFEMCutElem::_qp_points
std::vector< Point > _qp_points
Definition: XFEMCutElem.h:46
EFAElement
Definition: EFAElement.h:19
libMesh
Definition: RANFSNormalMechanicalContact.h:24
XFEMCutElem::_n_sides
unsigned int _n_sides
Definition: XFEMCutElem.h:44
XFEMCutElem::_elem_side_area
std::vector< Real > _elem_side_area
Definition: XFEMCutElem.h:49
XFEMCutElem::_n_qpoints
unsigned int _n_qpoints
Definition: XFEMCutElem.h:43
XFEMCutElem::_physical_volfrac
Real _physical_volfrac
Definition: XFEMCutElem.h:50
XFEM.h
XFEMCutElem::_qp_weights
std::vector< Real > _qp_weights
Definition: XFEMCutElem.h:47
XFEMCutElem::_new_weights
std::vector< Real > _new_weights
quadrature weights from volume fraction and moment fitting
Definition: XFEMCutElem.h:55
XFEMCutElem::_n_nodes
unsigned int _n_nodes
Definition: XFEMCutElem.h:42
XFEMCutElem::_have_weights
bool _have_weights
Definition: XFEMCutElem.h:52
XFEMCutElem::_nodes
std::vector< Node * > _nodes
Definition: XFEMCutElem.h:45
XFEMCutElem::_physical_areafrac
std::vector< Real > _physical_areafrac
Definition: XFEMCutElem.h:51
EFANode
Definition: EFANode.h:14
XFEMCutElem
Definition: XFEMCutElem.h:29
XFEMCutElem::_elem_volume
Real _elem_volume
Definition: XFEMCutElem.h:48
XFEMCutElem::_have_face_weights
std::vector< bool > _have_face_weights
Definition: XFEMCutElem.h:53
Xfem::XFEM_QRULE
XFEM_QRULE
Definition: XFEM.h:37
XFEMCutElem::_new_face_weights
std::vector< std::vector< Real > > _new_face_weights
face quadrature weights from surface area fraction
Definition: XFEMCutElem.h:57