Generating 2D geo channels: stohastic object-based modeling

Cyril Chirkunov
3 min readMar 21, 2022

Introduction

Stohastic object-based modeling of facies is an effective approach to spatial modeling proposed by Clayton V. Deutsch about two decades ago. Initial algorithms were implemented on Fortran programming language and were quite popular in the geomodeling society. Moreover, such methods became a part of modern tools for geologists. Surprisingly, I didn’t find open-source version for FluvSIM algorithm in Python programming language. And in this post I will describe how it could be implemented in Python. At the end of the post the link to the 2D Geo Channels dataset will be provided.

Elements of a channel geometric object

Channel object consists of an initial center line angle (the current direction, which is defined as angle between Y axis and a direction vector), a sine phase shift, a source location drift and set of connected segments. Each segment specified as sine function with its own center line angle between Y axis and a direction, an amplitude and a length along direction.

Segment center line is defined as center line + delta, where delta has Gaussian normal distribution.

Segment amplitude and length are random variables of uniform distribution with lower and upper border.

Source location drift is random deltas across X and Y coordinates of a channel source.

When it comes to a sine phase shift, it is a random variable which is picked uniformly from (0, 180) option.

Basic transformations

To generate next channel segment we translate the coordinate system to new one, with the center in a segment start point and with rotation by a center line angle.

Single channel generation

Given parameters for channel object random vars, a source location and a number of segments, a program iteratively performs following steps for each new segment:

  1. Compute center line angle delta, segment length and amplitude as random vars.
  2. Compute rate of phase changing such as rate multiplied on segment length would equal to full period of sine (180 degrees or pi radians).
  3. Traversing along Y axis in local coordinate system of segment, find curve points with step 1 along Y axis and X as sine function.
  4. Using segment point from previous step (source location, initially), perform X, Y curve points transformation to coordinate system of a channel and draw a curve.
  5. Add a sink point of a current channel segment to the list with connected segment points.

Python implementation provided below:

Multiple channels

In simulation sources of channels may be distributed accross the canvas with same padding. Code below demonstrates an idea (keep in mind that channels directed from North to South).

Results of modeling

As you may see on pictires, the object-based stohastic modeling allows simulation of channels with different properties, meandering or strengthened. This approach could be seemlessly integrated in complex pipeline of geological facies maps generation.

2D Channels Dataset

Here you may find the 2D Channels dataset with 4500 generated images of channels

Github

--

--