Commit f291b843 authored by Dennis Gläser's avatar Dennis Gläser Committed by Dennis Gläser
Browse files

[README] improve introductory section

parent 3ffe1369
......@@ -6,10 +6,18 @@
What is Frackit?
================
Frackit is an open-source framework for the stochastic generation of fracture networks.
The implementation is written in C++ language and extensively uses [OpenCASCADE][2],
an open-source Computer Aided Design (CAD) library. Moreover, Python bindings are available
that allow for using almost all of the functionality of Frackit from Python.
Frackit is an open-source software framework for the stochastic generation of fracture networks,
in which the fractures are represented by geometric entities of codimension one. That is,
two-dimensional geometries in three-dimensional space, or one-dimensional geometries in
two-dimensional space. Its main purpose is to provide a means of generating networks with
specific statistical characteristics to be used in conjunction with numerical models, for
instance, in investigations on the impact of fracture network topologies on the hydraulic
or mechanical properties of fractured porous media.
The code is written in C++ language, but Python bindings are available that allow users to
access all functionalities from Python after their installation. Frackit makes extensive use
of [OpenCASCADE][2], an open-source Computer Aided Design (CAD) library, which provides
great flexibility concerning the geometries that can be used.
The geometric data generated by Frackit can be exported into a number of standard CAD
file formats supported by [OpenCASCADE][2]. This allows for visualization with a
......@@ -38,7 +46,7 @@ Thus, you can use Frackit in a toolchain with [Gmsh][1] and
[DuMuX][0] to perform simulations on the generated fracture networks.
The following picture shows an exemplary result for a single-phase simulation
on the fracture network shown above, and it depicts the pressure distribution
on a fracture network generated with Frackit, and it depicts the pressure distribution
on the fractures as well as the fluid velocities in the domain:
<p align="center">
......@@ -52,11 +60,18 @@ contains the code to generating a fracture network on the above domain geometry.
General Concept
===============
Frackit does not prescribe a certain program flow, instead, users are motivated to implement
their own applications using the provided functions, classes and concepts. These comprise
functionality related to the stochastic sampling of a fracture entity, checking geometric
constraints, and fragmentation of a collection of entities to determine connectivity
information.
### Geometry Sampling
The generation of the fracture networks occurs by randomly sampling instances of the
desired fracture geometry on the basis of probability distributions, which
can be defined by the user. The implementation allows for both selecting the type of
distribution (uniform, exponential, etc.) as well as the distribution parameters.
desired fracture geometry on the basis of probability distributions for the parameters
that describe their orientation and/or spatial location. In the code this is realized
in sampler classes, into which the desired statistical properties can be injected and
from which entity candidates can then be sampled.
### Constraints Evaluation
After the generation of a new candidate for a fracture entity, a number of constraints can
......@@ -65,26 +80,25 @@ fracture network, e.g. fracture spacing, by defining a minimum distance between
Other constraints are targeted mainly at guaranteeing certain mesh properties by avoiding
very small length scales, and thus, small elements in the computational mesh. As constraints
one can define a minimum length scale of the intersections between fracture entities, a
minimum intersection angle, and a minimum distance of the intersection geometry to the boundary
minimum intersection angle, and a minimum distance of the intersection geometry to the boundaries
of the intersecting entities. If the user-defined constraints are not fulfilled, the candidate
is rejected.
can be rejected. Frackit provides a class that allows users to define and check for geometric
constraints, but one can also implement custom constraints using the provided geometric algorithms.
### Fragmentation of the network
After the desired number of fracture entities have been generated, an __EntityNetwork__
can be constructed from the raw entities. This intersects and fragments all entities, and
if desired, one can confine the network to a domain of choice.
Note that none of these steps are mandatory and there is no fixed and prescribed
program flow. Instead, users are motivated to implement their own applications
using the provided functions, classes and concepts. The modular design of the
above-mentioned building blocks enables users to fully customize each step to
their needs. Three exemplary applications are contained in this repository:
The modular design of the above-mentioned building blocks enables users to fully customize
each step to their needs. In order to provide an overview of the capabilities of Frackit
and how to use them, various exemplary applications are contained in this repository.
### Example applications
This repository provides a number of examples that may help you to get familiar with the basic concepts of Frackit.
These are not meant to represent realistic scenarios or lead to realistic network topologies, but are rather designed
such that the execution time is low and that a wide range of functionalities of Frackit are covered.
such that the execution time is low and that a wide range of functionalities of Frackit is covered.
* [Example 1][5] Generation of a simple network consisting of quadrilaterals with two main orientations.
* [Example 2][6] Generation of a network of quadrilaterals embedded in a cylindrical domain (mimicking a core sample).
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment