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 3D discrete fracture networks

The geometric description of a Discrete Fracture Network (DFN) in the context of multi-scale methods, involves the ability of inserting multiple fractures in a predefined coarse mesh, while building volumetrical elements of smaller scale around the surface of these fractures in order to create sub-meshes inside the coarse elements. This paper presents an approach for automatic finite element meshing of fractured reservoirs suited to Multi-scale Hybrid-Mixed methods (MHM). The code is written in C++ and largely relies on two open source finite element libraries: NeoPZ and Gmsh. The main steps to the method involve: locating intersections and re-fining 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. In order to improve the quality of geometrical elements to be generated, strategies of moving intersection points and features simplifications are also presented. Results show that the proposed technique can efficiently construct adequate 3D meshes. While relying 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.