diff --git a/CHANGELOG.md b/CHANGELOG.md index b1d6ca34b985745d3d0730aeac76b0da85af1dd0..e5b701ba6067648d3c9ee47d92b74ab20c729880 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,8 +8,8 @@ All notable changes to this project will be documented in this file. - Full-Support for complex property on vector-dist (Serialization) + example ### Fixed -- Installation in case of MPI preinstalled PETSC fail -- vector_dist with negative domain +- Installation PETSC installation fail in case of preinstalled MPI +- vector_dist with negative domain (Now supported) - Grid 1D fixing ### Changed diff --git a/script/install_PETSC.sh b/script/install_PETSC.sh index cbc08d16fd2297b67f93b0466c4d3d3f71b15152..a420fc28b3d5bcc8f176313af06e637d0c266b0a 100755 --- a/script/install_PETSC.sh +++ b/script/install_PETSC.sh @@ -57,6 +57,9 @@ fi if [ -d "$1/MPI" ]; then configure_trilinos_options="$configure_trilinos_options -D MPI_BASE_DIR=$1/MPI " + mpi_dir="$1/MPI" +else + mpi_dir=$(dirname "$(dirname "$(which mpic++)")") fi ### It seem that the PETSC --download-packege option has several problems and cannot produce @@ -286,9 +289,9 @@ fi tar -xf petsc-lite-3.6.4.tar.gz cd petsc-3.6.4 -echo "./configure --with-cxx-dialect=C++11 --with-mpi-dir=$1/MPI $configure_options --prefix=$1/PETSC" +echo "./configure --with-cxx-dialect=C++11 --with-mpi-dir=$mpi_dir $configure_options --prefix=$1/PETSC" -./configure --with-cxx-dialect=C++11 $petsc_openmp --with-mpi-dir=$1/MPI $configure_options --with-mumps-lib="$MUMPS_extra_lib" --prefix=$1/PETSC +./configure --with-cxx-dialect=C++11 $petsc_openmp --with-mpi-dir=$mpi_dir $configure_options --with-mumps-lib="$MUMPS_extra_lib" --prefix=$1/PETSC make all test make install diff --git a/src/Vector/vector_dist_unit_test.hpp b/src/Vector/vector_dist_unit_test.hpp index e4fa814e66db9cd3ebd12d8992cc2a0cead84051..bd6d9c6a4199013523872f8d52b4edad370c1e63 100644 --- a/src/Vector/vector_dist_unit_test.hpp +++ b/src/Vector/vector_dist_unit_test.hpp @@ -1632,62 +1632,119 @@ BOOST_AUTO_TEST_CASE( vector_dist_ghost_put ) // sync the ghost vd.ghost_get<0>(); - auto NN = vd.getCellList(1.3/k); - float a = 1.0f*k*k; + { + auto NN = vd.getCellList(1.3/k); + float a = 1.0f*k*k; - // run trough all the particles + ghost + // run trough all the particles + ghost - auto it2 = vd.getDomainIterator(); + auto it2 = vd.getDomainIterator(); - while (it2.isNext()) - { - // particle p - auto p = it2.get(); - Point<3,float> xp = vd.getPos(p); + while (it2.isNext()) + { + // particle p + auto p = it2.get(); + Point<3,float> xp = vd.getPos(p); - // Get an iterator over the neighborhood particles of p - auto Np = NN.template getNNIterator<NO_CHECK>(NN.getCell(vd.getPos(p))); + // Get an iterator over the neighborhood particles of p + auto Np = NN.template getNNIterator<NO_CHECK>(NN.getCell(vd.getPos(p))); - // For each neighborhood particle ... - while (Np.isNext()) - { - auto q = Np.get(); - Point<3,float> xq = vd.getPos(q); + // For each neighborhood particle ... + while (Np.isNext()) + { + auto q = Np.get(); + Point<3,float> xq = vd.getPos(q); - float dist = xp.distance(xq); + float dist = xp.distance(xq); - if (dist < 1.0/k) - vd.getProp<0>(q) += a*(-dist*dist+1.0/k/k); + if (dist < 1.0/k) + vd.getProp<0>(q) += a*(-dist*dist+1.0/k/k); - ++Np; + ++Np; + } + + ++it2; } - ++it2; - } + vd.ghost_put<add_,0>(); - vd.ghost_put<add_,0>(); + bool ret = true; + auto it3 = vd.getDomainIterator(); - bool ret = true; - auto it3 = vd.getDomainIterator(); + float constant = vd.getProp<0>(it3.get()); + float eps = 0.001; + + while (it3.isNext()) + { + float constant2 = vd.getProp<0>(it3.get()); + if (fabs(constant - constant2)/constant > eps) + { + std::cout << Point<3,float>(vd.getPos(it3.get())).toString() << " " << constant2 << "/" << constant << " " << v_cl.getProcessUnitID() << std::endl; + ret = false; + break; + } - float constant = vd.getProp<0>(it3.get()); - float eps = 0.001; + ++it3; + } + BOOST_REQUIRE_EQUAL(ret,true); + } - while (it3.isNext()) { - float constant2 = vd.getProp<0>(it3.get()); - if (fabs(constant - constant2)/constant > eps) + auto NN = vd.getCellList(1.3/k); + float a = 1.0f*k*k; + + // run trough all the particles + ghost + + auto it2 = vd.getDomainIterator(); + + while (it2.isNext()) { - std::cout << Point<3,float>(vd.getPos(it3.get())).toString() << " " << constant2 << "/" << constant << " " << v_cl.getProcessUnitID() << std::endl; - ret = false; - break; + // particle p + auto p = it2.get(); + Point<3,float> xp = vd.getPos(p); + + // Get an iterator over the neighborhood particles of p + auto Np = NN.template getNNIterator<NO_CHECK>(NN.getCell(vd.getPos(p))); + + // For each neighborhood particle ... + while (Np.isNext()) + { + auto q = Np.get(); + Point<3,float> xq = vd.getPos(q); + + float dist = xp.distance(xq); + + if (dist < 1.0/k) + vd.getProp<0>(q) += a*(-dist*dist+1.0/k/k); + + ++Np; + } + + ++it2; } - ++it3; - } + vd.ghost_put<add_,0>(); + bool ret = true; + auto it3 = vd.getDomainIterator(); - BOOST_REQUIRE_EQUAL(ret,true); + float constant = vd.getProp<0>(it3.get()); + float eps = 0.001; + + while (it3.isNext()) + { + float constant2 = vd.getProp<0>(it3.get()); + if (fabs(constant - constant2)/constant > eps) + { + std::cout << Point<3,float>(vd.getPos(it3.get())).toString() << " " << constant2 << "/" << constant << " " << v_cl.getProcessUnitID() << std::endl; + ret = false; + break; + } + + ++it3; + } + BOOST_REQUIRE_EQUAL(ret,true); + } } }