[[Category:Software]][[Category:BiomolecularSimulation]] ''Page enfant de [[Biomolecular simulation/fr | 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 [http://www.sandia.gov/ Sandia National Laboratories] du ministère de l’Énergie des États-Unis. * Site web du projet : http://lammps.sandia.gov/ * [http://lammps.sandia.gov/doc/Manual.html Documentation] * [http://lammps.sandia.gov/mail.html Liste de messagerie] La parallélisation se fait avec [[MPI/fr | MPI]] et [[OpenMP/fr | OpenMP]] et LAMMPS peut être exécuté sur [[Using GPUs with Slurm/fr |GPU]]. = Champs de force = Les champs de force disponibles sont listés à la section [https://lammps.sandia.gov/doc/Intro_features.html#ff 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 AAAAMMJJ. 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/fr | 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 nos grappes 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 [https://lammps.sandia.gov/doc/Packages.html 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/fr|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 |name=lammps.in |lang="txt" |contents= # 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 |name=run_lmp_serial.sh |lang="bash" |contents= #!/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 |name=run_lmp_mpi.sh |lang="bash" |contents= #!/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. {| class="wikitable" style="text-align: center; border-width: 2px;width: 100%;" !colspan="6" style="text-align: left;"|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. {| class="wikitable" style="text-align: center; border-width: 2px;width: 100%;" ! | scope="row" colspan="2" | '''2048 atomes''' | scope="row" colspan="2" | '''4000 atomes''' | scope="row" colspan="2" | '''6912 atomes''' | scope="row" colspan="2" | '''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 |}