-
Notifications
You must be signed in to change notification settings - Fork 2
NewRefpat
PedroLima92 edited this page Jun 10, 2020
·
8 revisions
- Rewrite datastructure
- Separate split pattern definition/optimization from refinement
New datastructure should now enable the conceptualization of a refinement pattern to be created and manipulated before the creation of subelements takes place. Our goal is to use this datastructure to manipulate and optimize intersections between fractures and mesh to handle degenerate cases.
namespace DFNFractureMesh
AddRib();
AddMidFace();
AddEndFace();
AddFace();
SplitFaces();
SplitRibs();
namespace DFNRib
SetChildren();
DivideRib();
DFNRibs(int64_t index, bool inplane); //default constructor
namespace DFNFace
SetChildren();
DivideSurface();
GetSplitPattern();
class DFNRib
{
private:
// pointer to its original geometric element
TPZGeoEl *fGeoEl;
// status vector describes how the sides of this element have been intersected
TPZManVector<int, 3> fStatus;
// Anticipated coordinates of intersection (may not be real coordinates)
TPZManVector<REAL, 3> fCoord;
// Index of intersection node
int64_t fIntersectionIndex = -1;
// [...]
}
class DFNFace
{
private:
/// pointer to its original geometric element
TPZGeoEl *fGeoEl;
/// status vector describes the topology of the intersection
TPZManVector<int, 9> fStatus;
/// Anticipated coordinates of in-plane intersection node (may not be real coordinates)
TPZManVector<REAL, 3> fCoord;
/// Index of in-plane intersection node
int64_t fIntersectionIndex = -1;
/// Pointer to a fracture mesh
DFNFracture *fFracture = nullptr;
/// Vector with indices of its ribs
TPZManVector<int64_t, 4> fRibs;
// [...]
}
class DFNFracture
{
private:
/// Default tolerance
REAL fTolerance = 1.e-3;
/// Pointer for the geometric mesh
TPZGeoMesh *fGMesh;
/// Map of ribs affected by this fracture
std::map<int64_t, DFNRibs> fRibs;
/// Map of faces affected by this fracture
std::map<int64_t, DFNFace> fFaces;
/// A planar convex polygon that indicates an insertion location for a fracture
DFNFracPlane fFracplane;
/// Map of elements on fracture surface
std::map<int64_t, TPZGeoEl *> fSurface;
/// A set of constraints to the surface mesh of the fracture
std::map<int64_t, TPZGeoEl *> fOutline;
/// Material id of elements at fracture surface
int fSurfaceMaterial = 40;
// [...]
}
class DFNVolume
{
private:
/// pointer to its original geometric element
TPZGeoEl *fGeoEl;
/// Vector of subelements
TPZManVector<int64_t> fSubElements;
/// Indices of elements enclosed by this volume
TPZManVector<int64_t> fEnclosedFaces;
/// Flag for cut volumes
bool fIsCut;
struct DFNMesh
{
private:
/// list of fractures
std::list<DFNFracture *> fFractures;
/// volumes
std::map<int64_t, DFNVolume> fVolumes;
/// smallest acceptable length for this mesh
REAL fTolLenght = 1e-5;
/// smallest acceptable aspect ratio for this mesh
REAL fTolRatio = 0.2;
/// geometric mesh
TPZGeoMesh *fGmesh;
// [...]
}
Examples
- 2DSimple
Implementation notes
- Schemes (private)
- New Shell
- New refpats
Templates and Tutorials
Drafts