Source code for foxes.output.flow_plots_2d.seq_flow_ani_plugin

from foxes.algorithms.sequential import SequentialPlugin

from .flow_plots import FlowPlots2D


[docs]class SeqFlowAnimationPlugin(SequentialPlugin): """ Plugin for creating data for a 2D flow animation during sequential iterations Attributes ---------- orientation: str The orientation, either "yx", "xz" or "yz" runner: foxes.utils.runners.Runner The runner pars: dict Additional parameters for plotting :group: output.flow_plots_2d """
[docs] def __init__(self, orientation, runner=None, **pars): """ Constructor. Parameters ---------- orientation: str The orientation, either "yx", "xz" or "yz" runner: foxes.utils.runners.Runner, optional The runner pars: dict, optional Additional parameters for plotting """ super().__init__() self.orientation = orientation self.runner = runner self.pars = pars if "title" in self.pars and callable(self.pars["title"]): self._tfun = self.pars.pop("title") else: self._tfun = None
[docs] def initialize(self, algo): """ Initialize data based on the intial iterator Parameters ---------- algo: foxes.algorithms.sequential.Sequential The current sequetial algorithm """ super().initialize(algo) self._data = []
[docs] def update(self, algo, fres, pres=None): """ Updates data based on current iteration Parameters ---------- algo: foxes.algorithms.sequential.Sequential The latest sequetial algorithm fres: xarray.Dataset The latest farm results pres: xarray.Dataset, optional The latest point results """ super().update(algo, fres, pres) o = FlowPlots2D(algo, fres, self.runner) if self._tfun is not None: self.pars["title"] = self._tfun(algo.states.counter, algo.states.index()[0]) if self.orientation == "xy": self._data.append(next(o.gen_states_fig_xy(**self.pars))) elif self.orientation == "xz": self._data.append(next(o.gen_states_fig_xz(**self.pars))) elif self.orientation == "yz": self._data.append(next(o.gen_states_fig_yz(**self.pars))) else: raise KeyError( f"Unkown orientation '{self.orientation}', choises: xy, xz, yz" ) if ( self.pars.get("vmin", None) is not None and self.pars.get("vmax", None) is not None ): self.pars["add_bar"] = False
[docs] def gen_images(self): for d in self._data: yield d