[image:250 align:right]
Nucleation system in action on a FeCuNi system. Clockwise from top left: Copper concentration, nickel concentration, nucleation penalty energy density, bulk free energy density. (**Click for animation**)

The _discrete nucleation_ system allows users to incorporate nucleation phenomena in phase field simulations. Due to the lack of thermal fluctuations (also see [Langevin Noise](LangevinNoise)) nucleation phenomena are not intrinsic to the phase field method. We introduce nucleation by artificially triggering and stabilizing the formation of nuclei through local modifications of the free energy density.

The comprises two user objects and a material class:

* DiscreteNucleationInserter - a user object that maintains a global list of currently active nucleus positions.
* DiscreteNucleationMap - a user object that maintains a smooth density map for nuclei locations (obtained from a DiscreteNucleationInserter).
* DiscreteNucleation - a material user object that calculates a local free energy penalty based on the difference of a set of given concentration variables and their target concentrations (using the data from the DiscreteNucleationMap).

## DiscreteNucleationInserter
[Doxygen](http://mooseframework.org/docs/doxygen/modules/classDiscreteNucleationInserter.html)

The inserter manages the global list of currently active nucleus stabilization sites. This user object takes two parameters
* hold_time - the duration in time for which a stabilization site remains active
* probability - a material property containing a nucleation rate density. This material property can be calculated using classical nucleation theory for example.
The inserter object keeps track if any changes to the nucleus list occurred in the current timestep.

## DiscreteNucleationMap
[Doxygen](http://mooseframework.org/docs/doxygen/modules/classDiscreteNucleationMap.html)

The map objects builds a smooth map of nucleation sites in the simulation domain, expanding the point description from the DiscreteNucleationInserter to a description in which nucleation sites have a finite size and a smooth interface. This object takes three parameters
* radius - the radius of the area in which each nucleation site modifies the local free energy. This should be chosen sufficiently large to generate a stable precipitate, but small enough to minimize the influence on the phase field evolution
* periodic - a variable to take the periodicity information of the simulation domain
* inserter - the DiscreteNucleationInserter object that maintains the nucleus list
The map object only updates the map if during a timestep the nucleus list was changed.

## DiscreteNucleation
[Doxygen](http://mooseframework.org/docs/doxygen/modules/classDiscreteNucleation.html)

The nucleation material computes a local free energy density contribution...

$$F_{nuc} = \gamma\sum_i (c_i-c_{0,i})^2$$\$

* op_names - order parameters $$c_i$$ to utilize in the nucleation penalty energy calculation
* op_values - corresponding order parameter target values $$c_{0,i}$$
* map - the DiscreteNucleationMap user object that manages the nucleation site map
* penalty - the penalty factor $$\gamma$$
* penalty_mode - One of MATCH, MIN, MAX, determining whether to match the target concentration or take it as a minimum or maximum concentration target

# Discussion
The nucleation free energy penalty is added to the physical free energy contributions of the system using a [DerivativeSumMaterial](http://mooseframework.org/wiki/PhysicsModules/PhaseField/DevelopingModels/FunctionMaterials/#derivativesummaterial)
# Example
An example input file is located at

[moose/modules/phase_field/examples/nucleation/cahn_hilliard.i](https://github.com/idaholab/moose/blob/devel/modules/phase_field/examples/nucleation/cahn_hilliard.i)