https://mooseframework.inl.gov
Loading...
Searching...
No Matches
XFEMCutElem2D.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 "XFEMCutElem.h"
13#include "EFAElement2D.h"
14
15using namespace libMesh;
16
17namespace libMesh
18{
19class MeshBase;
20class Elem;
21class Node;
22}
23
25{
26public:
34 XFEMCutElem2D(Elem * elem,
35 const EFAElement2D * const CEMelem,
36 unsigned int n_qpoints,
37 unsigned int n_sides);
39
40private:
41 EFAElement2D _efa_elem2d; // 2D EFAelement
42 virtual Point getNodeCoordinates(EFANode * node, MeshBase * displaced_mesh = nullptr) const;
43
44public:
45 virtual void computePhysicalVolumeFraction();
46 virtual void computePhysicalFaceAreaFraction(unsigned int side);
47 virtual void computeMomentFittingWeights();
48 virtual Point getCutPlaneOrigin(unsigned int plane_id, MeshBase * displaced_mesh = nullptr) const;
49 virtual Point getCutPlaneNormal(unsigned int plane_id, MeshBase * displaced_mesh = nullptr) const;
50 virtual void
51 getCrackTipOriginAndDirection(unsigned tip_id, Point & origin, Point & direction) const;
52 virtual void getFragmentFaces(std::vector<std::vector<Point>> & frag_faces,
53 MeshBase * displaced_mesh = nullptr) const;
54 virtual const EFAElement * getEFAElement() const;
55 virtual unsigned int numCutPlanes() const;
56 virtual void getIntersectionInfo(unsigned int plane_id,
57 Point & normal,
58 std::vector<Point> & intersectionPoints,
59 MeshBase * displaced_mesh = nullptr) const;
60
61private:
62 void getPhysicalQuadraturePoints(std::vector<std::vector<Real>> & tsg);
63 void solveMomentFitting(unsigned int nen,
64 unsigned int nqp,
65 std::vector<Point> & elem_nodes,
66 std::vector<std::vector<Real>> & tsg,
67 std::vector<std::vector<Real>> & wsg);
68};
virtual void computePhysicalFaceAreaFraction(unsigned int side)
Computes the surface area fraction of the element side.
virtual Point getCutPlaneOrigin(unsigned int plane_id, MeshBase *displaced_mesh=nullptr) const
virtual void computePhysicalVolumeFraction()
Computes the volume fraction of the element fragment.
EFAElement2D _efa_elem2d
virtual Point getCutPlaneNormal(unsigned int plane_id, MeshBase *displaced_mesh=nullptr) const
virtual const EFAElement * getEFAElement() const
void getPhysicalQuadraturePoints(std::vector< std::vector< Real > > &tsg)
virtual void computeMomentFittingWeights()
virtual Point getNodeCoordinates(EFANode *node, MeshBase *displaced_mesh=nullptr) const
void solveMomentFitting(unsigned int nen, unsigned int nqp, std::vector< Point > &elem_nodes, std::vector< std::vector< Real > > &tsg, std::vector< std::vector< Real > > &wsg)
virtual void getFragmentFaces(std::vector< std::vector< Point > > &frag_faces, MeshBase *displaced_mesh=nullptr) const
virtual void getIntersectionInfo(unsigned int plane_id, Point &normal, std::vector< Point > &intersectionPoints, MeshBase *displaced_mesh=nullptr) const
virtual unsigned int numCutPlanes() const
virtual void getCrackTipOriginAndDirection(unsigned tip_id, Point &origin, Point &direction) const
The following methods are specializations for using the Parallel::packed_range_* routines for a vecto...