.. _methods_introduction: ============ Introduction ============ The physical process by which a population of particles evolves over time is governed by a number of `probability distributions`_. For instance, given a particle traveling through some material, there is a probability distribution for the distance it will travel until its next collision (an exponential distribution). Then, when it collides with a nucleus, there is associated probability of undergoing each possible reaction with that nucleus. While the behavior of any single particle is unpredictable, the average behavior of a large population of particles originating from the same source is well defined. If the probability distributions that govern the transport of a particle are known, the process of single particles randomly streaming and colliding with nuclei can be simulated directly with computers using a technique known as `Monte Carlo`_ simulation. If enough particles are simulated this way, the average behavior can be determined to within arbitrarily small statistical error, a fact guaranteed by the `central limit theorem`_. To be more precise, the central limit theorem tells us that the variance of the sample mean of some physical parameter being estimated with Monte Carlo will be inversely proportional to the number of realizations, i.e. the number of particles we simulate: .. math:: \sigma^2 \propto \frac{1}{N}. where :math:`\sigma^2` is the variance of the sample mean and :math:`N` is the number of realizations. ------------------------ Overview of Program Flow ------------------------ OpenMC performs a Monte Carlo simulation one particle at a time -- at no point is more than one particle being tracked on a single program instance. Before any particles are tracked, the problem must be initialized. This involves the following steps: - Read input files and building data structures for the geometry, materials, tallies, and other associated variables. - Initialize the pseudorandom number generator. - Read ACE format cross sections specified in the problem. - If using a special energy grid treatment such as a union energy grid or lethargy bins, that must be initialized as well. - In a fixed source problem, source sites are sampled from the specified source. In an eigenvalue problem, source sites are sampled from some initial source distribution or from a source file. The source sites consist of coordinates, a direction, and an energy. Once initialization is complete, the actual transport simulation can proceed. The life of a single particle will proceed as follows: 1. The particle's properties are initialized from a source site previously sampled. 2. Based on the particle's coordinates, the current cell in which the particle resides is determined. 3. The energy-dependent cross sections for the material that the particle is currently in are determined. Note that this includes the total cross section, which is not pre-calculated. 4. The distance to the nearest boundary of the particle's cell is determined based on the bounding surfaces to the cell. 5. The distance to the next collision is sampled. If the total material cross section is :math:`\Sigma_t`, this can be shown to be .. math:: d = -\frac{\ln \xi}{\Sigma_t} where :math:`\xi` is a `pseudorandom number`_ sampled from a uniform distribution on :math:`[0,1)`. 6. If the distance to the nearest boundary is less than the distance to the next collision, the particle is moved forward to this boundary. Then, the process is repeated from step 2. If the distance to collision is closer than the distance to the nearest boundary, then the particle will undergo a collision. 7. The material at the collision site may consist of multiple nuclides. First, the nuclide with which the collision will happen is sampled based on the total cross sections. If the total cross section of material :math:`i` is :math:`\Sigma_{t,i}`, then the probability that any nuclide is sampled is .. math:: P(i) = \frac{\Sigma_{t,i}}{\Sigma_t}. 8. Once the specific nuclide is sampled, the random samples a reaction for that nuclide based on the microscopic cross sections. If the microscopic cross section for some reaction :math:`x` is :math:`\sigma_x` and the total microscopic cross section for the nuclide is :math:`\sigma_t`, then the probability that reaction :math:`x` will occur is .. math:: P(x) = \frac{\sigma_x}{\sigma_t}. 9. If the sampled reaction is elastic or inelastic scattering, the outgoing energy and angle is sampled from the appropriate distribution. Reactions of type :math:`(n,xn)` are treated as scattering and the weight of the particle is increased by the multiplicity of the reaction. The particle then continues from step 3. If the reaction is absorption or fission, the particle dies and if necessary, fission sites are created and stored in the fission bank. After all particles have been simulated, there are a few final tasks that must be performed before the run is finished. This include the following: - With the accumulated sum and sum of squares for each tally, the sample mean and its variance is calculated. - All tallies and other results are written to disk. - If requested, a source file is written to disk. - All allocatable arrays are deallocated. .. _probability distributions: http://en.wikipedia.org/wiki/Probability_distribution .. _Monte Carlo: http://en.wikipedia.org/wiki/Monte_Carlo_method .. _central limit theorem: http://en.wikipedia.org/wiki/Central_limit_theorem .. _pseudorandom number: http://en.wikipedia.org/wiki/Pseudorandom_number_generator