MultiBolt Documentation Version 3.0.1 Max Flynn Document draft 1.04, written with LATEX Texas Tech University, Center for Pulsed Power and Power Electronics Lubbock, TX 79409, United States of America March. 2022 Contents 1 Introduction 3 2 How to Cite this Program 3 3 Governing Equations 3.1 Hydrodynamic . . . . . . . . . . . . . . 3.1.1 Zeroeth-Order [ 0 ] . . . . . . . . 3.1.2 First-order Transverse [ 1T ] . . . 3.1.3 First-order Longitudinal [ 1L ] . . 3.1.4 Second-order Transverse [ 2T ] . 3.1.5 Second-order Longitudinal [ 2L ] 3.2 Steady-State Townsend [ SST ] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 4 5 5 6 6 4 The Collision Operator 4.1 The Most General Form . . . . . . . . . . . 4.1.1 Elastic Collisions . . . . . . . . . . 4.1.2 Inelastic Collisions . . . . . . . . . 4.1.3 Notes on collisions and scattering . 4.2 Derivation of super elastic cross sections . 4.3 Using Isotropic Scattering . . . . . . . . . . 4.3.1 Attachment . . . . . . . . . . . . . . 4.3.2 Elastic . . . . . . . . . . . . . . . . 4.3.3 Excitation . . . . . . . . . . . . . . . 4.3.4 Ionization . . . . . . . . . . . . . . . 4.3.5 Superelastic . . . . . . . . . . . . . 4.4 Using Anisotropic Scattering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 7 7 8 9 10 10 11 11 11 11 12 12 5 Equations for Calculated Parameters 5.1 Eigenvalues of Governing Equations 5.2 Distribution Functions . . . . . . . . 5.3 Rate Coefficients . . . . . . . . . . . 5.3.1 Individual Collisions . . . . . 5.3.2 Species-weighted Total . . . 5.4 Growth Coefficients . . . . . . . . . 5.4.1 Individual Collisions . . . . . 5.4.2 Species-weighted Total . . . 5.5 Drift Velocity . . . . . . . . . . . . . 5.5.1 SST Drift Velocity . . . . . . 5.5.2 Flux Drift Velocity . . . . . . 5.5.3 Bulk Drift Velocity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 12 13 13 13 14 14 14 14 15 15 15 15 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6 Mobility . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.1 SST Electron Mobility . . . . . . . . . . . . . . 5.6.2 Flux Electron Mobility . . . . . . . . . . . . . . 5.6.3 Bulk Electron Mobility . . . . . . . . . . . . . . 5.7 Diffusion Coefficients . . . . . . . . . . . . . . . . . . 5.7.1 Conventional Diffusion Coefficient (Electrons) 5.7.2 Conventional Diffusion Coefficient (Neutrals) 5.7.3 Flux Transverse Diffusion Coefficient . . . . . 5.7.4 Flux Longitudinal Diffusion Coefficient . . . . 5.7.5 Bulk Transverse Diffusion Coefficient . . . . . 5.7.6 Bulk Longitudinal Diffusion Coefficient . . . . 5.8 Energy . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8.1 Average Electron Energy . . . . . . . . . . . . 5.8.2 Characteristic Electron Energies . . . . . . . . 6 How To Use This Program 6.1 C++ Header Library . . . . . . 6.2 Command Line Arguments . . 6.2.1 Model . . . . . . . . . . 6.2.2 Environmental . . . . . 6.2.3 Numeric Grid . . . . . . 6.2.4 Export . . . . . . . . . . 6.2.5 Iterations . . . . . . . . 6.2.6 Grid Remap Settings . 6.2.7 Cross section definition 6.2.8 Sweep Definition . . . . 6.3 Scattering . . . . . . . . . . . . 6.3.1 Miscellaneous . . . . . 6.4 Graphical User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 15 16 16 16 16 16 16 16 16 17 17 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 17 17 18 18 18 18 18 19 19 20 20 21 7 Contact 23 8 Usage and Distribution 8.1 MultiBolt . . . . . 8.2 Dependencies . . 8.2.1 Armadillo . 8.2.2 SuperLU . 24 24 24 24 24 . . . . . . . . . . . . . . . . . . . . . . . . 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Introduction MultiBolt is a multi-term Boltzmann equation solver for low temperature plasma (LTP). MultiBolt decomposes the full Boltzmann equation: [∂t + ⃗v · ∂⃗r + ⃗a · ∂⃗v ]F(⃗r, ⃗v, t) = C[F(⃗r, ⃗v, t)] (1) to solve for the one-dimensional electron energy distribution function (EEDF) as well as the swarm parameters (rate, growth, and transport coefficients) which can be solved-for using the EEDF. 2 How to Cite this Program At time of writing, MultiBolt is the central work of the following publications by the authors: • Flynn, M., Neuber, A., & Stephens, J. (2021). Benchmarking the calculation of electrically insulating properties of complex gas mixtures using a multi-term Boltzmann equation model. Journal of Physics D: Applied Physics, 55(1), 015201. • Stephens, J. (2018). A multi-term Boltzmann equation benchmark of electron-argon cross-sections for use in low temperature plasma models. Journal of Physics D: Applied Physics, 51(12), 125203. If you use MultiBolt for your research, please cite the two journal articles above, and please note the version in use. 3 Governing Equations In this section, all governing differential equations as they appear in MultiBolt will be defined. To reflect their implementation, all equations in this section are written in terms of energy in Joules. 3.1 Hydrodynamic MultiBolt applies the spherical harmonics decomposition and second-order gradient expansion of the Boltzmann Equation (eq. 1) per the work of Robson and Ness in the following publications: 3 • Ness, K. F., & Robson, R. E. (1986). Velocity distribution function and transport coefficients of electron swarms in gases. II. Moment equations and applications. Physical Review A, 34(3), 2185. • Ness, K. F. (1993). Spherical-harmonics decomposition of the Boltzmann equation for charged-particle swarms in the presence of both electric and magnetic fields. Physical Review E, 47(1), 327. Please note that the latter (Ness, 1993) contains corrections to the governing equations first written in the former. 3.1.1 Zeroeth-Order [ 0 ] (ℓ + 1) qe E0 (2ℓ + 3) − 3.1.2 u [0] df(ℓ+1) (u) du ! (ℓ + 2) [0] + f (u) 4 (ℓ+1) ! [0] df(ℓ−1) (u) (ℓ − 1) [0] ℓ + qe E0 − f(ℓ−1) (u) u du 4 (2ℓ − 1) ! r h i um e f [0] (u) = 0 for 0 ≤ ℓ ≤ Nℓ − 1 (2) C fℓ[0] (u) − Np ω0 2 ℓ First-order Transverse [ 1T ] [1T] df(ℓ+1) (u) (ℓ + 2) [1T] (ℓ + 2) qe E0 u + f (u) du 4 (ℓ+1) (2ℓ + 3) ! ! [1T] df (u) − 1) − 1) (ℓ (ℓ (ℓ−1) [1T] u − f(ℓ−1) (u) + qe E0 − 1) du 4 (2ℓ ! r h i um e [1T] − C fℓ[1T] (u) − Np ω0 f (u) = 2 ℓ 1 1 [0] [0] Np u f (u) − f (u) (2ℓ − 1) (ℓ−1) (2ℓ + 3) (ℓ+1) for 1 ≤ ℓ ≤ Nℓ − 1 (3) 4 3.1.3 First-order Longitudinal [ 1L ] (ℓ + 1) qe E0 (2ℓ + 3) u [1L] df(ℓ+1) (u) du ! (ℓ + 2) [1L] + f (u) 4 (ℓ+1) ! [1L] df(ℓ−1) (u) (ℓ − 1) [1L] ℓ − f(ℓ−1) (u) + qe E0 u du 4 (2ℓ − 1) h i − C fℓ[1L] (u) − Np ω0 fℓ[1L] (u) = ℓ (ℓ + 1) [0] [0] f (u) + f (u) Np u (2ℓ + 3) (ℓ+1) (2ℓ − 1) (ℓ−1) r ume [0] ω1 fℓ (u) − Np 2 for 0 ≤ ℓ ≤ Nℓ − 1 (4) 3.1.4 Second-order Transverse [ 2T ] (ℓ + 1) qe E0 (2ℓ + 3) u [2T] df(ℓ+1) (u) du ! + 2) (ℓ [2T] (u) + f(ℓ+1) 4 ! [2T] df(ℓ−1) (u) (ℓ − 1) [2T] ℓ u − f(ℓ−1) (u) + qe E0 du 4 (2ℓ − 1) h i − C fℓ[2T] (u) − Np ω0 fℓ[2T] (u) = r 1 (ℓ + 1) [1L] [1T] u f(ℓ+1) (u) + (ℓ + 2) f(ℓ+1) (u) + 3 (2ℓ + 3) r 1 ℓ [1L] [1T] f(ℓ−1) (u) + (ℓ − 1) f(ℓ−1) (u) u 3 (2ℓ − 1) r r r ume 1 ume [1L] − ω1 fℓ (u) − Np ω2 fℓ[0] (u) 2 3 2 for 0 ≤ ℓ ≤ Nℓ − 1 (5) 5 3.1.5 Second-order Longitudinal [ 2L ] (ℓ + 1) qe E0 (2ℓ + 3) u [2L] df(ℓ+1) (u) du ! (ℓ + 2) [2L] + f (u) 4 (ℓ+1) ! [2L] df(ℓ−1) (u) (ℓ − 1) [2L] ℓ − f(ℓ−1) (u) + qe E0 u du 4 (2ℓ − 1) h i − C fℓ[2L] (u) − Np ω0 fℓ[2L] (u) = r 2 (ℓ + 1) (ℓ + 2) [1T] [1L] f (u) − f (u) −u 3 (2ℓ + 3) (ℓ+1) 2 (ℓ+1) r 2 ℓ (ℓ − 1) [1T] [1L] f (u) + f(ℓ+1) (u) −u 3 (2ℓ − 1) (ℓ+1) 2 r r r ume 2 [1L] ume ω1 fℓ (u) − Np ω 2 fℓ[0] (u) + 2 3 2 for 0 ≤ ℓ ≤ Nℓ − 1 (6) 3.2 Steady-State Townsend [ SST ] df(ℓ+1) (u) (ℓ + 2) (ℓ + 1) u (ℓ + 1) + f(ℓ+1) (u) + αeff f(ℓ+1) (u) qE0 u du 4 (2ℓ + 3) (2ℓ + 3) 2 df(ℓ−1) (u) (ℓ − 1) ℓ ℓ u + qE0 u − f(ℓ−1) (u) + αeff f(ℓ−1) (u) du 4 (2ℓ − 1) (2ℓ − 1) 2 h i − C fℓ[SST] (u) = 0 for 0 ≤ ℓ ≤ Nℓ − 1 (7) 4 The Collision Operator MultiBolt applies the collision operator, the change in the electron phasespace due to collisions, as is explored in the following texts: • Loureiro, J., & Amorim, J. (2016). Kinetics and spectroscopy of low temperature plasmas. Berlin: Springer. • Allis, W. P. (1956). Motions of ions and electrons. In Electron-Emission Gas Discharges I/Elektronen-Emission Gasentladungen I (pp. 383-444). Springer, Berlin, Heidelberg. 6 Please consult both for reference. The collision operator is linear, and is treated as a superposition of the collision operator per specific collisions. C fℓ (u) = Catt. fℓ (u) + Cela. fℓ (u) + Cexc. fℓ (u) + Ciz. fℓ (u) + Csup fℓ (u) (8) 4.1 The Most General Form The differential cross section of any process i is defined as: σi (u, χ) = I(u, χ)σi (u) (9) Where σ(u, χ) is specifically the ith differential cross section as a function of both scattering angle χ and electron kinetic energy u. σi (u) is, on the other hand, the ith total integrated cross section, and I(u, χ) captures the behavior of anisotropic scattering. The momentum transfer cross section σm (u) is a common type of integrated cross section which is defined with respect to the differential elastic collision cross section instead as: Z σm (u) = (1 − cos(χ))σ(u, χ)dΩ (10) Ω Databases normally give the elastic momentum transfer cross section for elastic collisions, and the total integrated cross section for inelastic collisions of any kind. For the purposes of a Boltzmann solver, note that it is the elastic momentum transfer cross section which is conserved, while the shape of the elastic total integrated cross section may change depending on the scattering treatment. The total integrated cross section is always unchanged for inelastic collisions regardless of scattering. 4.1.1 Elastic Collisions For Cela. fℓ (u) , per the references above, MultiBolt follows the form of the collision operator using the Lorentz approximation for terms ℓ > 0: Cela. fℓ (u) = Np Z σela. (u, χ) Pℓ cos(χ) − 1 dΩ ufℓ (u) Ω for And fulfills the ℓ = 0 term using: 7 1 ≤ ℓ ≤ Nℓ − 1 (11) me M 2 (me + M) 2me Cela. fℓ (u) = Np M 4.1.2 me M ≈ (12) dfℓ (u) d 2 u σela. (u, χ) fℓ (u) + kB T dΩ (1 − cos(χ)) du du Ω for ℓ = 0 (13) Z Inelastic Collisions The general form of the collision operator for inelastic processes, considering both the forward process i → j and the backwards process j → i, is written instead as: Cinel. fℓ (u) = Z X Np Xj (u + uij ) fℓ (u + uij )Pℓ cos(χ) σji (u + uij )I(u + uij , χ)dΩ − Xi ufℓ (u)σij (u) + Ω i,j Z X Np Xi (u − uij ) fℓ (u − uij )Pℓ cos(χ) σij (u − uij )I(u + uij , χ)dΩ − Xj ufℓ (u)σji (u) Ω i,j (14) Terms related to uij or uji of the collision denote the "scattering out" term, with an appropriate scattering angle χ, while terms unrelated to uij or uji denote the "scattering in" term. It is of important note that the above is not exactly the implementation for ionizing collisions as it has no support for the creation of secondary electrons. This expression used is, instead: Ciz. fℓ (u) = ( Z X Np Xi iz.=i ∞ 2u+uij ( Z X Xi + Np iz.=i sec ′ u′ fℓ (u′ )σiz. (u , u) 2u+uij u+uij ) Z Pℓ cos(χ) I(u′ , χ)dΩdu′ Ω prim ′ u′ fℓ (u′ )σiz. (u , u) Z ) Pℓ cos(χ) I(u′ , χ)dΩdu′ Ω − Np Xi ufℓ (u)σij (u) (15) Where σ(u′ , u) describes the ionization cross section for the scattering-out of a primary electron with energy u′ and the creation of a secondary electron with energy u. 8 The first two terms are relevant to the resultant primary and secondary electrons (the scattering-out terms) and the third term denotes the incident electron scattering-in. MultiBolt presumes that the real differential cross section of this process ′ σ(u , u, χ) does allow for anisotropic scattering for both the primary and secondary electron. Thus, both scattering-out terms primary electron depend on the scattering integral. MultiBolt currently treats σ(u′ , u) as some fraction ∆ of primary energy being imparted to the secondary. Thus, the general expression for ionization is ultimately: Ciz. fℓ (u) = u u Z X X u 1 σk + uk f ℓ + uk + uk Pℓ cos(χ) I(u′ , χ)dΩ Np Xg ∆ ∆ ∆ ∆ Ω g=spec. k=iz. Z X X 1 u u u + Np Xg σk + uk f ℓ + uk + uk Pℓ cos(χ) I(u′ , χ)dΩ 1−∆ 1−∆ 1−∆ 1−∆ Ω g=spec. k=iz. X X − Np Xg σk (u)fℓ (u)u for 0 ≤ ℓ ≤ Nℓ − 1 (16) g=spec. k=iz. While ∆ = 21 , the electrons are sharing energy equally and the first two terms of the above expression are identical. Note that ∆ = 0 represents a special case ("one-electron-takes-all") that is not yet implemented. 4.1.3 Notes on collisions and scattering Some notes on the implementation of cross sections and scattering in general: • MultiBolt assumes all input cross sections are integrated total cross sections for the particular inelastic process, or the momentum transfer cross section σm (u) for elastic processes. • In the place of an elastic momentum transfer cross section, MultiBolt may also accept one effective momentum transfer cross section (which is the sum of the elastic and inelastic cross sections) per input species. In this case, MultiBolt will calculate the value of the elastic momentum transfer cross section using the inelastic cross sections of that same species. 9 • MultiBolt allows only the use of one cross section to describe elastic collisions per-species. • Depending on the particular inelastic process, several terms are guaranteed to drop out of equation 14 based on the population of the related species, which shortens the collision operator per-type of collision. • All cross sections are assumed to be independent of azimuthal direction ϕ. the solid angle integrals may instead be written as R This meansRthat π f(u, Ω)dΩ = 0 2πf(u, χ)sin(χ)dχ Ω 4.2 Derivation of super elastic cross sections A super elastic collision is treated as a collision for which an excited state is the reactant, and a neutral is the product. Meaning, super elastics are only included while χg for the excited state species g is greater than zero. If read from an LXCat cross section file, super elastics are derived from all excitation collisions for which the reactants and products can be discerned. This is done regardless of whether or not a single ("->") or double ("<->") arrow is used by the cross section header. The corresponding super elastic collisions is calculated, from the "parent" excitation, using the Klein-Rosseland relation, also called the principal of detailed balancing (see references at beginning of this section): σji (u) = gi u + uij σij (u + uij ) gj u (17) Where for this case, σij (u) is the parent excitation cross section, σji (u is the derived super elastic cross section, uij is the transition energy of the collision, and ggij ≡ g is the statistical weight of the transition. If g is not provided by the parent excitation cross section, it is assumed to be unity. The derivation of super elastic cross sections is handled specifically by CollisionLibrary rather than MultiBolt. For details, please see the documentation of CollisionLibrary instead. 4.3 Using Isotropic Scattering When scattering is assumed to be isotropic, 1 (18) 4π The differential and total integrated cross sections are always equal. I(u, χ) = 10 σi (u, χ) = σi (u) (19) The elastic momentum transfer cross section also is likewise equal to the differential cross section. σela. (u, χ) = σm (u) Attachment X X Catt. fℓ (u) = − Np Xg σk (u)fℓ (u)u (20) 4.3.1 for 0 ≤ ℓ ≤ Nℓ − 1 (21) g=spec. k=att. 4.3.2 Elastic X X df0 (u) 2me d 2 Cela. fℓ (u) = δℓ,0 Np Xg u σk (u) f0 (u) + kB T M du du g=spec. k=m X X − (1 − δℓ,0 ) Np Xg σk (u)fℓ (u)u for 0 ≤ ℓ ≤ Nℓ − 1 (22) g=spec. k=m 4.3.3 Excitation X X Cexc. fℓ (u) = δ0ℓ Np Xg σk (u + uij )fℓ (u + uij )(u + uij ) g=spec. k=exc. − X X Np Xg σk (u)fℓ (u)u for 0 ≤ ℓ ≤ Nℓ − 1 (23) g=spec. k=exc. 4.3.4 Ionization u u X X u 1 σk + uk fℓ + uk + uk Ciz. fℓ (u) = δ0ℓ Np Xg ∆ ∆ ∆ ∆ g=spec. k=iz. X X 1 u u u + δ0ℓ Np Xg σk + uk f ℓ + uk + uk 1 − ∆ 1 − ∆ 1 − ∆ 1 − ∆ g=spec. k=iz. X X − Np Xg σk (u)fℓ (u)u for 0 ≤ ℓ ≤ Nℓ − 1 (24) g=spec. k=iz. 11 4.3.5 Superelastic X X Csup fℓ (u) = δ0ℓ Np Xg σk (u − uij )fℓ (u − uij )(u − uij ) g=spec. k=sup − X X Np Xg σk (u)fℓ (u)u for 0 ≤ ℓ ≤ Nℓ − 1 (25) g=spec. k=exc. 4.4 Using Anisotropic Scattering todo: Documentation coming soon. 5 Equations for Calculated Parameters In this section, the equations used in MultiBolt for calculating parameters will be given. 5.1 Eigenvalues of Governing Equations kiz.,eff ω0 = = Np s 2qe me ω1 = WBulk = WFlux + s r ω2 = Z ! ∞ ε 0 2qe me X Xg g=spec. Z σi (ε) − i=iz. [0|SST] σi (ε) f0 (ε)dε (26) i=att. X Xg g=spec. X i=iz. σi (ε) − X σi (ε) f0[1L] (ε)dε (27) i=att. 1 (2DFlux,T + DFlux,L ) 3 s ! Z X X 1 2qe ∞ X + ε Xg σi (ε) − σi (ε) f0[2T] (ε)dε (28) Np m e 0 g=spec. i=iz. r ω2 = − X ! ∞ ε 0 X i=att. 2 (DFlux,L − DFlux,T ) 3 s ! Z ∞ X X X 1 2qe + ε Xg σi (ε) − σi (ε) f0[2T] (ε)dε (29) Np me 0 g=spec. i=iz. 12 i=att. 5.2 Distribution Functions All distribution functions for arbitrary terms ℓ are solutions to the implicit linear system Ax = b (30) Where A models the left-hand side of the governing equation, b models the right-hand side of the governing equation, and x is the distribution function for all ℓ. The system is constrained with the normalization condition, for all systems: ( Z ∞ √ 1 for ℓ = 0 εfℓ (ε) = (31) 0 otherwise 0 And the split-boundary conditions: [0|SST] fℓ (ε = 0) = 0 [0|SST] fℓ for (ε = ∞) = 0 ℓ = even, ℓ = 0 for ℓ = odd (32) (33) Equation 31 above, the normalization condition, reflects that the solution is of the units eV −3/2 . This is √a common form for the EEDF, akin to the solution with units eV −1 divided by ε. In this text, the distribution function is treated as both a function of energy in Joules and electron-volts (eV). These are proportional to each other by a −3/2 factor of qe . 5.3 Rate Coefficients 5.3.1 Individual Collisions For any collision with cross section σi (ε), the density-reduced rate coefficient is calculated using: s Z ki 2qe ∞ [0|SST] = εσi (ε)f0 (ε)dε (34) Np me 0 This rate coefficient is not fractionally-weighted. This means that for an included collision whose species fractional presence is zero, this value may be non-zero. 13 5.3.2 Species-weighted Total The "total" rate coefficients for the system for any process (attachment, ionization, etc.) proc., which accounts for the fractional dependence of species spec., is calculated using: s Z ∞ kproc. 2qe X X [0|SST] εσi (ε)f0 (ε)dε (35) = Xg Np me g=spec. 0 i=proc. 5.4 Growth Coefficients 5.4.1 Individual Collisions A valid growth coefficient may be associated with individual ionization or attachment collisions only in SST conditions. For any ionization or attachment collision with cross section σi (ε), the density-reduced ionization coefficient is calculated using: αi kiz.,i /Np = Np WSST (36) And the density-reduced attachment coefficient ηi katt.,i /Np = Np WSST 5.4.2 (37) Species-weighted Total The total ionization and total attachment coefficients are only distinguishable and valid for SST conditions. X X αi α = Xg (38) Np g=spec. Np i=iz. X X η ηi = Xg Np g=spec. Np (39) i=att. The effective ionization coefficient, in SST conditions, is the difference between the total ionization and attachment coefficient. αeff α η = − Np Np Np (40) This is the eigenvalue of the SST condition and is directly solved by SST schemes. 14 HD models cannot accurately discern between growth coefficients from individual collisions. HD+GE models instead use the following to calculate αeff , based on the treatment in the following: • Blevin, H. A., & Fletcher, J. (1984). Electron transport and rate coefficients in Townsend discharges. Australian journal of physics, 37(6), 593-600. αeff W = Np 2DL N 5.5 Drift Velocity 5.5.1 SST Drift Velocity WSST 5.5.2 1 = 3 W 2DL N s 2qe me 2 − ∞ Z 0 kiz. /N − katt. /N DL N (41) εf1[SST] (ε)dε (42) Flux Drift Velocity WFlux 5.5.3 s 1 = 3 s 2qe me ∞ Z 0 εf1[0] (ε)dε (43) Bulk Drift Velocity s WBulk = ω1 = WFlux + 2qe me Z ! ∞ ε 0 X Xg g=spec. X i=iz. σi (ε) − X σi (ε) f0[1L] (ε)dε i=att. (44) 5.6 Mobility 5.6.1 SST Electron Mobility 5.6.2 µSST Np = WSST E0 /Np (45) µFlux Np = WFlux E0 /Np (46) Flux Electron Mobility 15 5.6.3 Bulk Electron Mobility µBulk Np = WBulk E0 /Np (47) 5.7 Diffusion Coefficients 5.7.1 Conventional Diffusion Coefficient (Electrons) s Z ∞ [0|SST] f0 (ε) 1 2 D e Np = qe ε dε 3 me qe 0 σT,eff. 5.7.2 Conventional Diffusion Coefficient (Neutrals) −1 s Z ∞ 1 2 qe [0|SST] Dn Np = qe εσT,eff + kiz.,eff /N q f0 (ε) 2 3 me qe 0 ε (48) (49) qe me 5.7.3 5.7.4 5.7.5 5.7.6 Flux Transverse Diffusion Coefficient s Z ∞ 2 1 qe εf0[1T] (ε)dε DFlux,T Np = 3 me qe 0 Flux Longitudinal Diffusion Coefficient s Z ∞ 1 2 DFlux,L Np = qe εf1[1L] (ε)dε 3 me qe 0 Bulk Transverse Diffusion Coefficient ! r r 1 1 DBulk,T Np = ω2 + ω 2 Np 3 2 Bulk Longitudinal Diffusion Coefficient r √ 1 DBulk,L Np = ω2 − 2ω 2 Np 3 16 (50) (51) (52) (53) 5.8 Energy 5.8.1 Average Electron Energy Z ⟨ε⟩ = 0 5.8.2 6 6.1 ∞ 3 [0|SST] ε 2 f0 (ε)dε (54) Characteristic Electron Energies D D e Np = µ µ[Flux|SST] Np (55) DT DBulk,T Np = µ µ[Bulk] Np (56) DL DBulk,L Np = µ µ[Bulk] Np (57) How To Use This Program C++ Header Library Several example scripts (.cpp "source" files) are distributed with MultiBolt. Please consult these scripts and adapt for your specific use. 6.2 Command Line Arguments Most use-cases for MultiBolt can be accomplished using the command-line API. The command-line API can be used to perform swept calculations using collisions from LXCat input files. Arguments are parsed using keywords which lead with a double-dash. Sweeps are done over values which may be otherwise defined by other commands. The sweep value will always take precedence. 6.2.1 Model --model [option] --N_terms [int] # # # # Model in use. Choose one of: [HD, HD+GE, SST] Number of terms of expansion. Must be even. Must be no less than 2. 17 6.2.2 Environmental --EN_Td [float] # Reduced electric field strength (in Td). --T_K [float] # Temperature (in K). --p_Torr [float] # Pressure (in Torr). 6.2.3 Numeric Grid --Nu [int] # Number of points in finite difference scheme. --initial_eV_max [float] # Grid maximum energy (in eV). --ENERGY_REMAP # flag: allow remap scheme --use_eV_max_guess # flag: treat initial_eV_max as equal to EN_Td # instead of set value for all sweeps 6.2.4 Export # flag: suppress exported data output --no_export --export_location [path] # Export location path --export_name [name] # Name of directory to make for export # in export_location. # By default, uses 'Run_x' 6.2.5 Iterations --conv_err [float] # Convergence error threshold --weight_f0 [float] # Iterative weight for f[0], f[SST] convergence # Must be between 0 and 1 --iter_max [int] # Maximum number of iterations per scheme --iter_min [int] # Minimum number of iterations per scheme 6.2.6 Grid Remap Settings --remap_target_order_span [float] 18 # Preferred log-height of EEDF. # Must be positive. # Maximum number of grid remap attempts --remap_grid_trial_max [int] 6.2.7 Cross section definition --LXCat_Xsec_fid [path] # Read all species in LXCat cross # section file. Call multiple times # for multiple filenames. --species [name] [float] # # # # # # Define one species to use, and its fractional prevalence. Species can only be used if they can be found in any of the given cross section files. Fractional prevalence must be between 0 and 1. --keep_all_species # # # # flag: keep all species which could be found in all files. Note: this can make exported data cluttered. --scale_Xsec [string] [float] # # # # Assign a scalar weight to the named collision. The collision process string must match exactly. Scale must be positive. 6.2.8 Sweep Definition --sweep_option [option] # # # # # Define variable of sweep. Choose one of: [EN_Td, T_K, bin_frac, Nu, N_terms] If value is hard-set elsewhere in arguments, it will be ignored in favor of the sweep. # # # # # If using [bin_frac], all species except the first two will be removed. The binary-fraction, the sweep value, will be assigned to the first species. The second species will be assigned the complimentary fraction. # sweep styles # Note: Some variables are ints. If floats are given in sweep, # the sweep value will be typecast and possibly truncated. 19 # linear sweep --sweep_style lin [start] [stop] [num] # logarithmic (log10) sweep. start and stop are exponents. --sweep_style log [start] [stop] [num] # regular sweep --sweep_style reg [start] [stop] [delta] # point-wise sweep. Give as many points as desired. --sweep_style def [arg1] [arg2] ... [argN] 6.3 Scattering # Elastic scattering treatments # choose one of: Isotropic, # ScreenedCoulomb # ScreenedCoulomb [float] <- denote screening energy --elastic_scattering [option] # Inelastic scattering treatments # choose one of: Isotropic, # IdealForward, # ScreenedCoulomb, # ScreenedCoulomb [float] <- denote screening energy --excitation_scattering [option] --ionization_scattering [option] --superelastic_scattering [option] 6.3.1 Miscellaneous --help # flag: Display command line options. # Ignores all other input. --silent # flag: do not let MultiBolt print statements to stdout. --multibolt_num_threads [int, max] # Define the upper limit of # threads to allow MultiBolt to use (requires OpenMP). # If 'max', MultiBolt will use as many as OpenMP allows. --export_Xsecs # flag: denote that you want to export cross sections #in-use into files. Cross sections will be printed in the # range [1e-3, 1e3] eV 20 6.4 Graphical User Interface The graphical user interface is essentially a wrapper for most command-line API functionality. Make sure you are first familiar with section 6.2. The GUI supports the following commands: • Main > General > Model – "HD", button-select: --model HD – "HD + GE", button-select: --model HD+GE – "SST", button-select: --model SST – "Terms", user-input <int>: --N_terms [int] • Main > General > Environment – "Field Strength [Td]", user-input <float>: --EN_Td [float] – "Pressure [Torr]", user-input <float>: --p_Torr [float] – "Temperature [K]", user-input <float>: --T_K [float] • Main > Numeric > Numeric Grid Settings – "Grid Points [#]", user-input <int>: --Nu [int] – "Use Guess?", checkbox: when true, disable strict definition of initial_eV_max. Value will instead begin the same as E/N (in Td) per-calculation. – "Max Energy [eV]", user-input <float>: --initial_eV_max [float] – "Use Remap?", checkbox: when true, --ENERGY_REMAP • Main > Export > Export Settings – "Suppress export?", checkbox: when true, --no_export – "Export Xsecs?", checkbox: when true, --export_Xsecs – "Change Export Location", pushbutton: press to select directory from file-dialog in --export_location [string] – "Exports with name ", user-input: if not blank, --export_name "yourstring" • Main > More > Iterations – "Conv. Error", user-input <float>: --conv_err [float] – "Relax. Weight", user-input <float>: --weight_f0 [float] 21 – "Max Iter.", user-input <int>: --iter_max [int] – "Min Iter.", user-input <int>: --iter_min [int] • Main > More > Grid Remap Settings – "Log-Height", user-input <float>: --remap_target_order_span [float] – "Max Trials", user-input <int>: --remap_grid_trial_max [int] • Main > More > Parallelization – "Threads", user-input <int, max>: --multibolt_num_threads [int, max] • Main > Set Collisions > LXCat Cross Section Files – "Add File", pushbutton: press to add one or more files with filedialog into --LXCat_Xsec_fid [string] • Main > Set Collisions > Species – Each file added by the-above adds a species to the table. Species which are selected (checkbutton, on the left) will be added explicitly. Species which are unselected will not be added. Denote the species fractional dependence with the user-input to the right of the species name. For each selected entry: --species [string] [float] • Main > Set Collisions > Collision – Scale , user-input <float>: --scale_Xsec "process_string" [float] • Main > Set Collisions > Scattering – "Elastic", option: --elastic_scattering [option] – "Excitation", option: --excitation_scattering [option] – "Ionization", option: --ionization_scattering [option] – "Superelastic", option: --superelastic_scattering [option] • Main > Set Collisions > More – "Electron Energy Sharing", user-input <float>: --sharing [float] • Main > Sweep Settings > Variable For the chosen swept variable, the scalar setting elsewhere in the console will be disabled. MultiBolt will calculate using the sweep definition instead. 22 – "Field Strength": --sweep_option EN_Td – "Temperature": --sweep_option T_K – "Pressure": --sweep_option p_Torr – "Grid Points": --sweep_option Nu – "Terms": --sweep_option N_terms • Main > Sweep Settings > Points Write in as many points as desired as comma-seperated values. – --sweep_style def [float1] [float2] ... [floatN] • Main > Sweep Settings > Linear – --sweep_style lin ["Start"=float] ["Stop"=float] ["N"=int] • Main > Sweep Settings > Log10 – --sweep_style log ["Start"=float] ["Stop"=float] ["N"=int] • Main > Sweep Settings > Regular – --sweep_style reg ["Start"=float] ["Stop"=float] ["Delta"=float] Output from MultiBolt which normally goes to stdout is redirected to the console in the lower right corner. At time of writing, bin_frac is unsupported as a sweep style through the GUI. Please directly use the command line API, or header library, for this instead. 7 Contact For inquiries, you are welcome to contact the following: • Max Flynn, TTU, max.flynn@ttu.edu If you have found an issue with the code, consider submitting a bug report either through the git repository or by emailing with "MultiBolt" in the subject line. 23 8 Usage and Distribution 8.1 MultiBolt MIT License Copyright (c) 2021 Max Flynn, Jacob Stephens Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8.2 Dependencies 8.2.1 Armadillo MultiBolt uses Armadillo, a C++ header library, to perform linear algebra operations. For distribution information, please see the license file associated with the version of Armadillo linked in the repository. 8.2.2 SuperLU MultiBolt makes use of SuperLU to solve sparse matrix systems. SuperLU 5.2.x is interfaced-with by Armadillo. For distribution information, please see the license file associated with the version of SuperLU linked in the repository. 24