def _op_self(self, waves: np.ndarray, id: int, corr_wave: Optional[np.ndarray] = None) -> np.ndarray: """The operator of the Raman effect for the considered wave.""" square_mod = waves[id] * np.conj(waves[id]) return (1j * FFT.conv_to_fft(self._h_R_op, square_mod))
def op(self, waves: Array[cst.NPFT], id: int, corr_wave: Optional[Array[cst.NPFT]] = None) -> Array[cst.NPFT]: """The non approximated operator of the Raman effect.""" square_mod = waves[id] * np.conj(waves[id]) return (1j * FFT.conv_to_fft(self.h_R, square_mod)) #, self._fft_h_R))
def _op_cross(self, waves: np.ndarray, id: int, corr_wave: Optional[np.ndarray] = None) -> np.ndarray: """The cross terms of the Raman effect.""" square_mod = np.zeros(waves[id].shape, dtype=cst.NPFT) for i in range(len(waves)): if (i != id): square_mod += waves[i] * np.conj(waves[i]) return (1j * FFT.conv_to_fft(self._h_R_op, square_mod))