# 4.18. Particles

Fuego supports inclusion of discrete Lagrangian particles using a particle-in-cell method to transport them. The particles can be zero-mass tracer particles, inertial particles, heated particles, evaporating particles, or combusting particles. For details of the different particle models, refer to the theory manual.

Particles are defined in a separate `Particle Region` and coupled to the fluid through transfers. The particle region has a background Eulerian mesh, usually the same mesh as the fluid domain, and the particles are modeled using free nodes that move around in that domain. To avoid excessive mesh modification, there is a “particle reservoir” of nodes created on each MPI rank, and as particles are added to the domain they are drawn from the reservoir and “activated”. The particles are advanced in time using sub-steps so their time step is smaller than the overall fluid time step.

    begin particle region particle_region
      use finite element model femodel
      lagrangian particles
      fluid region name = fluid_region

      minimum particle subcycles = 5
      particle reservoir size = 5000

      particle rebalance step frequency = 6
      particle rebalance imbalance threshold = 1.0

      # …

    end particle region particle_region

For the complete list of commands in the particle region, refer to the command summary.

## 4.18.1. Particle Setup

For most particle types, you need to specify three things:

> 1. Particle material - Set material properties for the particles. Required properties depend on what physical particle model is in-use.

> 2. Particle definition - Define what particle material to use, and which physical model to apply.

> > - Tracer - Mass-less particles, move with the fluid velocity

> > - Inertial - Has mass, drag, and buoyant forces which control its motion

> > - Heated Inertial - The same as inertial, but adds an energy transfer between the particle and fluid.

> > - Evaporating - Same as the heated inertial particle but adds mass transfer via phase change. Requires a `particle interface` to define the evaporation model.

> > - Chemically Reacting, Wildfire - More advanced models involving heat and mass transfer between the particles and fluid.

> 3. Particle insertion - Some method for how the particles are inserted. Common options are:

> > - Spray - Set a location, direction, cone angle, and size statistics and uses a pseudo-random algorithm to insert particles.

> > - File - Use a file of tabulated insertion locations, times, and properties to add particles to the domain.

> > - Location - Insert particles at the simulation initiation along a line or in a filled shape

> > - Sideset - Insert particles at a given rate on a sideset. Particles are inserted at face centroids, so behavior may be mesh-dependent.

The insertion methods and definition (physical models) are independent. In the following examples, we show different particle definition setups and different insertion methods, but these can be mixed and matched arbitrarily.

### 4.18.1.1. Tracer Particle Example

Tracer (or “Tracker”) particles are the simplest particles to define. They require no properties or model parameters. In the example below, we define the `tracer_particles` definition, and then insert them along `surface_1` using the particle inflow boundary. They can leave through the open boundary on `surface_2`, and will rebound elastically off the wall at `surface_3`.

    begin particle region particle_region

      # ...

      begin particle definition tracer_particles
        particle type is tracker
      end particle definition tracer_particles

      begin particle inflow boundary condition on surface surface_1
        particle definition = solid_particles
      end

      begin particle open boundary condition on surface surface_2
      end

      begin particle wall boundary condition on surface surface_3
        particle surface interaction type = rebound
      end

    end particle region particle_region

### 4.18.1.2. Inertial Particle Example

Inertial particles have mass, so they require a density and diameter. Since they couple with the fluid momentum equation, they also need the `compute momentum source` command. The following example defines steel inertial particles which will be inserted with the spray model.

    begin particle region particle_region

      # ...
      compute momentum source

      begin particle material steel
        density = 7800
      end particle material steel

      begin particle definition metal_particles
        particle type is inertial_particle
        add particle material steel
      end particle definition metal_particles

      begin particle spray my_spray
        # ...
      end particle spray my_spray
    end particle region particle_region

#### 4.18.1.2.1. Spray Model

The spray model is one of the most commonly used particle insertion methods. In the example below, we specify a conical spray with distributions for the particle diameter and velocity. We also specify the mass flow rate (a string function of time) and the number represented.

Note

A spray can generate a large number of particles. To reduce computational costs, we can choose to define a `number represented`, so that each resolved particle represents more than one physical particle. The drag, mass, and other coupling terms between the single resolved particle and the fluid are then multiplied by the number represented.

    begin particle region particle_region
      # ...

      BEGIN PARTICLE SPRAY my_spray
        PARTICLE DEFINITION = metal_particles
        CENTER = 0.0, 0.0, 0.0
        SPRAY_ANGLE = 30 # degrees
        NOZZLE RADIUS = 0.0003
        NORMAL VECTOR = 0 -1 0

        MASS_FLOW_RATE = 0.1*(t>1)*(t<5)
        NUMBER REPRESENTED = 10

        # Step 1: define the distribution type (LOGNORMAL)
        # Step 2: provide required parameters for that distribution
        #         (LOGNORMAL requires LOGMEAN and LOGSTDEV)
        #         resulting size = exp(logMean - sqrt(2) * logStDev * inv_erfc(2*R))
        #         where R is a uniform random number
        PARTICLE DIAMETER DISTRIBUTION TYPE = LOGNORMAL
        PARTICLE DIAMETER DISTRIBUTION PARAMETER LOGMEAN = -8.0 # exp(-8) = 3.35e-4
        PARTICLE DIAMETER DISTRIBUTION PARAMETER LOGSTDEV = 1.0

        # Step 1: define the distribution type (CONSTANT)
        # Step 2: provide required parameters for that distribution (CONSTANT requires VALUE)
        PARTICLE VELOCITY DISTRIBUTION TYPE            = CONSTANT
        PARTICLE VELOCITY DISTRIBUTION PARAMETER VALUE = 0.00001

      END PARTICLE SPRAY my_spray
    end particle region particle_region

### 4.18.1.3. Heated Particle Example

Heated particles require additional coupling source terms (energy, and sometimes radiation) and additional material properties. In the example below, we extend the steel particles to include heat transfer with the fluid, and use an insertion along a line.

    begin particle region particle_region

      compute momentum source
      compute energy source
      compute RTE particle source

      begin particle material steel
        density = 7800
        specific_heat = 500
        thermal_conductivity = 10
        film_Prandtl_number = 5
        absorptivity = 1.0
      end particle material steel

      begin particle definition metal_particles
        particle type is heated_particle
        add particle material steel
      end particle definition metal_particles

      begin insert particle my_line
        # ...
      end insert particle my_line
    end particle region particle_region

Heated particles require an initial temperature in their insertion method. In the input below, we specify two points and `Number` so we insert 5 particles along the line connecting those points.

    begin particle region particle_region

      # ...
      begin insert particle my_line
        particle definition = metal_particles
        x1 = 0.0
        y1 = 0.0
        z1 = 0.0
        x2 = 0.0
        y2 = 0.0
        z2 = 1.0

        x_velocity = 0.0
        x_velocity = 0.0
        x_velocity = 0.0
        Temperature = 400
        Diameter = 1e-3
        Number = 5
        Number represented = 1
      end insert particle my_line
    end particle region particle_region

Note

If we omit point 2 in the particle insertion block, the particles are all inserted at point 1.

### 4.18.1.4. Evaporating Particles

Evaporating particles require an additional `particle interface` block to define the evaporation model. In the example below we set up the blocks for a spray of evaporating water drops.

    begin particle region particle_region

      # ...
      compute momentum source
      compute energy source
      compute species source
      compute continuity source
      compute RTE particle source

      begin particle material water
        density = 1000
        specific_heat = 1000
        absorptivity = 0.8
      end particle material water

      begin particle definition water_particles
        particle type is evaporating_particle
        add particle interface evapWater
        add particle material water
      end particle definition water_particles

      begin particle interface evapWater
        # ...
      end particle interface evapWater

      begin particle spray my_spray
        # ...
      end particle spray my_spray
    end particle region particle_region

For the particle interface, we need to define what species is evaporating (so we can apply the source to the right equation on the fluid side) and phase change parameters.

    begin particle region particle_region

      # ...

      BEGIN PARTICLE INTERFACE evapWater
        PARTICLE SPECIES H2O -1.0
        PRANDTL_NUMBER = 0.9
        SCHMIDT_NUMBER = 0.9
        BEGIN PARTICLE EVAPORATION waterEvaporation
          REFERENCE_HEAT_OF_VAPORIZATION = 2.26e6 # J/kg
          REFERENCE_TEMPERATURE = 373.0 # K
          CRITICAL_TEMPERATURE = 647.0 # K
          REFERENCE_PRESSURE = 1.0 # in atm
          GAS SPECIES H2O 1.0
        END   PARTICLE EVAPORATION waterEvaporation
      END   PARTICLE INTERFACE evapWater

      # ...

    end particle region particle_region

Next we can define a spray similar to the earlier example, except now we also must supply a temperature. We also changed the spray to a hollow cone (common sprinkler pattern) by supplying `SPRAY_ANGLE_START` and `SPRAY_ANGLE_END` instead of just `SPRAY_ANGLE``.

    begin particle region particle_region

      # ...
      BEGIN PARTICLE SPRAY my_spray
        PARTICLE DEFINITION = water_particles
        CENTER = 0.0, 0.0, 0.0
        SPRAY_ANGLE_START = 30 # degrees
        SPRAY_ANGLE_END = 45
        NOZZLE RADIUS = 0.01
        NORMAL VECTOR = 0 -1 0

        MASS_FLOW_RATE = 0.1*(t>1)*(t<5)
        NUMBER REPRESENTED = 10
        TEMPERATURE = 300

        # Step 1: define the distribution type (LOGNORMAL)
        # Step 2: provide required parameters for that distribution
        #         (LOGNORMAL requires LOGMEAN and LOGSTDEV)
        #         resulting size = exp(logMean - sqrt(2) * logStDev * inv_erfc(2*R))
        #         where R is a uniform random number
        PARTICLE DIAMETER DISTRIBUTION TYPE = LOGNORMAL
        PARTICLE DIAMETER DISTRIBUTION PARAMETER LOGMEAN = -8.0 # exp(-8) = 3.35e-4
        PARTICLE DIAMETER DISTRIBUTION PARAMETER LOGSTDEV = 1.0

        # Step 1: define the distribution type (CONSTANT)
        # Step 2: provide required parameters for that distribution (CONSTANT requires VALUE)
        PARTICLE VELOCITY DISTRIBUTION TYPE            = CONSTANT
        PARTICLE VELOCITY DISTRIBUTION PARAMETER VALUE = 0.00001

      END PARTICLE SPRAY my_spray
    end particle region particle_region

## 4.18.2. Modifications to the Fuego Region

The Fuego region needs to be set up to receive external sources from the particles. This is done using the `Use external X source` commands:

    begin solution options
      use external momentum source
      use external enthalpy source
      use external continuity source
      use external species source

      # ...
    End

## 4.18.3. Particle Output

The syntax for outputting particle data is the same as for fluid data. Some generally useful output rules are:

> - Anything with a `_p` suffix is a particle field (e.g. particle velocity or particle temperature)

> - Always output `coordinates` so you can show particles in the correct location

> - It is useful to output `active` so you can filter out inactive reservoir particles

> - Particle properties such as `radius_p` or `temperature_p` can often relevant

    begin particle region particle_region

      # ...

      Begin Results Output Label output
        DATABASE Name = particles.e
        At Step 0, Increment = 1
        TITLE Lagrangian Particles
        NODAL Variables = coordinates AS Coords
        NODAL Variables = x_velocity_p AS Ux
        NODAL Variables = y_velocity_p AS Uy
        NODAL Variables = z_velocity_p AS Uz
        NODAL Variables = radius_p AS R
        NODAL Variables = temperature_p AS T
        NODAL Variables = number_deposition_density
        NODAL Variables = number_deposition_rate
        NODAL Variables = mass_deposition_density
        NODAL Variables = mass_deposition_rate
        NODAL Variables = active
        NODAL Variables = particle_is_stuck
      End   Results Output Label output

    end particle region particle_region

## 4.18.4. Advanced Options

Advanced particle options not covered in this guide include:

> - Particle filled shapes

> - Wildfire particles