https://github.com/juliaearth/stratigraphics.jl
Stratrigraphy simulation solver for the GeoStats.jl framework
https://github.com/juliaearth/stratigraphics.jl
landscape-evolution stratigraphy structural-geology
Last synced: 8 months ago
JSON representation
Stratrigraphy simulation solver for the GeoStats.jl framework
- Host: GitHub
- URL: https://github.com/juliaearth/stratigraphics.jl
- Owner: JuliaEarth
- License: mit
- Created: 2017-08-27T17:41:53.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2025-10-17T18:33:55.000Z (8 months ago)
- Last Synced: 2025-10-18T20:50:23.022Z (8 months ago)
- Topics: landscape-evolution, stratigraphy, structural-geology
- Language: Julia
- Homepage: https://github.com/JuliaEarth/GeoStats.jl
- Size: 3.11 MB
- Stars: 20
- Watchers: 3
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# StratiGraphics.jl
*A tool for creating 3D stratigraphy from 2D geostatistical processes.*
[![][build-img]][build-url] [![][codecov-img]][codecov-url]

This package provides an implementation of Markov-Poisson sampling as described
in [Hoffimann 2018](https://searchworks.stanford.edu/view/12746435). In this method,
geostatistical algorithms from the [GeoStats.jl](https://github.com/JuliaEarth/GeoStats.jl)
framework are used to quickly generate surfaces of a 3D stratigraphic model.
## Installation
Get the latest stable release with Julia's package manager:
```julia
] add StratiGraphics
```
## Usage
To illustrate the usage of the package, consider a set of satellite images containing
spatial patterns that we would like to reproduce in a 3D stratigraphic model:

Each image can serve as a training image for a multiple-point geostatistical process
such as [ImageQuilting.jl](https://github.com/JuliaEarth/ImageQuilting.jl):
```julia
using ImageQuilting
proc1 = QuiltingProcess(TI1, (30,30))
proc2 = QuiltingProcess(TI2, (30,30))
proc3 = QuiltingProcess(TI3, (30,30))
procs = [proc1, proc2, proc3]
```
We define a geological environment as a set of geological processes, a set of transition
probabilities between the processes, and an event duration process:
```julia
using StratiGraphics
# transition probabilities
P = rand(3,3)
P = P ./ sum(P, dims=2)
# event duration process
ΔT = ExponentialDuration(1.0)
env = Environment(procs, P, ΔT)
```
We can simulate the environment from an initial state (e.g. flat land) and for a number of
epochs to produce a geological record:
```julia
nepochs = 10
init = LandState(zeros(100,100))
record = simulate(env, init, nepochs)
```
From the record, we can produce the strata in the form of surfaces:
```julia
strata = Strata(record)
```
We can choose between an `:erosional` (default) versus a `:depositional` stacking:
```julia
strata = Strata(record, :depositional)
```
We can then convert the surfaces into a 3D voxel model by specifying the vertical resolution:
```julia
voxelize(strata, 50) # produce a 100x100x50 voxel model
```

For a reproducible example, please check the [GeoStatsTutorials](https://github.com/JuliaEarth/GeoStatsTutorials).
## Citation
If you find StratiGraphics.jl useful in your work, please consider citing the thesis:
```latex
@PHDTHESIS{Hoffimann2018,
title={Morphodynamic Analysis and Statistical Synthesis of Geomorphic Data},
author={Hoffimann, J{\'u}lio},
school={Stanford University},
url={https://searchworks.stanford.edu/view/12746435},
year={2018},
month={September}
}
```
## Asking for help
If you have any questions, please [open an issue](https://github.com/JuliaEarth/StratiGraphics.jl/issues).
[build-img]: https://img.shields.io/github/actions/workflow/status/JuliaEarth/StratiGraphics.jl/CI.yml?branch=master&style=flat-square
[build-url]: https://github.com/JuliaEarth/StratiGraphics.jl/actions
[codecov-img]: https://img.shields.io/codecov/c/github/JuliaEarth/StratiGraphics.jl?style=flat-square
[codecov-url]: https://codecov.io/gh/JuliaEarth/StratiGraphics.jl