Source code for fluidsim.solvers.ns3d.output

"""Output for the ns3d solver
=============================

.. autoclass:: Output
   :members:
   :private-members:

.. autosummary::
   :toctree:

   spatial_means
   spectra
   spect_energy_budget

"""

from fluidsim.base.output import OutputBasePseudoSpectral

try:
    from fluidsim.operators.operators3d import compute_energy_from_1field
except ImportError:
    from fluidsim import _is_testing

    if not _is_testing:
        raise


[docs] class Output(OutputBasePseudoSpectral):
[docs] @staticmethod def _complete_info_solver(info_solver): """Complete the ParamContainer info_solver.""" OutputBasePseudoSpectral._complete_info_solver(info_solver) classes = info_solver.classes.Output.classes base_name_mod = "fluidsim.solvers.ns3d.output" classes.PrintStdOut.module_name = base_name_mod + ".print_stdout" classes.PrintStdOut.class_name = "PrintStdOutNS3D" classes.PhysFields.module_name = "fluidsim.base.output.phys_fields3d" classes.PhysFields.class_name = "PhysFieldsBase3D" classes._set_child( "Spectra", attribs={ "module_name": base_name_mod + ".spectra", "class_name": "SpectraNS3D", }, ) classes._set_child( "SpatialMeans", attribs={ "module_name": base_name_mod + ".spatial_means", "class_name": "SpatialMeansNS3D", }, ) classes._set_child( "SpectralEnergyBudget", attribs={ "module_name": base_name_mod + ".spect_energy_budget", "class_name": "SpectralEnergyBudgetNS3D", }, ) classes._set_child( "TemporalSpectra", attribs={ "module_name": "fluidsim.base.output.temporal_spectra", "class_name": "TemporalSpectra3D", }, ) classes._set_child( "SpatioTemporalSpectra", attribs={ "module_name": base_name_mod + ".spatiotemporal_spectra", "class_name": "SpatioTemporalSpectraNS3D", }, ) classes._set_child( "CrossCorrelations", attribs={ "module_name": "fluidsim.base.output.cross_corr3d", "class_name": "CrossCorrelations", }, )
[docs] @staticmethod def _complete_params_with_default(params, info_solver): """This static method is used to complete the *params* container.""" OutputBasePseudoSpectral._complete_params_with_default( params, info_solver ) params.output.phys_fields.field_to_plot = "rotz"
def compute_energies_fft(self): vx_fft = self.sim.state.state_spect.get_var("vx_fft") vy_fft = self.sim.state.state_spect.get_var("vy_fft") vz_fft = self.sim.state.state_spect.get_var("vz_fft") return ( compute_energy_from_1field(vx_fft), compute_energy_from_1field(vy_fft), compute_energy_from_1field(vz_fft), )
[docs] def compute_energy_fft(self): nrj_x_fft, nrj_y_fft, nrj_z_fft = self.compute_energies_fft() return nrj_x_fft + nrj_y_fft + nrj_z_fft
[docs] def compute_energy(self): energy_fft = self.compute_energy_fft() return self.sum_wavenumbers(energy_fft)
def plot_summary(self, tmin=0, key_field=None): # pylint: disable=maybe-no-member self.spatial_means.plot() self.spectra.plot1d(tmin=tmin) self.spect_energy_budg.plot_fluxes(tmin=tmin) if key_field: self.phys_fields.plot(key_field)