```{tags}
category:cookbook
feature:2d
feature:cartesian
feature:particles
```

(sec:cookbooks:composition-active-particles)=
# Using active particles.

In the examples above, particle properties passively track distinct model
properties. These particle properties, however, may also be used to actively
influence the model as it runs. For instance, a composition-dependent material
model may use particles' initial composition rather than an advected
compositional field. To make this work -- i.e., to get information from
particles that are located at unpredictable locations, to the quadrature
points at which material models and other parts of the code need to evaluate
these properties -- we need to somehow get the values from particles back
to fields that can then be evaluated at any point where this is necessary. A
slightly modified version of the active-composition cookbook
([cookbooks/composition_active/composition_active.prm](https://www.github.com/geodynamics/aspect/blob/main/cookbooks/composition_active/composition_active.prm)) illustrates how to
use 'active particles' in this manner.

This cookbook,
[cookbooks/composition_active_particles/composition_active_particles.prm](https://www.github.com/geodynamics/aspect/blob/main/cookbooks/composition_active_particles/composition_active_particles.prm),
modifies two sections of the input file. First, particles are added under the
`Postprocess` section:

```{literalinclude} particles.part.prm
```

Here, each particle will carry the `velocity` and `initial composition`
properties. In order to use the particle initial composition value to modify
the flow through the material model, we now modify the `Composition` section:

```{literalinclude} composition.part.prm
```

What this does is the following: It says that there will be two compositional
fields, called `lower` and `upper` (because we will use them to indicate
material that comes from either the lower or upper part of the domain). Next,
the `Compositional field methods` states that each of these fields will be
computed by interpolation from the particles (if we had left this parameter at
its default value, `field`, for each field, then it would have solved an
advection PDE in each time step, as we have done in all previous examples).

In this case, we specify that both of the compositional fields are in fact
interpolated from particle properties in each time step. How this is done is
described in the fourth line. To understand it, it is important to realize
that particles and fields have matching names: We have named the fields
`lower` and `upper`, whereas the properties that result from the
`initial composition` entry in the particles section are called
`initial lower` and `initial upper`, since they inherit the names of the
fields.

The syntax for interpolation from particles to fields then states that the
`lower` field will be set to the interpolated value of the `initial lower`
particle property when solving for the composition, and similarly for the `upper`
field. In turn, the `initial composition` particle property was using the same
method that one would have used for the compositional field initialization if
these fields were actually advected along in each time step.

In this model the given global refinement level (5), associated number of
cells (1024) and 100,000 total particles produces an average particle-per-cell
count slightly below 100. While on the high end compared to most geodynamic
studies using active particles, increasing the number of particles per cell
further may alter the solution. As with the numerical resolution, any study
using active particles should systematically vary the number of particles per
cell in order to determine this parameter's influence on the simulation.

  [cookbooks/composition_active/composition_active.prm]: cookbooks/composition_active/composition_active.prm
  [cookbooks/composition_active_particles/composition_active_particles.prm]: cookbooks/composition_active_particles/composition_active_particles.prm
