Generating a Random 3D Vector Field¶
In this example we are going to generate a random 3D vector field with a Gaussian covariance model. The mesh on which we generate the field will be externally defined and it will be generated by PyVista.
import gstools as gs import pyvista as pv # mainly for setting a white background pv.set_plot_theme("document")
create a uniform grid with PyVista
dim, spacing, origin = (40, 30, 10), (1, 1, 1), (-10, 0, 0) mesh = pv.UniformGrid(dim, spacing, origin)
create an incompressible random 3d velocity field on the given mesh with added mean velocity in x-direction
model = gs.Gaussian(dim=3, var=3, len_scale=1.5) srf = gs.SRF(model, mean=(0.5, 0, 0), generator="VectorField", seed=198412031) srf.mesh(mesh, points="points", name="Velocity")
Now, we can do the plotting
streamlines = mesh.streamlines( "Velocity", terminal_speed=0.0, n_points=800, source_radius=2.5, ) # set a fancy camera position cpos = [(25, 23, 17), (0, 10, 0), (0, 0, 1)] p = pv.Plotter() # adding an outline might help navigating in 3D space # p.add_mesh(mesh.outline(), color="k") p.add_mesh( streamlines.tube(radius=0.005), show_scalar_bar=False, diffuse=0.5, ambient=0.5, )
/home/docs/checkouts/readthedocs.org/user_builds/gstools/envs/stable/lib/python3.7/site-packages/pyvista/plotting/plotting.py:96: UserWarning: This system does not appear to be running an xserver. PyVista will likely segfault when rendering. Try starting a virtual frame buffer with xvfb, or using ``pyvista.start_xvfb()`` warnings.warn('\n'
PyVista is not working on readthedocs, but you can try it out yourself by uncommenting the following line of code.
The result should look like this:
Total running time of the script: ( 0 minutes 4.371 seconds)