Source code for ezyrb.snapshot

""" Module for discretized solution object """

import numpy as np
import matplotlib.pyplot as plt


[docs] class Snapshot: """ Class for representing a discretized solution snapshot. This class encapsulates solution values and their spatial coordinates, providing methods for manipulation and visualization. :param array_like values: The solution values. :param array_like space: The spatial coordinates corresponding to the values. Default is None. :Example: >>> import numpy as np >>> from ezyrb import Snapshot >>> space = np.linspace(0, 1, 50) >>> values = np.sin(2 * np.pi * space) >>> snap = Snapshot(values, space) >>> print(snap.values.shape) (50,) >>> print(snap.space.shape) (50,) """ def __init__(self, values, space=None): """ Initialize a Snapshot object. :param values: The solution values. Can be a Snapshot instance or an array-like object. :param space: The spatial coordinates. Default is None. """ if isinstance(values, Snapshot): self.values = values.values self.space = values.space else: self.values = values self.space = space @property def values(self): """ Get the snapshot values. """ return self._values @values.setter def values(self, new_values): """ Set the snapshot values with validation. :param array_like new_values: The new snapshot values. :raises ValueError: If the length of new values doesn't match the space. """ if hasattr(self, 'space') and self.space is not None: if len(self.space) != len(new_values): raise ValueError('invalid ndof for the current space.') self._values = new_values @property def space(self): """ Get the snapshot space. """ return self._space @space.setter def space(self, new_space): """ Set the snapshot space with validation. :param array_like new_space: The new spatial coordinates. :raises ValueError: If the length of new space doesn't match the values. """ if hasattr(self, 'values') and self.values is not None: if new_space is not None and len(self.values) != len(new_space): raise ValueError('invalid ndof for the current space.') self._space = new_space @property def flattened(self): """ return the values in 1D array """ return self.values.flatten()
[docs] def plot(self): """ Plot the snapshot, if possible. """ if self.space is None: print('No space set, unable to plot.') return if np.asarray(self.space).ndim == 1: plt.plot(self.space, self.values) else: raise NotImplementedError