Source code for pyLOM.SPOD.plots

#!/usr/bin/env python
#
# pyLOM - Python Low Order Modeling.
#
# DMD plotting utilities.
#
# Last rev: 27/10/2021
from __future__ import print_function, division

import numpy as np
import matplotlib.pyplot as plt

from .utils        import extract_modes
from ..utils       import gpu_to_cpu
from ..utils.plots import plotResidual, plotFieldStruct2D, plotSnapshot, plotLayout
from ..            import Mesh, Dataset


[docs] def plotMode(L:np.ndarray, P:np.ndarray, freqs:np.ndarray, mesh:Mesh, dset:Dataset, ivar:int, pointData:bool=True, modes:np.ndarray=np.array([1],np.int32),**kwargs): r''' Plot a SPOD mode, including both the real and imaginary parts Args: L (np.ndarray): modal energy spectra P (np.ndarray): spatial SPOD modes freqs (np.ndarray): frequencies at which the modes are computed mesh (Mesh): mesh at which the data is represented dset (Dataset): pyLOM Dataset containing the case information ivar (int): index of the variable inside the dataset pointData(bool, optional): whether the data is represented on points or cell (default, ``True``) modes (np.ndarray, optinal): IDs of the modes to plot ''' L, P = gpu_to_cpu(L), gpu_to_cpu(P) # Extract the modes to be plotted npoints = mesh.size(pointData) P_modes = extract_modes(L,P,ivar,npoints,modes=modes) # Add to the dataset dset.add_field('P_MODES',len(modes),P_modes) # Loop over the modes screenshot = kwargs.pop('screenshot',None) off_screen = kwargs.pop('off_screen',False) for imode, mode in enumerate(modes): if screenshot is not None: kwargs['screenshot'] = screenshot % imode plotLayout(mesh,dset,1,1,mode-1,vars=['P_MODES'],title='Mode %d St = %.3f' % (mode-1, np.abs(freqs[mode-1])),off_screen=off_screen,**kwargs) # Remove from dataset dset.delete('P_MODES')
[docs] def plotSpectra(f:np.ndarray, L:np.ndarray, fig:plt.figure=None, ax:plt.axes=None): r''' Plot the frequency-enegy spectrum Args: f (np.ndarray): frequencies at which the modes are computed L (np.ndarray): energy of each frequency fig (plt.figure, optional): figure object in which the plot will be done (default: ``[]``) axs (plt.axes, optional): axes object in which the plot will be done (default: ``[]``) Returns: [plt.figure, plt.axes]: figure and axes objects of the plot ''' L, f = gpu_to_cpu(L), gpu_to_cpu(f) # Get or recover axis and figure if fig is None: fig = plt.figure(figsize=(8,6),dpi=100) if ax is None: ax = fig.add_subplot(1,1,1) # Plot for ii in range(L.shape[1]): ax.loglog(np.sort(f), L[np.argsort(f),ii], 'o-') ax.set_xlabel('St') ax.set_ylabel(r'$\lambda_i$') return fig, ax