Source code for fluidsim.solvers.ns2d.forcing

"""Forcing (:mod:`fluidsim.solvers.ns2d.forcing`)
=================================================

.. autoclass:: ForcingNS2D
   :members:

"""

from fluidsim.base.forcing import ForcingBasePseudoSpectral
from fluidsim.base.forcing.anisotropic import (
    TimeCorrelatedRandomPseudoSpectralAnisotropic,
)
from fluidsim.base.forcing.milestone import ForcingMilestone


[docs] class ForcingNS2D(ForcingBasePseudoSpectral): """Forcing class for the ns2d solver. .. inheritance-diagram:: ForcingNS2D """ @staticmethod def _complete_info_solver(info_solver): """Complete the ParamContainer info_solver.""" classes = [ TimeCorrelatedRandomPseudoSpectralAnisotropic, ForcingMilestone, ] ForcingBasePseudoSpectral._complete_info_solver(info_solver, classes) def compute_coef_ab_normalize( self, constant_rate_of, key_forced, f_fft, var_fft, deltat ): if constant_rate_of not in ["energy", "energyK"]: raise ValueError if hasattr(self.forcing_maker, "oper_coarse"): oper = self.forcing_maker.oper_coarse else: oper = self.sim.oper if key_forced == "rot_fft": vx_fft, vy_fft = oper.vecfft_from_rotfft(var_fft) fx_fft, fy_fft = oper.vecfft_from_rotfft(f_fft) else: raise ValueError a = deltat / 2 * oper.sum_wavenumbers(abs(fx_fft) ** 2 + abs(fy_fft) ** 2) b = oper.sum_wavenumbers( (vx_fft.conj() * fx_fft).real + (vy_fft.conj() * fy_fft).real ) return a, b