diff --git a/.gitignore b/.gitignore index 9a81c6da630ebb6f1093d28f325674b0333cf926..66ab1b076f8438d370f47c61a67234071f542e03 100644 --- a/.gitignore +++ b/.gitignore @@ -119,3 +119,11 @@ projectId.sh /cmake-build-debug-gcc/ /cmake-build-falcon/ /cmake-build-release-gcc/ + +*CMake* +*cmake* +**/*cmake* +**/*CMake* + +**/.gitignore +.gitignore diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e3bc64a9708191b1d38fd9c2e563d294a5942c98..4309f6f00ef93503cbc92786b1c59b4d44db95aa 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,3 +1,4 @@ + centos_build: stage: build tags: @@ -29,6 +30,8 @@ centos_run: - ./run.sh $CI_PROJECT_DIR unused 4 0 0 numerics mac_build: + variables: + GIT_STRATEGY: empty stage: build tags: - mac diff --git a/CMakeLists.txt b/CMakeLists.txt index 0d2579216e8cc2192c959e62d65ca52308eb888f..6a10042210f70214c504ab5450ef0c14825cd446 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,6 +28,8 @@ set(TINYOBJLOADER_ROOT CACHE PATH "TinyObjLoader library path") set(SE_CLASS1 CACHE BOOL "Activate compilation with SE_CLASS1") set(SE_CLASS2 CACHE BOOL "Activate compilation with SE_CLASS2") set(SE_CLASS3 CACHE BOOL "Activate compilation with SE_CLASS3") +set(BLITZ_ROOT CACHE PATH "Blitz root directory") +set(ALGOIM_ROOT CACHE PATH "Algoim root directory") set(ACTION_ON_ERROR CACHE STRING "Action to perform in case of error") set(PROFILE_WITH_SCOREP CACHE BOOL "Enable profiling with scorep") set(ENV{PETSC_DIR} ${PETSC_ROOT}) diff --git a/build.sh b/build.sh index f26c0a6d1ccad1aae8b45701d2cdb31d514bbd20..1cc35bf9cc7ac33927265ed16d726a006990e96b 100755 --- a/build.sh +++ b/build.sh @@ -24,6 +24,8 @@ echo "GPU compilation: $with_gpu" if [ x"$hostname" == x"cifarm-centos-node.mpi-cbg.de" ]; then echo "CentOS node" source /opt/rh/devtoolset-8/enable + ./install_CMAKE_on_CI.sh $HOME/openfpm_dependencies/openfpm_pdata/$branch/ + export PATH="$HOME/openfpm_dependencies/openfpm_pdata/$branch/CMAKE/bin:$PATH" fi if [ x"$hostname" == x"cifarm-ubuntu-node" ]; then @@ -31,12 +33,18 @@ if [ x"$hostname" == x"cifarm-ubuntu-node" ]; then echo "Ubuntu node" ./install_MPI_mpich.sh $HOME/openfpm_dependencies/openfpm_pdata/$branch/ 4 export PATH="/opt/bin:$PATH" + foward_options="--enable-cuda-on-cpu" fi if [ x"$hostname" == x"cifarm-mac-node.mpi-cbg.de" ]; then echo "Mac node" export PATH="/usr/local/bin:$PATH" # rm -rf $HOME/openfpm_dependencies/openfpm_pdata/$branch/PETSC + ./install_CMAKE_on_CI.sh $HOME/openfpm_dependencies/openfpm_pdata/$branch/ + export PATH="$HOME/openfpm_dependencies/openfpm_pdata/$branch/CMAKE/bin:$PATH" + cd openfpm_vcluster + git stash + cd .. fi if [ x"$hostname" == x"falcon1" ]; then @@ -87,7 +95,6 @@ fi #echo "StrictHostKeyChecking=no" > $HOME/.ssh/config #chmod 600 $HOME/.ssh/config -foward_options="--enable-cuda-on-cpu" install_options= if [ x"$comp_type" == x"full" ]; then install_options="-s " diff --git a/configure b/configure index 7853c20d07d671ea69ae78490bebac5dea937ed3..9fe5ac8164d0789b63283fe3e942c1626aa6f0fe 100755 --- a/configure +++ b/configure @@ -108,6 +108,8 @@ with_parmetis enable_se_class1 enable_se_class2 enable_se_class3 +with_blitz +with_algoim with_alpaka with_action_on_error with_boost @@ -512,6 +514,12 @@ do vcdevel) conf_options="$conf_options -DVc_ROOT=$ac_optarg" ;; + blitz) + conf_options="$conf_options -DBLITZ_ROOT=$ac_optarg" + ;; + algoim) + conf_options="$conf_options -DALGOIM_ROOT=$ac_optarg" + ;; alpaka) conf_options="$conf_options -DALPAKA_ROOT=$ac_optarg" ;; diff --git a/example/Numerics/Sussman_redistancing/example_sussman_circle/main.cpp b/example/Numerics/Sussman_redistancing/example_sussman_circle/main.cpp index b19546737a5117277bb1417dd2de5128db88093e..f58ef59927e436be039bdf25232ab0cc96773f3c 100644 --- a/example/Numerics/Sussman_redistancing/example_sussman_circle/main.cpp +++ b/example/Numerics/Sussman_redistancing/example_sussman_circle/main.cpp @@ -322,7 +322,7 @@ int main(int argc, char* argv[]) // Minimum is 1 property, to which the Phi_SDF can be written // In this example we chose 3 properties. The 1st for the Phi_SDF, the 2nd for the gradient of phi and the 3rd for // the magnitude of the gradient - typedef aggregate<double, double[grid_dim], double> props_nb; + typedef aggregate<double, Point<grid_dim, double>, double> props_nb; typedef vector_dist<grid_dim, double, props_nb> vd_type; Ghost<grid_dim, double> ghost_vd(0); vd_type vd_narrow_band(0, box, bc, ghost_vd); diff --git a/example/Numerics/Sussman_redistancing/example_sussman_images_2D/main.cpp b/example/Numerics/Sussman_redistancing/example_sussman_images_2D/main.cpp index 70668cee7273fe42abc0272232813a798dd1e025..9a2b1507640e0f9f2e79768122c4673c8c85d46b 100644 --- a/example/Numerics/Sussman_redistancing/example_sussman_images_2D/main.cpp +++ b/example/Numerics/Sussman_redistancing/example_sussman_images_2D/main.cpp @@ -221,12 +221,12 @@ int main(int argc, char* argv[]) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Get narrow band: Place particles on interface (narrow band width e.g. 2 grid points on each side of the interface) - size_t bc[grid_dim] = {PERIODIC, PERIODIC}; + size_t bc[grid_dim] = {NON_PERIODIC, NON_PERIODIC}; // Create an empty vector to which narrow-band particles will be added. You can choose, how many properties you want. // Minimum is 1 property, to which the Phi_SDF can be written // In this example we chose 3 properties. The 1st for the Phi_SDF, the 2nd for the gradient of phi and the 3rd for // the magnitude of the gradient - typedef aggregate<double, double[grid_dim], double> props_nb; + typedef aggregate<double, Point<grid_dim, double>, double> props_nb; typedef vector_dist<grid_dim, double, props_nb> vd_type; Ghost<grid_dim, double> ghost_vd(0); vd_type vd_narrow_band(0, box, bc, ghost_vd); diff --git a/example/Numerics/Sussman_redistancing/example_sussman_images_3D/main.cpp b/example/Numerics/Sussman_redistancing/example_sussman_images_3D/main.cpp index fcd1cbdd1aefa4fab0c24cdcb76b14b382948364..6dcdb680f255474892a31f10a9b9aaa3053a6a7e 100644 --- a/example/Numerics/Sussman_redistancing/example_sussman_images_3D/main.cpp +++ b/example/Numerics/Sussman_redistancing/example_sussman_images_3D/main.cpp @@ -217,12 +217,12 @@ int main(int argc, char* argv[]) /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Get narrow band: Place particles on interface (narrow band width e.g. 2 grid points on each side of the interface) - size_t bc[grid_dim] = {PERIODIC, PERIODIC, PERIODIC}; + size_t bc[grid_dim] = {NON_PERIODIC, NON_PERIODIC, NON_PERIODIC}; // Create an empty vector to which narrow-band particles will be added. You can choose, how many properties you want. // Minimum is 1 property, to which the Phi_SDF can be written // In this example we chose 3 properties. The 1st for the Phi_SDF, the 2nd for the gradient of phi and the 3rd for // the magnitude of the gradient - typedef aggregate<double, double[grid_dim], double> props_nb; + typedef aggregate<double, Point<grid_dim, double>, double> props_nb; typedef vector_dist<grid_dim, double, props_nb> vd_type; Ghost<grid_dim, double> ghost_vd(0); vd_type vd_narrow_band(0, box, bc, ghost_vd); diff --git a/example/Numerics/Sussman_redistancing/example_sussman_sphere/main.cpp b/example/Numerics/Sussman_redistancing/example_sussman_sphere/main.cpp index 392f9dc36abd5b3e5d690bd90ff40186d7381c61..9be98523cddb14230ec731c5ee6817b043e30810 100644 --- a/example/Numerics/Sussman_redistancing/example_sussman_sphere/main.cpp +++ b/example/Numerics/Sussman_redistancing/example_sussman_sphere/main.cpp @@ -277,12 +277,12 @@ int main(int argc, char* argv[]) */ //! @cond [Initialize narrow band] @endcond // Get narrow band: Place particles on interface (narrow band width e.g. 2 grid points on each side of the interface) - size_t bc[grid_dim] = {PERIODIC, PERIODIC, PERIODIC}; + size_t bc[grid_dim] = {NON_PERIODIC, NON_PERIODIC, NON_PERIODIC}; // Create an empty vector to which narrow-band particles will be added. You can choose, how many properties you want. // Minimum is 1 property, to which the Phi_SDF can be written // In this example we chose 3 properties. The 1st for the Phi_SDF, the 2nd for the gradient of phi and the 3rd for // the magnitude of the gradient - typedef aggregate<double, double[grid_dim], double> props_nb; + typedef aggregate<double, Point<grid_dim, double>, double> props_nb; typedef vector_dist<grid_dim, double, props_nb> vd_type; Ghost<grid_dim, double> ghost_vd(0); vd_type vd_narrow_band(0, box, bc, ghost_vd); diff --git a/install b/install index fff9a319fedad10cbe57393abada4183b8ca4b91..8906ba02502ecdfa7347c03bada6d4a301f1abba 100755 --- a/install +++ b/install @@ -296,6 +296,9 @@ configure_options=" $configure_options --with-parmetis=$i_dir/PARMETIS " ./script/install_Metis.sh $i_dir $CC $CXX $ncore configure_options=" $configure_options --with-metis=$i_dir/METIS " +./script/install_blitz_algoim.sh $i_dir $ncore +configure_options=" $configure_options --with-blitz=$i_dir/BLITZ --with-algoim=$i_dir/ALGOIM " + if [ x"$gpu_support" == x"1" ]; then configure_options=" $configure_options --enable-gpu " fi @@ -432,7 +435,7 @@ elif [ -d "$i_dir/HDF5/lib64" ]; then hdf5_lib_dir=-L$i_dir/HDF5/lib64 fi -echo "INCLUDE_PATH=$mpi_include_dirs $cuda_include_dirs -Wno-deprecated-declarations $openmp_flags -I. -I$install_base/openfpm_numerics/include -I$install_base/openfpm_pdata/include/config -I$install_base/openfpm_pdata/include -I$install_base/openfpm_data/include -I$install_base/openfpm_vcluster/include -I$install_base/openfpm_io/include -I$install_base/openfpm_devices/include -I$i_dir/VCDEVEL/include -I$i_dir/METIS/include -I$i_dir/PARMETIS/include -I$i_dir/BOOST/include -I$i_dir/HDF5/include -I$i_dir/LIBHILBERT/include $lin_alg_inc" > example.mk +echo "INCLUDE_PATH=$mpi_include_dirs $cuda_include_dirs -Wno-deprecated-declarations $openmp_flags -I. -I$install_base/openfpm_numerics/include -I$install_base/openfpm_pdata/include/config -I$install_base/openfpm_pdata/include -I$install_base/openfpm_data/include -I$install_base/openfpm_vcluster/include -I$install_base/openfpm_io/include -I$install_base/openfpm_devices/include -I$i_dir/VCDEVEL/include -I$i_dir/METIS/include -I$i_dir/PARMETIS/include -I$i_dir/BOOST/include -I$i_dir/HDF5/include -I$i_dir/LIBHILBERT/include $lin_alg_inc -I$i_dir/BLITZ/include -I$i_dir/ALGOIM/include" > example.mk echo "LIBS_PATH=$mpi_libs $openmp_flags -L$install_base/openfpm_devices/lib -L$install_base/openfpm_pdata/lib -L$install_base/openfpm_vcluster/lib -L$i_dir/VCDEVEL/lib -L$i_dir/METIS/lib -L$i_dir/PARMETIS/lib -L$i_dir/BOOST/lib $hdf5_lib_dir -L$i_dir/LIBHILBERT/lib $lin_alg_dir " >> example.mk if [ x"$cuda_on_cpu" == x"YES" ]; then echo "CUDA_ON_CPU=YES" >> example.mk @@ -444,7 +447,7 @@ else echo "LIBS=-lvcluster -lofpm_pdata -lofpmmemory -lparmetis -lmetis -lboost_iostreams -lboost_program_options -lhdf5 -llibhilbert -lVc $lin_alg_lib -ldl -lboost_filesystem -lboost_system $optional_boost" >> example.mk echo "LIBS_CUDA_ON_CPU=\$(LIBS)" >> example.mk fi -echo "INCLUDE_PATH_NVCC=-Xcompiler="-Wno-deprecated-declarations" $(cat openmp_flags) "$(cat cuda_options)" $mpi_include_dirs -I. -I$install_base/openfpm_numerics/include -I$install_base/openfpm_pdata/include/config -I$install_base/openfpm_pdata/include -I$install_base/openfpm_data/include -I$install_base/openfpm_vcluster/include -I$install_base/openfpm_io/include -I$install_base/openfpm_devices/include -I$i_dir/METIS/include -I$i_dir/PARMETIS/include -I$i_dir/BOOST/include -I$i_dir/HDF5/include -I$i_dir/LIBHILBERT/include $lin_alg_inc" >> example.mk +echo "INCLUDE_PATH_NVCC=-Xcompiler="-Wno-deprecated-declarations" $(cat openmp_flags) "$(cat cuda_options)" $mpi_include_dirs -I. -I$install_base/openfpm_numerics/include -I$install_base/openfpm_pdata/include/config -I$install_base/openfpm_pdata/include -I$install_base/openfpm_data/include -I$install_base/openfpm_vcluster/include -I$install_base/openfpm_io/include -I$install_base/openfpm_devices/include -I$i_dir/METIS/include -I$i_dir/PARMETIS/include -I$i_dir/BOOST/include -I$i_dir/HDF5/include -I$i_dir/LIBHILBERT/include $lin_alg_inc -I$i_dir/BLITZ/include -I$i_dir/ALGOIM/include" >> example.mk cp example.mk src/example.mk cp example.mk example/example.mk diff --git a/install_CMAKE_on_CI.sh b/install_CMAKE_on_CI.sh new file mode 100755 index 0000000000000000000000000000000000000000..d7492ad4088d8737727f255b2b042c06f6edd4a1 --- /dev/null +++ b/install_CMAKE_on_CI.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +if [ -d "$1/CMAKE" ]; then + exit 0 +fi + +wget https://github.com/Kitware/CMake/releases/download/v3.20.3/cmake-3.20.3.tar.gz +tar -xvf cmake-3.20.3.tar.gz +cd cmake-3.20.3 + +./bootstrap --prefix=$1/CMAKE +make +make install + + diff --git a/openfpm_numerics b/openfpm_numerics index 1a9735b51607381adeffffa6ecd32940529bd0ff..6a0f56687d993d510001e4c6fd607bdae98b361e 160000 --- a/openfpm_numerics +++ b/openfpm_numerics @@ -1 +1 @@ -Subproject commit 1a9735b51607381adeffffa6ecd32940529bd0ff +Subproject commit 6a0f56687d993d510001e4c6fd607bdae98b361e diff --git a/openfpm_vcluster b/openfpm_vcluster index 058d9619b0005871feb710c2270122e9bd93e096..0f8c74a1964e42e9092ee084e79051288d313469 160000 --- a/openfpm_vcluster +++ b/openfpm_vcluster @@ -1 +1 @@ -Subproject commit 058d9619b0005871feb710c2270122e9bd93e096 +Subproject commit 0f8c74a1964e42e9092ee084e79051288d313469 diff --git a/script/install_blitz_algoim.sh b/script/install_blitz_algoim.sh new file mode 100755 index 0000000000000000000000000000000000000000..9d98002e9addf2c50dfcb3eb80625e12c57bc6a7 --- /dev/null +++ b/script/install_blitz_algoim.sh @@ -0,0 +1,48 @@ +#! /bin/bash + +source script/discover_os +discover_os + +# check if the directory $1/BLITZ exist + +if [ -d "$1/BLITZ" ]; then + echo "BLITZ is already installed" +else + ## Remove old download + rm blitz-1.0.2.tar.gz + rm -rf blitz-1.0.2.tar.gz + wget https://github.com/blitzpp/blitz/archive/refs/tags/1.0.2.tar.gz -O blitz-1.0.2.tar.gz + tar -xf blitz-1.0.2.tar.gz + cd blitz-1.0.2 + + BUILDDIR=build + mkdir -p $BUILDDIR + cd $BUILDDIR + echo "cmake ../. -DCMAKE_INSTALL_PREFIX=$1/BLITZ" + cmake ../. -DCMAKE_INSTALL_PREFIX=$1/BLITZ + make -j $2 + make install + + # Mark the installation + echo 1 > $1/BLITZ/version +fi + +## Algoim installation + + + + +if [ -d "$1/ALGOIM" ]; then + echo "ALGOIM is already installed" +else + + ## Remove old download + rm algoim.tar.gz + rm -rf algoim.tar.gz + wget http://ppmcore.mpi-cbg.de/upload/algoim.tar.gz + tar -xf algoim.tar.gz + mv algoim $1/ALGOIM + mv $1/ALGOIM/src $1/ALGOIM/include + # Mark the installation + echo 1 > $1/ALGOIM/version +fi diff --git a/src/Grid/tests/grid_dist_id_unit_test.cpp b/src/Grid/tests/grid_dist_id_unit_test.cpp index 8d8186ea9b3ca4db3d5699d1fc16fd0350d38052..a13d79a3494da2fc565349fc14c921441bbbf807 100644 --- a/src/Grid/tests/grid_dist_id_unit_test.cpp +++ b/src/Grid/tests/grid_dist_id_unit_test.cpp @@ -99,15 +99,22 @@ BOOST_AUTO_TEST_CASE( grid_dist_id_domain_grid_unit_converter3D_test) auto it = g_dist.getDomainIterator(); - auto key = it.get(); + if (it.isNext()) + { + auto key = it.get(); + auto gkey = it.getGKey(key); - auto pos = g_dist.getPos(key); + auto pos = g_dist.getPos(key); - BOOST_REQUIRE_CLOSE(pos.get(0),-0.3f,0.0001); - BOOST_REQUIRE_CLOSE(pos.get(1),-0.3f,0.0001); - BOOST_REQUIRE_CLOSE(pos.get(2),-0.3f,0.0001); + if (gkey.get(0) == 0 && gkey.get(1) == 0 && gkey.get(2) == 0) + { + BOOST_REQUIRE_CLOSE(pos.get(0),-0.3f,0.0001); + BOOST_REQUIRE_CLOSE(pos.get(1),-0.3f,0.0001); + BOOST_REQUIRE_CLOSE(pos.get(2),-0.3f,0.0001); + } + } - bool check = false; + int check = 0; while (it.isNext()) { @@ -119,13 +126,16 @@ BOOST_AUTO_TEST_CASE( grid_dist_id_domain_grid_unit_converter3D_test) pos[1] >= 0.99999 && pos[1] <= 1.00001 && pos[2] >= 0.99999 && pos[2] <= 1.00001) { - check = true; + check = 1; } ++it; } - BOOST_REQUIRE_EQUAL(check,true); + v_cl.max(check); + v_cl.execute(); + + BOOST_REQUIRE_EQUAL(check,1); } }