A Quick Tour of LAMMPS
Steve Plimpton
                    Sandia National Labs
                     sjplimp@sandia.gov
          5th LAMMPS Workshop Beginner Tutorial
               August 2017 - Albuquerque, NM
Follow along with my slides at:
http://lammps.sandia.gov/workshops/Aug17/workshop.html
Resources for learning LAMMPS
   All on web site, most in distro tarball:
        Workshops (beginner tutorials) & Tutorials
        Features: list of features with links
        Glossary: MD terms ⇒ LAMMPS
        Manual:
             Intro, Commands, Packages, Accelerating,
                  Howto, Modifying, Errors sections
             search bubble at top left of every page
        Commands
             alphabetized command & style tables: one page per command
        Papers: find a paper similar to what you want to model
        Mail list: search archives (lammps-users, post Qs to it
             http://lammps.sandia.gov/mail.html
        Examples: 50 sub-dirs under examples in distro
             lower-case = simple, upper-case = more complex
             many produce movies: http://lammps.sandia.gov/movies.html
Structure of typical input scripts
     1   Units and atom style
     2   Create simulation box and atoms
             region, create box, create atoms, region commands
                  lattice command vs box units
             read data command
                  data file is a text file
                  look at examples/micelle/data.micelle
                  see read data doc page for full syntax
     3   Define groups
     4   Set attributes of atoms: mass, velocity
     5   Pair style for atom interactions
     6   Fixes for time integration and constraints
     7   Computes for diagnostics
     8   Output: thermo, dump, restart
     9   Run or minimize
    10   Rinse and repeat (script executed one command at a time)
Obstacle example
   input script = examples/obstacle/in.obstacle
Obstacle input script
   1st section = setup box and create atoms
    # 2d LJ obstacle flow
    dimension 2
    boundary p s p
    atom style atomic
    neighbor 0.3 bin
    neigh modify delay 5
    # create geometry
    lattice hex 0.7
    region box block 0 40 0 10 -0.25 0.25
    create box 3 box
    create atoms 1 box
Obstacle input script
   2nd section = define potential and groups of atoms
    # LJ potentials
    pair style lj/cut 1.12246
    pair coeff * * 1.0 1.0 1.12246
    # define groups
    region 1 block INF INF INF 1.25 INF INF
    group lower region 1
    region 2 block INF INF 8.75 INF INF INF
    group upper region 2
    group boundary union lower upper
    group flow subtract all boundary
    set group lower type 2
    set group upper type 3
Obstacle input script
   3rd section = set velocities and fixes
    # initial velocities
    mass * 1.0
    compute mobile flow temp
    velocity flow create 1.0 482748 temp mobile
    fix 1 all nve
    fix 2 flow temp/rescale 200 1.0 1.0 0.02 1.0
    fix modify 2 temp mobile
    # Poiseuille flow
    velocity boundary set 0.0 0.0 0.0
    fix 3 lower setforce 0.0 0.0 0.0
    fix 4 upper setforce 0.0 NULL 0.0
    fix 5 upper aveforce 0.0 -0.5 0.0
    fix 6 flow addforce 1.0 0.0 0.0
Obstacle input script
   4th section = create 2 obstacles to flow
    # 2 obstacles
    region   void1   sphere   10 4 0 3
    delete   atoms   region   void1
    region   void2   sphere   20 7 0 3
    delete   atoms   region   void2
    fix 7 flow indent 100 sphere 10 4 0 4
    fix 8 flow indent 100 sphere 20 7 0 4
    fix 9 all enforce2d
Obstacle input script
   5th section: define output and run simulation (JPG, PNG, PPM)
    # run
    timestep 0.003
    thermo 1000
    thermo modify temp mobile
    #dump 1 all atom 100 dump.obstacle
    dump 2 all image 500 image.*.ppm type type &
        zoom 1.6 adiam 1.5
    dump modify 2 pad 5
    run 25000
Make a movie
  50 JPG or PNG or PPM files
      image.16500.ppm
      ImageMagick display
      Mac Preview
  Make/view a movie
      ImageMagick
      convert *.ppm image.gif
      open in browser
      open -a Safari image.gif
      Mac QuickTime
      open image sequence
      Windows Media Player
      Ovito, VMD, AtomEye, ...
Obstacle example
   Questions on input script?
   Exercise:
       run examples/obstacle/in.obstacle on your laptop
       examine and visualize output
Examine screen output
   LAMMPS (5 Oct 2016)
   Lattice spacing in x,y,z = 1.28436 2.22457 1.28436
   Created orthogonal box = (0 0 -0.321089)
               to (51.3743 22.2457 0.321089)
     4 by 1 by 1 MPI processor grid
   Created 840 atoms
   120 atoms in group lower
   120 atoms in group upper
   240 atoms in group boundary
   600 atoms in group flow
   Setting atom values ...
     120 settings made for type
   Setting atom values ...
     120 settings made for type
   Deleted 36 atoms, new total = 804
   Deleted 35 atoms, new total = 769
Neighbor list and memory info
    Neighbor list info ...
      update every 1 steps, delay 5 steps, check yes
      master list distance cutoff = 1.42246
      binsize = 0.71123, bins = 73 32 1
      1 neighbor lists, perpetual/occasional/extra = 1 0 0
      (1) pair lj/cut, perpetual
        attributes: half, newton on
        pair build: half/bin/atomonly/newton
        stencil: half/bin/2d/newton
        bin: standard
    Setting up Verlet run ...
      Unit style : lj
      Current step : 0
      Time step : 0.003
    Per MPI rank memory allocation (avg) = 3.043 Mbytes
Thermo output
   Step Temp E pair E mol TotEng Press Volume
   0 1.0004177 0 0 0.68689281 0.46210058 1143.0857
   1000 1 -0.32494012 0 0.36166587 1.2240503 1282.5239
   2000 1 -0.37815616 0 0.30844982 1.0642877 1312.5691
   ...
   ...
   ...
   24000 1 -0.40040333 0 0.28620265 0.94983886 1459.4461
   25000 1 -0.37645924 0 0.31014674 1.0526044 1458.7191
   Loop time of 0.815388 on 4 procs for 25000 steps
     with 769 atoms
   Performance: 7947137.172 tau/day,
     30660.251 timesteps/s
   98.7% CPU use with 4 MPI tasks x no OpenMP threads
Timing info
    Loop time of 0.815388 on 4 procs for 25000 steps
      with 769 atoms
    MPI task timing breakdown:
    Section | min | avg | max | %varavg | %total
    --------------------------------------------------
    Pair | 0.063 | 0.123 | 0.202 | 15.7 | 15.10
    Neigh | 0.031 | 0.041 | 0.055 | 4.4 | 5.06
    Comm | 0.149 | 0.231 | 0.288 | 11.0 | 28.42
    Output | 0.001 | 0.001 | 0.001 | 0.0 | 0.01
    Modify | 0.275 | 0.305 | 0.341 | 4.3 | 37.43
    Other | ----- | 0.113 | ----- | --- | 13.91
Run statistics
   Per-processor values at end of run
    Nlocal: 192.25 ave 243 max 151 min
    Histogram: 1 1 0 0 0 0 1 0 0 1
    Nghost: 41.75 ave 43 max 39 min
    Histogram: 1 0 0 0 0 0 0 1 0 2
    Neighs: 408.5 ave 575 max 266 min
    Histogram: 1 1 0 0 0 0 0 1 0 1
    Total # of neighbors = 1634
    Ave neighs/atom = 2.12484
    Neighbor list builds = 1631
    Dangerous builds = 1
Run statistics
   Per-processor values at end of run
    Nlocal: 192.25 ave 243 max 151 min
    Histogram: 1 1 0 0 0 0 1 0 0 1
    Nghost: 41.75 ave 43 max 39 min
    Histogram: 1 0 0 0 0 0 0 1 0 2
    Neighs: 408.5 ave 575 max 266 min
    Histogram: 1 1 0 0 0 0 0 1 0 1
    Total # of neighbors = 1634
    Ave neighs/atom = 2.12484
    Neighbor list builds = 1631
    Dangerous builds = 1
   Questions on output?
Common input script errors and debugging
      Command not recognized
          ERROR: Unknown pair style gran/hooke (../force.cpp:246)
          LAMMPS not built with style being used
          many styles are in packages
          lmp mpi -h will list all styles included in build
      Syntax error in command
          ERROR: Incorrect args for pair coefficients (file/line #)
          Last command: pair coeff * * 1.0 1.0 1.12246 9.0
Common input script errors and debugging
      Command not recognized
          ERROR: Unknown pair style gran/hooke (../force.cpp:246)
          LAMMPS not built with style being used
          many styles are in packages
          lmp mpi -h will list all styles included in build
      Syntax error in command
          ERROR: Incorrect args for pair coefficients (file/line #)
          Last command: pair coeff * * 1.0 1.0 1.12246 9.0
      Thermo output blows up immediately
          usually due to bad atom coords and/or bad force field
          often leads to lost or out-of-range atoms
      Don’t start with too complex a script
          debug an input script just like a computer program
          start simple, add complexity one command at a time
          can use print command to examine variables
          use thermo/dump output and viz to verify correctness
Additional topics
       More complex input scripts
       Pre-processing to build a complex system
       Force fields: pair, bond, and kspace styles
       Fixex and computes
       Output
       Parallelization and performance
       Quick tour of more advanced topics
       Extending LAMMPS
Defining variables in input scripts
       Styles: index, loop, equal, atom, python, file, ...
            variable   x   index run1 run2 run3 run4
            variable   x   loop 100
            variable   x   trap(f JJ[3])*${scale}
            variable   x   atom -(c p[1]+c p[2]+c p[3])/(3*vol)
Defining variables in input scripts
       Styles: index, loop, equal, atom, python, file, ...
            variable   x   index run1 run2 run3 run4
            variable   x   loop 100
            variable   x   trap(f JJ[3])*${scale}
            variable   x   atom -(c p[1]+c p[2]+c p[3])/(3*vol)
       Formulas can be complex
            see doc/variable.html
            thermo keywords (temp, press, ...)
            math operators & functions (sqrt, log, cos, ...)
            group and region functions (count, xcm, fcm, ...)
            various special functions (min, ave, trap, stride, stagger, ...)
            per-atom vectors (x, vx, fx, ...)
            output from computes, fixes, other variables
       Formulas can be time- and/or spatially-dependent
Using variables in input scripts
       Substitute in any command via $x or ${myVar}
       Immediate formula evaluation via $() syntax:
           avoids need to define variable separately
           variable xmid equal (xlo+xhi)/2
           region 1 block $xmid EDGE INF INF EDGE EDGE
           region 1 block $((xlo+xhi)/2) EDGE INF INF EDGE EDGE
       Next command increments a variable to next value
       Many commands allow variables as arguments
           fix addforce 0.0 v fy 1.0
           dump modify every v foo
           region sphere 0.0 0.0 0.0 v radius
           only if command doc page says so
Power tools for input scripts
       Filename options:
           dump.*.% for per-snapshot or per-processor output
           read data data.protein.gz
           read restart old.restart.*
       If/then/else via if command
       Insert another script via include command
           useful for long list of params
Power tools for input scripts
       Filename options:
           dump.*.% for per-snapshot or per-processor output
           read data data.protein.gz
           read restart old.restart.*
       If/then/else via if command
       Insert another script via include command
           useful for long list of params
       Looping via next and jump commands
       Invoke a shell command or external program
           shell cd subdir1
           shell my analyze out.file $n ${param}
       Invoke Python from your script: doc/Section python.html
           pass LAMMPS data to Python, return values in variables
           Python function can callback to LAMMPS
       Various ways to run multiple simulations from one script
           see doc/Section howto 6.4
Example script for multiple runs
   Run 8 successive simulations on P processors:
    variable r equal random(1,1000000000,58798)
    variable a loop 8
    variable t index 0.8 0.85 0.9 0.95 1.0 1.05 1.1 1.15
    log log.$a
    read data.polymer
    velocity all create $t $r
    fix 1 all nvt $t $t 1.0
    dump 1 all atom 1000 dump.$a.*
    run 100000
    next t
    next a
    jump in.polymer
Example script for multiple runs
   Run 8 successive simulations on P processors:
    variable r equal random(1,1000000000,58798)
    variable a loop 8
    variable t index 0.8 0.85 0.9 0.95 1.0 1.05 1.1 1.15
    log log.$a
    read data.polymer
    velocity all create $t $r
    fix 1 all nvt $t $t 1.0
    dump 1 all atom 1000 dump.$a.*
    run 100000
    next t
    next a
    jump in.polymer
   Instead, run 8 simulations on 3 partitions until finished:
        change a & t to universe-style variables
        mpirun -np 12 lmp linux -p 3x4 -in in.polymer
Pre-processing tools to build complex systems
   LAMMPS does not build molecular systems or auto-magically
   assign force field parameters for you
Pre-processing tools to build complex systems
   LAMMPS does not build molecular systems or auto-magically
   assign force field parameters for you
       Data file must include list of bonds, angles, etc
       Data file can include force field assignments
       Tools directory has converters for both steps
           ch2lmp = CHARMM converter
           amber2lmp = AMBER converter
           msi2lmp = Accelrys converter
Pre-processing tools to build complex systems
   LAMMPS does not build molecular systems or auto-magically
   assign force field parameters for you
       Data file must include list of bonds, angles, etc
       Data file can include force field assignments
       Tools directory has converters for both steps
           ch2lmp = CHARMM converter
           amber2lmp = AMBER converter
           msi2lmp = Accelrys converter
       Provided builders
           Moltemplate (Andrew Jewett)
           Pizza.py = chain and patch tools (Python)
       Builders that can create LAMMPS input
           see website Pre/Post processing page for list
           VMD TopoTools (Axel Kohlmeyer)
           Avogadro, Packmol, ATB (Auto Topo Builder), EMC
EMC builder tool - Wed PM breakout session
Pair styles
   LAMMPS lingo for interaction potentials
Pair styles
   LAMMPS lingo for interaction potentials
       A pair style can be true pair-wise or many-body
              LJ, Coulombic, Buckingham, Morse, Yukawa, ...
              EAM, Tersoff, REBO, ReaxFF, ...
       Bond/angle/dihedral/improper styles = permanent bonds
Pair styles
   LAMMPS lingo for interaction potentials
       A pair style can be true pair-wise or many-body
              LJ, Coulombic, Buckingham, Morse, Yukawa, ...
              EAM, Tersoff, REBO, ReaxFF, ...
       Bond/angle/dihedral/improper styles = permanent bonds
       Variants optimized for CPU (many-core), KNL, GPU
              OPT, GPU, USER-OMP, USER-INTEL, KOKKOS packages
              lj/cut, lj/cut/gpu, lj/cut/kk, lj/cut/omp
              see doc/Section accelerate.html
       Coulomb interactions included in pair style
              lj/cut, lj/cut/coul/cut, lj/cut/coul/wolf, lj/cut/coul/long
              done to optimize inner loop
Categories of pair styles
       Solids
           eam, eim, meam, adp, etc
       Bio and polymers
           charmm, class2, gromacs, dreiding, etc
       Reactive
           tersoff, bop, airebo, comb, reax/c, etc
       Coarse-grained
           dpd, granular, sph, peri, colloid, lubricate, brownian, FLD
       Aspherical
           gayberne, resquared, line, tri, etc
Categories of pair styles
       Solids
           eam, eim, meam, adp, etc
       Bio and polymers
           charmm, class2, gromacs, dreiding, etc
       Reactive
           tersoff, bop, airebo, comb, reax/c, etc
       Coarse-grained
           dpd, granular, sph, peri, colloid, lubricate, brownian, FLD
       Aspherical
           gayberne, resquared, line, tri, etc
       Pair table for tabulation of any pair-wise interaction
       Pair hybrid style enables for hybrid models
           polymers on metal
           CNTs in water
           solid-solid interface between 2 materials
Pair styles
   See doc/Section commands.html for full list
   Annotated with (gikot) for 5 accelerated variants
Pair styles
   See doc/pair style.html for one-line descriptions
Relative CPU cost of potentials
   See http://lammps.sandia.gov/bench.html#potentials for details
   Can estimate how long your simulation will run
Bond styles (also angle, dihedral, improper)
       Used for molecules with fixed bonds
           Fix bond/break and bond style quartic can break them
       To learn what bond styles LAMMPS has ...
       where would you look?
Bond styles (also angle, dihedral, improper)
       Used for molecules with fixed bonds
           Fix bond/break and bond style quartic can break them
       To learn what bond styles LAMMPS has ...
       where would you look?
       doc/Section commands.html or doc/bond style.html
Long-range Coulombics
   KSpace style in LAMMPS lingo, see doc/kspace style.html
       Options:
           traditional Ewald, scales as O(N 3/2 )
           PPPM (like PME), scales as O(N log(N))
           MSM, scales as O(N), lj/cut/coul/msm
       Additional options:
           non-periodic, PPPM (z) vs MSM (xyz)
           long-range dispersion (LJ)
Long-range Coulombics
   KSpace style in LAMMPS lingo, see doc/kspace style.html
       Options:
           traditional Ewald, scales as O(N 3/2 )
           PPPM (like PME), scales as O(N log(N))
           MSM, scales as O(N), lj/cut/coul/msm
       Additional options:
           non-periodic, PPPM (z) vs MSM (xyz)
           long-range dispersion (LJ)
       PPPM is fastest choice for most systems
           FFTs can scale poorly for large processor counts
       MSM can be faster for low-accuracy or large proc counts
       Pay attention to cutoff & accuracy settings
           can affect performance dramatically (see timing output)
           adjust Real vs KSpace work
Fixes
   Most flexible feature in LAMMPS
   Allow control of “what” happens “when” within each timestep
   Loop over timesteps:
        communicate ghost atoms
        build neighbor list (once in a while)
        compute forces
        communicate ghost forces
        output to screen and files
Fixes
   Most flexible feature in LAMMPS
   Allow control of “what” happens “when” within each timestep
   Loop over timesteps:
     fix initial              NVE, NVT, NPT, rigid-body integration
     communicate ghost atoms
     fix neighbor                                      insert particles
     build neighbor list (once in a while)
     compute forces
     communicate ghost forces
     fix force             SHAKE, langevin drag, wall, spring, gravity
     fix final                NVE, NVT, NPT, rigid-body integration
     fix end                         volume & T rescaling, diagnostics
     output to screen and files
Fixes
        ∼200 fixes in LAMMPS
        You choose what group of atoms to apply fix to
        Already saw some in obstacle example:
            fix   1   all nve
            fix   2   flow temp/rescale 200 1.0 1.0 0.02 1.0
            fix   3   lower setforce 0.0 0.0 0.0
            fix   5   upper aveforce 0.0 -0.5 0.0
            fix   6   flow addforce 1.0 0.0 0.0
Fixes
        ∼200 fixes in LAMMPS
        You choose what group of atoms to apply fix to
        Already saw some in obstacle example:
            fix   1   all nve
            fix   2   flow temp/rescale 200 1.0 1.0 0.02 1.0
            fix   3   lower setforce 0.0 0.0 0.0
            fix   5   upper aveforce 0.0 -0.5 0.0
            fix   6   flow addforce 1.0 0.0 0.0
        To learn what fix styles LAMMPS has ...
        where would you look?
Fixes
        ∼200 fixes in LAMMPS
        You choose what group of atoms to apply fix to
        Already saw some in obstacle example:
            fix   1   all nve
            fix   2   flow temp/rescale 200 1.0 1.0 0.02 1.0
            fix   3   lower setforce 0.0 0.0 0.0
            fix   5   upper aveforce 0.0 -0.5 0.0
            fix   6   flow addforce 1.0 0.0 0.0
        To learn what fix styles LAMMPS has ...
        where would you look?
        doc/Section commands.html or doc/fix.html
Fixes
        ∼200 fixes in LAMMPS
        You choose what group of atoms to apply fix to
        Already saw some in obstacle example:
            fix   1   all nve
            fix   2   flow temp/rescale 200 1.0 1.0 0.02 1.0
            fix   3   lower setforce 0.0 0.0 0.0
            fix   5   upper aveforce 0.0 -0.5 0.0
            fix   6   flow addforce 1.0 0.0 0.0
        To learn what fix styles LAMMPS has ...
        where would you look?
        doc/Section commands.html or doc/fix.html
        If you familiarize yourself with fixes,
        you’ll know many things LAMMPS can do
        Many fixes store output accessible by other commands
            thermostat energy
            force on wall
            rigid body COM
Computes
     ∼120 computes in LAMMPS
     Calculate some property of system, in parallel
     Always for the current timestep
     To learn what compute styles LAMMPS has ...
Computes
     ∼120 computes in LAMMPS
     Calculate some property of system, in parallel
     Always for the current timestep
     To learn what compute styles LAMMPS has ...
     doc/Section commands.html or doc/compute.html
Computes
     Key point:
           computes store results of their calculation
           other commands invoke them and use the results
           e.g. thermo output, dumps, fixes
     Output of computes:
           global vs per-atom vs local
           scalar vs vector vs array
           extensive vs intensive values
Computes
     Key point:
           computes store results of their calculation
           other commands invoke them and use the results
           e.g. thermo output, dumps, fixes
     Output of computes:
           global vs per-atom vs local
           scalar vs vector vs array
           extensive vs intensive values
     Examples:
           temp & pressure = global scalar or vector
           pe/atom = potential energy per atom (vector)
           displace/atom = displacement per atom (array)
           pair/local & bond/local = per-neighbor or per-bond info
     Many computes are useful with averaging fixes:
           fix ave/time, ave/chunk (spatial), ave/atom
           fix ave/histo, ave/correlate
Thermo output
  One line of output every N timesteps to screen and log file
      See doc/thermo style.html
Thermo output
  One line of output every N timesteps to screen and log file
      See doc/thermo style.html
      Any scalar can be output:
           dozens of keywords: temp, pyy, eangle, lz, cpu
           any output of a compute or fix: c ID, f ID[N], c ID[N][M]
                fix ave/time stores time-averaged quantities
           equal-style variable: v MyVar
           one value from atom-style variable: v xx[N]
           any property for one atom: q, fx, quat, etc
Thermo output
  One line of output every N timesteps to screen and log file
      See doc/thermo style.html
      Any scalar can be output:
           dozens of keywords: temp, pyy, eangle, lz, cpu
           any output of a compute or fix: c ID, f ID[N], c ID[N][M]
                fix ave/time stores time-averaged quantities
           equal-style variable: v MyVar
           one value from atom-style variable: v xx[N]
           any property for one atom: q, fx, quat, etc
      Post-process via:
           tools/python/logplot.py log.lammps X Y (via GnuPlot)
           tools/python/log2txt.py log.lammps data.txt X Y ...
           know how to read thermo output across multiple runs
Dump output
  Snapshot of per-atom values every N timesteps
      See doc/dump.html
Dump output
  Snapshot of per-atom values every N timesteps
      See doc/dump.html
      Styles
           atom, custom (both native LAMMPS)
                VMD will auto-read if file named *.lammpstraj
           xyz for coords only
           cfg for AtomEye
           DCD, XTC for CHARMM, NAMD, GROMACS
                good for back-and-forth runs and analysis
           HDF5 and NetCDF and VTK (Paraview)
      Two additional styles
           local: per-neighbor, per-bond, etc info
           image: instant picture, rendered in parallel
Dump output
     Any per-atom quantity can be output
         dozens of keywords: id, type, x, xs, xu, mux, omegax, ...
         any output of a compute or fix: f ID, c ID[M]
         atom-style variable: v foo
Dump output
     Any per-atom quantity can be output
         dozens of keywords: id, type, x, xs, xu, mux, omegax, ...
         any output of a compute or fix: f ID, c ID[M]
         atom-style variable: v foo
     Additional options:
         control which atoms by group or region
         control which atoms by threshold
              dump modify thresh c pe > 3.0
         text or binary or gzipped
         one big file or per snapshot or per proc
         see dump modify fileper or nfile
         MPIIO package for parallel dump output
Dump output
     Any per-atom quantity can be output
         dozens of keywords: id, type, x, xs, xu, mux, omegax, ...
         any output of a compute or fix: f ID, c ID[M]
         atom-style variable: v foo
     Additional options:
         control which atoms by group or region
         control which atoms by threshold
              dump modify thresh c pe > 3.0
         text or binary or gzipped
         one big file or per snapshot or per proc
         see dump modify fileper or nfile
         MPIIO package for parallel dump output
     Post-run conversion
         tools/python/dump2cfg.py, dump2pdb.py, dump2xyz.py
         Pizza.py dump, cfg, ensight, pdb, svg, vtk, xyz
Parallelization in LAMMPS
      Physical domain divided into 3d bricks
      One brick per processor
      Atoms carry properties &
      topology as they migrate
      Comm of ghost atoms within cutoff
          6-way local stencil
      Short-range forces ⇒
      CPU cost scales as O(N/P)
Parallel performance
   See http://lammps.sandia.gov/bench.html
   Strong or weak scaling, O(N/P) until too few atoms/proc
Parallel performance
   See http://lammps.sandia.gov/bench.html
   Strong or weak scaling, O(N/P) until too few atoms/proc
   Exercise: run bench/in.lj, change N and P, is it O(N/P) ?
       lmp linux -v x 2 -v y 2 -v z 2 < in.lj
       mpirun -np 2 lmp linux < in.lj
How to speed-up your simulations
   See doc/Section accelerate.html of manual
    1   Many ideas for long-range Coulombics
            PPPM with 2 vs 4 FFTs (smoothed PPPM)
            PPPM with staggered grid
            run style verlet/split
            processor layout
How to speed-up your simulations
   See doc/Section accelerate.html of manual
    1   Many ideas for long-range Coulombics
            PPPM with 2 vs 4 FFTs (smoothed PPPM)
            PPPM with staggered grid
            run style verlet/split
            processor layout
    2   OPT, GPU, USER-INTEL, USER-OMP, KOKKOS packages
            OPT for CPU
            GPU for NVIDIA GPUs with multiple cores/GPU
            USER-INTEL for Intel CPU and KNL
            USER-OMP for OpenMP on multicore CPUs
            KOKKOS for OpenMP, KNL, GPU
            Benchmark info at http://lammps.sandia.gov/bench.html
                 new version in next month, focus on accelerator packages
            Stan Moore, Performance breakout, Wed PM
How to speed-up your simulations
    3   Increase time scale via timestep size
            fix shake for rigid bonds (2 fs)
            run style respa for hierarchical timesteps (4 fs)
    4   Increase length scale via coarse graining
            all-atom vs united-atom vs bead-spring
            mesoscale models:
            ASPHERE, BODY, COLLOID, FLD packages
            GRANULAR, PERI, RIGID, SRD packages
            see doc/Section packages.html for details
            Dan Bolintineanu, Coarse-graining breakout, Wed PM
Quick tour of more advanced topics
      Units
          see doc/units.html
          LJ, real, metal, cgs, si
          all input/output in one unit system
      Ensembles
          see doc/Section howto.html 6.16
          one or more thermostats (by group)
          single barostat
          rigid body dynamics
      Hybrid models
          pair style hybrid and hybrid/overlay
          atom style hybrid sphere bond ...
Quick tour of more advanced topics
      Aspherical particles
          see doc/Section howto.html 6.14
          ellipsoidal, lines, triangles, rigid bodies
          ASPHERE package
      Mesoscale and continuum models
          Corase-grained packages mentioned 2 slides ago
          PERI package for Peridynamics
          USER-ATC package for atom-to-continuum (FE)
          USER-SPH, USER-SMD packages for smoothed particle hydro
          GRANULAR package for granular media
          LIGGGHTS simulator for DEM (external code)
               www.liggghts.com/www.cfdem.com
               built on top of LAMMPS
Quick tour of more advanced topics
      Multi-replica modeling
          REPLICA package, see doc/Section howto.html 6.14
          parallel tempering, PRD, TAD, NEB
      Load balancing
          balance command for static LB
          fix balance command for dynamic LB
          adjusting proc dividers, or recursive coordinate bisection
          weighted balancing now an option
Quick tour of more advanced topics
      Energy minimization
      Via usual dynamics
          pair style soft
          fix nve/limit and fix viscous
      Via gradient-based minimization
          min style cg, htfn, sd
      Via damped-dynamics minimization
          min style quickmin and fire
          used for nudged-elastic band (NEB)
Quick tour of more advanced topics
      Energy minimization
      Via usual dynamics
          pair style soft
          fix nve/limit and fix viscous
      Via gradient-based minimization
          min style cg, htfn, sd
      Via damped-dynamics minimization
          min style quickmin and fire
          used for nudged-elastic band (NEB)
      Packages, packages, packages ...
          package = collection of commands with a theme,
            or wrapper on an external or provided library
          ∼60 packages in LAMMPS, wide variety
          see doc/Section packages.html for details
Quick tour of more advanced topics
   Use LAMMPS as a library
       doc/Section howto.html
       6.10 and 6.19
       C-style interface
       (C, C++, Fortran,
       Python)
       examples/COUPLE dir
       python and
       python/examples
       directories
Customizing and modifying LAMMPS
      95% of LAMMPS is customized add-on classes, via styles
      Write a new derived class, drop into src, re-compile
Customizing and modifying LAMMPS
      95% of LAMMPS is customized add-on classes, via styles
      Write a new derived class, drop into src, re-compile
      Resources:
          doc/Section modify.html
          doc/PDF/Developer.pdf
               class hierarchy & timestep structure
          Workshops and Tutorial links on LAMMPS web site:
               slides for hackers/developers breakout of past workshops
      Come to Developers breakout session, Wed PM
      Please contribute your new code to the LAMMPS distro!
          doc/Section modify 15:
              Submitting new features for inclusion in LAMMPS
      GitHub site: https://github.com/lammps/lammps
What have people already done with LAMMPS?
      Pictures: http://lammps.sandia.gov/pictures.html
      Movies: http://lammps.sandia.gov/movies.html
What have people already done with LAMMPS?
      Pictures: http://lammps.sandia.gov/pictures.html
      Movies: http://lammps.sandia.gov/movies.html
      Papers: http://lammps.sandia.gov/papers.html
          authors, titles, abstracts for 1000s of papers