Introduction
Photoionization can play an important role in electrical discharges in air and other gases. Two approaches for photoionization are included in afivo-streamer: the Helmholtz approximation and a Monte Carlo procedure to generate and absorb photons. These approaches are briefly explained below, and in more detail in the following references:
- [5] [3] Introduction of the Helmholtz approach
- [2] Description of Helmholtz coefficients for air
- [4] [6] - Description of the Monte Carlo approximation to the Zheleznyak model (and tho photoionization in general)
- [7] Description of Zheleznyak approximation for photoionization in air
- [1] Comparison between Helmholtz and Monte Carlo photoionization
General parameters
There are several parameters that control the production of photoionization, which are valid for both the Helmholtz and Monte Carlo approach:
call cfg_add_get(cfg, "photoi%enabled", photoi_enabled, &
"Whether photoionization is enabled")
call cfg_add_get(cfg, "photoi%per_steps", photoi_per_steps, &
"Update photoionization every N time steps")
call cfg_add_get(cfg, "photoi%method", photoi_method, &
"Which photoionization method to use (helmholtz, montecarlo)")
call cfg_add_get(cfg, "photoi%eta", photoi_eta, &
"Photoionization efficiency factor, typically around 0.05-0.1")
call cfg_add_get(cfg, "photoi%quenching_pressure", photoi_quenching_pressure, &
"Photoionization quenching pressure (bar)")
call cfg_add_get(cfg, "photoi%source_type", photoi_source_type, &
"How to compute the photoi. source (Zheleznyak, from_species)")
call cfg_add_get(cfg, "photoi%excited_species", photoi_excited_species, &
"Which excited species to use when photoi%source_type = from_species")
call cfg_add_get(cfg, "photoi%species", photoi_species, &
"Which species is ionized by photoionization")
The amount of photoionization can be varied using the photoi%eta
parameter, for example by doing different simulations using:
photoi%eta = 0.0375
photoi%eta = 0.075
photoi%eta = 0.15
Helmholtz approach
The basic idea is to approximate the absorption function for photons with a series expansion. The user can either use one of the built-in expansions, or define custom coefficients through the following parameters:
call cfg_add_get(cfg, "photoi_helmh%author", author, &
"Can be Bourdon-3 (default), Bourdon-2, Luque or custom")
call cfg_add(cfg, "photoi_helmh%lambdas", dummy, &
"Lambdas to use in Helmholtz eq; unit 1/(m bar)", .true.)
call cfg_add(cfg, "photoi_helmh%coeffs", dummy, &
"Weights corresponding to the lambdas; unit 1/(m bar)^2", .true.)
call cfg_add_get(cfg, "photoi_helmh%max_rel_residual", max_rel_residual, &
"Maximum residual for Helmholtz solver, relative to max(|rhs|)")
For further details, see the source code of m_photoi_helmh::photoi_helmh_initialize
There is a tool available to generate Helmholtz coefficients for a new gas, see tools.
Monte Carlo approach
The basic idea of the Monte Carlo approach is to use random numbers to sample the production of photons as well as their absorption. The main parameters that control Monte Carlo photoionization are:
call cfg_add_get(cfg, "photoi_mc%physical_photons", phmc_physical_photons, &
"Whether physical photons are used")
call cfg_add_get(cfg, "photoi_mc%min_weight", phmc_min_weight, &
"Minimal photon weight (default: 1.0)")
call cfg_add_get(cfg, "photoi_mc%const_dx", phmc_const_dx, &
"Whether a constant grid spacing is used for photoionization")
call cfg_add_get(cfg, "photoi_mc%min_dx", phmc_min_dx, &
"Minimum grid spacing for photoionization")
call cfg_add_get(cfg, "photoi_mc%absorp_fac", phmc_absorp_fac, &
"At which grid spacing photons are absorbed compared to their mean distance")
call cfg_add_get(cfg, "photoi_mc%num_photons", phmc_num_photons, &
"Maximum number of discrete photons to use")
These parameters are somewhat difficult to understand, but for almost all applications the following (default) parameters should work:
[photoi_mc]
# At which grid spacing photons are absorbed compared to their mean distance:
absorp_fac = 1e-9
# Whether a constant grid spacing is used for photoionization:
const_dx = T
# Minimum grid spacing for photoionization:
min_dx = 1.0000E-09
# Minimal photon weight (default: 1.0):
min_weight = 1.0000E+00
# Maximum number of discrete photons to use:
num_photons = 5000000
# Whether physical photons are used:
physical_photons = T
This will cause photons to be absorbed on the finest grid, and in case of axisymmetric or 3D simulations, the produced photons will have a weight of 1.0 (corresponding to physical photons).