diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/science/chemistry/siesta/default.nix')
-rw-r--r-- | nixpkgs/pkgs/applications/science/chemistry/siesta/default.nix | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/science/chemistry/siesta/default.nix b/nixpkgs/pkgs/applications/science/chemistry/siesta/default.nix new file mode 100644 index 000000000000..02586dea2e29 --- /dev/null +++ b/nixpkgs/pkgs/applications/science/chemistry/siesta/default.nix @@ -0,0 +1,86 @@ +{ lib, stdenv +, gfortran, blas, lapack, scalapack +, useMpi ? false +, mpi +, fetchFromGitLab +}: + +stdenv.mkDerivation rec { + version = "4.1.5"; + pname = "siesta"; + + src = fetchFromGitLab { + owner = "siesta-project"; + repo = "siesta"; + rev = "v${version}"; + sha256 = "0lz8rfl5xwdj17zn7a30ipi7cgjwqki21a7wg9rdg7iwx27bpnmg"; + }; + + postPatch = '' + substituteInPlace Src/siesta_init.F --replace '/bin/rm' 'rm' + ''; + + passthru = { + inherit mpi; + }; + + nativeBuildInputs = [ gfortran ]; + + buildInputs = [ blas lapack ] + ++ lib.optionals useMpi [ mpi scalapack ]; + + enableParallelBuilding = false; # Started making trouble with gcc-11 + + # Must do manually because siesta does not do the regular + # ./configure; make; make install + configurePhase = '' + cd Obj + sh ../Src/obj_setup.sh + cp gfortran.make arch.make + ''; + + preBuild = '' + # See https://gitlab.com/siesta-project/siesta/-/commit/a10bf1628e7141ba263841889c3503c263de1582 + # This may be fixed in the next release. + makeFlagsArray=( + FFLAGS="-fallow-argument-mismatch" + ) + '' + (if useMpi then '' + makeFlagsArray+=( + CC="mpicc" FC="mpifort" + FPPFLAGS="-DMPI" MPI_INTERFACE="libmpi_f90.a" MPI_INCLUDE="." + COMP_LIBS="" LIBS="-lblas -llapack -lscalapack" + ); + '' else '' + makeFlagsArray+=( + COMP_LIBS="" LIBS="-lblas -llapack" + ); + ''); + + installPhase = '' + mkdir -p $out/bin + cp -a siesta $out/bin + ''; + + meta = with lib; { + description = "A first-principles materials simulation code using DFT"; + mainProgram = "siesta"; + longDescription = '' + SIESTA is both a method and its computer program + implementation, to perform efficient electronic structure + calculations and ab initio molecular dynamics simulations of + molecules and solids. SIESTA's efficiency stems from the use + of strictly localized basis sets and from the implementation + of linear-scaling algorithms which can be applied to suitable + systems. A very important feature of the code is that its + accuracy and cost can be tuned in a wide range, from quick + exploratory calculations to highly accurate simulations + matching the quality of other approaches, such as plane-wave + and all-electron methods. + ''; + homepage = "https://siesta-project.org/siesta/"; + license = licenses.gpl2; + platforms = [ "x86_64-linux" ]; + maintainers = [ maintainers.costrouc ]; + }; +} |