Skip to content

NewRefpat

PedroLima92 edited this page Jun 10, 2020 · 8 revisions

Separating the refpattern definition from actual refinement

Objectives

  • 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.

Related methods

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();

New datastructures

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;

// [...]
}

Home

Examples

  • 2DSimple

Implementation notes

Templates and Tutorials

Drafts

Clone this wiki locally