From dc3fba4f09337fd5db1bcb0c6219ef0df3695e7c Mon Sep 17 00:00:00 2001
From: Matthieu Schaller <schaller@strw.leidenuniv.nl>
Date: Wed, 3 Aug 2022 15:44:00 +0000
Subject: [PATCH] Fixes to issue 818

---
 configure.ac         |  2 +-
 src/power_spectrum.c | 24 ++++++++++++++++++++++++
 src/power_spectrum.h |  3 ---
 3 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/configure.ac b/configure.ac
index ffb146cdd3..04c82357c0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -150,7 +150,7 @@ AC_ARG_ENABLE([mpi],
 # so could change.
 good_mpi="yes"
 if test "$enable_mpi" = "yes"; then
-    AX_MPI([CC="$MPICC $ac_cv_prog_cc_stdc" AC_DEFINE(HAVE_MPI, 1, [Define if you have the MPI library.]) ])
+    AX_MPI([CC="$MPICC $ac_cv_prog_cc_stdc" AC_DEFINE(HAVE_MPI, 1, [Define if you have the MPI library.]) ], [enable_mpi="no"])
     MPI_LIBRARY="Unknown MPI"
 
     # Various MPI implementations require additional libraries when also using
diff --git a/src/power_spectrum.c b/src/power_spectrum.c
index 55a9749600..1eaef8168a 100644
--- a/src/power_spectrum.c
+++ b/src/power_spectrum.c
@@ -28,6 +28,8 @@
 #include <fftw3.h>
 #endif
 
+/* Standard headers */
+#include <stdio.h>
 #include <string.h>
 
 /* This object's header. */
@@ -114,6 +116,8 @@ INLINE static const char* get_powtype_filename(const enum power_type type) {
 void power_init(struct power_spectrum_data* p, struct swift_params* params,
                 int nr_threads) {
 
+#ifdef HAVE_FFTW
+
   /* Get power spectrum parameters */
   p->Ngrid = parser_get_opt_param_int(params, "PowerSpectrum:grid_side_length",
                                       power_data_default_grid_side_length);
@@ -223,8 +227,14 @@ void power_init(struct power_spectrum_data* p, struct swift_params* params,
     safe_checkdir("power_spectra", /*create=*/1);
     safe_checkdir("power_spectra/foldings", /*create=*/1);
   }
+
+#else
+  error("Trying to initialize the PS code without FFTW present!");
+#endif
 }
 
+#ifdef HAVE_FFTW
+
 /**
  * @brief Shared information for shot noise to be used by all the threads in the
  * pool.
@@ -1355,9 +1365,12 @@ void power_spectrum(const enum power_type type1, const enum power_type type2,
   pow_data->powgridft = NULL;
 }
 
+#endif /* HAVE_FFTW */
+
 void calc_all_power_spectra(struct power_spectrum_data* pow_data,
                             const struct space* s, struct threadpool* tp,
                             const int verbose) {
+#ifdef HAVE_FFTW
 
   const ticks tic = getticks();
 
@@ -1375,9 +1388,13 @@ void calc_all_power_spectra(struct power_spectrum_data* pow_data,
   if (verbose)
     message("took %.3f %s.", clocks_from_ticks(getticks() - tic),
             clocks_getunit());
+#else
+  error("Can't use the PS code without FFTW present!");
+#endif /* HAVE_FFTW */
 }
 
 void power_clean(struct power_spectrum_data* pow_data) {
+#ifdef HAVE_FFTW
   fftw_destroy_plan(pow_data->fftplanpow);
   fftw_destroy_plan(pow_data->fftplanpow2);
   free(pow_data->types2);
@@ -1386,6 +1403,9 @@ void power_clean(struct power_spectrum_data* pow_data) {
   // Probably already done for PM at this point
   fftw_cleanup_threads();
 #endif
+#else
+  error("Can't use the PS code without FFTW present!");
+#endif /* HAVE_FFTW */
 }
 
 /**
@@ -1397,12 +1417,14 @@ void power_clean(struct power_spectrum_data* pow_data) {
  */
 void power_spectrum_struct_dump(const struct power_spectrum_data* p,
                                 FILE* stream) {
+#ifdef HAVE_FFTW
   restart_write_blocks((void*)p, sizeof(struct power_spectrum_data), 1, stream,
                        "power spectrum data", "power spectrum data");
   restart_write_blocks(p->types1, p->spectrumcount, sizeof(enum power_type),
                        stream, "power types 1", "power types 1");
   restart_write_blocks(p->types2, p->spectrumcount, sizeof(enum power_type),
                        stream, "power types 2", "power types 2");
+#endif
 }
 
 /**
@@ -1414,6 +1436,7 @@ void power_spectrum_struct_dump(const struct power_spectrum_data* p,
  */
 void power_spectrum_struct_restore(struct power_spectrum_data* p,
                                    FILE* stream) {
+#ifdef HAVE_FFTW
   restart_read_blocks((void*)p, sizeof(struct power_spectrum_data), 1, stream,
                       NULL, "power spectrum data");
   p->types1 =
@@ -1465,4 +1488,5 @@ void power_spectrum_struct_restore(struct power_spectrum_data* p,
   fftw_free(p->powgrid2);
   p->powgrid2 = NULL;
   p->powgridft2 = NULL;
+#endif /* HAVE_FFTW */
 }
diff --git a/src/power_spectrum.h b/src/power_spectrum.h
index c717dcaf1a..97b7feefde 100644
--- a/src/power_spectrum.h
+++ b/src/power_spectrum.h
@@ -100,9 +100,6 @@ struct power_spectrum_data {
 
 void power_init(struct power_spectrum_data* p, struct swift_params* params,
                 int nr_threads);
-void power_spectrum(const enum power_type type1, const enum power_type type2,
-                    struct power_spectrum_data* pow_data, const struct space* s,
-                    struct threadpool* tp, const int verbose);
 void calc_all_power_spectra(struct power_spectrum_data* pow_data,
                             const struct space* s, struct threadpool* tp,
                             const int verbose);
-- 
GitLab