Flumy Python Package (flumy)
flumy is a Python Package for Flumy kernel C++ library.
More details for Flumy are available here: https://flumy.minesparis.psl.eu
This Python Package can be used by anyone who wants to generate realistic non-conditional reservoir models for meandering channelized fluvial environement (Training images for MPS or training datasets for GANs).
How to cite
Please, use this to cite us in any publication or results for which Flumy has been used:
--------------------------------------------------
FLUMY™
Process-based channelized reservoir models
Copyright © MINES PARIS - PSL / ARMINES
Free download from https://flumy.minesparis.psl.eu
--------------------------------------------------
Installation
pip install flumy
Usage
Here is a script example which execute a Fluvial simulation:
# Import package
from flumy import *
nx = 250 # Number of grid nodes along Ox
ny = 200 # Number of grid nodes along Oy
mesh = 10 # Horizontal grid mesh size: 10m
hmax = 3 # Maximum channel depth: 3m
ng = 50 # Required Net-to-Gross: 50%
isbx = 80 # Required sand bodies extension (medium extension = few meander cutoffs)
verbose = True # Verbose mode
res = 30 # Vertical resolution (increase 'res' to get higher resolution)
dz = hmax / res # Vertical discretization step (0.1m)
zul = 3 * hmax # Fill a reservoir of 3 x hmax height (9m)
nz = int(zul / dz) # Number of vertical nodes of the resulted block of sediments
# Launch the simulation
seed = 123456 # Simulation seed
# Create the simulator
flsim = Flumy(nx, ny, mesh, verbose)
# Launch up to zul
success = flsim.launch(seed, hmax, isbx, ng, zul)
if (not success):
print("Error while running Flumy")
# Display the age of the simulation, the mean topography reached and the total number of meander cutoffs
print("Final age:",flsim.getAge(), "yr")
print("Mean topography:",round(flsim.getDomain().getMeanTopo(),2), "m")
print("Number of cutoffs:",flsim.getNbCutoff())
# Retrieve the simulated block informed with facies, grain size and age (in three numpy arrays)
fac,grain,age = flsim.getBlock(dz, zb=0 ,nz=nz)
print("type(fac):", type(fac))
print("fac.shape:", fac.shape)
# Display facies proportions
print("Facies proportions (%):", getProps(fac))
# Sand proportion (PB) corresponds more or less to the required Net-to-Gross
# Display Facies cross-flow section
showSection(fac = fac[50,:,:], size = 8, legend=2)
# Display Grain Size along-flow section
showSection(grain = grain[:,20,:], size = 8, legend=2)
# Display Age horizontal slice section
showSection(age = age[:,:,2], size = 8, legend = 1, title = "Age horizontal slice")