From 0627da614548e03f48580106bf6082959e4940dd Mon Sep 17 00:00:00 2001
From: Jean-Baptiste Keck <Jean-Baptiste.Keck@imag.fr>
Date: Thu, 26 Jul 2018 22:38:57 +0200
Subject: [PATCH] added a target for local library updates

---
 CMakeLists.txt                                 |  9 +++++++++
 hysop/backend/host/fortran/operator/poisson.py | 11 +++++------
 setup.py.in                                    |  7 +++----
 3 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index bf322b499..0aeb1e1c5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -625,6 +625,7 @@ if(VERBOSE_MODE)
     message(WARNING "You deactivate c++ to python interface generation. This will disable the Aitken-Schwarz Poisson solver.")
   endif()
   message(STATUS " Sources are in : ${CMAKE_SOURCE_DIR}")
+  message(STATUS " Build is done in : ${CMAKE_BINARY_DIR}")
   message(STATUS " Project uses MPI : ${USE_MPI}")
   message(STATUS " Project uses Scales : ${WITH_SCALES}")
   message(STATUS " Project uses FFTW : ${WITH_FFTW}")
@@ -650,3 +651,11 @@ if(VERBOSE_MODE)
   message("Try to run python -c 'import hysop'. If it fails, add ${HYSOP_PYTHON_INSTALL_DIR} to PYTHONPATH environment variable.")
   message("Example : \n export PYTHONPATH=${HYSOP_PYTHON_INSTALL_DIR}/:\${PYTHONPATH}\n")
 endif()
+
+# Add custom target to install compiled libraries locally
+add_custom_target(update_libs 
+                  COMMAND find ${CMAKE_SOURCE_DIR}/hysop/ -name '*.so' -type f -delete
+                  COMMAND find ${CMAKE_BINARY_DIR} -name '*.so' -type f -print0 | xargs -0 cp -t ${CMAKE_SOURCE_DIR}/hysop/
+                  COMMAND [ -f "$ENV{HOME}/.hysop.__init__.py" ] && rm ${CMAKE_SOURCE_DIR}/hysop/__init__.py
+                  COMMAND [ -f "$ENV{HOME}/.hysop.__init__.py" ] && cp $ENV{HOME}/.hysop.__init__.py ${CMAKE_SOURCE_DIR}/hysop/__init__.py
+                  DEPENDS wheel)
diff --git a/hysop/backend/host/fortran/operator/poisson.py b/hysop/backend/host/fortran/operator/poisson.py
index 3679e01c7..201b994e3 100644
--- a/hysop/backend/host/fortran/operator/poisson.py
+++ b/hysop/backend/host/fortran/operator/poisson.py
@@ -37,7 +37,7 @@ class PoissonFFTW(FortranFFTWOperator):
                        values=CartesianTopologyDescriptors)
         assert Fin.nb_components == Fout.nb_components
         assert Fin.nb_components == 1, \
-            "Poisson operator is implemented only for scalar fields"
+            "Fortran FFTW poisson operator is implemented only for scalar fields"
 
         assert Fin.domain is Fout.domain, \
             'only one domain is supported'
@@ -66,19 +66,18 @@ class PoissonFFTW(FortranFFTWOperator):
         if self.discretized:
             return
         super(PoissonFFTW, self).discretize()
-        self.dFin = self.Fin.discrete_fields[self.topology]
-        self.dFout = self.Fout.discrete_fields[self.topology]
+        self.dFin  = self.get_input_discrete_field(self.Fin)
+        self.dFout = self.get_output_discrete_field(self.Fout)
         assert (self.dFin.ghosts == self.dFout.ghosts).all(), \
             "Input and output fields must have the same ghosts."
+        self.ghosts = self.dFin.ghosts.astype(np.float64) # prevent f2py copy
 
     @op_apply
     def apply(self, **kargs):
         super(PoissonFFTW, self).apply(**kargs)
-        gh = self.input_fields[self.Fin].ghosts
-
         changeLayout, di, do = self._initialize_mem_layout(self.dFin, self.dFout)
         # Vectors are given in ZYX layout to Fortran
-        do = self._solve(di[0], gh)
+        self._solve(di[0], do[0], self.ghosts)
         if changeLayout:
             self.dFout.data[0][...] = -np.ascontiguousarray(do)
         self.dFout.exchange_ghosts()
diff --git a/setup.py.in b/setup.py.in
index cbcd22b59..b47c18330 100644
--- a/setup.py.in
+++ b/setup.py.in
@@ -136,10 +136,9 @@ def create_fortran_extension(name, pyf_file=None, src_dirs=None, sources=None,
     # --- set f2py options ---
     f2py_options = ['--no-lower', '--no-wrap-functions']
     options = []
-    if debug_mode == 1:
-        options.append(('F2PY_REPORT_ON_ARRAY_COPY', '1'))
-        if os.uname()[0] == 'Linux':
-            options.append(('F2PY_REPORT_ATEXIT', '1'))
+    options.append(('F2PY_REPORT_ON_ARRAY_COPY', '1'))
+    if os.uname()[0] == 'Linux':
+        options.append(('F2PY_REPORT_ATEXIT', '1'))
 
     # --- set include dir ---
     inc_dir =  parseCMakeVar("@FORTRAN_INCLUDE_DIRS@")
-- 
GitLab