https://mooseframework.inl.gov
Loading...
Searching...
No Matches
XFEMCutElem.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 <vector>
13
14#include "MooseTypes.h"
15#include "XFEM.h"
16
17class EFANode;
18class EFAElement;
19
21{
22public:
29 XFEMCutElem(Elem * elem, unsigned int n_qpoints, unsigned int n_sides);
30 virtual ~XFEMCutElem();
31
32protected:
33 unsigned int _n_nodes;
34 unsigned int _n_qpoints;
35 unsigned int _n_sides;
36 std::vector<Node *> _nodes;
37 std::vector<Point> _qp_points;
38 std::vector<Real> _qp_weights;
40 std::vector<Real> _elem_side_area;
42 std::vector<Real> _physical_areafrac;
44 std::vector<bool> _have_face_weights;
46 std::vector<Real> _new_weights;
48 std::vector<std::vector<Real>> _new_face_weights;
49 virtual Point getNodeCoordinates(EFANode * node, MeshBase * displaced_mesh = nullptr) const = 0;
50
51public:
52 void setQuadraturePointsAndWeights(const std::vector<Point> & qp_points,
53 const std::vector<Real> & qp_weights);
58
62 Real getPhysicalVolumeFraction() const;
63
68 virtual void computePhysicalFaceAreaFraction(unsigned int side) = 0;
69
74 Real getPhysicalFaceAreaFraction(unsigned int side) const;
75
76 virtual void computeMomentFittingWeights() = 0;
77 Real getMomentFittingWeight(unsigned int i_qp) const;
78 virtual Point getCutPlaneOrigin(unsigned int plane_id,
79 MeshBase * displaced_mesh = nullptr) const = 0;
80 virtual Point getCutPlaneNormal(unsigned int plane_id,
81 MeshBase * displaced_mesh = nullptr) const = 0;
82 virtual void
83 getCrackTipOriginAndDirection(unsigned tip_id, Point & origin, Point & direction) const = 0;
84 virtual void getFragmentFaces(std::vector<std::vector<Point>> & frag_faces,
85 MeshBase * displaced_mesh = nullptr) const = 0;
86 virtual const EFAElement * getEFAElement() const = 0;
87 virtual unsigned int numCutPlanes() const = 0;
89 QBase * qrule,
90 Xfem::XFEM_QRULE xfem_qrule,
91 const MooseArray<Point> & q_points);
93 QBase * qrule,
94 Xfem::XFEM_QRULE xfem_qrule,
95 const MooseArray<Point> & q_points,
96 unsigned int side);
97
104 void computeXFEMWeights(QBase * qrule,
105 Xfem::XFEM_QRULE xfem_qrule,
106 const MooseArray<Point> & q_points);
107
116 void computeXFEMFaceWeights(QBase * qrule,
117 Xfem::XFEM_QRULE xfem_qrule,
118 const MooseArray<Point> & q_points,
119 unsigned int side);
120 bool isPointPhysical(const Point & p) const;
121 virtual void getIntersectionInfo(unsigned int plane_id,
122 Point & normal,
123 std::vector<Point> & intersectionPoints,
124 MeshBase * displaced_mesh = nullptr) const = 0;
125};
const Real p
virtual void getCrackTipOriginAndDirection(unsigned tip_id, Point &origin, Point &direction) const =0
std::vector< bool > _have_face_weights
Definition XFEMCutElem.h:44
virtual void computeMomentFittingWeights()=0
Real _physical_volfrac
Definition XFEMCutElem.h:41
virtual const EFAElement * getEFAElement() const =0
void getWeightMultipliers(MooseArray< Real > &weights, QBase *qrule, Xfem::XFEM_QRULE xfem_qrule, const MooseArray< Point > &q_points)
Definition XFEMCutElem.C:63
virtual Point getCutPlaneNormal(unsigned int plane_id, MeshBase *displaced_mesh=nullptr) const =0
void getFaceWeightMultipliers(MooseArray< Real > &face_weights, QBase *qrule, Xfem::XFEM_QRULE xfem_qrule, const MooseArray< Point > &q_points, unsigned int side)
Definition XFEMCutElem.C:77
Real getPhysicalVolumeFraction() const
Returns the volume fraction of the element fragment.
Definition XFEMCutElem.C:51
unsigned int _n_sides
Definition XFEMCutElem.h:35
std::vector< Real > _qp_weights
Definition XFEMCutElem.h:38
Real getPhysicalFaceAreaFraction(unsigned int side) const
Returns the surface area fraction of the element side.
Definition XFEMCutElem.C:57
void computeXFEMWeights(QBase *qrule, Xfem::XFEM_QRULE xfem_qrule, const MooseArray< Point > &q_points)
Computes integration weights for the cut element.
std::vector< Real > _new_weights
quadrature weights from volume fraction and moment fitting
Definition XFEMCutElem.h:46
virtual void computePhysicalFaceAreaFraction(unsigned int side)=0
Computes the surface area fraction of the element side.
virtual Point getCutPlaneOrigin(unsigned int plane_id, MeshBase *displaced_mesh=nullptr) const =0
virtual void getIntersectionInfo(unsigned int plane_id, Point &normal, std::vector< Point > &intersectionPoints, MeshBase *displaced_mesh=nullptr) const =0
unsigned int _n_nodes
Definition XFEMCutElem.h:33
Real getMomentFittingWeight(unsigned int i_qp) const
Real _elem_volume
Definition XFEMCutElem.h:39
void setQuadraturePointsAndWeights(const std::vector< Point > &qp_points, const std::vector< Real > &qp_weights)
std::vector< Node * > _nodes
Definition XFEMCutElem.h:36
std::vector< Point > _qp_points
Definition XFEMCutElem.h:37
virtual void computePhysicalVolumeFraction()=0
Computes the volume fraction of the element fragment.
bool isPointPhysical(const Point &p) const
void computeXFEMFaceWeights(QBase *qrule, Xfem::XFEM_QRULE xfem_qrule, const MooseArray< Point > &q_points, unsigned int side)
Computes face integration weights for the cut element side.
Definition XFEMCutElem.C:92
virtual Point getNodeCoordinates(EFANode *node, MeshBase *displaced_mesh=nullptr) const =0
std::vector< std::vector< Real > > _new_face_weights
face quadrature weights from surface area fraction
Definition XFEMCutElem.h:48
bool _have_weights
Definition XFEMCutElem.h:43
std::vector< Real > _physical_areafrac
Definition XFEMCutElem.h:42
unsigned int _n_qpoints
Definition XFEMCutElem.h:34
virtual void getFragmentFaces(std::vector< std::vector< Point > > &frag_faces, MeshBase *displaced_mesh=nullptr) const =0
virtual ~XFEMCutElem()
Definition XFEMCutElem.C:48
virtual unsigned int numCutPlanes() const =0
std::vector< Real > _elem_side_area
Definition XFEMCutElem.h:40
XFEM_QRULE
Definition XFEM.h:38