#ifndef W_PROJECT_H_
#define W_PROJECT_H_

#define NWORKERS -1    //100
#define NTHREADS 32
#define PI 3.14159265359
#define REAL_TYPE double

#include <mpi.h>

#ifdef __CUDACC__
extern "C"
#endif

#ifdef __cplusplus
extern "C" {
void wstack(
     int,
     unsigned int,
     unsigned int,
     unsigned int,
     double*,
     double*,
     double*,
     float*,
     float*,
     float*,
     double,
     double,
     int,
     int,
     int,
     double*,
     int,
     int);
}

#else
void wstack(
     int,
     unsigned int,
     unsigned int,
     unsigned int,
     double*,
     double*,
     double*,
     float*,
     float*,
     float*,
     double,
     double,
     int,
     int,
     int,
     double*,
     int,
     int);
#endif


#ifdef __CUDACC__
extern "C"
#endif
int test(int nnn);

#ifdef __CUDACC__
extern "C"
#endif
void phase_correction(
     double*,
     double*,
     double*,
     int,
     int,
     int,
     int,
     int,
     double,
     double,
     double,
     int,
     int);


#ifdef ACCOMP
#pragma omp declare target (gauss_kernel_norm)
#endif

#ifdef __CUDACC__
extern "C"
#endif

void cuda_fft(
	int,
	int,
	int,
	int,
	int,
	double*,
	double*,
	int,
	MPI_Comm);


#endif
