Python package to generate random fields in 2D or 3D on unstructured grids.
The random fields are generated using gstools.
Currently, the following covariance models are available:
- Gaussian
- Exponential
- Matern
- Linear
To install the package, run the following command in the terminal:
pip install git+https://github.com/StemVibrations/RandomFieldsIn this example we generate a random field on a 2D regular grid.
First you need to import the packages:
import numpy as np
from random_fields.generate_field import RandomFields, ModelName
from random_fields.utils import plot2DThen you need to define the grid:
x = np.linspace(0, 100, 50)
y = np.linspace(0, 50, 50)
x, y = np.meshgrid(x, y)In this example we create a mesh of 50x50 points between 0 and 100 in x and 0 and 50 in y direction.
Then we define the random field properties:
nb_dimensions = 2
mean = 10
variance = 2
vertical_scale_fluctuation = 10
anisotropy = [1]
angle = [0]
model_rf = ModelName.GaussianIn this example we use a Gaussian covariance model.
Then we create the random field:
rf = RandomFields(model_rf, nb_dimensions, mean, variance, vertical_scale_fluctuation, anisotropy, angle, seed=14)
rf.generate(np.array([x.ravel(), y.ravel()]).T)To visualise the results you can run:
plot2D([np.array([x.ravel(), y.ravel()]).T], [rf.random_field], title="Random Field", output_folder="./", output_name="random_field.png")The result is the following random field:
In this example we generate a random field on a 3D regular grid.
First you need to import the packages:
import numpy as np
from random_fields.generate_field import RandomFields, ModelName
from random_fields.utils import plot3DThen you need to define the grid:
x = np.linspace(0, 100, 50)
y = np.linspace(0, 50, 50)
z = np.linspace(0, 25, 25)
x, y, z = np.meshgrid(x, y, z)In this example we create a mesh of 50x50x25 points between 0 and 100 in x, 0 and 50 in y direction and 0 and 25 in z direction.
Then we define the random field properties:
nb_dimensions = 3
mean = 10
variance = 2
vertical_scale_fluctuation = 10
anisotropy = [5, 5]
angle = [0, 0]
model_rf = ModelName.GaussianThen we create the random field:
rf = RandomFields(model_rf, nb_dimensions, mean, variance, vertical_scale_fluctuation, anisotropy, angle, seed=14)
rf.generate(np.array([x.ravel(), y.ravel(), z.ravel()]).T)To visualise the results you can run:
plot3D([np.array([x.ravel(), y.ravel(), z.ravel()]).T], [rf.random_field], title="Random Field", output_folder="./", output_name="random_field_3D.png")The result is the following random field:

