From 487653abf3252d95bbe975f8fbb8704c0cf8d690 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Franck=20P=C3=A9rignon?= <franck.perignon@imag.fr>
Date: Fri, 8 Jun 2012 11:45:47 +0000
Subject: [PATCH] reorg, CMakeLists

---
 HySoP/CMakeLists.txt                          | 138 +++++++++---------
 HySoP/DoxyConf/parmes.doxyfile                |  11 +-
 HySoP/src/main/main.f90                       |   4 +
 HySoP/src/poisson/Poisson.f90                 |  16 +-
 .../src/{poisson => ppmInterface}/Solver.f90  |  14 +-
 .../poisson_init.f90                          |   0
 6 files changed, 94 insertions(+), 89 deletions(-)
 rename HySoP/src/{poisson => ppmInterface}/Solver.f90 (87%)
 rename HySoP/src/{poisson => ppmInterface}/poisson_init.f90 (100%)

diff --git a/HySoP/CMakeLists.txt b/HySoP/CMakeLists.txt
index fe3c310bf..2620b918d 100644
--- a/HySoP/CMakeLists.txt
+++ b/HySoP/CMakeLists.txt
@@ -1,5 +1,12 @@
 #=======================================================
-# cmake utility to compile and install Parmes library
+# cmake utility to compile,link and install : 
+#  - parmes library (libparmes...)
+#  - parmesscales library particular solver from scales, (libparmesscales...)
+#  
+#  parmes may (optionally) depends on :
+#   - parmesscales (USE_SCALES=ON, default)
+#   - ppm-core (USE_PPM=ON, default=OFF)
+#   - ppm-numerics (USE_PPMNumerics, default=OFF)
 #
 # F. Pérignon, 17 fev 2011
 #
@@ -23,12 +30,12 @@ include(MyTools)
 
 # User defined options
 option(VERBOSE_MODE "enable verbose mode for cmake exec. Default = on" ON)
-option(USE_PPM "link parmes with ppm when this mode is enable. Default = on." ON)
 option(USE_MPI "compile and link parmes with mpi when this mode is enable. Default = on." ON)
-option(USE_PPM "link Parmes with PPM library (core component). Default = on." ON)
-option(USE_PPMNumerics "link Parmes with PPM-numerics. Default = off" ON)
+option(WITH_SCALES "compile/create parmesscales lib and link it with Parmes. Default = on." ON)
+option(WITH_PPM "link Parmes with PPM library (core component). Default = off." OFF)
+option(WITH_PPMNumerics "link Parmes with PPM-numerics. Default = off" OFF)
 option(DOUBLEPREC "set precision for real numbers to double precision when this mode is enable. Default = on." ON)
-option(WITH_TESTS "Enable testing. Default = on" OFF)
+option(WITH_TESTS "Enable testing. Default = off" OFF)
 option(BUILD_SHARED_LIBS "Enable dynamic library build, default = ON" ON)
 
 # cmake project name
@@ -43,24 +50,25 @@ set(PROJECT_LIBRARY_NAME ${PROJECT_NAME})
 # --- The name of the exe to be created (test purpose)
 # This exe will be linked with libPROJECT_LIBRARY_NAME 
 set(EXE_NAME ${PROJECT_NAME}Run)
+
 # The list of all dirs containing sources to be compiled for the Parmes lib
 # Any file in those dirs will be used to create libparmes
 set(${PROJECT_LIBRARY_NAME}_SRCDIRS 
   src
-  src/interfaces/Fortran2Cpp
+  src/poisson
+  #src/interfaces/Fortran2Cpp
   #  src/interfaces/ppm
   )
+
 # A main file to create an executable (test purpose)
 # Any files in these dirs will be used to create Parmes exec (linked with libparmes)
-set(${EXE_NAME}_SRCDIRS src/main src/main/poisson)
+set(${EXE_NAME}_SRCDIRS src/main)
 # Matching expr for files to be compiled. 
-set(EXTS *.cxx *.f90 *.f95)
+set(EXTS *.f90 *.f95)
 # Matching expr for headers (install purpose)
 set(EXTS_HDRS *.hpp *.h)
 # Note FP : we can also use  cmake vars ${CMAKE_Fortran_SOURCE_FILE_EXTENSIONS} ${CMAKE_C_SOURCE_FILE_EXTENSIONS} ${CMAKE_CXX_SOURCE_FILE_EXTENSIONS}
 
-
-
 # ============= The project =============
 # Set project name and project languages 
 # => this automatically defines:
@@ -68,7 +76,7 @@ set(EXTS_HDRS *.hpp *.h)
 #   - ${PROJECT_NAME}_SOURCE_DIR : where sources (.f and .h and this CMakeLists.txt) are located
 # Note that because of OutOfSourceBuild, binary_dir and source_dir must be different. 
 
-project(${PROJECT_NAME} CXX C Fortran)
+project(${PROJECT_NAME} Fortran)
 
 # ============= Tests =============
 if(WITH_TESTS)
@@ -80,80 +88,69 @@ endif(WITH_TESTS)
 # set the compile/link conf (-I and -L opt)
 
 # --- Boost ---
-find_package(Boost REQUIRED)
-include_directories(${Boost_INCLUDE_DIRS})
+#set(Boost_ADDITIONAL_VERSIONS "1.49" "1.49.0")
+#set(Boost_NO_SYSTEM_PATHS ON)
+#find_package(Boost REQUIRED)
+#include_directories(${Boost_INCLUDE_DIRS})
+
+# ============= Prepare compilation =============
+
+# Force a default build type if not provided by user
+# CMAKE_BUILD_TYPE = empty, Debug, Release, RelWithDebInfo or MinSizeRel.
+if (NOT CMAKE_BUILD_TYPE)
+  set (CMAKE_BUILD_TYPE RELEASE CACHE STRING "Choose the type of build, options are: None, Debug, Release, RelWithDebInfo or MinSizeRel." FORCE)  
+endif (NOT CMAKE_BUILD_TYPE)
+
+# If the project uses Fortran ...
+# Set module files directory (i.e. where .mod will be created) 
+set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/Modules)
+#  Add compilation flags:
+append_Fortran_FLAGS("-Wall")
 
 # --- MPI ---
 if(USE_MPI)
   # Find MPI for C++ and fortran.
   find_package(MPI REQUIRED)
   # -I
-  include_directories(${MPI_INCLUDE_PATH})
+  include_directories(${MPI_Fortran_INCLUDE_PATH})
   # Add compilation flags
-  append_cxx_flags(${MPI_COMPILE_FLAGS})
-  set(${PROJECT_NAME}_LINK_FLAGS ${${PROJECT_NAME}_LINK_FLAGS} ${MPI_LINK_FLAGS})
+  set(${PROJECT_NAME}_LINK_FLAGS ${${PROJECT_NAME}_LINK_FLAGS} ${MPI_Fortran_LINK_FLAGS})
   # -I
-  include_directories(${MPI_Fortran_INCLUDE_PATH})
   # Add compilation flags
   append_Fortran_flags(${MPI_Fortran_COMPILE_FLAGS})
-  set(${PROJECT_NAME}_LINK_FLAGS ${${PROJECT_NAME}_LINK_FLAGS} ${MPI_Fortran_LINK_FLAGS})
-  #endif(MPI_Fortran_COMPILER)
-  set(LIBS ${LIBS} ${MPI_LIBRARIES} ${MPI_Fortran_LIBRARIES} )
+  #set(${PROJECT_NAME}_LINK_FLAGS ${${PROJECT_NAME}_LINK_FLAGS} ${MPI_Fortran_LINK_FLAGS})
+  set(LIBS ${LIBS} ${MPI_Fortran_LIBRARIES} )
 endif(USE_MPI)
 
-# --- PPM Core ---
-if(USE_PPM)
-  find_package(PPMCore 1.2 REQUIRED)
-  include_directories(${PPMCore_INCLUDE_DIRS})
-  set(LIBS ${LIBS} ${PPMCore_LIBRARY})
-  if(VERBOSE_MODE)
-    message(STATUS "Found PPM version ${PPMCore_VERSION}: ${PPMCore_LIBRARY}")
-    message(STATUS "PPM headers location: ${PPMCore_INCLUDE_DIRS}")
-  endif(VERBOSE_MODE)
+# --- scales ---
+if(WITH_SCALES)
+  add_subdirectory(src/scalesInterface)
 endif()
 
-# --- PPM Numerics ---
-if(USE_PPMNumerics)
-  find_package(PPMNumerics 1.2 REQUIRED)
-  include_directories(${PPMNumerics_INCLUDE_DIRS})
-#  include_directories(${PPMNumerics_MODULE_DIR})
-  set(LIBS ${LIBS} ${PPMNumerics_LIBRARY})
-  if(VERBOSE_MODE)
-    message(STATUS "Found PPMNumerics version ${PPMNUmerics_VERSION}: ${PPMNumerics_LIBRARY}")
-    message(STATUS "PPMNumerics header location: ${PPMNumerics_INCLUDE_DIRS}")
-  endif(VERBOSE_MODE)
-
+# --- PPM ---
+if(WITH_PPM)
+  add_subdirectory(src/ppmInterface)
 endif()
 
-# ============= Prepare compilation =============
-
-# Force a default build type if not provided by user
-# CMAKE_BUILD_TYPE = empty, Debug, Release, RelWithDebInfo or MinSizeRel.
-if (NOT CMAKE_BUILD_TYPE)
-  set (CMAKE_BUILD_TYPE RELEASE CACHE STRING "Choose the type of build, options are: None, Debug, Release, RelWithDebInfo or MinSizeRel." FORCE)  
-endif (NOT CMAKE_BUILD_TYPE)
-
-# If the project uses Fortran ...
-# Set module files directory (i.e. where .mod will be created) 
-set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/Modules)
-#  Add compilation flags:
-append_Fortran_FLAGS("-Wall")
+find_package(FFTW REQUIRED)
+include_directories(${FFTW_INCLUDE_DIRS})
+set(LIBS ${LIBS} ${FFTW_LIBRARIES})
+display(FFTW_LIBRARIES)
 
 # ============= Generates ParmesConfig.hpp =============
 # The file PROJECT_NAME_defines.hpp will be generated from config.hpp.cmake;
 if(EXISTS ${CMAKE_SOURCE_DIR}/config.hpp.cmake)
   if(NOT CONFIG_H_GLOBAL_CONFIGURED)
-    set(CONFIG_H_GLOBAL_CONFIGURED 1 CACHE BOOL "Parmes_defines.hpp generation." )
-    configure_file(config.hpp.cmake ${PROJECT_NAME}_defines.hpp)
-  endif()
-  include_directories(${CMAKE_BINARY_DIR})
+   set(CONFIG_H_GLOBAL_CONFIGURED 1 CACHE BOOL "Parmes_defines.hpp generation." )
+   configure_file(config.hpp.cmake ${PROJECT_NAME}_defines.hpp)
+ endif()
+ include_directories(${CMAKE_BINARY_DIR})
 endif()
 
 # ============= Source and header files list =============
 # We scan all files with matching extension in directories 
 # containing sources.
 
-
 # Source and header files list:
 foreach(_DIR ${${PROJECT_LIBRARY_NAME}_SRCDIRS})
   set(_DIR_FILES)
@@ -200,10 +197,10 @@ include_directories(${CMAKE_Fortran_MODULE_DIRECTORY})
 # Cmake tools to handle fortran-c interface. It will generate F2CMangle.hpp, a file
 # that will contain some useful macros to deal with fortran-C name mangling.
 # See cmake doc for this module. 
-include(FortranCInterface)
-FortranCInterface_HEADER(${CMAKE_Fortran_MODULE_DIRECTORY}/F2CMangle.hpp
-                            MACRO_NAMESPACE "F2C_"
-                            SYMBOL_NAMESPACE "F2C_")
+#include(FortranCInterface)
+#FortranCInterface_HEADER(${CMAKE_Fortran_MODULE_DIRECTORY}/F2CMangle.hpp
+#  MACRO_NAMESPACE "F2C_"
+#  SYMBOL_NAMESPACE "F2C_")
 
 # ============= Creates the library =============
 if(BUILD_SHARED_LIBS) # shared library
@@ -222,9 +219,6 @@ add_dependencies(${EXE_NAME} ${PROJECT_LIBRARY_NAME})
 target_link_libraries(${EXE_NAME} ${PROJECT_LIBRARY_NAME})
 target_link_libraries(${EXE_NAME} ${LIBS})
 
-# CXX is used as linker language
-set_target_properties(${EXE_NAME} ${PROJECT_LIBRARY_NAME} PROPERTIES LINKER_LANGUAGE CXX) 
-
 # ============== Add tests ==============
 if(WITH_TESTS)
   message(STATUS "Enable testing ...")
@@ -232,6 +226,10 @@ if(WITH_TESTS)
   new_test(testAllocatedPtr userMod.f90 wrapper.f90 testAllocatedPtr.cxx)
   new_test(testNullPtr userMod.f90 wrapper.f90 testNullPtr.cxx)
   end_test()
+  begin_test(src/tests/Particles)
+  new_test(testCreate3D testCreate3D.f90)
+  new_test(testCreate2D testCreate2D.f90)
+  end_test()
 endif(WITH_TESTS)
 
 # ============= Prepare install =============
@@ -239,9 +237,9 @@ endif(WITH_TESTS)
 # The library
 # The library, the headers and mod files, the cmake generated files
 # will be install in CMAKE_INSTALL_PREFIX/lib include and share
-include(InstallPackage)
+#include(InstallPackage)
 
-install_package(${PACKAGE_NAME} ${PROJECT_LIBRARY_NAME} ${${PROJECT_NAME}_HDRS})
+#install_package(${PACKAGE_NAME} ${PROJECT_LIBRARY_NAME} ${${PROJECT_NAME}_HDRS})
 
 #install(TARGETS ${EXE_NAME}  
 #RUNTIME DESTINATION bin  # executables
@@ -252,7 +250,7 @@ install_package(${PACKAGE_NAME} ${PROJECT_LIBRARY_NAME} ${${PROJECT_NAME}_HDRS})
 
 # --------------------------------------------
 # do not skip the full RPATH for the build tree
-set(CMAKE_SKIP_BUILD_RPATH  FALSE)
+set(CMAKE_SKIP_BUILD_RPATH FALSE)
 # when building, don't use the install RPATH already
 # (but later on when installing)
 set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 
@@ -268,7 +266,9 @@ if(VERBOSE_MODE)
   message(STATUS " Compiler : ${CMAKE_Fortran_COMPILER}")
   message(STATUS " Sources are in : ${CMAKE_SOURCE_DIR}")
   message(STATUS " Project uses MPI : ${USE_MPI}")
-  message(STATUS " Project uses PPM : ${USE_PPM}")
+  message(STATUS " Project uses Scales : ${WITH_SCALES}")
+  message(STATUS " Project uses PPM : ${WITH_PPM}")
   message(STATUS " Project will be installed in ${CMAKE_INSTALL_PREFIX}")
   message(STATUS "====================== ======= ======================")
 endif()
+
diff --git a/HySoP/DoxyConf/parmes.doxyfile b/HySoP/DoxyConf/parmes.doxyfile
index 1da346515..51397ef73 100644
--- a/HySoP/DoxyConf/parmes.doxyfile
+++ b/HySoP/DoxyConf/parmes.doxyfile
@@ -613,7 +613,8 @@ WARN_LOGFILE           =
 # with spaces.
 
 INPUT                  = ../src/main \
-                         .
+                         . \
+                         ../src
 
 # This tag can be used to specify the character encoding of the source files 
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
@@ -886,13 +887,13 @@ HTML_STYLESHEET        =
 # 180 is cyan, 240 is blue, 300 purple, and 360 is red again. 
 # The allowed range is 0 to 359.
 
-HTML_COLORSTYLE_HUE    = 113
+HTML_COLORSTYLE_HUE    = 102
 
 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of 
 # the colors in the HTML output. For a value of 0 the output will use 
 # grayscales only. A value of 255 will produce the most vivid colors.
 
-HTML_COLORSTYLE_SAT    = 115
+HTML_COLORSTYLE_SAT    = 125
 
 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to 
 # the luminance component of the colors in the HTML output. Values below 
@@ -901,7 +902,7 @@ HTML_COLORSTYLE_SAT    = 115
 # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, 
 # and 100 does not change the gamma.
 
-HTML_COLORSTYLE_GAMMA  = 112
+HTML_COLORSTYLE_GAMMA  = 101
 
 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML 
 # page will contain the date and time when the page was generated. Setting 
@@ -1569,7 +1570,7 @@ DOT_FONTNAME           = Helvetica
 # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
 # The default size is 10pt.
 
-DOT_FONTSIZE           = 10
+DOT_FONTSIZE           = 24
 
 # By default doxygen will tell dot to use the output directory to look for the 
 # FreeSans.ttf font (which doxygen will put there itself). If you specify a 
diff --git a/HySoP/src/main/main.f90 b/HySoP/src/main/main.f90
index f66d2ab09..60346001b 100755
--- a/HySoP/src/main/main.f90
+++ b/HySoP/src/main/main.f90
@@ -6,11 +6,15 @@ implicit none
 
 integer :: info
 
+
+call MPI_Init(info)
 call MPI_COMM_RANK(MPI_COMM_WORLD,rank,info)
 call MPI_COMM_SIZE(MPI_COMM_WORLD,nbprocs,info)
 
 print *, "hello ..."
 
 
+call MPI_Finalize(info)
+
 
 end program mainParmes
diff --git a/HySoP/src/poisson/Poisson.f90 b/HySoP/src/poisson/Poisson.f90
index 45f960e08..51773bef0 100755
--- a/HySoP/src/poisson/Poisson.f90
+++ b/HySoP/src/poisson/Poisson.f90
@@ -5,9 +5,9 @@ module poisson
 
   use client_data
     
-  use client_topology, only : createTopologyY,getPPMLocalResolution,topoY
+  !use client_topology, only : createTopologyY,getPPMLocalResolution,topoY
 
-  use ppm_module_map
+  !use ppm_module_map
   
   use Domain
 
@@ -92,7 +92,7 @@ contains
     coefFFT = 2.*pi/lengths(1:dime)
 
     !> Create a fftw-dedicated topology 
-    call createTopologyY(topoFFTid,meshFFTid,physDomainLowerPoint,physDomainUpperPoint,domain_bc,resolution)
+!!!! Comment to remove ppm    call createTopologyY(topoFFTid,meshFFTid,physDomainLowerPoint,physDomainUpperPoint,domain_bc,resolution)
     
   end subroutine initFFTW2D
      
@@ -236,7 +236,7 @@ contains
     integer,dimension(dim3) :: resolTmp
 
 
-    resolTmp = getPPMLocalResolution(topoY,meshFFTid)
+!!!!!!! Comment to remove ppm ... resolTmp = getPPMLocalResolution(topoY,meshFFTid)
 
 !!    fftField = 0.0
 !!$    ! Input field 
@@ -251,10 +251,10 @@ contains
 
     print *, rank, "test sizes ...",shape(fftField),"///",shape(fieldIn)
     
-    call ppm_map_field_global(fromtopo,topoFFTid,frommesh,meshFFTid,info)
-    call ppm_map_field_push(fromtopo,frommesh,fieldIn,info)
-    call ppm_map_field_send(info)
-    call ppm_map_field_pop(topoFFTid,meshFFTid,fftField,zeros,info)
+!!!!!!! Comment to remove ppm    call ppm_map_field_global(fromtopo,topoFFTid,frommesh,meshFFTid,info)
+!!!!!!! Comment to remove ppm    call ppm_map_field_push(fromtopo,frommesh,fieldIn,info)
+!!!!!!! Comment to remove ppm    call ppm_map_field_send(info)
+!!!!!!! Comment to remove ppm    call ppm_map_field_pop(topoFFTid,meshFFTid,fftField,zeros,info)
 !!$    do j = 1,grid_resolution(c_Y)
 !!$       print *, rank,j, 'f in', fieldIn(:,j,1)
 !!$    end do
diff --git a/HySoP/src/poisson/Solver.f90 b/HySoP/src/ppmInterface/Solver.f90
similarity index 87%
rename from HySoP/src/poisson/Solver.f90
rename to HySoP/src/ppmInterface/Solver.f90
index 2b9c3a941..532f0e514 100755
--- a/HySoP/src/poisson/Solver.f90
+++ b/HySoP/src/ppmInterface/Solver.f90
@@ -7,12 +7,12 @@
 module Solver
 
   use client_data, only: mk, dime,rank
-  use ppm_module_numerics_data, only: ppm_param_eq_poisson, ppm_param_smooth_rbsor
-  use ppm_module_poisson, only: ppm_poisson_init, ppm_poisson_plan, ppm_poisson_grn_pois_per, ppm_poisson_solve, &
-       ppm_poisson_drv_curl_fd2, ppm_poisson_drv_curl_fd4, ppm_poisson_drv_none
-  use client_topology
-  use ppm_module_typedef, only : ppm_param_mesh_coarsen
-  use ppm_module_mesh_derive, only: ppm_mesh_derive
+!!!!!!! Comment to remove ppm  use ppm_module_numerics_data, only: ppm_param_eq_poisson, ppm_param_smooth_rbsor
+!!!!!!! Comment to remove ppm  use ppm_module_poisson, only: ppm_poisson_init, ppm_poisson_plan, ppm_poisson_grn_pois_per, ppm_poisson_solve, &
+!!!!!!! Comment to remove ppm  ppm_poisson_drv_curl_fd2, ppm_poisson_drv_curl_fd4, ppm_poisson_drv_none
+!!!!!!! Comment to remove ppm  use client_topology
+!!!!!!! Comment to remove ppm  use ppm_module_typedef, only : ppm_param_mesh_coarsen
+!!!!!!! Comment to remove ppm  use ppm_module_mesh_derive, only: ppm_mesh_derive
 !  use ppmljk_poisson
   
   !! All multigrid stuff ...
@@ -23,7 +23,7 @@ module Solver
 
   private
 
-  public :: init_poisson_solver, solve_poisson, ppm_poisson_drv_curl_fd2, ppm_poisson_drv_curl_fd4, ppm_poisson_drv_none
+  public :: init_poisson_solver, solve_poisson!!!, ppm_poisson_drv_curl_fd2, ppm_poisson_drv_curl_fd4, ppm_poisson_drv_none
 
   type(ppm_poisson_plan),pointer :: fftwplanForppm => NULL()
 
diff --git a/HySoP/src/poisson/poisson_init.f90 b/HySoP/src/ppmInterface/poisson_init.f90
similarity index 100%
rename from HySoP/src/poisson/poisson_init.f90
rename to HySoP/src/ppmInterface/poisson_init.f90
-- 
GitLab