DFNMesh: Finite element meshing for discrete fracture matrix models

This paper presents a novel methodology for robust Finite Element (FE) mesh generation of Discrete Fracture Matrix (DFM) models. The method can handle the complete multi-dimensional domain from the tridimensional porous rock matrix, through fracture surfaces, down to open curves for fracture–fracture intersections. The accompanying open-source code is written in modern C++ with a JSON interface and largely relies on two state-of-the-art FE libraries: NeoPZ and Gmsh. Starting from a user-defined coarse mesh, fractures are sequentially read as convex polygons and introduced without distortions to the coarse geometry. The main steps involve: intersect edges by checking for nodes on opposite sides of the fracture plane, extend intersections from edges to faces, coalesce intersections to closest existing nodes (given a tolerance), refine interface elements to conform to the fracture, identify subsets of fracture surface, mesh the surface, and locate boundaries and intersections where they arise. Finally, the space around fractures is filled with the fine-scale unstructured mesh, which is kept conformal. The robustness of the implementation is derived from the consistent background of well-defined and simple premises like convexity and side-specific element neighborhood. Results show that the proposed technique can construct adequate 3D DFM grids, while still giving users freedom to adjust between geometrical fidelity and mesh quality through more aggressive feature rejection.

Multi-scale Meshing for Multiscale Three-Dimensional Discrete Fracture Networks

Multi-scale finite element methods require special types of meshes, notably, those that relate coarse elements to sub-meshes contained by them. The geometric description of a Discrete Fracture Network (DFN) in this context, involves the ability of inserting multiple fractures in a pre-defined coarse mesh, while building a sub-mesh around these fractures and tracking fine/coarse element relations. Main steps involve: locating intersections and refining elements at those points, building a data structure that associates each element of a fracture surface to the coarse volume that encloses it, and then generate a sub-mesh of fine elements around the fractures to fill these coarse elements, without altering originally defined nodes in the coarse mesh. This work presents an approach for automatic finite element meshing of fractured reservoirs suited to Multiscale Hybrid-Mixed methods (MHM) [1]. The code is written in C++ and largely relies on two finite element libraries: NeoPZ [3] and Gmsh [2]. Starting with a coarse mesh, fractures are entered as 3D polygons, built from their corner points, and inserted one-by-one. Intersections with one-dimensional elements are computed first and subsequently used to define the intersection with two-dimensional elements (faces). Triangles that result from refining faces to conform to the intersecting fractures are checked for quality, and those with bad aspect ratio (given a tolerance) are coalesced, as fracture surface nodes are snapped into previously defined nodes. The resulting faces are utilized to define volume shells that can be tetrahedralized using Constrained Delaunay algorithms available in the Gmsh library. Element connectivity, transformations between parametric domains of fine/coarse elements, and all other relevant finite element computations are implemented using NeoPZ. Results show that the proposed technique can efficiently construct adequate 3D meshes. While rely-ing on neighbourhood information and consistent element topologies available from NeoPZ’s geometric meshes, enables optimization of multiple algorithms of geometric search that would, otherwise, require a considerable amount of floating-point operations.