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.