Source code for fluidsim.base.output.cross_corr3d

"""Cross correlations
=====================

Provides:

.. autoclass:: CrossCorrelations
   :members:
   :private-members:
   :noindex:
   :undoc-members:

"""

import itertools

import numpy as np

from fluidsim.base.output.spectra3d import BaseSpectra


def _make_small_key(key):
    small_key = key[:-4]
    if len(small_key) == 2 and small_key.startswith("v"):
        return small_key[1:]
    return small_key


[docs] class CrossCorrelations(BaseSpectra): _tag = "cross_corr"
[docs] def compute(self): """compute the values at one time.""" keys = self.sim.state.keys_state_spect combinations = itertools.combinations(keys, 2) dict_spectra1d = {} dict_spectra3d = {} has_to_save_kzkh = self.has_to_save_kzkh() if has_to_save_kzkh: dict_kzkh = {} else: dict_kzkh = None for key0, key1 in combinations: key_cc = _make_small_key(key0) + _make_small_key(key1) field0 = self.sim.state.get_var(key0) field1 = self.sim.state.get_var(key1) cross_corr_tmp = -np.real(field0.conj() * field1) cc_kx, cc_ky, cc_kz = self.oper.compute_1dspectra(cross_corr_tmp) dict_spectra1d[key_cc + "_kx"] = cc_kx dict_spectra1d[key_cc + "_ky"] = cc_ky dict_spectra1d[key_cc + "_kz"] = cc_kz dict_spectra3d[key_cc] = self.oper.compute_3dspectrum(cross_corr_tmp) if has_to_save_kzkh: dict_kzkh[key_cc] = self.oper.compute_spectrum_kzkh( cross_corr_tmp ) dict_spectra1d = {"spectra_" + k: v for k, v in dict_spectra1d.items()} dict_spectra3d = {"spectra_" + k: v for k, v in dict_spectra3d.items()} return dict_spectra1d, dict_spectra3d, dict_kzkh