From b63f90511ffa380ddb38620953948d2c264b5974 Mon Sep 17 00:00:00 2001 From: Honza Macháček Date: Thu, 19 Sep 2013 13:07:54 +0200 Subject: sci-physics/abinit updated to 7.4.2, the new way of testing adopted. Use of atompaw, bigdft, libxc, and wannier90 made optional, driven by USE flags (atompaw, bigdft, libxc, wannier). USE flag levmar for the new optional Levenberg-Marquardt least-squares algorithm support added. Ebuild cleaned up a bit. Package-Manager: portage-2.2.1 --- sci-physics/abinit/ChangeLog | 10 + sci-physics/abinit/Manifest | 2 +- sci-physics/abinit/abinit-7.2.2.ebuild | 381 --------------------- sci-physics/abinit/abinit-7.4.2.ebuild | 356 +++++++++++++++++++ .../abinit/files/7.4.2-levmar_diag_scaling.patch | 21 ++ sci-physics/abinit/files/7.4.2-syntax.patch | 21 ++ sci-physics/abinit/metadata.xml | 31 +- 7 files changed, 438 insertions(+), 384 deletions(-) delete mode 100644 sci-physics/abinit/abinit-7.2.2.ebuild create mode 100644 sci-physics/abinit/abinit-7.4.2.ebuild create mode 100644 sci-physics/abinit/files/7.4.2-levmar_diag_scaling.patch create mode 100644 sci-physics/abinit/files/7.4.2-syntax.patch diff --git a/sci-physics/abinit/ChangeLog b/sci-physics/abinit/ChangeLog index a46d8e53a..0e284ae3e 100644 --- a/sci-physics/abinit/ChangeLog +++ b/sci-physics/abinit/ChangeLog @@ -2,6 +2,16 @@ # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2 # $Header: $ +*abinit-7.4.2 (19 Sep 2013) + + 19 Sep 2013; Honza Macháček -abinit-7.2.2.ebuild, + +abinit-7.4.2.ebuild, +files/7.4.2-levmar_diag_scaling.patch, + +files/7.4.2-syntax.patch, metadata.xml: + Updated to 7.4.2, the new way of testing adopted. Use of atompaw, bigdft, + libxc, and wannier90 made optional, driven by USE flags (atompaw, bigdft, + libxc, wannier). USE flag levmar for the new optional Levenberg-Marquardt + least-squares algorithm support added. Ebuild cleaned up a bit. + 20 Jun 2013; Honza Macháček +files/6.12.3-gui-makefiles.tbz: files/6.12.3-gui-makefiles.tbz put back, its deletion was a mistake. diff --git a/sci-physics/abinit/Manifest b/sci-physics/abinit/Manifest index f000cdcd5..fe8168fdc 100644 --- a/sci-physics/abinit/Manifest +++ b/sci-physics/abinit/Manifest @@ -1 +1 @@ -DIST abinit-7.2.2.tar.gz 63683267 SHA256 96f83e3af63e993cb886d9d6cd1c4fac04d50b5e460d5620330441050a909533 SHA512 fbc4898ae4625e12ea22d8f2da63e037eb947320fedf800bd40bd7e0015633ce54b7cb224cee3fc931d015774c51df5f8594ebe26a409cb0325e7a3ab0bf5e4a WHIRLPOOL a149d7ecea9b2b19b94b4e873f1924ce5fe221e037c642d6428727b552dc0c428b288551dda708286995da26080171c385a3ef3ad3766e065073139d4ef0f2e8 +DIST abinit-7.4.2.tar.gz 69150549 SHA256 26fcc60e18071b7579843f43cbe44e79db50466dbaae8b862ad96a8986733f63 SHA512 55132cfbfb26bf22ae486ada7e721188bd436a48299da3a386928776f6d0652d8a19a5e5b70261b84afc6cb6b058fe711171fa09aff637bdb2da11e8df032543 WHIRLPOOL add34b50d2c6843064254a3caffbfa4d9fef644ae98513a1b7681ffb8f2c0f4d31b5b995920a97fa656d82a38aeec313f98e1f91c06166ea83ed6ba87192292d diff --git a/sci-physics/abinit/abinit-7.2.2.ebuild b/sci-physics/abinit/abinit-7.2.2.ebuild deleted file mode 100644 index a420f51cf..000000000 --- a/sci-physics/abinit/abinit-7.2.2.ebuild +++ /dev/null @@ -1,381 +0,0 @@ -# Copyright 1999-2013 Gentoo Foundation -# Distributed under the terms of the GNU General Public License v2 -# $Header: $ - -EAPI=5 - -inherit autotools-utils eutils flag-o-matic fortran-2 multilib 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="cuda cuda-double -debug +etsf_io +fftw +fftw-threads +fox gsl gui +hdf5 libabinit mpi +netcdf openmp python -test +threads -vdwxc" - -RDEPEND="~sci-libs/bigdft-abi-1.0.4 - >=sci-libs/libxc-1.2.0-r1[fortran] - >=sci-physics/atompaw-3.0.1.9-r1[libxc] - etsf_io? ( >=sci-libs/etsf_io-1.0.3-r2 ) - fox? ( >=sci-libs/fox-4.1.2-r2[sax] ) - netcdf? ( - || ( - sci-libs/netcdf[fortran] - sci-libs/netcdf-fortran - ) - hdf5? ( - sci-libs/netcdf[hdf5] - ) - ) - hdf5? ( sci-libs/hdf5[fortran] ) - >=sci-libs/wannier90-1.2-r1 - virtual/blas - virtual/lapack - gsl? ( sci-libs/gsl ) - fftw? ( - sci-libs/fftw:3.0 - fftw-threads? ( sci-libs/fftw:3.0[threads] ) - ) - mpi? ( virtual/mpi ) - python? ( dev-python/numpy ) - cuda? ( dev-util/nvidia-cuda-sdk )" -DEPEND="${RDEPEND} - virtual/pkgconfig - gui? ( >=virtual/jdk-1.6.0 - app-arch/sharutils - sys-apps/gawk ) - dev-perl/Text-Markdown" - -S=${WORKDIR}/${P%[a-z]} - -lat1loc="" - -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 - - # Sort out some USE options - if use fftw-threads && ! use fftw; then - ewarn "fftw-threads set but fftw not used, ignored" - fi - if use cuda-double && ! use cuda; then - ewarn "cuda-double set but cuda not used, ignored" - fi - if use gui; then - lat1loc="$(locale |awk '/LC_CTYPE="(.*)"/{sub("LC_CTYPE=\"",""); sub("\" *$", ""); print}')" - if locale charmap |grep -i "\"; then - einfo "Good, locale compatible with the GUI build" - else - ewarn "The locale ${lat1loc} incompatible with the GUI build" - if latloc=`locale -a| grep -i "\"`; then - if echo "${latloc}" |grep -q "^fr"; then - lat1loc="$(echo "${latloc}" | grep -im1 "^fr")" - else - lat1loc="$(echo "${latloc}" | grep -im1 "iso88591")" - fi - einfo "Will use ${lat1loc} to build the GUI" - else - ewarn "No ISO-8859-1 nor ISO-8859-15 locale available, the GUI build may crash" - fi - fi - fi -} - -src_unpack() { - default_src_unpack - if use gui; then - pushd "${S}" > /dev/null - tar -xjf "${FILESDIR}"/6.12.3-gui-makefiles.tbz - popd > /dev/null - fi - -} - -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.0.4-test_dirs.patch - eautoreconf - sed -e"s/\(grep '\^-\)\(\[LloW\]\)'/\1\\\(\2\\\|pthread\\\)'/g" -i configure - - if use gui; then - pushd gui > /dev/null - eautoreconf - popd > /dev/null - fi -} - -src_configure() { - local openmp="" - if use openmp; then - # based on _fortran-has-openmp() of fortran-2.eclass - local fcode=ebuild-openmp-flags.f - local _fc=$(tc-getFC) - - cat <<- EOF > "${fcode}" - 1 call omp_get_num_threads - 2 end - EOF - - for openmp in -fopenmp -xopenmp -openmp -mp -omp -qsmp=omp; do - ${_fc} ${openmp} "${fcode}" -o "${fcode}.x" && break - done - - rm -f "${fcode}.*" - fi - local libs="" - local modules="$(FoX-config --sax --fcflags)" - local FoX_libs="${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 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 fftw-threads; then - fft_flavor="fftw3-threads" - fft_libs="${fft_libs} $($(tc-getPKG_CONFIG) --libs fftw3_threads)" - fft_libs="${fft_libs} $($(tc-getPKG_CONFIG) --libs fftw3f_threads)" - else - fft_libs="${fft_libs} $($(tc-getPKG_CONFIG) --libs fftw3)" - fft_libs="${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 - $(use_enable gui) - $(use_enable debug debug enhanced) - $(use_enable mpi) - $(use_enable mpi mpi-io) - $(use_enable openmp) - $(use_enable vdwxc) - $(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)")" - --with-linalg-flavor="atlas" - --with-linalg-libs="$($(tc-getPKG_CONFIG) --libs lapack)" - --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=${libs} -letsf_io -letsf_io_utils -letsf_io_low_level")" - --with-dft-flavor="libxc+bigdft+atompaw+wannier90" - --with-libxc-incs="${modules}" - --with-libxc-libs="${libs} -lxc" - --with-bigdft-incs="${modules}" - --with-bigdft-libs="$($(tc-getPKG_CONFIG) --libs bigdft)" - --with-atompaw-incs="${modules}" - --with-atompaw-libs="${libs} -latompaw" - --with-wannier90-bins="/usr/bin" - --with-wannier90-incs="${modules}" - --with-wannier90-libs="${libs} -lwannier $($(tc-getPKG_CONFIG) --libs 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}} ${openmp} ${modules} -I/usr/include" - ) - - MARKDOWN=Markdown.pl autotools-utils_src_configure - - if use gui; then - # autotools-utils_src_configure() part expanded - _check_build_dir - pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null - mkdir -p gui - cd gui - ECONF_SOURCE="${S}"/gui econf UUDECODE="uudecode" - popd > /dev/null - fi -} - -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 - - if use gui; then - #autotools-utils_src_compile() expanded - # _check_build_dir has already been called - pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null - # now what the function cannot be called to do - cd gui - LC_CTYPE="${lat1loc}" emake || die "Making GUI failed" - popd > /dev/null - fi - - sed -i -e's/libatlas/lapack/' "${AUTOTOOLS_BUILD_DIR}"/config.pc -} - -src_test() { - einfo "The tests take quite a while, easily several hours" - # autotools-utils_src_test() expanded - _check_build_dir - pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null - # again something the autotools-utils function cannot be called to do - # now quite a lot of work actually - cd tests - emake tests_acc || ewarn "Accuracy tests failed" - emake tests_paw || ewarn "PAW tests failed" - emake tests_gw || ewarn "GW tests failed" - emake tests_gw_paw || ewarn "GW-PAW tests failed" - emake tests_bs || ewarn "BSE tests failed" - emake tests_tddft || ewarn "TDDFT tests failed" - emake tests_eph || ewarn "Elphon tests failed" - - local REPORT - for REPORT in $(find . -name report); do - REPORT=${REPORT#*/} - elog "Parameters and unusual results for ${REPORT%%/*} tests" - echo "Parameters and unusual results for ${REPORT%%/*} tests" >>tests_summary.txt - while read line; do - elog "${line}" - echo "${line}" >>tests_summary.txt - done \ - < <(grep -v -e succeeded -e passed ${REPORT}) - done - - local testdir - find . -name "tmp-test*" -print | \ - while read testdir; do - if [ -e summary_of_tests.tar ]; then - tar rvf summary_of_tests.tar ${testdir} - else tar cvf summary_of_tests.tar ${testdir} - fi - done - popd > /dev/null - - elog "The full test results will be installed as summary_of_tests.tar.bz2." - elog "Also a concise report tests_summary.txt is installed." -} - -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 gui; then - pushd gui > /dev/null - emake DESTDIR="${D}" install || die "The GUI install failed" - popd > /dev/null - fi - - if use test; then - for dc in tests_summary.txt summary_of_tests.tar; do - test -e tests/"${dc}" && dodoc tests/"${dc}" || ewarn "Copying tests results 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 - - # Remove libtool files and unnecessary static libs - prune_libtool_files -} - -pkg_postinst() { - if use test; then - elog "The full test results will be installed as summary_tests.tar.bz2." - elog "Also a concise report tests_summary.txt is installed." - fi -} diff --git a/sci-physics/abinit/abinit-7.4.2.ebuild b/sci-physics/abinit/abinit-7.4.2.ebuild new file mode 100644 index 000000000..41441a68f --- /dev/null +++ b/sci-physics/abinit/abinit-7.4.2.ebuild @@ -0,0 +1,356 @@ +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +EAPI=5 + +PYTHON_COMPAT=( python2_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-threads +fox gsl +hdf5 levmar -libabinit libxc -lotf mpi +netcdf openmp python scripts -test +threads -vdwxc wannier" + +REQUIRED_USE="scripts? ( ${PYTHON_REQUIRED_USE} ) + test? ( ${PYTHON_REQUIRED_USE} )" + +RDEPEND="virtual/blas + virtual/lapack + atompaw? ( >=sci-physics/atompaw-3.0.1.9-r1[libxc?] ) + bigdft? ( ~sci-libs/bigdft-abi-1.0.4 ) + cuda? ( dev-util/nvidia-cuda-sdk ) + etsf_io? ( >=sci-libs/etsf_io-1.0.3-r2 ) + fftw? ( + sci-libs/fftw:3.0 + fftw-threads? ( 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.1[fortran] ) + netcdf? ( + sci-libs/netcdf[hdf5?] + || ( + sci-libs/netcdf[fortran] + sci-libs/netcdf-fortran + ) + ) + mpi? ( virtual/mpi ) + python? ( ${PYTHON_DEPS} + dev-python/numpy ) + scripts? ( ${PYTHON_DEPS} + dev-python/numpy + dev-python/PyQt4 ) + wannier? ( >=sci-libs/wannier90-1.2-r1 )" +DEPEND="${RDEPEND} + virtual/pkgconfig + dev-perl/Text-Markdown + test? ( ${PYTHON_DEPS} )" + +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 + 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}" + 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}" + 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 cuda-double && ! use cuda; then + ewarn "cuda-double set but cuda not used, ignored" + fi + + if use scripts || use test; then + python-single-r1_pkg_setup + fi + +} + +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.4.2-levmar_diag_scaling.patch \ + "${FILESDIR}"/7.4.2-syntax.patch + eautoreconf + sed -e"s/\(grep '\^-\)\(\[LloW\]\)'/\1\\\(\2\\\|pthread\\\)'/g" -i configure +} + +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 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 fftw-threads; then + fft_flavor="fftw3-threads" + fft_libs="${fft_libs} $($(tc-getPKG_CONFIG) --libs fftw3_threads)" + fft_libs="${fft_libs} $($(tc-getPKG_CONFIG) --libs fftw3f_threads)" + else + fft_libs="${fft_libs} $($(tc-getPKG_CONFIG) --libs fftw3)" + fft_libs="${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 + $(use_enable debug debug enhanced) + $(use_enable mpi) + $(use_enable mpi mpi-io) + $(use_enable openmp) + $(use_enable vdwxc) + $(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="atlas" + --with-linalg-libs="$($(tc-getPKG_CONFIG) --libs lapack)" + --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=-lxc")" + "$(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 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 tests take quite a while, easily several hours or even days" + # autotools-utils_src_test() expanded + _check_build_dir + pushd "${AUTOTOOLS_BUILD_DIR}" > /dev/null + # again something the autotools-utils function cannot be called to do + # now quite a lot of work actually + mkdir -p tests + + python2 "${S}"/tests/runtests.py -w tests/ -b "${AUTOTOOLS_BUILD_DIR}" + + popd > /dev/null + +} + +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 tests/"${dc}" && dodoc tests/"${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 +} + +pkg_postinst() { + if use test; then + elog "The full test results will be installed as summary_tests.tar.bz2." + elog "Also a concise report tests_summary.txt is installed." + fi +} diff --git a/sci-physics/abinit/files/7.4.2-levmar_diag_scaling.patch b/sci-physics/abinit/files/7.4.2-levmar_diag_scaling.patch new file mode 100644 index 000000000..346146616 --- /dev/null +++ b/sci-physics/abinit/files/7.4.2-levmar_diag_scaling.patch @@ -0,0 +1,21 @@ +diff -Naurp abinit-7.4.2.orig/src/02_clib/calling_levmar.c abinit-7.4.2/src/02_clib/calling_levmar.c +--- abinit-7.4.2.orig/src/02_clib/calling_levmar.c 2013-09-08 07:24:13.000000000 +0000 ++++ abinit-7.4.2/src/02_clib/calling_levmar.c 2013-09-16 14:59:06.574702521 +0000 +@@ -149,7 +149,7 @@ double opts[LM_OPTS_SZ], info[LM_INFO_SZ + // if (coeffs[i+2]>-1E-16){ + /* invoke the optimisation function with box boundaries*/ + ret=dlevmar_bc_dif(dim_screening, coeffs, yvals, c_ncoeffs, c_nvals, \ +- lower_bounds, upper_bounds, 3000, opts, info, NULL, NULL, \ ++ lower_bounds, upper_bounds, NULL, 3000, opts, info, NULL, NULL, \ + (void *)&adata); // Box boundary conditions without Jacobian + //} + //} +@@ -219,7 +219,7 @@ double opts[LM_OPTS_SZ], info[LM_INFO_SZ + // if (coeffs[i+2]>-1E-16){ + /* invoke the optimisation function with box boundaries*/ + ret=dlevmar_bc_dif(dre_and_im_screening, coeffs, yvals, c_ncoeffs, c_nvals, \ +- lower_bounds, upper_bounds, 1000, opts, info, NULL, NULL, \ ++ lower_bounds, upper_bounds, NULL, 1000, opts, info, NULL, NULL, \ + (void *)&adata); // Box boundary conditions without Jacobian + //} + //} diff --git a/sci-physics/abinit/files/7.4.2-syntax.patch b/sci-physics/abinit/files/7.4.2-syntax.patch new file mode 100644 index 000000000..87026d926 --- /dev/null +++ b/sci-physics/abinit/files/7.4.2-syntax.patch @@ -0,0 +1,21 @@ +diff -Naurp abinit-7.4.2.orig/src/98_main/mrgscr.F90 abinit-7.4.2/src/98_main/mrgscr.F90 +--- abinit-7.4.2.orig/src/98_main/mrgscr.F90 2013-09-08 07:24:13.000000000 +0000 ++++ abinit-7.4.2/src/98_main/mrgscr.F90 2013-09-17 10:32:55.212877871 +0000 +@@ -2309,7 +2309,7 @@ program mrgscr + + case(2) ! Fit everything + +- if (is_scr/=.true.) then ++ if (is_scr.neqv..true.) then + write(std_out,'(2(a))') ch10,& + & ' Complete fits can only be done for _SCR file for now. Exiting ...' + goto 100 +@@ -2387,7 +2387,7 @@ program mrgscr + + !!OMP *** OPENMP SECTION *** Added by MS + !$OMP PARALLEL SHARED(Hscr_file,epsm1,nfreqre,epsm1_pole, & +-!$OMP is_scr,npoles,std_out,iqibz,one) & ++!$OMP is_scr,npoles,std_out,iqibz) & + !$OMP PRIVATE(ig1,ig2,refval,imfval,phase) + !!OMP write(std_out,'(a,i0)') ' Entering openmp loop. Number of threads: ',omp_get_num_threads() + ABI_MALLOC(refval,(Hscr_file(1)%nomega)) diff --git a/sci-physics/abinit/metadata.xml b/sci-physics/abinit/metadata.xml index e8b3b1d6a..e0342c8a8 100644 --- a/sci-physics/abinit/metadata.xml +++ b/sci-physics/abinit/metadata.xml @@ -14,6 +14,12 @@ within the Time-Dependent Density Functional Theory (for molecules), or within Many-Body Perturbation Theory (the GW approximation). In addition to the main ABINIT code, different utility programs are provided. + + Enable support for atompaw, a Projector Augmented Waves atomic data generator + + + Enable support for BigDFT, DFT package using wavelet basis set + Enable support for nVidia CUDA @@ -34,7 +40,16 @@ ABINIT code, different utility programs are provided. Enable support for FoX Fortran XML library - Build the abinit GUI (requires java) + + Build the abinit GUI (requires java); + since 7.4.x a separate package + + + + + Enable support for sci-libs/levmar, + the Levenberg-Marquardt least-squares optimisation + @@ -43,6 +58,18 @@ ABINIT code, different utility programs are provided. - Activate van der Waals exchange-correlation + Enable support for libxc, an exchange-correlation potentials library + + + Activate the Learn on The Fly method (LOTF) for Molecular Dynamics + + + Install helper scripts, mostly Python + + + Activate van der Waals exchange-correlation correction + + + Enable support for wannier90, a maximally localized Wannier functions (MLWFs) calculator -- cgit v1.2.3-18-g5258