With the phase field method, the initial condition is critical, as it establishes the initial microstructure of the material. MOOSE has a system for creating [initial conditions (ICs)](/wiki/MOOSESystems/ICs), however there are various initial conditions that have been created as part of the Phase Field Module. The corresponding .C files for each IC can be found in moose/modules/phase_field/src/ics except for BoundingBoxIC which is found in moose/framework/src/ics.

##BoundingBoxIC
[image:20 align:right]
    BoundingBoxIC
BoundingBoxIC allows setting the initial condition of a value inside and outside of a specified box. The box is aligned with the x,y,z axis, and is specified by passing in the x,y,z coordinates of the bottom left point and the top right point. Each of the coordinates of the "bottom_left" point MUST be less than those coordinates in the "top_right" point. When setting the initial condition if bottom_left <= Point <= top_right then the "inside" value is used. Otherwise the "outside" value is used.
###Inputs
* **x1:** The x coordinate of the lower left-hand corner of the box
- **y1:** The y coordinate of the lower left-hand corner of the box
- **z1:** The z coordinate of the lower left-hand corner of the box
- **x2:** The x coordinate of the upper right-hand corner of the box
- **y2:** The y coordinate of the upper right-hand corner of the box
- **z2:** The z coordinate of the upper right-hand corner of the box
- **inside:** The value of the variable inside the box
- **outside:** The value of the variable outside the box

##RndBoundingBoxIC
[image:21 align:right]
    RndBoundingBoxIC
Like BoundingBoxIC but the inside and outside values are randomly chosen from a uniform distribution between the mx_invalue and mn_invalue inside the box and mx_outvalue and mn_outvalue outside the box.

###Inputs
* **x1:** The x coordinate of the lower left-hand corner of the box
- **y1:** The y coordinate of the lower left-hand corner of the box
- **z1:** The z coordinate of the lower left-hand corner of the box
- **x2:** The x coordinate of the upper right-hand corner of the box
- **y2:** The y coordinate of the upper right-hand corner of the box
- **z2:** The z coordinate of the upper right-hand corner of the box
- **mx_inside:** The max value of the variable inside the box
- **mn_inside:** The min value of the variable inside the box
- **mx_outside:** The max value of the variable outside the box
- **mn_outside:** The min value of the variable outside the box

##SmoothCircleIC
[image:22 align:right]
    SmoothCircleIC
SmoothcircleIC creates a circle of a given radius centered at a given point in the domain. If int_width > zero, the border of the circle with smoothly transition from the invalue to the outvalue.

###Inputs
- **x1:** The x coordinate of the circle center
- **y1:** The y coordinate of the circle center
- **z1:** The z coordinate of the circle center, defaults to 0.
- **radius:** The radius of the circle
- **invalue:** The variable value inside the circle
- **outvalue:** The variable value outside the circle
- **int_width:** The interfacial width of the void surface.  Defaults to 0.
- **3D_spheres:** In 3D, whether the objects are spheres or columns, defaults to _true_

##RndSmoothCircleIC
[image:25 align:right]
    RndSmoothCircleIC

Same as SmoothCircleIC but the value inside the circle randomly around _invalue_ by plus or minus _variation_invalue_ and the value outside the circle randomly varies around _outvalue_ by plus or minus _variation_outvalue.

###Inputs
- **x1:** The x coordinate of the circle center
- **y1:** The y coordinate of the circle center
- **z1:** The z coordinate of the circle center, defaults to 0.
- **radius:** The radius of the circle
- **invalue:** The variable value inside the circle
- **outvalue:** The variable value outside the circle
- **int_width:** The interfacial width of the void surface.  Defaults to 0.
- **variation_invalue:** Plus or minus this amount on the invalue
- **variation_outvalue:** Plus or minus this amount on the outvalue
- **rand_seed:** Seed value for the random number generator, defaults to 12345.

##MultiSmoothCircleIC
[image:27 align:right]
    MultiSmoothCircleIC

MultiSmoothcircleIC sets variable values by creating _nbub_ number of circles with center points randomly positioned throughout the domain. The value within a circle is _invalue_ and outside is _outvalue_.

###Inputs
- **radius:** The radius of the circle
- **invalue:** The variable value inside the circle
- **outvalue:** The variable value outside the circle
- **int_width:** The interfacial width of the void surface.  Defaults to 0.
- **3D_spheres:** In 3D, whether the objects are spheres or columns, defaults to _true_
- **numbub:** The number of bubbles to be placed on GB
- **bubspac:** Minimum spacing of bubbles, measured from center to center
- **numtries:** The number of tries allowed to fit a circle within the domain before throwing an error, defaults to 1000.
- **Lx:** Length of simulation domain in x-direction
- **Ly:** Length of simulation domain in y-direction
- **Lz:** Length of simulation domain in z-direction, defaults to 0
- **rand_seed:** Seed for the random number generator, defaults to 2000
- **radius_variation:**Plus or minus fraction of random variation in the bubble radius, defaults to 0

##LatticeSmoothCircleIC
[image:28 align:right]
    LatticeSmoothCircleIC

LatticeSmoothcircleIC sets variable values using a set of smooth circles (see SmoothCircleIC) with centers on a uniform lattice, randomly randomly perturbed from the lattice. The value within a circle is _invalue_ and outside is _outvalue_.
###Inputs
- **radius:** The radius of the circle
- **invalue:** The variable value inside the circle
- **outvalue:** The variable value outside the circle
- **int_width:** The interfacial width of the void surface.  Defaults to 0.
- **3D_spheres:** In 3D, whether the objects are spheres or columns, defaults to _true_
- **Rnd_variation:** Percent variation (plus or minus) from circle center location on the lattice.
- **circles_per_side:** Length 3 vector containing the number of bubbles along each side (x, y, and z).
- **Lx:** Length of simulation domain in x-direction
- **Ly:** Length of simulation domain in y-direction
- **Lz:** Length of simulation domain in z-direction, defaults to 0
- **rand_seed:** Seed for the random number generator, defaults to 2000
- **radius_variation:**Plus or minus fraction of random variation in the bubble radius, defaults to 0

##SpecifiedSmoothCircleIC
[image:29 align:right]
    SpecifiedSmoothCircleIC

SpecifiedSmoothcircleIC creates a user specified number of smooth circles and specific locations and with specific radii. The value within a circle is _invalue_ and outside is _outvalue_.
###Inputs
- **invalue:** The variable value inside the circle
- **outvalue:** The variable value outside the circle
- **int_width:** The interfacial width of the void surface.  Defaults to 0.
- **3D_spheres:** In 3D, whether the objects are spheres or columns, defaults to _true_
- **x_positions:** A vector containing the x-coordinate for each circle center
- **y_positions:** A vector containing the y-coordinate for each circle center
- **z_positions:** A vector containing the z-coordinate for each circle center
- **radii:** A vector containing the radius for each circle

##CrossIC
[image:26 align:right]
    CrossIC

CrossIC is a **2D ONLY IC** that sets the variable value to be _average_ + _amplitude_ within a smooth cross shape and to _average_ - _amplitude_ outside the cross. The cross is defined within a square defined by the user.

###Input
- **x1:** The x coordinate of the lower left-hand corner of the box
- **y1:** The y coordinate of the lower left-hand corner of the box
- **x2:** The x coordinate of the upper right-hand corner of the box
- **y2:** The y coordinate of the upper right-hand corner of the box
- **average:** The average variable value within the domain, defaults to 0
- **amplitude:** The variation from the average within the cross (_average_ + _amplitude_) and outside of the cross (_average_ - _amplitude_).

##ThumbIC

##PolycrystalICs
PolycrystalICs are described in the [grain growth](../GrainGrowthModel) section.