Plotting Tools

PyTurbSim is equipped with a flexible set of plotting tools for plotting PyTurbSim output and comparing it to target (input) statistics. For example, the following code performs a PyTurbSim run and compares the mean profile and spectrum with the targets.

Begin by importing PyTurbSim and its plot package:

import pyts.api as pyts
import pyts.plot.api as plt

Generate some PyTurbSim data

Before we plot anything we need to create something to plot. To do this we begin by defining some parameters, and initialize the tsrun object, including creating the tsGrid():

refht = 4
ustar = 0.03
Uref = 3.

# This creates a PyTurbSim 'run object':
tsr = pyts.tsrun()

tsr.grid = pyts.tsGrid(center=refht,
                       ny=3,
                       nz=5,
                       height=5,
                       width=5,
                       time_sec=3000,
                       dt=0.5,)

Now specify the profile, spectral, stress and coherence models that you wish to simulate, and run PyTurbSim (by calling tsr):

tsr.prof = pyts.profModels.h2l(Uref, refht, ustar)
tsr.spec = pyts.specModels.tidal(ustar, refht)
tsr.cohere = pyts.cohereModels.nwtc()
tsr.stress = pyts.stressModels.tidal(ustar, refht)

# Run PyTurbSim:
out = tsr()

out now contains a tsdata object which holds the output of the PyTurbSim run tsr.

Basic plotting

Now that we have something to plot, we are ready to create a ‘PyTurbSim summary plotting figure’:

fig = plt.summfig()

Here summfig() is a wrapper function that returns a FigAxForm object. These FigAxForm objects are toolboxes for plotting several statistics of PyTurbSim and TurbSim output. To plot our PyTurbSim output, out, we simply:

fig.plot(out, color='k')

When the plot method receives a PyTurbSim ‘run’ object it plots the target values:

fig.plot(tsr, color='r', linestyle='--')

Note that this plot method accepts all of the normal matplotlib.pyplot.plot() **kwargs. We now clean-up (finalize) and save the figure:

fig.finalize()
fig.savefig('BasicExample.png')

(Source code, png, hires.png, pdf)

_images/plotting.png

Advanced Usage

But what if you want to plot more than just the mean velocity profile and the spectrum? pyts.plot can do that too. You simply set-up your figure to plot whichever types of plots you want:

fig = plt.summfig(axforms=[plt.axform.velprof([0, 3.5]),
                           plt.axform.tkeprof(),
                           plt.axform.stressprof(),
                           plt.axform.spec(),
                           plt.axform.cohere(), ],
                           nfft=1024,
                           )

Here we are selecting different ‘axes forms’ types from the pyts.plot.axform module. Each of these axesForm objects can be customized to control various properties of the axes.

In this case, we are seeking to plot the mean velocity profile, the turbulent energy profiles, the stress profiles, the spectra and the coherence. That’s a lot of information! Fortunately, all of these statistics can be computed for our PyTurbSim output, and run. You may also notice that we have also specified nfft=1024, which tells the plotter to use that number of points when computing spec and cohere.

To plot all of these statistics, we simply follow the same steps above:

fig.plot(out, color='k')
fig.plot(tsr, color='r', linestyle='--')
fig.finalize()
fig.savefig('AdvancedExample.png')

This gives a comparison of PyTurbSim output to targets for this list of variables, with just a few lines of code!

(Source code, png, hires.png, pdf)

_images/plotting2.png