diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/science/molecular-dynamics/lammps')
-rw-r--r-- | nixpkgs/pkgs/applications/science/molecular-dynamics/lammps/default.nix | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/science/molecular-dynamics/lammps/default.nix b/nixpkgs/pkgs/applications/science/molecular-dynamics/lammps/default.nix new file mode 100644 index 000000000000..7924d044c2ab --- /dev/null +++ b/nixpkgs/pkgs/applications/science/molecular-dynamics/lammps/default.nix @@ -0,0 +1,121 @@ +{ lib +, stdenv +, fetchFromGitHub +, libpng +, gzip +, fftw +, blas +, lapack +, cmake +, cudaPackages +, pkg-config +# Available list of packages can be found near here: +# +# - https://github.com/lammps/lammps/blob/develop/cmake/CMakeLists.txt#L222 +# - https://docs.lammps.org/Build_extras.html +, packages ? { + ASPHERE = true; + BODY = true; + CLASS2 = true; + COLLOID = true; + COMPRESS = true; + CORESHELL = true; + DIPOLE = true; + GRANULAR = true; + KSPACE = true; + MANYBODY = true; + MC = true; + MISC = true; + MOLECULE = true; + OPT = true; + PERI = true; + QEQ = true; + REPLICA = true; + RIGID = true; + SHOCK = true; + ML-SNAP = true; + SRD = true; + REAXFF = true; +} +# Extra cmakeFlags to add as "-D${attr}=${value}" +, extraCmakeFlags ? {} +# Extra `buildInputs` - meant for packages that require more inputs +, extraBuildInputs ? [] +}: + +stdenv.mkDerivation (finalAttrs: { + # LAMMPS has weird versioning convention. Updates should go smoothly with: + # nix-update --commit lammps --version-regex 'stable_(.*)' + version = "2Aug2023_update1"; + pname = "lammps"; + + src = fetchFromGitHub { + owner = "lammps"; + repo = "lammps"; + rev = "stable_${finalAttrs.version}"; + hash = "sha256-Zmn87a726qdidBfyvJlYleYv9jqyFAakxjGrg3lipc0="; + }; + preConfigure = '' + cd cmake + ''; + nativeBuildInputs = [ + cmake + pkg-config + # Although not always needed, it is needed if cmakeFlags include + # GPU_API=cuda, and it doesn't users that don't enable the GPU package. + cudaPackages.autoAddOpenGLRunpathHook + ]; + + passthru = { + # Remove these at some point - perhaps after release 23.11. See discussion at: + # https://github.com/NixOS/nixpkgs/pull/238771#discussion_r1235459961 + mpi = throw "`lammps-mpi.passthru.mpi` was removed in favor of `extraBuildInputs`"; + inherit packages; + inherit extraCmakeFlags; + inherit extraBuildInputs; + }; + cmakeFlags = [ + ] + ++ (builtins.map (p: "-DPKG_${p}=ON") (builtins.attrNames (lib.filterAttrs (n: v: v) packages))) + ++ (lib.mapAttrsToList (n: v: "-D${n}=${v}") extraCmakeFlags) + ; + + buildInputs = [ + fftw + libpng + blas + lapack + gzip + ] ++ extraBuildInputs + ; + + postInstall = '' + # For backwards compatibility + ln -s $out/bin/lmp $out/bin/lmp_serial + # Install vim and neovim plugin + install -Dm644 ../../tools/vim/lammps.vim $out/share/vim-plugins/lammps/syntax/lammps.vim + install -Dm644 ../../tools/vim/filetype.vim $out/share/vim-plugins/lammps/ftdetect/lammps.vim + mkdir -p $out/share/nvim + ln -s $out/share/vim-plugins/lammps $out/share/nvim/site + ''; + + meta = with lib; { + description = "Classical Molecular Dynamics simulation code"; + longDescription = '' + LAMMPS is a classical molecular dynamics simulation code designed to + run efficiently on parallel computers. It was developed at Sandia + National Laboratories, a US Department of Energy facility, with + funding from the DOE. It is an open-source code, distributed freely + under the terms of the GNU Public License (GPL). + ''; + homepage = "https://lammps.sandia.gov"; + license = licenses.gpl2Plus; + platforms = platforms.linux; + # compiling lammps with 64 bit support blas and lapack might cause runtime + # segfaults. In anycase both blas and lapack should have the same #bits + # support. + broken = (blas.isILP64 && lapack.isILP64); + maintainers = [ maintainers.costrouc maintainers.doronbehar ]; + mainProgram = "lmp"; + }; +}) |