4.17. 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.17.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.

  1. 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.17.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.17.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.17.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.17.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.17.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.17.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.17.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.17.4. Advanced Options

Advanced particle options not covered in this guide include:

  • Particle filled shapes

  • Wildfire particles