22 November 1996
27 November 1996
4 December 1996
9 December 1996
17 December 1996
6 January 1997
27 January 1997
10 June 1997
14 January 1998
SMC, v 2.5, (c) G.J. Parker, 1996-8
REFERENCE MANUAL
this file contains documentation for the stand-alone Monte Carlo program.
which will be referred to as the Simple Monte Carlo program (SMC). the accompany
USER MANUAL gives a brief overview on how to run the SMC.
the SMC is free, however it must not be given to anyone with out my
knowledge and consent. currently, i can be reached at parker9@llnl.gov and/or
parker9@cwws.net. acknowledgements in any work that uses this
program in whole or in part is also required. other than these caveats,
you can do what you wish with this code.
source files:
------------
mc.f- main Monte Carlo routines (fortran source)
mc_execute.f- set up routine for MC, calls MC (fortran source)
mc1.inc- include file for common blocks (fortran source)
mc2.inc- include file for common blocks (fortran source)
Makefile- make file to compile program- works for HP (make file)
input files:
-----------
structure.in- namelist file to define mesh and other parameters
mc.in- namelist file to control execution of MC routine
and numerous other files which are specified in the above two files.
revision history:
----------------
1.0 22 Nov. 96 first relase
1.0.1 27 Nov. 96 added support for dump files: fe_last.dat & mc.rates
1.1 4 Dec. 96 added support for full eedf (see mc.in)
1.2 9 Dec. 96 added support for launching off surface cells
1.2.1 17 Dec. 96 added e_n_0d to structure.in and appropriate code
1.2.2 6 Jan. 97 fixed cosmetic bug in collision partner output string
1.2.3 27 Jan. 97 fixed some IBM compiler issues, minor bugs
2.0.3 10 Jun. 97 fixed non-energy conserving particle push and many
cosmetic bugs
2.5 14 Jan. 98 rewrote 4th order Runge-Kutta integrators and added
support for harmonic fields. additional output files
added.
philosophy of code:
------------------
the SMC is based upon the hybrid code i developed at LLNL where i use
fluid equations for transport (electrons, ions and neutral) but instead of
solving the temperature equation, a MC subroutine is used to find the electron
edf which is then used to close the fluid equations by taking numerous moments
(velocity, energy, rates, etc.). this code uses the same MC subroutine, but
obviously it doesn't include the fluid part (aka INDUCT9X). in the hybrid code,
there are auxiliary subroutines which allow the fluid and MC routines to talk
back and forth. here, a new routine (mc_execute.f) was written which implements
some (not all) of the tasks which the original routines did to set up the
data structures for the MC from the fluid equation solver.
mc_execute.f (and the executable mc_execute) therefore reads the namelist
file called structure.in (in the current directory) and based on the information
it finds there, sets up data structures so that the MC subroutines won't even
know it's not part of the hybrid program anymore. this was useful in development,
since i only have to keep one version of the MC subroutines for both the hybrid
and for this stand-alone version. the downside is that the standalone version
has a somewhat 'split' personality. it needs two standard input files and it's
a tad strange. one could combine mc_execute.f and mc.f, but as stated above,
it is of no advantage to me.
in the source files, opening files are different for different
machines. specifically, files which need to be appended are handled differently
between IBM and HP/Absoft compilers. The latter require the string "access='append'",
while the former does not. depending on the target machine, the source must be
changed. simply doing a search for IBM in a text editor will show the two
different versions of the open statements. comment out the one which will not
work and uncomment the other. be sure to find all occurrences of IBM. similarly,
there seems to have been yet another variant for the Absoft Linux f77 compiler.
this compiler requires "position='append". so these lines are tagged with
the comment ABSOFT PC.
definition of problem:
---------------------
the SMC uses a Runge-Kutta (either 2nd or 4th order) integration scheme
to push particles in a user specified geometry, fields and other particle density
profiles. collisions between electrons and non-electron species are user specified
and type of scattering (isotropic or anisotropic; elastic, superelastic, inelastic,
ionization or attachment). e-e coulomb collisions are not currently implemented in
this version. the output of this program is the eedf as a function of position
and kinetic energy and numerous moments of this distribution including collision
rates for each collision process.
generation and execution of executable:
--------------------------------------
typing either 'make mc_execute' or 'make mc_executed' at the command line
prompt in the directory which contains the four source files and the Makefile will
generate executable code. the latter command will produce a slower but debuggable
version of the code. to execute the code, the current directory must contain
the two files structure.in and mc.in. the executable code need not be in the same
directory.
fortran 77 with extensions are used through out the code. the major extensions
used include namelist, exit and do while constructs.
input file definitions:
-----------------------
as mentioned previously, there are two main input files for the SMC:
structure.in and mc.in. the former defines the geometry and parameters of the
problem while the other controls the manner in which the SMC is executed. in
each of these files, other input files (e.g. cross section files) are defined
and subsequently read.
>>>> structure.in <<<<
this file is the first data file read and must exist. the valid entries
in this file are:
******
nr_mc = number of radial/x cells [#]
nz_mc = number of axial cells [#]
r_max_mc = maximum radius/x value [cm]
z_max_mc = maximum axial value [cm]
nspec_mc = number of non-electron species [#]
specn_mc(...) = string of species name(s) [string array]
te0 = initial electron temperature [eV]
maskfile = file name of mask structure [string]
phifile = file name of potential profile [string]
denfile = file name of density profile [string]
elaunchfile = file name of initial electron launch profile [string]
sheathfile = file name of sheath potentials [string]
uniform_s_p = if .true. then ignore elaunchfile and launch [boolean]
electrons uniformly throughout the discharge
lcyl_mc = is this cylindrical geometry (r,z)? [boolean]
otherwise it's Cartesian (x,z)
e_n_0d = if (max(nr_mc,nz_mc).le.1) then 0d calc and this is the reduced
field, E/N in Townsend (1Td = 1e-17 V cm^2) [Td]
xsym_p = if (.not.lcyl_mc) (ie Cartesian) is x=0 a plane of symmetry [boolean]
read_e_p = if .true. then read in erxfile and/or erfile [boolean]
otherwise compute Ez and Erx via electrostatic potential
ezfile = file name for static Ez fields [string]
erxfile = file name for static Er or Ex fields [string]
bplrxfile = file name for static Br or Bx fields [string]
bplthyfile = file name for static Bth or By fields [string]
bplzfile = file name for static Bz fields [string]
rf_freq_mc = frequency of harmonic fields [Hz]
eh_rxfile = file name for harmonic Er or Ex fields [string]
eh_thyfile = file name for harmonic Eth or Ey fields [string]
eh_zfile = file name for harmonic Ez fields [string]
bh_rxfile = file name for harmonic Br or Bx fields [string]
bh_thyfile = file name for harmonic Bth or By fields [string]
bh_zfile = file name for harmonic Bz fields [string]
******
if max(nr_mc, nz_mc) = 1, then the SMC is run in 0d and the following files are
ignored: maskfile, phifile, elaunchfile, sheathfile, ezfile and erxfile. the
following variables are ignored: uniform_s_p, lcyl_mc, read_e_p and xsym_p.
the reduced field (E/N in Td) is specified by e_n_0d and this is the only time
where the e_n_0d is used.
if nr_mc=1 and nz_mc <> 1, then the SMC is run in 1d Cartesian mode (ie
plane parallel geometry). xsym_p is set to be true and lcyl_cm is set false.
if nz_mc=1 and nr_mc <> 1, then the SMC is run in 1d cylindrical mode (ie
cross section of cylinder). xsymp_p is set to false and lcyl_mc is set true.
default values are nr_mc = 1 and nz_mc = 1
the range of r or x runs from 0 to r_max_mc. default value of r_max_mc = 1cm
the range of z runs from 0 to z_max_mc. default value of z_max_mc = 1cm
the number of non-electron species is given by nspec_mc. there must be at
least one non-electron species. default value is 0 which will cause an error!
the array specn_mc(1-nspec_mc) contains the name of each non-electron species.
this name is used later in the densfile and in the cross section file (see mc.in
specification below). spaces and case are ignored. default value is undefined.
te0 is the initial electron energy or temperature at launch (see ext_max_mc below in
mc.in). default value is 2eV
maskfile is the name of the 'mask' file. the simulation region is defined by a
mask file which contains an integer matrix of size nr_mc X nz_mc. values of 0
mean vacuum/plasma region while non-zero values are solids. use of negative
mask values is not recommended. if this file is not specified or exist, the
entire region (nr_mc X nz_mc) is assumed to be entirely plasma (ie 0). default
value is 'none.msk'
phifile is the name of the electrostatic potential file. the potential is not
actually used by the SMC, but the electric fields defined by this potential
are. the size of this real array is nr_mc+2 X nz_mc+2 and the values are
defined to be at centers of the computational cells. the fields are calculated
by taking the negative of the differences between adjacent cells and dividing
by the distance separating them. this would give fields on the center of the
edges of each computational cell (nr_mc+1 for Er/Ex and nz_mc+1 for Ez).
however, the SMC expects fields to be on the corners of cells and so once these
intermediate fields are calculated, averages are used to find the fields
at cell corners. these are the fields which will be used to push electrons.
the potential is specified in terms of Volts (mks). sometimes this way of
specifying the fields are not accurate enough. if this is true, the actual
fields can be read directly instead of being computed from the electrostatic
fields (see read_e_p below). however, this file must exist regardless.
default value is 'none.phi'
denfile is the name of the density file. for each non-electron specie specified
by nspec, and specn_mc(), there must be an nr_mc X nz_mc real matrix for each.
the value represents the density in each computation cell in units of 1/cc.
default value is 'none.den'
elaunchfile is the name of the initial electron probability density for launching
the initial electrons. if this file doesn't exist, isn't specified or uniform_s_p
is true, then it is ignored and electrons are launched uniformly within the
volume. otherwise the value is proportional to the probability of the electron
starting in this computational cell. if the mask for this cell is zero, then
electrons are launched within the cell according to the value of ext_max_p (see
mc.in below). otherwise, mask <> 0 and the cell must border a plasma (mask=0)
cell. electrons will then be launched from the surface of the cell. the real
matrix is nr_mc+k X nz_mc+2 where k = 1 if lcyl_mc or xsym_p are true and k =
2 otherwise. the units are arbitrary. if electrons are launched from
surface cells AND volume cells, the SMC will delineate two `groups' of
electrons. electrons launched from volume/plasma cells are Group 0 while
those launched from surfaces are Group 1. the number in each group is proportional
to the total probability given in this file. default value is 'none.elh'
sheathfile is the name of the sheath potential file. if there are very thin
sheaths and/or very large electric fields near vacuum/solid interfaces, the
Runge-Kutta method used in the SMC is not very accurate. in this case, instead
of specifying the field in the phifile, one can specify a potential barrier
that the electrons must overcome right at the interface to leave the discharge.
if this file doesn't exist or isn't specified, all sheath potentials are zero
(other than what is already specified in phifile!). otherwise this file contains
either an nr_mc+1 X nz_mc+2 or nr_mc+2 X nr_mc+2 real matrix. the former if
xsymp_p or lcyl_mc is true. only values for cells which are solid but
share a edge or corner with a vacuum/plasma cell are relevant. the value is
the sheath potential (in volts) that the electron must overcome. if
sheath_potential0 in mc.in (see below) is less than or equal to zero, then
this file is ignored and all sheath potentials are set equal to zero. otherwise
the value in this matrix times sheath_potential0 is the voltage of the sheath.
if this value is less than zero (anti sheath!), that particular sheath voltage
is set equal to zero. default value is 'none.shp'
uniform_s_p is true if electrons should be launched uniformly throughout the
vacuum/plasma region. it is set to be true if elaunchfile doesn't exist. otherwise,
elaunchfile specifies how electrons are launched. default is true.
lcyl_mc is true if the geometry is cylindrical (azimuthal symmetry assumed!) or
is false if Cartesian. see above if either nr_mc or nz_mc is set equal to 1.
if lcyl_mc is true, then xsym_p is set to false. default is true.
e_n_0d is the reduced field (E/N in Td) for a 0d (ie nr_mc = nz_mc = 1) SMC
simulation, otherwise it's ignored. if it is a 0d simulation, it must be non-zero.
the sum of particle densities (all nspec_mc of them) times 1e-17 times e_n_0d
gives the 0d electric field (v/cm). 1 Td = 1e-17 V cm^2. default is 0
xsym_p is ignored if lcyl_mc is true. if lcyl_mc is false then if xsym_p is
true then x=0 is a plane of symmetry. otherwise it isn't. default is true
read_e_p is .true. then the electric fields are read from data files ezfile and
erxfile if they exist. if .false. or the data file doesn't exist then the
electric field is compute from electrostatic potential. default value is .false.
ezfile is the name of the Ez file and is only used if read_e_p is .true.
this file contains the values of the axial electric field Ez (V/cm) at the
corners of the computational cells. therefore it is a matrix of size
nr_mc+1 X nz_mc+1 real numbers. if file doesn't exist then Ez is computed
from the electrostatic potential. default value is 'none.ez'
erxfile is the name of the Er or Ex file and is only used if read_e_p is .true.
this file contains the values of the electric field Er or Ex (V/cm) at the
corners of the computational cells. therefore it is a matrix of size
nr_mc+1 X nz_mc+1 real numbers. if file doesn't exist then Er/x is computed
from the electrostatic potential. default value is 'none.erx'
bplrxfile is the name of the Br or Bx file. this file contains the values of the
magnetic field Br or Bx (gauss) at the corners of the computational cells. therefore
it is a matrix of size nr_mc+1 X nz_mc+1 real numbers. if file doesn't exist
then Br or Bx is set to zero. for magnetic fields to be used, b_fieldsp (in mc.in, see
below) must also be set to .true. default value is 'none.bprx'
bplthyfile is the name of the Bth or By file. this file contains the values of the
magnetic field Bth or By (gauss) at the corners of the computational cells. therefore
it is a matrix of size nr_mc+1 X nz_mc+1 real numbers. if file doesn't exist
then Bth or By is set to zero. for magnetic fields to be used, b_fieldsp (in mc.in, see
below) must also be set to .true. default value is 'none.bpty'
bplzfile is the name of the Bz file. this file contains the values of the axial
magnetic field Bz (gauss) at the corners of the computational cells. therefore
it is a matrix of size nr_mc+1 X nz_mc+1 real numbers. if file doesn't exist
then Bz is set to zero. for magnetic fields to be used, b_fieldsp (in mc.in, see
below) must also be set to .true. default value is 'none.bpz'
rf_freq_mc is the frequency of the harmonic fields, if there are any. otherwise the
value is not used. default value is 13.56e6 Hz.
eh_rxfile is the name of the harmonic Er or Ex file. this file contains the values of the
electric field Er or Ex (V/cm) at the corners of the computational cells. therefore
it is a matrix of size nr_mc+1 X nz_mc+1 complex numbers such that the instantaneous fields
are real( Er/x * exp(-i 2 pi rf_freq_mc t)). if file doesn't exist then the harmonic Er or Ex is
set to zero. for this electric field to be used, harmonic_p (in mc.in, see
below) must be set to .true. default value is 'none.ehrx'
eh_thyfile is the name of the harmonic Eth or Ey file. this file contains the values of the
electric field Eth or Ey (gauss) at the corners of the computational cells. therefore
it is a matrix of size nr_mc+1 X nz_mc+1 complex numbers such that the instantaneous fields
are real( E * exp(-i rf_freq_mc t)). if file doesn't exist then the harmonic Eth or Ey
is set to zero. for this electric field to be used, harmonic_p (in mc.in, see
below) must be set to .true. default value is 'none.ehty'
eh_zfile is the name of the harmonic Ez file. this file contains the values of the
electric field Ez (gauss) at the corners of the computational cells. therefore
it is a matrix of size nr_mc+1 X nz_mc+1 complex numbers such that the instantaneous fields
are real( Ez * exp(-i rf_freq_mc t)). if file doesn't exist then the harmonic Ez
is set to zero. for this electric field to be used, harmonic_p (in mc.in, see
below) must be set to .true. default value is 'none.ehz'
bh_rxfile is the name of the harmonic Br or Bx file. this file contains the values of the
magnetic field Br or Bx (gauss) at the corners of the computational cells. therefore
it is a matrix of size nr_mc+1 X nz_mc+1 complex numbers such that the instantaneous fields
are real( Br/x * exp(-i rf_freq_mc t)). if file doesn't exist then the harmonic Br or Bx is
set to zero. for this magnetic field to be used, b_fieldsp and harmonic_p (in mc.in, see
below) must both be set to .true. default value is 'none.bhrx'
bh_thyfile is the name of the harmonic Bth or By file. this file contains the values of the
magnetic field Bth or By (gauss) at the corners of the computational cells. therefore
it is a matrix of size nr_mc+1 X nz_mc+1 complex numbers such that the instantaneous fields
are real( B * exp(-i rf_freq_mc t)). if file doesn't exist then the harmonic Bth or By
is set to zero. for this magnetic field to be used, b_fieldsp and harmonic_p (in mc.in, see
below) must both be set to .true. default value is 'none.bhty'
bh_zfile is the name of the harmonic Bz file. this file contains the values of the
magnetic field Bz (gauss) at the corners of the computational cells. therefore
it is a matrix of size nr_mc+1 X nz_mc+1 complex numbers such that the instantaneous fields
are real( Bz * exp(-i rf_freq_mc t)). if file doesn't exist then the harmonic Bz
is set to zero. for this magnetic field to be used, b_fieldsp and harmonic_p (in mc.in, see
below) must both be set to .true. default value is 'none.bhz'
>>>> mc.in: <<<<
assuming that structure.in file and the files specified within are
read w/o error, control passes onto the MC subroutines mentioned in the introduction.
this namelist file is then read. the valid entries in this file are:
******
run_label = root name of output files [string]
q_tot_data = file name of cross section data [string]
q_dcs_data = file name of differential cross section data [string]
ee_max = maximum kinetic energy for recording eedf [eV]
e_min = not used in SMC [eV]
random_seed = random number seed [integer]
sheath_potential0 = in conjunction with array in sheathfile, gives the sheath
potential between plasma and solid interface [V]
t_max = maximum time to follow any one electron (s) (see below)
t_min = minimum time to follow any initial electron before recording data (s)
harmonic_p = must be false for SMC [boolean]
push_order = order of Rundge-Kutta integration [#]
b_fieldsp = must be false for SMC [boolean]
m_ave_time = approx. number of collisions for each electron (see below)
dumpfile_p = true --> write many files out for SMC results,
false --> write the minimum number of files.
n_traj = number of (initial) electrons to follow
min_energy = not used in SMC [eV]
ext_max_p = true --> launch electrons via Maxwellian distribution at temperature
te0 (specified in structure.in) and uniformly in a spatial cell
= false --> launch electrons w/ energy given by te0 and at center of cells
nfe = number of spatial points in which eedf is desired [#]
zfe(1-nfe) = axial position of where eedf is desired [cm]
rfe(1-nfe) = radial/x position of where eedf is desired [cm]
t_min_region(0) = controls the minimum time (see t_min above and below) [s]
full_eedf_p = eedf as a function of (E,mu,phi) at selected spatial cell(s)? [boolean]
nmu_mc = if full_eedf_p = true, number of mu (= cos (theta)) (in velocity space)cells [#]
nphi_mc = if full_eedf_p = true, number of phi (azimuthal velocity angle) [#]
spec_t = must be 0 for SMC [real]
spec_tn = not used in SMC [real]
spec_tq = not used in SMC [real]
fe_last_p = must be false for SMC [boolean]
trapped_p = must be false for SMC [boolean]
accum_t_p = for secondary electrons (ie electrons from ionization), should we include the
time it's parent(s) had been simulated or should we set the clock back to 0? [boolean]
secondary_p = true --> follow electrons produced in ionization [boolean]
false --> only follow original electron in ionizations
ion_equal_e_p = [boolean]
true --> each electron after ionization gets 1/2 available energy
false --> use random energy sharing if neutral is NOT one of the
following: Ne, Xe, He, Ar (as defined in specn_mc() string array.
if neutral is one of these elements, then use empirical energy
redistribution function.
del_xt = fraction of spatial cell to move in one time step [real]
del_bf = fraction of local gyroperiod that time step can be [real]
see_p_mc = must be false for SMC [boolean]
******
run_label is a string which specifies some of the names for the output files. if not
specified, the default value is 'mc_out'.
q_tot_data is the name of the cross section file. file must exist. see below for
specification of file. default is 'none'
q_dcs_data is the name of the differential cross section file for anisotropic scattering.
file does not have to exist. default is 'none'
ee_max is the maximum kinetic energy recorded for the eedf, though electrons can have
any kinetic energy. default is 50eV
e_min is not used in SMC. 0.1 is a safe value.
random_seed is the seed value of the random number generator. different values of this
integer will generate a different quasi-random number sequence. constant values across
runs will generate the same sequence. default is 0
sheath_potential0 in conjunction with the matrix in sheathfile (see above) specifies
the sheath potential. if sheathfile doesn't exist or a value of zero is specified
for a valid cell (ie solid cell which borders a vacuum/plasma cell) then the sheath
potential for that cell is set equal to sheath_potential0. if the cell has a non-zero
value the product of that value and sheath_potential0 is the sheath voltage. if the
product is less than zero, it's set to zero. if sheath_potential0 is non-positive,
ALL sheath potentials are set to zero. default value is zero.
t_max is one way to set the maximum time to follow any one electron. if t_max is
is non-negative, this is the maximum time (in seconds) that any electron can be followed. if
t_max is non-positive and m_ave_time (see below) is positive, then t_max is set equal
to the product of m_ave_time and the minimum collision time calculated from the
cross section data. default value is undefined.
t_min is one way to specify the minimum time to follow an initial electron before
recording statistics. if secondaries are followed, secondaries are always recorded, though
not made until electrons have went at least t_min seconds. if t_max is initially
negative, then t_min is set equal to minimum collision time * m_ave_time *
abs(t_min / t_max). default value is undefined.
if t_min > t_max (w/ or w/o m_ave_time), then the values are swapped.
t_min is only used if t_min_region(0) is less than zero! otherwise t_min is (effectively )
set equal to zero.
harmonic_p must be set to false for SMC. default is false
push_order is the order of the Runge-Kutta integration scheme. only values of 2 and 4
are valid. invalid values are set to 2. default is 2.
b_fieldsp must be set to false for SMC. default is false
m_ave_time is approx. maximum number of collisions for each electron. only used if
t_max < 0 (see above). default value is 1500
dumpfile_p specifies if many output files should be produced or not. default is false.
n_traj is the number of initial electrons to be launched and followed. electrons
which don't survive for at least t_min are ignored. default value is 1000
min_energy is not used in SMC. default value is 0.0
ext_max_p if true then SMC launches electrons via Maxwellian distribution at temperature
te0 (specified in structure.in) and uniformly in a spatial cell. otherwise SMC
launches electrons w/ energy given by te0 and at center of cells. default is false.
nfe is the number of spatial points in which eedf is desired. if less than 0, all
spatial cells are specified (zfe(...) and rfe(...) are ignored). default is 0.
zfe(1-nfe) is axial position array of where eedf is desired. default value is undefined.
rfe(1-nfe) radial/x position array of where eedf is desired. default value is undefined.
t_min_region(0) if is less than 0, then t_min as specified above is used. otherwise
t_min is set equal to 0.0. default value is 0.0
full_eedf_p specifies if the distribution should be a function of
not only energy (E) but also of the two spherical angles, theta, phi,
where cos(theta) = Vz/V and tan(phi) = Vy / Vx. if true, only those spatal cells
specified by nfe, zfe(...) and rfe(...) are outputted. note, due to the memory
requirements, not every spatial cell can be specified. if false, then eedf
is only a function of E for each spatial cell. NOTE: if .true., only statistics
for the full eedf are tracked therefore many of the other output files may contain
incorrect data. running the simulation twice (once w/ full_eedf_p true and then
renaming the output file {run_label}.2 to an unique name and then rerunning the
simulation w/ full_eedf_p false) will give complete and accurate output. default value is false.
nmu_mc is the number of mu = cos(theta) cells for the full eedf. only used if
full_eedf_p is true. width of cells is uniform and is 2 / nmu_mc ( -1 =< mu =< 1).
default value is 20.
nphi_mc is the number of phi cells for the full eedf (tan(phi) = Vy/Vx). only used
if full_eedf_p is true. width of cells is uniform and is 2 pi / nphi_mc. default
value is 40.
spec_t must be 0 for SMC. default value is 0
spec_tm is not used in SMC. default value is 5.4858026e-4
spec_tq is not used in SMC. default value is -1.
min_energy_eq_ion_p is not used in SMC. default value is false
trp_max_p must be false for SMC. default value is TRUE!
fe_last_p must be false for SMC. default value is false
trapped_p must be false for SMC. default value is TRUE!
accum_t_p is false means that newly created electrons from ionization events have their
clock reset to 0 and so it must be simulated for the full time specified. true means
the electron inherits the total simulation time of it's parent. default is false.
secondary_p specifies if secondary electrons from ionization should be followed or
not. if true and ionizations can sustain the discharge, SMC may never finish! default
value is TRUE!
ion_equal_e_p = specifies if the electrons after ionization get 1/2 of the available
kinetic energy or not. if false, use random energy sharing if neutral is NOT one of the
following: Ne, Xe, He, Ar (as defined in specn_mc() string array. if neutral is one of
these elements, then use empirical energy redistribution function. default is FALSE!
del_xt is fraction of spatial cell to move in one time step. to insure accurate
sampling of electric fields, it should be less than 1.0. default value is 0.5
del_bf is the maximum fraction of the local gyroperiod that the time step can be if
magnetic fields are present. otherwise it is ignored. default value is 0.1
>>>> q_tot_data <<<<
this string is the name of the cross section file. file must exist. for the
nspec_mc (in structure.in) non-electron species, there must be an entry in this file.
an entry begins with a name of any one species. within each entry, the form must be of
the following (which is IDENTICAL to the form for cross section files used by
ELENDIF (tm)):
species [text string 'species' on a new line]
{species name} [string]
line ignored
line ignored
{# of vibrational, # of excitations, # of other collisions} [integer integer integer]
line ignored
line ignored
{atomic weight in amu} [real]
line ignored
{optional CAR data}
line ignored
{collision def #1}
{collision def #2}
...
{collision def #n}
the total number of collisions is the sum of the vibrational, excitation and other
collisions plus 1 for the implied momentum transfer cross section. the only thing of
importance here is that this sum + 1 must equal the total number of electron collisions
with this species.
the optional CAR data consists of two lines. the first line MUST contain the
string 'CAR:' as the first four non-blank characters. the second line is ignored
{collision def} is defined for either an elastic (momentum transfer) collision or
not. for an elastic (momentum transfer) collision (name of collision MUST contain the
string '_MOMXFR', {collision def} is defined by:
{name of collision} [string containing '_MOMXFR']
line ignored
{number of energy points} {scale}
line ignored
{energy cross section} {energy cross section} ...
otherwise {collision def} is defined by:
{name of collision} [string NOT containing '_MOMXFR']
line ignored
{energy loss} {degeneracy} {number of energy points} {scale}
line ignored
{energy cross section} {energy cross section} ...
where {energy loss} is the amount of energy loss (eV) in this collision (<0 are super-
elastic), {scale} * {cross section} is the cross section in units of 10**-16 cm**2
{energy} (in eV) must be in ascending order, {degeneracy} is the degeneracy of this
level and {number of energy points} is the number of energy/cross section points for
this collision.
collisions have the following types depending if the following strings are contained
in the {name of collision}
sub string meaning
---------- -------
_MOMXFR elastic (momentum transfer) cross section
_ION ionization
_DISATT attachment
_ATT attachment
if {name of collision} does NOT contain any of these sub-strings, then it is assumed
to be some generic type of collision (e.g. inelastic).
>>>> q_dcs_data <<<<
this string is the name of the differential cross section file for anisotropic
scattering. this file is optional. if it doesn't not exist or is not specified, then
all scattering is assumed to be isotropic is the lab frame. otherwise the file is
scanned for valid entries. a valid entry starts with at least four (4) '>' on a new
line. each entry has the following form:
file does not have to exist. default is 'none'
{name of collision} [string]
line ignored
{diff collision def}
where {name of collision} is a collision which was previously defined in
the file given in q_tot_data (see above). if this collision name was not defined in
q_tot_data, then the entry is ignored. case and spaces are ignored in collision
names. {diff collision def} come in one of two forms. either "table" or "formula".
a "table" is defined as:
table
{number of angles} {number of energies}
{angle1} {angle2} {angle3} ...
{energy1} {ds(1,1) ds(1,2) ds(1,3) ...
{energy2} {ds(2,1) ds(2,2) ...
...
where {energy} is in eV, {angle} in degrees and {ds(,)} is the differential
cross section (arbitrary units). the string "table" must be present. "formula"
{diff collision def}s are defined as:
beta
{average cosine of the scattering angle}
where {average cosine of the scattering angle} is between -1 and 1 and a
distribution of scattered electrons are assumed to be of a form
1. + alpha cos(theta_scat) where theta_scat is the angle scattered, alpha
and the range of angles are determined so that the total probability is
1 and that the average cosine of the scattering angle is
{average cosine of the scattering angle}.
output:
------
most of the output files are self explanatory, so only information not obvious
will be given here.
run_label.0- contains the eedf at the user specified nfe locations (see mc.in).
run_label.1- contains the total probability (integrated eedf) as a function of
kinetic energy for each mask value. at the end is what mask structure used was.
run_label.2- contains full eedf (ie F(E,mu,phi)) if requested from user
run_label.7- contains general information on the simulation. total number of
collisions for each type is reported. then each global collision rate is given
by both actual number of MC events but also by integrating the eedf directly.
the eedf results are given in '<','>'s. diagnostics for 'power' are only accurate
up to an arbitrary multiplicity constant. next, tables giving average energy (eV),
density (arb/cm^3) and an average distribution function (1/eV) are given.
if dumpfile_p is true (see mc.in) then the following files are generated:
v_sigma.k: average collision rate (cm**3/s) as a function of (r, z, collision)
den.k: non-electron particle densities (1/cm^3) as a function of (r,z)
gpt.k: density of electrons (arb/cm^3) as a function of (r, z)
tt.k: total time electrons spent (sec) as a function of (r,z) (prop. to # of electrons)
vr.k: average radial velocity (cm/s) if lcyl_p is true as functions of(r,z)
vth.k: average azimuthal velocity (cm/s) if lcyl_p is true as functions of(r,z)
vx.k: average x velocity (cm/s) if lcyl_p is false as functions of(r,z)
vy.k: average y velocity (cm/s) if lcyl_p is false as functions of(r,z)
vz.k: average axial velocity (cm/s) as functions of(r,z)
ingold.k: numerous 0d transport coefficients. if not a 0d run, averaged eedf is used.
shp.k: sheath potential (v) as a function of (r,z)
loss.k: count of where electrons trajectories ended as function of (r,z)
gain.k: count of where electrons are created - lost as function of (r,z)
mask.k: mask structure matrix used in simulation.
energy.k: average electron energy (eV) as function of (r,z)
ez.k: static axial electric field (v/cm) as function of (r,z) [no file => zero field]
er.k: static radial electric field (v/cm) if lcyl_p is true as function of (r,z) [no file => zero field]
ex.k: static x electric field (v/cm) if lcyl_p is false as function of (r,z) [no file => zero field]
bz.k: static axial magnetic field (gauss) as function of (r,z) [no file => zero field]
br.k: static radial magnetic field (gauss) if lcyl_p is true as function of (r,z) [no file => zero field]
bx.k: static x magnetic field (gauss) if lcyl_p is false as function of (r,z) [no file => zero field]
ez.k: harmonic axial electric field (v/cm) as function of (r,z) [no file => zero field]
er.k: harmonic radial electric field (v/cm) if lcyl_p is true as function of (r,z) [no file => zero field]
ex.k: harmonic x electric field (v/cm) if lcyl_p is false as function of (r,z) [no file => zero field]
bz.k: harmonic axial magnetic field (gauss) as function of (r,z) [no file => zero field]
br.k: harmonic radial magnetic field (gauss) if lcyl_p is true as function of (r,z) [no file => zero field]
bx.k: harmonic x magnetic field (gauss) if lcyl_p is false as function of (r,z) [no file => zero field]
phi.k: electrostatic potential (V) as function of (r,z)
bug reports:
-----------
when you run across a bug/error (notice i said when), please fill out a
brief but informative report and send to me. also, if you have squashed a bug
which is in the original code, i would like to know that also.