-
Notifications
You must be signed in to change notification settings - Fork 2
NewShell
New definition for volume shells. Now we're going to use original volume faces with lines-in-surface in order to define volume shells.
The motivation is that this will improve sub-mesh quality by reducing number of sharp angles.
"Although we could use the face refinements to define the volume shells, they are not necessarily required to describe a volume intersected by a plane. For that, all we need are the actual intersections of that plane and the faces that contour the volume, assuming the plane is not inhabiting the exact same plane of these faces." [I could use this in the dissertation]
DFNMesh::ExportGMshCAD();
DFNMesh::Tetrahedralize();
Lines of the fracture surface and 1D sides of volumes
- Lines that should enter:
- If line has children, skip to next
- Edges with material id == fracture;
- Lines whose elder is an edge of an element with no father;
Faces of fracture surface and 2D sides of volumes
- Faces that should enter:
- // fracture surface elements
- Faces with no children
- + material id of fracture surface
- + elder has no neighbour volume through (n-1)side;
- // interface of macro elements
- If(has father) continue;
- material id intact → enters with old code → continue
- If(does not have 3D neighbour through side (n-1)) continue;
- Lines-in-Surface
Lines of fracture surface whose elder does not have a mesh_dim neighbour without a father.
- Line{a,b,c} In Surface {x} (if this is the only way, code needs an std::set to remove duplicates)
- Loop over 2D elements;
- HasFather → continue
- !HasSubelements → continue
- If mesh_dim == 3 && has no neighbour through side (n-1) → continue
- Get youngestChildren
- Std::set candidate_ribs
- Loop through children and get all ribs of material fracture
- Print "Curve{"
- Loop through candidates
- Get candidate elder
- If elder has mesh_dim-D neighbour through side (n-1) with no father → continue
- Print candidate
- Print "In Surface{iel};\n"
- Simplify surface loop
- [x- [ ] Lines that should enter:
- If line has children, skip to next
- Edges with material id == fracture;
- Lines whose elder is an edge of an element with no father;
- Faces that should enter:
- // fracture surface elements
- Faces with no children
- + material id of fracture surface
- + elder has no neighbour volume through (n-1)side;
- // interface of macro elements
- If(has father) continue;
- material id intact → enters with old code → continue
- If(does not have 3D neighbour through side (n-1)) continue;
- Lines-in-Surface
- Line{a,b,c} In Surface {x} (if this is the only way, code needs an std::set to remove duplicates)
- Loop over 2D elements;
- HasFather → continue
- !HasSubelements → continue
- If mesh_dim == 3 && has no neighbour through side (n-1) → continue
- Get youngestChildren
- Std::set candidate_ribs
- Loop through children and get all ribs of material fracture
- Print "Curve{"
- Loop through candidates
- Get candidate elder
- If elder has mesh_dim-D neighbour through side (n-1) with no father → continue
- Print candidate
- Print "In Surface{iel};\n"
- Simplify surface loop
- Simplify volume
Examples
- 2DSimple
Implementation notes
- Schemes (private)
- New Shell
- New refpats
Templates and Tutorials
Drafts