updated to support ScaFaCoS 1.0.1

This commit is contained in:
Rene Halver
2018-08-08 14:05:28 -06:00
parent 7f5476b408
commit fc93a79fdd
3 changed files with 28 additions and 5 deletions

View File

@ -360,8 +360,8 @@ if(PKG_USER-SCAFACOS)
if(DOWNLOAD_SCAFACOS) if(DOWNLOAD_SCAFACOS)
include(ExternalProject) include(ExternalProject)
ExternalProject_Add(scafacos_build ExternalProject_Add(scafacos_build
URL https://github.com/scafacos/scafacos/releases/download/v1.0.0/scafacos-1.0.0.tar.gz URL https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz
URL_MD5 c75d75d8a4cb9757faddb8b205a2b20f URL_MD5 bd46d74e3296bd8a444d731bb10c1738
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
--disable-doc --disable-doc
--enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m
@ -389,6 +389,7 @@ if(PKG_USER-SCAFACOS)
list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_near.a) list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_near.a)
list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_gridsort.a) list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_gridsort.a)
list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_resort.a) list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_resort.a)
list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_redist.a)
list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_common.a) list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_common.a)
list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_pnfft.a) list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_pnfft.a)
list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_pfft.a) list(APPEND LAMMPS_LINK_LIBS ${SCAFACOS_BUILD_DIR}/lib/libfcs_pfft.a)

View File

@ -29,8 +29,8 @@ make lib-scafacos args="-p $HOME/scafacos" # use existing Scafacos installation
# settings # settings
version = "scafacos-1.0.0" version = "scafacos-1.0.1"
url = "https://github.com/scafacos/scafacos/releases/download/v1.0.0/scafacos-1.0.0.tar.gz" url = "https://github.com/scafacos/scafacos/releases/download/v1.0.1/scafacos-1.0.1.tar.gz"
#url = "https://gigamove.rz.rwth-aachen.de/d/id/CTzyApN76MXMJ6/dd/100" % version #url = "https://gigamove.rz.rwth-aachen.de/d/id/CTzyApN76MXMJ6/dd/100" % version
# print error message or help # print error message or help
@ -147,7 +147,7 @@ if buildflag:
if buildflag: if buildflag:
print("Building Scafacos ...") print("Building Scafacos ...")
cmd = 'cd "%s"; CC=mpicc FC=mpif90 CXX=mpicxx ./configure --prefix="`pwd`/build" --disable-doc --enable-fcs-solvers=fmm,p2nfft,direct,ewald > log.txt; make -j; make install' % homedir cmd = 'cd "%s"; ./configure --prefix="`pwd`/build" --disable-doc --enable-fcs-solvers=fmm,p2nfft,direct,ewald,p3m --with-internal-fftw --with-internal-pfft --with-internal-pnfft CC=mpicc FC=mpif90 CXX=mpicxx F77= > log.txt; make -j; make install' % homedir
txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True) txt = subprocess.check_output(cmd,stderr=subprocess.STDOUT,shell=True)
print(txt.decode('UTF-8')) print(txt.decode('UTF-8'))

View File

@ -150,6 +150,17 @@ void Scafacos::init()
fcs_fmm_set_internal_tuning(fcs,FCS_FMM_HOMOGENOUS_SYSTEM); fcs_fmm_set_internal_tuning(fcs,FCS_FMM_HOMOGENOUS_SYSTEM);
} }
// for the FMM at least one particle is required per process
if (strcmp(method,"fmm") == 0)
{
int empty = (nlocal==0)?1:0;
MPI_Allreduce(MPI_IN_PLACE,&empty,1,MPI_INT,MPI_SUM,world);
if (empty > 0)
fcs_set_redistribute(fcs,1);
else
fcs_set_redistribute(fcs,0);
}
result = fcs_tune(fcs,nlocal,&x[0][0],q); result = fcs_tune(fcs,nlocal,&x[0][0],q);
check_result(result); check_result(result);
// more useful here, since the parameters should be tuned now // more useful here, since the parameters should be tuned now
@ -172,6 +183,17 @@ void Scafacos::compute(int eflag, int vflag)
const double qscale = qqrd2e; const double qscale = qqrd2e;
// for the FMM at least one particle is required per process
if (strcmp(method,"fmm"))
{
int empty = (nlocal==0)?1:0;
MPI_Allreduce(MPI_IN_PLACE,&empty,1,MPI_INT,MPI_SUM,world);
if (empty > 0)
fcs_set_redistribute(fcs,1);
else
fcs_set_redistribute(fcs,0);
}
if (eflag || vflag) ev_setup(eflag,vflag); if (eflag || vflag) ev_setup(eflag,vflag);
else else
{ {