**Syntax:**

app_style diffusion estyle dstyle args

- diffusion = application style name
- estyle =
*off*or*linear*or*nonlinear* - dstyle =
*hop*or*schwoebel**hop*args = none*schwoebel*args = Nmax Nmin Nmax = max # of neighbors the initial Schwoebel site can have Nmin = min # of neighbors the final Schwoebel site can have

**Examples:**

app_style diffusion linear hop app_style diffusion nonlinear schwoebel 5 2

**Description:**

This is an on-lattice application which performs diffusive hops on a lattice whose sites are partially occupied and partially unoccupied (vacancies). It can be used to model surface diffusion or bulk diffusion on 2d or 3d lattices. It is equivalent to a 2-state Ising model performing Kawasaki dynamics where neighboring sites exchange their spins as the model evolves. Each lattice site stores a value which is 1 for vacant or 2 for occupied or 3 for vacant and a non-deposition site. See the deposition command for more details on the value = 3 sites.

Note that this application only allows for a single diffusing species (site value = 1) if run with an atomic-scale lattice, or a single phase if run with a coarse-grained lattice. See the app_style diffusion/multiphase command which allows for multiple diffusing species or phases.

The *estyle* setting determines how energy is used in computing the
probability of hop events, which is related to the Hamiltonian for the
system.

The Hamiltonian representing the energy of an occupied site I for the
*off* style is 0, which simply means energy is not used in determining
the hop probabilities. Instead, see the barrier
command.

The Hamiltonian representing the energy of an occupied site I for the
*linear* style is as follows:

Hi = Sum_j delta_ij

where Sum_j is a sum over all the neighbor sites of site I and delta_ij is 0 if site J is occupied and 1 if site J is vacant. The Hi for a vacant site is 0.

The Hamiltonian representing the energy of an occupied site I for the
*nonlinear* style is as follows:

Hi = Eng(Sum_j delta_ij)

where Sum_j is the sum over all its neighbor sites and delta_ij now 1
if site J is occupied and 0 otherwise. Thus the summation computes
the coordination number of site I. Note that this definition of delta
is the opposite of how it is defined for estyle *linear*. The
function Eng() is a tabulated function with values specified via the
ecoord command. This effectively allows the energy to
be a non-linear function of coordination number. As before the Hi for
a vacant site is 0.

For all these *estyle* settings, the energy of the entire system is
the sum of Hi over all sites.

The *dstyle* setting determines what kind of diffusive hops are
modeled. For *hop*, only simple nearest-neighbor hops occur where an
atom hops to a neighboring vacant site. For *schwoebel*, Schwoebel
hops can also occur, which are defined in the following way. An atom
I can hop to a 2nd neighbor vacant site K if there are two
intermediate 1st neighbor sites J1 and J2, where J1 is vacant and J2
is occupied, and J1 and J2 are neighbors of each other. Additionaly
the initial site I can have no more the *Nmax* occupied neighbors (its
coordination number), and the destination site K can have no fewer
than *Nmin* neighbors.

The deposition command can be used with this application to add atoms to the system in competition with hop events.

IMPORTANT NOTE: If you have a free surface you are depositing onto, it may also be possible for atoms to diffuse away from this surface, i.e. desorb into a vacuum. This application does not do anything special with those atoms (e.g. remove them), so they may clump together or induce deposition to take place onto the clumps above the surface. If you wish to prevent this you should insure that desorption is an energetically unfavorable event.

The barrier command can be used with this application to add an energy barrier to the model for nearest-neighbor hop and Schwoebel hop events, as discussed below.

The ecoord command can be used with the *nonlinear*
version of this application to set tabulated values for the
Hamiltonian Eng() function as described above.

Note that estyle *nonlinear* should give the same answer as estyle
*linear* if the tabulated function specified by the
ecoord command is specified as E_0 = N, E_1 = N-1,
... E_N-1 = 1, E_N = 0, where N = the number of neighbors of each
lattice site, i.e. the maximum coordination number. In this scenario,
the energy is effectively a linear function of coordination number.

This application performs Kawasaki dynamics, in that the "spins" on two neighboring sites are swapped, where spin can be thought of as a flag representing occupied or vacant. Equivalently, an atom hops from an occupied site to a vacancy site.

As explained on this page, this application can be
evolved by either a kinetic Monte Carlo (KMC) or rejection KMC (rKMC)
algorithm. You must thus define a KMC solver or sweeping method to be
used with the application via the solve_style or
sweep commands. The *linear* estyle supports both KMC
and rKMC options. The other estyles only support KMC options. If the
deposition command is used, then only KMC options
are supported.

For solution by a KMC algorithm, the possible events an occupied site
can perform are swaps with vacant neighbor sites. The probability of
each such event depends on several variables: the *estyle* setting,
whether the barrier command is used, whether the hop is
downhill or uphill in energy, and whether the
temperature is 0.0 or finite. The following table
gives the hop probability for each possible combination of these
variables.

Energy | Barrier | Direction | Temperature | Probability |

no | no | N/A | either | 1 |

no | yes | N/A | 0.0 | 0 |

no | yes | N/A | finite | exp(-Q/kT) |

yes | no | down | either | 1 |

yes | no | up | 0.0 | 0 |

yes | no | up | finite | exp(-dE/kT) |

yes | yes | down | 0.0 | 0 |

yes | yes | down | finite | exp(-Q/kT) |

yes | yes | up | 0.0 | 0 |

yes | yes | up | finite | exp((-dE-Q)/kT) |

If *estyle* is set to *off*, then energy is "no" in the table. Any
other *estyle* setting is energy = "yes". Barrier is "no" in the
table if the "barrier" command is not used, else it is "yes" in the
table. The direction of energy change (downhill versus uphill) is
only relevant if energy is "yes", else it is N/A. The "either" entry
for temperature means 0.0 or finite.

The value dE = Efinal - Einitial refers to the energy change in the
system due to the hop. For estyle *linear* this can be computed from
just the sites I,J. For estyle *nonlinear* the energy of the
neighbors of both sites I,J must also be computed.

For solution by a Metropolis algorithm, the hop event is performed or not if the probability in the table is 1 or 0. For intermediate values, a uniform random number R between 0 and 1 is generated and the hop event is accepted if R < probability in the table.

The following additional commands are defined by this application.
The ecoord command can only be used with the *nonlinear* energy style.

barrier | define energy barriers for hop events |

deposition | define deposition events |

ecoord | specify site energy as a function of coordination number |

temperature | set Monte Carlo temperature |

**Restrictions:** none

**Related commands:**

app_style ising, app_style diffusion/multiphase

**Default:** none