LAMMPS

From Alliance Doc
Jump to navigation Jump to search
This page is a translated version of the page LAMMPS and the translation is 100% complete.
Other languages:

Page enfant de Simulation biomoléculaire

Généralités

LAMMPS (pour large-scale atomic/molecular massively parallel simulator) est un logiciel classique de dynamique moléculaire distribué par Sandia National Laboratories du ministère de l’Énergie des États-Unis.

La parallélisation se fait avec MPI et OpenMP et LAMMPS peut être exécuté sur GPU.

Champs de force

Les champs de force disponibles sont listés à la section Interatomic potentials du site web, classés selon leur forme fonctionnelle (soit par paire, N corps, etc.). LAMMPS pouvant traiter un grand nombre de champs de force, il peut être utilisé pour la modélisation dans plusieurs domaines d’application, par exemple :

  • Biomolécules : CHARMM, AMBER, OPLS, COMPASS (classe 2), coulombiques longue portée via PPPM, dipôles de moment, etc.
  • Polymères : liaison d’atomes, union d’atomes, gros grains (chaînes globulaires FENE), bond-breaking, etc.
  • Matériaux : EAM et MEAM pour les métaux, Buckingham, Morse, Yukawa, Stillinger-Weber, Tersoff, EDIP, COMB, SNAP, etc.
  • Réactions : AI-REBO, REBO, ReaxFF, eFF
  • Échelle mésoscopique : granulaire, DPD, Gay-Berne, colloïdal, péridynamiques, DSMC, etc.

Les potentiels peuvent aussi être combinés dans des systèmes hybrides, par exemple eau sur métal, interfaces polymère/semi-conducteur, colloïdes en solution, etc.

Versions et paquets

Pour connaître les versions disponibles, lancez module spider lammps (voir Utiliser des modules).

Les numéros de version de LAMMPS comprennent la date de sortie au format AAAMMJJ. Exécutez

module avail lammps

pour connaître les versions installées et sélectionner celle que vous voulez utiliser.

Il peut y avoir plusieurs modules pour une même version. Par exemple, la version du 31 mars 2017 a les trois modules suivants :

  • lammps/20170331 développé sous MPI
  • lammps-omp/20170331 USER-OMP (compatible OpenMP)
  • lammps-user-intel/20170331 USER-INTEL

Ces versions fonctionnent aussi avec GPU; le module CUDA doit être chargé avant le module LAMMPS.

$ module load cuda
$ module load lammps-omp/20170331

Le nom de l’exécutable peut être différent selon la version. Toutes les versions installées sur les grappes de Calcul Canada ont le lien symbolique lmp; vous pouvez donc exécuter LAMMPS en faisant appel à lmp peu importe le module que vous utilisez.

Pour connaître le nom original de l’exécutable d’un module en particulier, faites lister les fichiers dans le répertoire ${EBROOTLAMMPS}/bin avec, par exemple

$ module load lammps-omp/20170331
$ ls ${EBROOTLAMMPS}/bin/
lmp lmp_icc_openmpi

où l’exécutable est lmp_icc_openmpi et lmp est le lien symbolique associé.

Il existe différents modules pour la même version, dépendant des paquets qui sont inclus. Les versions de LAMMPS les plus récentes comprennent environ 60 paquets différents qui peuvent être activés ou désactivés à la compilation du programme. Ce ne sont pas tous les paquets qui peuvent être activés dans un même exécutable. Consultez la documentation sur les paquets. Si votre simulaiton ne fonctionne pas avec un module, il est possible qu'un des paquets nécessaire n'a pas été activé.

Pour certains modules LAMMPS, nous fournissons le fichier list-packages.txt qui liste les paquets activés (Supported) et non activés (Not Supported). Une fois que vous avez chargé un module, lancez cat ${EBROOTLAMMPS}/list-packages.txt pour en connaître le contenu.

Si list-packages.txt est introuvable, vous pourriez être capable de déterminer quels sont les paquets disponibles en ouvrant le fichier de recette EasyBuild avec $EBROOTLAMMPS/easybuild/LAMMPS*.eb. Les paquets disponibles se trouvent dans le bloc general_packages.

Exemples de fichiers d'entrée

Le fichier ci-dessous peut être utilisé avec l’un ou l’autre des scripts de tâche donnés en exemple.

File : lammps.in

# 3d Lennard-Jones melt

units           lj
atom_style      atomic

lattice         fcc 0.8442
region          box block 0 15 0 15 0 15
create_box      1 box
create_atoms    1 box
mass            1 1.0

velocity        all create 1.44 87287 loop geom

pair_style      lj/cut 2.5
pair_coeff      1 1 1.0 1.0 2.5
neighbor        0.3 bin
neigh_modify    delay 5 every 1

fix             1 all nve
thermo          5
run             10000
write_data     config.end_sim

# End of the Input file.


File : run_lmp_serial.sh

#!/bin/bash

#SBATCH --ntasks=1
#SBATCH --mem-per-cpu=2500M
#SBATCH --time=0-00:30

module load StdEnv/2020 intel/2020.1.217 openmpi/4.0.3 lammps-omp/20210929

lmp < lammps.in > lammps_output.txt


File : run_lmp_mpi.sh

#!/bin/bash

#SBATCH --ntasks=4
#SBATCH --mem-per-cpu=2500M
#SBATCH --time=0-00:30 

module load StdEnv/2020 intel/2020.1.217 openmpi/4.0.3 lammps-omp/20210929

srun lmp < lammps.in > lammps_output.txt


Performance

Dans le cas de simulations en dynamique moléculaire, le calcul des interactions de paires entre particules occupe la plus grande part du temps CPU. LAMMPS utilise la méthode de décomposition des domaines pour répartir le travail aux processeurs disponibles en assignant à chacun une partie de la boîte de simulation. Il est nécessaire que les processeurs communiquent entre eux pendant le calcul des interactions entre particules. Pour un nombre déterminé de particules, plus le nombre de processeurs est élevé, plus il y a de parties à la boîte de simulation qui s’échangent de l’information. Ainsi, plus il y a de processeurs, plus longue est la durée du temps de communication, ce qui cause éventuellement la faible efficacité du CPU.

Avant d’exécuter des simulations pour des problèmes d’une certaine taille ou avec des boîtes à plusieurs parties, faites des tests pour voir l’impact du nombre de cœurs sur la performance du programme. Effectuez des tests courts avec un nombre différent de cœurs pour identifier le nombre de cœurs susceptible d’offrir la meilleure efficacité; les résultats demeurent cependant approximatifs.

Le tableau suivant montre la durée pour la simulation d’un système de 4000 particules avec 12 tâches MPI. En utilisant 12 cœurs, le système de 4000 atomes est réparti sur 12 petites boîtes et l’efficacité est très basse. Le calcul des interactions de paires occupe 46.45% du temps et la communication entre processeurs 44.5%. La proportion importante du temps de communication est due au fait qu’un si petit système utilise un grand nombre de petites boîtes.

Durée de boucle 15.4965 pour 12 processus de 25000 étapes avec 4000 atomes.

Performance : 696931.853 tau/jour, 1613.268 timesteps/s.
CPU utilisé à 90.2% avec 12 tâches MPI x 1 fil OpenMP.

SECTION durée minimale durée moyenne durée maximale variation moyenne (%) total (%)
paires 6.6964 7.1974 7.9599 14.8 46.45
voisins 0.94857 1.0047 1.0788 4.3 6.48
communication 6.0595 6.8957 7.4611 17.1 44.50
sortie 0.01517 0.01589 0.019863 1.0 0.10
modification 0.14023 0.14968 0.16127 1.7 0.97
autre -- 0.2332 -- -- 1.50

Dans le dernier tableau, le temps de communication est comparé au temps de calcul des paires pour différents nombres de cœurs.

2048 atomes 4000 atomes 6912 atomes 13500 atomes
cœurs paires comm. paires comm. paires comm. paires comm.
1 73.68 1.36 73.70 1.28 73.66 1.27 73.72 1.29
2 70.35 5.19 70.77 4.68 70.51 5.11 67.80 8.77
4 62.77 13.98 64.93 12.19 67.52 8.99 67.74 8.71
8 58.36 20.14 61.78 15.58 64.10 12.86 62.06 8.71
16 56.69 20.18 56.70 20.18 56.97 19.80 56.41 20.38