Commit d3406df6 authored by Richard Berger's avatar Richard Berger
Browse files

Updated instructions in IPython notebooks

Make.py is now used to enable exceptions support
parent a4c8c9b1
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
%% Cell type:markdown id: tags:

# Using LAMMPS with iPython and Jupyter

%% Cell type:markdown id: tags:

LAMMPS can be run interactively using iPython easily. This tutorial shows how to set this up.

%% Cell type:markdown id: tags:

## Installation

%% Cell type:markdown id: tags:

1. Download the latest version of LAMMPS into a folder (we will calls this `$LAMMPS_DIR` from now on)
2. Compile LAMMPS as a shared library and enable PNG support
2. Compile LAMMPS as a shared library and enable exceptions and PNG support
   ```bash
   cd $LAMMPS_DIR/src
   python2 Make.py -m mpi -png -a file
   python Make.py -m mpi -png -s exceptions -a file
   make mode=shlib auto
   ```

3. Create a python virtualenv
   ```bash
   virtualenv testing
   source testing/bin/activate
   ```

4. Inside the virtualenv install the lammps package
   ```
   (testing) cd $LAMMPS_DIR/python
   (testing) python install.py
   (testing) cd   # move to your working directory
   ```

5. Install jupyter and ipython in the virtualenv
   ```bash
   (testing) pip install ipython jupyter
   ```

6. Run jupyter notebook
   ```bash
   (testing) jupyter notebook
   ```

%% Cell type:markdown id: tags:

## Example

%% Cell type:code id: tags:

``` python
from lammps import IPyLammps
```

%% Cell type:code id: tags:

``` python
L = IPyLammps()
```

%% Cell type:code id: tags:

``` python
# 3d Lennard-Jones melt

L.units("lj")
L.atom_style("atomic")
L.atom_modify("map array")

L.lattice("fcc", 0.8442)
L.region("box block", 0, 4, 0, 4, 0, 4)
L.create_box(1, "box")
L.create_atoms(1, "box")
L.mass(1, 1.0)

L.velocity("all create", 1.44, 87287, "loop geom")

L.pair_style("lj/cut", 2.5)
L.pair_coeff(1, 1, 1.0, 1.0, 2.5)

L.neighbor(0.3, "bin")
L.neigh_modify("delay 0 every 20 check no")

L.fix("1 all nve")

L.variable("fx atom fx")

L.run(10)
```

%% Cell type:code id: tags:

``` python
L.image(zoom=1)
```

%% Cell type:markdown id: tags:

## Queries about LAMMPS simulation

%% Cell type:code id: tags:

``` python
L.system
```

%% Cell type:code id: tags:

``` python
L.system.natoms
```

%% Cell type:code id: tags:

``` python
L.communication
```

%% Cell type:code id: tags:

``` python
L.fixes
```

%% Cell type:code id: tags:

``` python
L.computes
```

%% Cell type:code id: tags:

``` python
L.dumps
```

%% Cell type:code id: tags:

``` python
L.groups
```

%% Cell type:markdown id: tags:

## Working with LAMMPS Variables

%% Cell type:code id: tags:

``` python
L.variable("a index 2")
```

%% Cell type:code id: tags:

``` python
L.variables
```

%% Cell type:code id: tags:

``` python
L.variable("t equal temp")
```

%% Cell type:code id: tags:

``` python
L.variables
```

%% Cell type:code id: tags:

``` python
import sys

if sys.version_info < (3, 0):
    # In Python 2 'print' is a restricted keyword, which is why you have to use the lmp_print function instead.
    x = float(L.lmp_print('"${a}"'))
else:
    # In Python 3 the print function can be redefined.
    # x = float(L.print('"${a}"')")

    # To avoid a syntax error in Python 2 executions of this notebook, this line is packed into an eval statement
    x = float(eval("L.print('\"${a}\"')"))
x
```

%% Cell type:code id: tags:

``` python
L.variables['t'].value
```

%% Cell type:code id: tags:

``` python
L.eval("v_t/2.0")
```

%% Cell type:code id: tags:

``` python
L.variable("b index a b c")
```

%% Cell type:code id: tags:

``` python
L.variables['b'].value
```

%% Cell type:code id: tags:

``` python
L.eval("v_b")
```

%% Cell type:code id: tags:

``` python
L.variables['b'].definition
```

%% Cell type:code id: tags:

``` python
L.variable("i loop 10")
```

%% Cell type:code id: tags:

``` python
L.variables['i'].value
```

%% Cell type:code id: tags:

``` python
L.next("i")
L.variables['i'].value
```

%% Cell type:code id: tags:

``` python
L.eval("ke")
```

%% Cell type:markdown id: tags:

## Accessing Atom data

%% Cell type:code id: tags:

``` python
L.atoms[0]
```

%% Cell type:code id: tags:

``` python
[x for x in dir(L.atoms[0]) if not x.startswith('__')]
```

%% Cell type:code id: tags:

``` python
L.atoms[0].position
```

%% Cell type:code id: tags:

``` python
L.atoms[0].id
```

%% Cell type:code id: tags:

``` python
L.atoms[0].velocity
```

%% Cell type:code id: tags:

``` python
L.atoms[0].force
```

%% Cell type:code id: tags:

``` python
L.atoms[0].type
```

%% Cell type:markdown id: tags:
%% Cell type:code id: tags:

``` python
L.variables['fx'].value
```

%% Cell type:markdown id: tags:

## Accessing thermo data

%% Cell type:code id: tags:

``` python
L.runs
```

%% Cell type:code id: tags:

``` python
L.runs[0]
```

%% Cell type:code id: tags:

``` python
L.runs[0].thermo
```

%% Cell type:code id: tags:

``` python
L.runs[0].thermo.Temp
```

%% Cell type:markdown id: tags:

## Saving session to as LAMMPS input file

%% Cell type:code id: tags:

``` python
L.write_script("in.output")
```

%% Cell type:code id: tags:

``` python
```
+2 −2
Original line number Diff line number Diff line
%% Cell type:markdown id: tags:

# Using LAMMPS with iPython and Jupyter

%% Cell type:markdown id: tags:

LAMMPS can be run interactively using iPython easily. This tutorial shows how to set this up.

%% Cell type:markdown id: tags:

## Installation

%% Cell type:markdown id: tags:

1. Download the latest version of LAMMPS into a folder (we will calls this `$LAMMPS_DIR` from now on)
2. Compile LAMMPS as a shared library and enable PNG support
2. Compile LAMMPS as a shared library and enable exceptions and PNG support
   ```bash
   cd $LAMMPS_DIR/src
   make yes-molecule
   python2 Make.py -m mpi -png -a file
   python Make.py -m mpi -png -s exceptions -a file
   make mode=shlib auto
   ```

3. Create a python virtualenv
   ```bash
   virtualenv testing
   source testing/bin/activate
   ```

4. Inside the virtualenv install the lammps package
   ```
   (testing) cd $LAMMPS_DIR/python
   (testing) python install.py
   (testing) cd   # move to your working directory
   ```

5. Install jupyter and ipython in the virtualenv
   ```bash
   (testing) pip install ipython jupyter
   ```

6. Run jupyter notebook
   ```bash
   (testing) jupyter notebook
   ```

%% Cell type:markdown id: tags:

## Example

%% Cell type:code id: tags:

``` python
from lammps import IPyLammps
```

%% Cell type:code id: tags:

``` python
L = IPyLammps()
```

%% Cell type:code id: tags:

``` python
# 2d circle of particles inside a box with LJ walls
import math

b = 0
x = 50
y = 20
d = 20

# careful not to slam into wall too hard

v = 0.3
w = 0.08

L.units("lj")
L.dimension(2)
L.atom_style("bond")
L.boundary("f f p")

L.lattice("hex", 0.85)
L.region("box", "block", 0, x, 0, y, -0.5, 0.5)
L.create_box(1, "box", "bond/types", 1, "extra/bond/per/atom", 6)
L.region("circle", "sphere", d/2.0+1.0, d/2.0/math.sqrt(3.0)+1, 0.0, d/2.0)
L.create_atoms(1, "region", "circle")
L.mass(1, 1.0)

L.velocity("all create 0.5 87287 loop geom")
L.velocity("all set", v, w, 0, "sum yes")

L.pair_style("lj/cut", 2.5)
L.pair_coeff(1, 1, 10.0, 1.0, 2.5)

L.bond_style("harmonic")
L.bond_coeff(1, 10.0, 1.2)

L.create_bonds("all", "all", 1, 1.0, 1.5)

L.neighbor(0.3, "bin")
L.neigh_modify("delay", 0, "every", 1, "check yes")

L.fix(1, "all", "nve")

L.fix(2, "all wall/lj93 xlo 0.0 1 1 2.5 xhi", x, "1 1 2.5")
L.fix(3, "all wall/lj93 ylo 0.0 1 1 2.5 yhi", y, "1 1 2.5")
```

%% Cell type:code id: tags:

``` python
L.image(zoom=1.8)
```

%% Cell type:code id: tags:

``` python
L.thermo_style("custom step temp epair press")
L.thermo(100)
output = L.run(40000)
L.image(zoom=1.8)
```

%% Cell type:markdown id: tags:

## Queries about LAMMPS simulation

%% Cell type:code id: tags:

``` python
L.system
```

%% Cell type:code id: tags:

``` python
L.system.natoms
```

%% Cell type:code id: tags:

``` python
L.system.nbonds
```

%% Cell type:code id: tags:

``` python
L.system.nbondtypes
```

%% Cell type:code id: tags:

``` python
L.communication
```

%% Cell type:code id: tags:

``` python
L.fixes
```

%% Cell type:code id: tags:

``` python
L.computes
```

%% Cell type:code id: tags:

``` python
L.dumps
```

%% Cell type:code id: tags:

``` python
L.groups
```

%% Cell type:markdown id: tags:

## Working with LAMMPS Variables

%% Cell type:code id: tags:

``` python
L.variable("a index 2")
```

%% Cell type:code id: tags:

``` python
L.variables
```

%% Cell type:code id: tags:

``` python
L.variable("t equal temp")
```

%% Cell type:code id: tags:

``` python
L.variables
```

%% Cell type:code id: tags:

``` python
import sys

if sys.version_info < (3, 0):
    # In Python 2 'print' is a restricted keyword, which is why you have to use the lmp_print function instead.
    x = float(L.lmp_print('"${a}"'))
else:
    # In Python 3 the print function can be redefined.
    # x = float(L.print('"${a}"')")

    # To avoid a syntax error in Python 2 executions of this notebook, this line is packed into an eval statement
    x = float(eval("L.print('\"${a}\"')"))
x
```

%% Cell type:code id: tags:

``` python
L.variables['t'].value
```

%% Cell type:code id: tags:

``` python
L.eval("v_t/2.0")
```

%% Cell type:code id: tags:

``` python
L.variable("b index a b c")
```

%% Cell type:code id: tags:

``` python
L.variables['b'].value
```

%% Cell type:code id: tags:

``` python
L.eval("v_b")
```

%% Cell type:code id: tags:

``` python
L.variables['b'].definition
```

%% Cell type:code id: tags:

``` python
L.variable("i loop 10")
```

%% Cell type:code id: tags:

``` python
L.variables['i'].value
```

%% Cell type:code id: tags:

``` python
L.next("i")
L.variables['i'].value
```

%% Cell type:code id: tags:

``` python
L.eval("ke")
```

%% Cell type:markdown id: tags:

## Accessing Atom data

%% Cell type:code id: tags:

``` python
L.atoms[0]
```

%% Cell type:code id: tags:

``` python
[x for x in dir(L.atoms[0]) if not x.startswith('__')]
```

%% Cell type:code id: tags:

``` python
L.atoms[0].position
```

%% Cell type:code id: tags:

``` python
L.atoms[0].id
```

%% Cell type:code id: tags:

``` python
L.atoms[0].velocity
```

%% Cell type:code id: tags:

``` python
L.atoms[0].force
```

%% Cell type:code id: tags:

``` python
L.atoms[0].type
```

%% Cell type:code id: tags:

``` python
```
+2 −2
Original line number Diff line number Diff line
%% Cell type:markdown id: tags:

# Using LAMMPS with iPython and Jupyter

%% Cell type:markdown id: tags:

LAMMPS can be run interactively using iPython easily. This tutorial shows how to set this up.

%% Cell type:markdown id: tags:

## Installation

%% Cell type:markdown id: tags:

1. Download the latest version of LAMMPS into a folder (we will calls this `$LAMMPS_DIR` from now on)
2. Compile LAMMPS as a shared library and enable PNG support
2. Compile LAMMPS as a shared library and enable exceptions and PNG support
   ```bash
   cd $LAMMPS_DIR/src
   python2 Make.py -m mpi -png -a file
   python Make.py -m mpi -png -s exceptions -a file
   make mode=shlib auto
   ```

3. Create a python virtualenv
   ```bash
   virtualenv testing
   source testing/bin/activate
   ```

4. Inside the virtualenv install the lammps package
   ```
   (testing) cd $LAMMPS_DIR/python
   (testing) python install.py
   (testing) cd   # move to your working directory
   ```

5. Install jupyter and ipython in the virtualenv
   ```bash
   (testing) pip install ipython jupyter
   ```

6. Run jupyter notebook
   ```bash
   (testing) jupyter notebook
   ```

%% Cell type:markdown id: tags:

## Example

%% Cell type:code id: tags:

``` python
from lammps import IPyLammps
```

%% Cell type:code id: tags:

``` python
L = IPyLammps()
```

%% Cell type:code id: tags:

``` python
import math

# 3d Lennard-Jones melt

L.units("lj")
L.atom_style("atomic")
L.atom_modify("map array")

L.lattice("fcc", 0.8442)
L.region("box", "block", 0, 4, 0, 4, 0, 4)
L.create_box(1, "box")
L.create_atoms(1, "box")
L.mass(1, 1.0)

L.velocity("all", "create", 1.44, 87287, "loop geom")

L.pair_style("lj/cut", 2.5)
L.pair_coeff(1, 1, 1.0, 1.0, 2.5)

L.neighbor(0.3, "bin")
L.neigh_modify("delay", 0, "every", 20, "check no")

L.fix("1 all nve")

L.variable("fx atom fx")

L.info("all")

L.run(10)
```

%% Cell type:code id: tags:

``` python
L.image(zoom=1.0)
```