/*******************************************************************************
* Copyright 2010-2022 Intel Corporation.
*
* This software and the related documents are Intel copyrighted  materials,  and
* your use of  them is  governed by the  express license  under which  they were
* provided to you (License).  Unless the License provides otherwise, you may not
* use, modify, copy, publish, distribute,  disclose or transmit this software or
* the related documents without Intel's prior written permission.
*
* This software and the related documents  are provided as  is,  with no express
* or implied  warranties,  other  than those  that are  expressly stated  in the
* License.
*******************************************************************************/

/*
 *
 * Definitions for MPI FFTW3 wrappers to Intel(R) oneAPI Math Kernel Library (Intel(R) oneMKL).
 *
 ******************************************************************************
 */

#ifndef FFTW3_MPI_MKL_H
#define FFTW3_MPI_MKL_H

#include "fftw3-mpi.h"

#if defined(MKL_SINGLE)
typedef float real_t;
typedef fftwf_complex complex_t;
#define MPI_PREC MPI_FLOAT
#define MKL_PREC DFTI_SINGLE
#define FFTW_MPI_MANGLE(name) FFTW_MPI_MANGLE_FLOAT(name)
#define FFTW_MANGLE(name) FFTW_MANGLE_FLOAT(name)
#else
typedef double real_t;
typedef fftw_complex complex_t;
#define MPI_PREC MPI_DOUBLE
#define MKL_PREC DFTI_DOUBLE
#define FFTW_MPI_MANGLE(name) FFTW_MPI_MANGLE_DOUBLE(name)
#define FFTW_MANGLE(name) FFTW_MANGLE_DOUBLE(name)
#endif

#include "fftw3_mkl.h"
#include "mkl_cdft.h"

#define WANT_FAST_INPLACE_CLUSTER_FFT 1
/* if WANT_FAST_INPLACE_CLUSTER_FFT set to 1, FFTW3 MPI wrappers internally
 * allocate additional memory(workspace) needed for fast inplace Intel(R) oneMKL CDFT
 * otherwise, no additional memory is used, though the perfomance would be
 * worse, because of many MPI communications */

#endif /* FFTW3_MPI_MKL_H */

