diff options
-rw-r--r-- | sci-physics/abinit/ChangeLog | 9 | ||||
-rw-r--r-- | sci-physics/abinit/Manifest | 1 | ||||
-rw-r--r-- | sci-physics/abinit/abinit-7.6.4.ebuild | 388 | ||||
-rw-r--r-- | sci-physics/abinit/metadata.xml | 23 |
4 files changed, 416 insertions, 5 deletions
diff --git a/sci-physics/abinit/ChangeLog b/sci-physics/abinit/ChangeLog index 6baa3782e..11dd22a11 100644 --- a/sci-physics/abinit/ChangeLog +++ b/sci-physics/abinit/ChangeLog @@ -1,7 +1,14 @@ # ChangeLog for sci-physics/abinit -# Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2 +# Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2 # $Header: $ +*abinit-7.6.4 (27 Jun 2014) + + 27 Jun 2014; Honza Macháček <Hloupy.Honza@centrum.cz> +abinit-7.6.4.ebuild, + metadata.xml: + Version bumped to 7.6.4. ScaLAPACK support, and use of the MPI implementation + of sci-libs/fftw added. Minor attempts on enhancements and cleanup. + 10 Oct 2013; Honza Macháček <Hloupy.Honza@centrum.cz> abinit-7.4.2.ebuild, +files/7.4.2-cuda_link_stdc++.patch: Added a patch to link libstdc++ with the C++ CUDA objects. diff --git a/sci-physics/abinit/Manifest b/sci-physics/abinit/Manifest index fe8168fdc..00f95861e 100644 --- a/sci-physics/abinit/Manifest +++ b/sci-physics/abinit/Manifest @@ -1 +1,2 @@ DIST abinit-7.4.2.tar.gz 69150549 SHA256 26fcc60e18071b7579843f43cbe44e79db50466dbaae8b862ad96a8986733f63 SHA512 55132cfbfb26bf22ae486ada7e721188bd436a48299da3a386928776f6d0652d8a19a5e5b70261b84afc6cb6b058fe711171fa09aff637bdb2da11e8df032543 WHIRLPOOL add34b50d2c6843064254a3caffbfa4d9fef644ae98513a1b7681ffb8f2c0f4d31b5b995920a97fa656d82a38aeec313f98e1f91c06166ea83ed6ba87192292d +DIST abinit-7.6.4.tar.gz 71821245 SHA256 1fa532ca156d2fad1bf3af86edfc8b6695917c8cbcf25084c7bf9b1749812ff7 SHA512 b86dcc26d8e38a8d0f1b4a470dc0bc2bd5363f25dbc1bd954e83ffe8694ce23b85ddf3d411c4b3121d833f65c4d55899cf02054b27e060d2465407a6c110602a WHIRLPOOL b1580f3e8c99148632f0cacd566a3e958c0e7a9b14ec7b1bb20c930a5131491401938d29ab41944411ae82676753bdf0f2294a137aaa267226cc2ac3db43c2fd diff --git a/sci-physics/abinit/abinit-7.6.4.ebuild b/sci-physics/abinit/abinit-7.6.4.ebuild new file mode 100644 index 000000000..6947f110c --- /dev/null +++ b/sci-physics/abinit/abinit-7.6.4.ebuild @@ -0,0 +1,388 @@ +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=5 + +PYTHON_COMPAT=( python{2_5,2_6,2_7} ) + +inherit autotools-utils eutils flag-o-matic fortran-2 multilib python-single-r1 toolchain-funcs + +DESCRIPTION="Find total energy, charge density and electronic structure using density functional theory" +HOMEPAGE="http://www.abinit.org/" +SRC_URI="http://ftp.abinit.org/${P}.tar.gz" + +LICENSE="GPL-2" +SLOT="0" +KEYWORDS="~amd64 ~x86" +IUSE="atompaw bigdft cuda cuda-double -debug +etsf_io +fftw fftw-mpi +fftw-threads +fox gsl +hdf5 levmar -libabinit libxc -lotf mpi +netcdf openmp python scalapack scripts -test +threads wannier" + +REQUIRED_USE="${PYTHON_REQUIRED_USE}" +#" scalapack? ( !bigdft )" + +RDEPEND="virtual/blas + virtual/lapack + ${PYTHON_DEPS} + dev-python/numpy + atompaw? ( >=sci-physics/atompaw-3.0.1.9-r1[libxc?] ) + bigdft? ( ~sci-libs/bigdft-abi-1.0.4[scalapack?] ) + cuda? ( dev-util/nvidia-cuda-sdk ) + etsf_io? ( >=sci-libs/etsf_io-1.0.3-r2 ) + fftw? ( + sci-libs/fftw:3.0 + fftw-threads? ( + openmp? ( sci-libs/fftw:3.0[openmp] ) + !openmp? ( sci-libs/fftw:3.0[threads] ) + ) + fftw-mpi? ( + sci-libs/fftw:3.0[mpi] + openmp? ( sci-libs/fftw:3.0[openmp] ) + !openmp? ( sci-libs/fftw:3.0[threads] ) + ) + ) + fox? ( >=sci-libs/fox-4.1.2-r2[sax] ) + gsl? ( sci-libs/gsl ) + hdf5? ( sci-libs/hdf5[fortran] ) + levmar? ( sci-libs/levmar ) + libxc? ( =sci-libs/libxc-2.0*[fortran] ) + netcdf? ( + sci-libs/netcdf[hdf5?] + || ( + sci-libs/netcdf[fortran] + sci-libs/netcdf-fortran + ) + ) + mpi? ( virtual/mpi ) + scalapack? ( virtual/scalapack ) + scripts? ( dev-python/PyQt4 ) + wannier? ( >=sci-libs/wannier90-1.2-r1 )" +DEPEND="${RDEPEND} + virtual/pkgconfig + dev-perl/Text-Markdown" + +S=${WORKDIR}/${P%[a-z]} + +DOCS=( AUTHORS ChangeLog COPYING INSTALL KNOWN_PROBLEMS NEWS PACKAGING + README README.ChangeLog README.GPU README.xlf RELNOTES THANKS ) + +FORTRAN_STANDARD=90 + +pkg_setup() { + # Doesn't compile with gcc-4.0, only >=4.1 + if [[ $(tc-getFC) == *gfortran ]]; then + if [[ $(gcc-major-version) -eq 4 ]] \ + && [[ $(gcc-minor-version) -lt 1 ]]; then + die "Requires gcc-4.1 or newer" + fi + fi + + # fortran-2.eclass does not handle mpi wrappers + if use mpi; then + export FC="mpif90" + export F77="mpif77" + export CC="mpicc" + export CXX="mpic++" + else + tc-export FC F77 CC CXX + fi + + # Preprocesor macross can make some lines really long + append-fflags -ffree-line-length-none + + # This should be correct: + # It is gcc-centric because toolchain-funcs.eclass is gcc-centric. + # Should a bug be filed against toolchain-funcs.eclass? + # if use openmp; then + # tc-has-openmp || \ + # die "Please select an openmp capable compiler like gcc[openmp]" + # fi + # + # This is completely wrong: + # If other compilers than Gnu Compiler Collection can be used by portage, + # their support of OpenMP should be properly tested. This code limits the test + # to gcc, and blindly supposes that other compilers do support OpenMP. + # if use openmp && [[ $(tc-getCC)$ == *gcc* ]] && ! tc-has-openmp; then + # die "Please select an openmp capable compiler like gcc[openmp]" + # fi + # + # Luckily Abinit is a fortran package. + # fortran-2.eclass has its own test for OpenMP support, + # more general than toolchain-funcs.eclass + # The test itself proceeds inside fortran-2_pkg_setup + if use openmp; then FORTRAN_NEED_OPENMP=1; fi + + fortran-2_pkg_setup + + if use openmp; then + # based on _fortran-has-openmp() of fortran-2.eclass + local code=ebuild-openmp-flags + local ret + local openmp + + pushd "${T}" + cat <<- EOF > "${code}.c" + # include <omp.h> + main () { + int nthreads; + nthreads=omp_get_num_threads(); + } + EOF + + for openmp in -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp; do + ${CC} ${openmp} "${code}.c" -o "${code}.o" &>> "${T}"/_c_compile_test.log + ret=$? + (( ${ret} )) || break + done + + rm -f "${code}.*" + popd + + if (( ${ret} )); then + die "Please switch to an openmp compatible C compiler" + else + export CC="${CC} ${openmp}" + export CXX="${CXX} ${openmp}" + fi + + pushd "${T}" + cat <<- EOF > "${code}.f" + 1 call omp_get_num_threads + 2 end + EOF + + for openmp in -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp; do + ${FC} ${openmp} "${code}.f" -o "${code}.o" &>> "${T}"/_f_compile_test.log + ret=$? + (( ${ret} )) || break + done + + rm -f "${code}.*" + popd + + if (( ${ret} )); then + die "Please switch to an openmp compatible fortran compiler." + else + export FC="${FC} ${openmp}" + export F77="${F77} ${openmp}" + fi + fi + + # Sort out some USE options + if use fftw-threads && ! use fftw; then + ewarn "fftw-threads set but fftw not used, ignored." + fi + if use fftw-mpi; then + if ! use fftw; then + ewarn "fftw-mpi set but fftw not used, ignored." + elif ! use mpi; then + ewarn "fftw-mpi set but mpi not used, ignored." + elif ! use fftw-threads; then + ewarn "fftw-mpi set but fftw-threads not. Will use a threaded fftw nevertheless, required with MPI." + fi + fi + if use cuda-double && ! use cuda; then + ewarn "cuda-double set but cuda not used, ignored" + fi + + python-single-r1_pkg_setup + +} + +src_prepare() { + epatch \ + "${FILESDIR}"/6.2.2-change-default-directories.patch \ + "${FILESDIR}"/6.12.1-autoconf.patch \ + "${FILESDIR}"/6.12.1-xmalloc.patch \ + "${FILESDIR}"/7.6.3-libabinit_options.patch \ + "${FILESDIR}"/7.4.2-levmar_diag_scaling.patch \ + "${FILESDIR}"/7.4.2-syntax.patch \ + "${FILESDIR}"/7.4.2-cuda_link_stdc++.patch + eautoreconf + sed -e"s/\(grep '\^-\)\(\[LloW\]\)'/\1\\\(\2\\\|pthread\\\)'/g" -i configure + python_fix_shebang "${S}" +} + +src_configure() { + local modules="$(FoX-config --sax --fcflags)" + local FoX_libs="$(FoX-config --sax --libs)" + + local trio_flavor="" + use etsf_io && trio_flavor="${trio_flavor}+etsf_io" + use fox && trio_flavor="${trio_flavor}+fox" + use netcdf && trio_flavor="${trio_flavor}+netcdf" + test "no${trio_flavor}" = "no" && trio_flavor="none" + + local netcdff_libs="-lnetcdff" + use hdf5 && netcdff_libs="${netcdff_libs} -lhdf5_fortran" + +# local linalg_flavor="atlas" + local linalg_flavor="custom" + local mylapack="lapack" + use scalapack && mylapack="scalapack" && linalg_flavor="${linalg_flavor}+scalapack" + + local dft_flavor="" + use atompaw && dft_flavor="${dft_flavor}+atompaw" + use bigdft && dft_flavor="${dft_flavor}+bigdft" + use libxc && dft_flavor="${dft_flavor}+libxc" + use wannier && dft_flavor="${dft_flavor}+wannier90" + test "no${dft_flavor}" = "no" && dft_flavor="none" + + local fft_flavor="fftw3" + local fft_libs="" + # The fftw threads support is protected by black magick. + # Anybody removes it, dies. + # New USE flag "fftw-threads" was added to control usage + # of the threaded fftw variant. Since fftw-3.3 has expanded + # the paralel options by MPI and OpenMP support, analogical + # USE flags should be added to select them in future; + # unusable with previous FFTW versions, they are postponed + # for now. + if use mpi && use fftw-mpi; then + fft_flavor="fftw3-mpi" + fft_libs+="$($(tc-getPKG_CONFIG) --libs fftw3_mpi)" + fft_libs+="$($(tc-getPKG_CONFIG) --libs fftw3f_mpi)" + if use openmp; then + fft_libs+="$($(tc-getPKG_CONFIG) --libs fftw3_omp)" + fft_libs+="$($(tc-getPKG_CONFIG) --libs fftw3f_omp)" + else + fft_libs+="$($(tc-getPKG_CONFIG) --libs fftw3_threads)" + fft_libs+="$($(tc-getPKG_CONFIG) --libs fftw3f_threads)" + fi + elif use fftw-threads; then + fft_flavor="fftw3-threads" + if use openmp; then + fft_libs+="$($(tc-getPKG_CONFIG) --libs fftw3_omp)" + fft_libs+="$($(tc-getPKG_CONFIG) --libs fftw3f_omp)" + else + fft_libs+="$($(tc-getPKG_CONFIG) --libs fftw3_threads)" + fft_libs+="$($(tc-getPKG_CONFIG) --libs fftw3f_threads)" + fi + else + fft_libs+="$($(tc-getPKG_CONFIG) --libs fftw3)" + fft_libs+="$($(tc-getPKG_CONFIG) --libs fftw3f)" + fi + + local gpu_flavor="none" + if use cuda; then + gpu_flavor="cuda-single" + if use cuda-double; then + gpu_flavor="cuda-double" + fi + fi + + local myeconfargs=( + --enable-clib + --enable-exports + --enable-pkg-check + $(use_enable debug debug enhanced) + $(use_enable mpi) + $(use_enable mpi mpi-io) + $(use_enable openmp) + $(use_enable lotf) + $(use_enable cuda gpu) + "$(use cuda && echo "--with-gpu-flavor=${gpu_flavor}")" + "$(use cuda && echo "--with-gpu-prefix=/opt/cuda/")" + "$(use gsl && echo "--with-math-flavor=gsl")" + "$(use gsl && echo "--with-math-incs=$($(tc-getPKG_CONFIG) --cflags gsl)")" + "$(use gsl && echo "--with-math-libs=$($(tc-getPKG_CONFIG) --libs gsl)")" + "$(use levmar && echo "--with-algo-flavor=levmar")" + "$(use levmar && echo "--with-algo-libs=-llevmar")" + --with-linalg-flavor="${linalg_flavor}" + --with-linalg-libs="$($(tc-getPKG_CONFIG) --libs "${mylapack}")" + --with-trio-flavor="${trio_flavor}" + "$(use netcdf && echo "--with-netcdf-incs=-I/usr/include")" + "$(use netcdf && echo "--with-netcdf-libs=$($(tc-getPKG_CONFIG) --libs netcdf) ${netcdff_libs}")" + "$(use fox && echo "--with-fox-incs=${modules}")" + "$(use fox && echo "--with-fox-libs=${FoX_libs}")" + "$(use etsf_io && echo "--with-etsf-io-incs=${modules}")" + "$(use etsf_io && echo "--with-etsf-io-libs=-letsf_io -letsf_io_utils -letsf_io_low_level")" + --with-dft-flavor="${dft_flavor}" + "$(use atompaw && echo "--with-atompaw-incs=${modules}")" + "$(use atompaw && echo "--with-atompaw-libs=-latompaw")" + "$(use bigdft && echo "--with-bigdft-incs=${modules}")" + "$(use bigdft && echo "--with-bigdft-libs=$($(tc-getPKG_CONFIG) --libs bigdft)")" + "$(use libxc && echo "--with-libxc-incs=${modules}")" + "$(use libxc && echo "--with-libxc-libs=$($(tc-getPKG_CONFIG) --libs libxc)")" + "$(use wannier && echo "--with-wannier90-bins=/usr/bin")" + "$(use wannier && echo "--with-wannier90-incs=${modules}")" + "$(use wannier && echo "--with-wannier90-libs=-lwannier $($(tc-getPKG_CONFIG) --libs blas lapack)")" + "$(use fftw && echo "--with-fft-flavor=${fft_flavor}")" + "$(use fftw && echo "--with-fft-incs=-I/usr/include")" + "$(use fftw && echo "--with-fft-libs=${fft_libs}")" + --with-timer-flavor="abinit" + LD="$(tc-getLD)" + FCFLAGS="${FCFLAGS:- ${FFLAGS:- -O2}} ${modules} -I/usr/include" + ) + + MARKDOWN=Markdown.pl autotools-utils_src_configure +} + +src_compile() { + autotools-utils_src_compile + + # Apparently libabinit.a is not built by default + # Used by BigDFT. Should probably be built separately, + # as a package of its own: BigDFT used by Abinit. + # Does libabinit.a depend on BigDFT, if used? + # Can Abinit use external libabinit.a? + use libabinit && autotools-utils_src_compile libabinit.a + + sed -i -e's/libatlas/lapack/' "${AUTOTOOLS_BUILD_DIR}"/config.pc +} + +src_test() { + einfo "The complete tests take quite a while, easily several hours or even days." + # autotools-utils_src_test expanded and modified + _check_build_dir + pushd "${BUILD_DIR}" > /dev/null || die + + einfo "Running the internal tests." + emake tests_in || die 'The internal tests failed.' + + einfo "Running the thorough tests. Be patient, please." + "${S}"/tests/runtests.py || ewarn "The package has not passed the thorough tests." + + popd > /dev/null || die +} + +src_install() { + #autotools-utils_src_install() expanded + _check_build_dir + pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null + emake DESTDIR="${D}" install || die "make install failed" + + use libabinit && dolib libabinit.a + + if use test; then + for dc in results.tar.gz results.txt suite_report.html; do + test -e Test_suite/"${dc}" && dodoc Test_suite/"${dc}" || ewarn "Copying tests results ${dc} failed" + done + fi + + popd > /dev/null + + # XXX: support installing them from builddir as well!!! + if [[ ${DOCS} ]]; then + dodoc "${DOCS[@]}" || die "dodoc failed" + else + local f + # same list as in PMS + for f in README* ChangeLog AUTHORS NEWS TODO CHANGES \ + THANKS BUGS FAQ CREDITS CHANGELOG; do + if [[ -s ${f} ]]; then + dodoc "${f}" || die "(default) dodoc ${f} failed" + fi + done + fi + if [[ ${HTML_DOCS} ]]; then + dohtml -r "${HTML_DOCS[@]}" || die "dohtml failed" + fi + + if use scripts; then + insinto /usr/share/"${P}" + doins -r scripts + fi + + # Remove libtool files and unnecessary static libs + prune_libtool_files +} diff --git a/sci-physics/abinit/metadata.xml b/sci-physics/abinit/metadata.xml index 192c6f3cb..eb0c4e651 100644 --- a/sci-physics/abinit/metadata.xml +++ b/sci-physics/abinit/metadata.xml @@ -36,7 +36,12 @@ ABINIT code, different utility programs are provided. </use> <use> <flag name="fftw-threads"> - Use the threaded version of <pkg>sci-libs/fftw</pkg> + Use the threaded (openMP or pthreads) version of <pkg>sci-libs/fftw</pkg> + </flag> + </use> + <use> + <flag name="fftw-mpi"> + Use the MPI version of <pkg>sci-libs/fftw</pkg> (always with either openMP or pthreads too) </flag> </use> <use> @@ -45,7 +50,7 @@ ABINIT code, different utility programs are provided. <use> <flag name="gui"> Build the abinit GUI (requires java); - since 7.4.x a separate package + since 7.4.0 a separate package </flag> </use> <use> @@ -67,12 +72,22 @@ ABINIT code, different utility programs are provided. <flag name="lotf">Activate the Learn on The Fly method (LOTF) for Molecular Dynamics</flag> </use> <use> + <flag name="scalapack"> + Use ScaLAPACK, a subset of LAPACK routines redesigned for heterogenous computing + </flag> + </use> + <use> <flag name="scripts">Install helper scripts, mostly Python</flag> </use> <use> - <flag name="vdwxc">Activate van der Waals exchange-correlation correction</flag> + <flag name="vdwxc"> + Activate van der Waals exchange-correlation correction. Since 7.4.0 + no longer optional + </flag> </use> <use> - <flag name="wannier">Enable support for wannier90, a maximally localized Wannier functions (MLWFs) calculator</flag> + <flag name="wannier"> + Enable support for wannier90, a maximally localized Wannier functions (MLWFs) calculator + </flag> </use> </pkgmetadata> |