Serpent is a three-dimensional continuous-energy Monte Carlo reactor physics burnup calculation code, developed at VTT Technical Research Centre of Finland since 2004. The publicly available Serpent 1 has been distributed by the OECD/NEA Data Bank and RSICC since 2009, and next version of the code, Serpent 2, is currently in a beta-testing phase and available to registered users by request. The suggested applications of Serpent include:

Spatial homogenization and group constant generation for deterministic reactor simulator calculations
Fuel cycle studies involving detailed assembly-level burnup calculations
Validation of deterministic lattice transport codes
Full-core modeling of research reactors, SMR's, and other closely coupled systems
Coupled multi-physics applications (Serpent 2)
Educational purposes and demonstration of reactor physics phenomena

The main features of the code, including the major limitations, are introduced below. For on-going and future work, see the separate section on Serpent 2.

Geometry and neutron tracking

Similar to other Monte Carlo codes, such as MCNP and Keno-VI, Serpent uses a universe-based combinatorial solid geometry (CSG) model, which allows the description of practically any two- or three-dimensional fuel or reactor configuration. The geometry consists of material cells, defined by elementary quadratic and derived macrobody surface types.

The code also provides some additional geometry features specifically for fuel design. These features include simplified definition of cylindrical fuel pins and spherical fuel particles, square and hexagonal lattices for LWR and fast reactor geometries, and circular cluster arrays for CANDU fuels. The random dispersion of microscopic fuel particles in high-temperature gas-cooled reactor fuels and pebble distributions in pebble-bed type HTGR cores can be modeled using geometry types specifically designed for the task (see below).

Woodcock delta-tracking method

The Monte Carlo simulation can be run in k-eigenvalue criticality source or external source mode. Neutron transport is based on a combination of conventional surface-to-surface ray-tracing and the Woodcock delta-tracking method (Woodcock, 1965). The tracking routine has proven efficient and well suited for geometries where the neutron mean-free-path is long compared to the dimensions, which is typically the case in fuel assemblies, and especially in HTGR particle fuels. The combination of two tracking methods overcomes the efficiency problems normally encountered with delta-tracking in the presence of localized heavy absorbers (Leppänen, 2010b).

The main drawback of delta-tracking is that the track-length estimate of neutron flux is not available and reaction rates have to be calculated using the potentially less-efficient collision estimator. This is usually not a problem in reactor calculations when reaction rates are scored in regions of high collision density. However, the efficiency of the collision estimator becomes poor in small or optically thin volumes located far or isolated from the active source. Methods for obtaining better statistics for detector calculations are being developed for Serpent 2, but in general the code is not the best choice for shielding applications.

Explicit particle and pebble-bed fuel model for HTGR calculations

High-temperature gas-cooled reactor geometries differ significantly from conventional light water reactors. The fissile material is encapsulated inside microscopic tristructural-isotropic (TRISO) fuel particles, randomly dispersed in fuel compacts or pebbles made of graphite. In pebble-bed type geometries the spherical fuel pebbles are piled inside the reactor core, which brings another level of random heterogeneity in the calculation.

The explicit HTGR geometry model in Serpent reads the coordinates of fuel particles or pebbles from a separate input file, and generates the geometry as it is defined, without any approximations. The model works on several levels (particles inside a pebble and pebbles inside the core) and it has been tested in realistic double-heterogeneous reactor configurations consisting of over 60 million randomly positioned units (Suikkanen, 2010). The computational overhead from handling the unstructured configuration is typically 20-50% compared to a similar regular-lattice model. The routine also enables the calculation of pebble-wise power distributions over the reactor core without defining additional tallies.

To simplify the construction of HTGR geometries, Serpent provides a separate command line routine that generates random particle distribution files for the explicit geometry model.

Interaction physics

Serpent reads continuous-energy cross sections from ACE format data libraries. The interaction physics is based on classical collision kinematics, ENDF reaction laws and probability table sampling in the unresolved resonance region. Improved treatment for the free-gas scattering kernel near resonances is also available, based on the DBRC Doppler-broadening rejection correction method (Becker, 2009).

ACE format cross section libraries based on JEF-2.2, JEFF-3.1, JEFF-3.1.1, ENDF/B-VI.8 and ENDFB/B-VII evaluated data files are included in the installation package of Serpent 1. Ineraction data is available for 432 nuclides at 6 temperatures between 300 and 1800K. Thermal bound-atom scattering data is included for light and heavy water and graphite. Since the data format is shared with MCNP, any continuous-energy ACE format data library generated for MCNP can be used with Serpent as well.

Unionized energy grid format

Continuous-energy cross sections in the library files are reconstructed on a unionized energy grid, used for all reaction modes (Leppänen, 2009b). The use of a single energy grid results in a major speed-up in calculation, as the number of CPU time consuming grid search iterations is reduced to minimum. Macroscopic cross sections for each material are pre-generated before the transport simulation. Instead of calculating the cross sections by summing over the constituent nuclides during tracking, the values are read from pre-generated tables, which is another effective way of improving the performance.

The drawback of the unionized energy grid approach is that computer memory is wasted for storing redundant data points. The grid size may become prohibitively large in burnup calculations, often involving over 250 actinide and fission product nuclides. To overcome this issue, Serpent 2 provides different optimization modes for small and large burnup calculation problems, in which the the unionized energy grid approach is used selectively (Leppänen, 2012a).

Doppler-broadening of cross sections

A built-in Doppler-broadening preprocessor routine allows the conversion of ACE format cross sections into a higher temperature. This capability results in a more accurate description of the interaction physics in temperature-sensitive applications, as the data in the cross section libraries is available only in 300K intervals. The method has been validated with good results and the routine works efficiently without a major increase in the overall calculation time (Viitanen, 2009). In addition to the pre-processor routine, Serpent 2 has the option to adjust nuclide temperatures on-the-fly (see description of on-going work in Serpent 2) . Both methodologies are currently limited to continuous-energy cross sections, and do not cover unresolved resonance probability tables or S(α,β) scattering data.

Burnup calculation

The burnup capability in Serpent is entirely based on built-in calculation routines, without any external coupling. The number of depletion zones is not restricted, although memory usage becomes a limiting factor for Serpent 1 when the number of burnable materials is large.

Fission products and actinide daughter nuclides are selected for the calculation without additional user effort and burnable materials can be sub-divided into depletion zones automatically. The irradiation history is defined in units of time or burnup. Reaction rates are normalized to total power, specific power density, flux or fission rate and the normalization can be changed by dividing the irradiation cycle into a number of separate depletion intervals. Volumes and masses needed for the normalization are calculated automatically for simple geometries, such as 2D fuel pin lattices. The values can also be obtained from a Monte Carlo based volume calculation routine or entered manually. Predictor-corrector calculation is optional and used by default for each burnup step. In addition to the conventional predictor-corrector method based on linear interpolation, Serpent 2 offers various higher-order methods and sub-step solutions for burnup calculation (Isotalo, 2011b; 2011c; 2013b).

Radioactive decay and fission yield data used in the calculation is read from standard ENDF format data libraries. The decay libraries may contain data for almost 4000 nuclides and meta-stable states, all of which is available for the calculation. The total number of different nuclides produced from fission, transmutation and decay reactions is generally lower, in the order of 1500. The concentrations of all included nuclides with decay data are tracked in the burnup calculation, and the number of nuclides with cross sections typically ranges from 200 to 300. Energy-dependent fission yields are available for all main actinides (31 nuclides in ENDF/B-VII data).

Integral one-group transmutation cross sections are calculated either within the transport cycle, or by collapsing the continuous-energy reaction cross sections after the cycle using a flux spectrum collected on the unionized energy grid. The spectrum collapse method speeds up the calculation by a factor of 3-4, and due to the high energy resolution of the flux spectrum, the errors in the results are practically negligible. Similar methodology has been successfully used with coupled Monte Carlo burnup calculation codes (Haeck, 2007; Fridman, 2008a; 2008b) before it was implemented in Serpent.

Serpent has two fundamentally different options for solving the Bateman depletion equations. The first method is the Transmutation Trajectory Analysis (TTA) method (Cetnar, 2006), based on the analytical solution of linearized depletion chains. The second option is the Chebyshev Rational Approximation Method (CRAM), an advanced matrix exponential solution developed for Serpent at VTT (Pusa, 2010; 2011; 2012;. 2013a;. 2013b;. 2013c). The two methods have shown to yield consistent results, both when used with Serpent (Leppänen, 2009a) and in separate methodological studies (Isotalo, 2011a).

Fission product poison Xe-135 can be handled separately from the other nuclides, and iterated to its equilibrium concentration during the transport simulation. The equilibrium calculation is independent of the depletion routine, and the iteration can also be performed in transport mode without burnup calculation.


Serpent 1 uses the Message Passing Interface (MPI) for parallel calculation. Parallelization of the transport routine is implemented by dividing the neutron histories between the parallel tasks and combining the results after the simulation has been completed. This approach is simple and efficient, but it lacks error tolerance and dynamic load sharing. The overall calculation time is dependent on the slowest task, which is why the method is best applied in a symmetric parallel environment.

Parallelization in Serpent 2 is based on a hybrid OpenMP / MPI approach. The main advantage of thread-based OpenMP is that all CPU cores within the computational node are accessing the same memory space, which makes it possible to use all available cores in the calculation without running into problems with excessive memory usage.

In addition to the neutronics simulation, parallelization in the burnup calculation mode divides also the preprocessing and depletion routines between several CPU's.

Results and output

Spatial homogenization was the main intended application for Serpent when the project was started in 2004. The work is still in progress, and the group constant generation capability in Serpent 2 currently covers:

Homogenized few-group reaction cross sections
Scattering and scattering production cross sections and matrices up to Legendre order 7
Diffusion coefficients
Assembly discontinuity factors (ADF's), surface and corner fluxes and currents for square and hexagonal fuel lattices
Group-wise peaking factors for pin-power reconstruction
Poison cross sections for Xe-135 and Sm-149 and their precursors

Homogenization can be performed in critical spectrum, or using a leakage correction based on the deterministic solution of B1 equations (Fridman, 2011; 2012). Work is currently under way for the calculation of adjoint-weighted time constants for transient simulator codes, and ADF's in reflector regions and colorset configurations, which requires the explicit solution of local homogeneous flux, as the net current over the homogenized region is not reduced to zero.

User-defined tallies can be set up for calculating various integral reaction rates. The spatial integration domain can be defined by a combination of cells, universes, lattices and materials, or using a three-dimensional super-imposed mesh. The number and structure of detector energy bins is unrestricted. Various response functions are available for the calculation, including material-wise macroscopic and isotopic microscopic cross sections and ACE format dosimetry data. Serpent 2 calculates adjoint-weighted point kinetics parameters and effective delayed neutron fractions using the iterated fission probability (IFP) method (Leppänen, 2014b), relying on an implementation similar to that in MCNP5 (Kiedrowski, 2011).

Output for burnup calculation consists of isotopic compositions, activities, spontaneous fission rates and decay heat data. The results are given both as material-wise and total values. Group constants and all the other output parameters are calculated and printed for each burnup step.

All numerical output is written in Matlab m-format files to simplify the post-processing of the results. The code also has a geometry plotter feature and a reaction rate plotter, which is convenient for visualizing the neutronics and tally results (see the gallery for examples).


Each Serpent update is validated by comparison to MCNP by running a standard set of assembly calculation problems. Effective multiplication factors and homogenized few-group reaction cross sections are within the statistical accuracy from the reference results, when the same ACE libraries are used in the calculations. Validation against MCNP has also been carried out with equally good results for calculations involving individual nuclides, by comparing the flux spectra produced by the two codes. Differences to other Monte Carlo codes (Keno-VI) are small, but statistically significant discrepancies can be observed in some cases. Differences to deterministic lattice codes are generally larger, mainly due to the fundamental differences between the calculation methods.

Validation of burnup calculation routines is considerably more difficult, due to the lack of a perfect reference code. In addition to discrepancies in the transport simulation, there are additional factors related to decay and fission yield data, methods used for solving the Bateman equations, number of nuclide concentrations tracked for each burnable material, depletion algorithms, and so on. The results are generally good compared to other burnup calculation codes, but there are some significant discrepancies as well. Comparisons to CASMO-4E (Leppänen, 2009a), for example, show a consistent few-percent over-prediction in the build-up of Pu-239 and noticeable differences in the concentrations of the main fission product poisons, Xe-135 and Sm-149. The differences most like originate from several factors related to the data and methods used by the two codes, but the root cause is yet to be discovered.

Systematic validation for criticality safety analyses using experimental configurations and data from the International Handbook of Evaluated Criticality Safety Benchmark Experiments is currently under way. Another validation project, in which Serpent-generated group constants are used for fuel cycle and transient simulator calculations by nodal diffusion ARES, HEXBU-3D, TRAB-3D and HEXTRAN, developed at VTT and the Finnish Radiation and Nuclear Safety Authority (STUK), was recently started. The first study involved the Serpent-ARES code sequence for the calculation of a hot zero-power initial core configuration of a commercial PWR (MIT BEAVRS Benchmark). The results showed good agreement compared to experimental measurements and reference 3D Monte Carlo calculations (Leppänen, 2014b).


Serpent 1 is optimized for performance in infinite lattice calculations. The typical single-CPU running time on a 2.6 GHz AMD Opteron PC varies from 5 to 20 minutes when 3 million neutron histories are simulated, although it should be noted that the performance depends on several factors. Owing to the unionized energy grid approach, the running time is not strongly dependent on the complexity of the material compositions. Compared to fresh fuel calculations, the transport cycle usually slows down by less than a factor of 1.5 when modeling irradiated fuels consisting of 100-250 nuclides.

The main factor limiting the performance of Serpent 1 is that the parallelization is based on distributed-memory MPI, which means that the memory demand is multiplied by the number of parallel tasks. Serpent 2 currently runs slower with a single CPU, but the capability to run parallel calculation with OpenMP without limitations in memory demand means that the code clearly outperforms Serpent 1 by making more efficient use of computational resources. Studies on the parallel scalability of Serpent 2 are currently under way.

Updates on website
March 24, 2015
New update (2.1.23), new publications.
November 27, 2014
New update (2.1.22), new publications.
October 11, 2014
List of publications updated, website for the 4th International Serpent User Group Meeting set up.
July 13, 2014
List of publications revised.

Serpent Discussion Forum

Serpent User's Manual
(March 6, 2013)

Serpent 1 base version:

1.1.7 (NEA / RSICC)

Current update:

1.1.19 (April 2, 2013)

Serpent 2 base version:

2.1.0 (available by request)

Current update:

2.1.23 (Mar. 24, 2015)

Some recent and upcoming events
September 28 - October 3, 2014

Serpent workshop at the PHYSOR-2014 conference in Kyoto, Japan
September 17-19, 2014

4th Annual Serpent User Group meeting in Cambridge, UK
July, 2014

Article: "Validation of the Serpent-ARES code sequence using the MIT BEAVRS benchmark – Initial core at HZP conditions" published in Annals of Nuclear Energy (Leppänen, 2014c)
April 28-29, 2014

Serpent presentation at the MCNEG 2014 meeting in Liverpool, UK
March, 2014

Article: "Calculation of effective point kinetics parameters in the Serpent 2 Monte Carlo code " published in Annals of Nuclear Energy (Leppänen, 2014b)
November 6-8, 2013

The Third International Serpent User Group Meeting in Berkeley, California, USA, organized by the University of California, Berkeley. (see meeting website)
October 27-31, 2013

Serpent contribution in a Monte Carlo codes invited session and several Serpent-related presentations at the Joint International Conference on Supercomputing in Nuclear Applications + Monte Carlo 2013 (SNA+MC 2013), Paris, France.
July, 2013

Article: "Modeling of Nonuniform Density Distributions in the Serpent 2 Monte Carlo Code" published in Nuclear Science and Engineering (Leppänen, 2013b)
May 24, 2013

Maria Pusa defended her Doctoral Thesis on Numerical methods for nuclear fuel burnup calculations at Aalto University.
May 5-9, 2013

Several Serpent-related presentations at the International Conference on Mathematics and Computational Methods Applied to Nuclear Science and Engineering (M&C 2013), Sun Valley, ID, USA
November 11-15, 2012

Presentation: "Multi-physics Coupling Scheme in the Serpent 2 Monte Carlo Code " at 2012 ANS Winter Meeting, San Diego, CA, USA
September 19-21, 2012

The Second International Serpent User Group Meeting in Madrid, Spain, organized by the Universidad Politécnica de Madrid (see meeting website)
August 16, 2012

Serpent Progress Report 2011 published
April 30 - May 2, 2012

Serpent workshop at UC Berkeley, USA
April 15-20, 2012

Several Serpent-related papers at the PHYSOR-2012 conference in Knoxville, TN, USA
January 31, 2012

Beta-testing phase of Serpent 2 started
September 15-16, 2011

2011 Serpent International User Group Meeting, Dresden, Germany (also see the topic at the discussion forum and the meeting website)
April 12-13, 2011

Serpent presentation at the XV Meeting on Reactor Physics Calculations in the Nordic Countries, Helsinki, Finland
April 1, 2011

Serpent Progress Report 2010 published
February 7-8, 2011

Serpent presentations at the Workshop on Recent Developments and Advanced Applications in the Monte Carlo Method, UNIST, Ulsan, Korea
October 17-21, 2010

Presentation: "Use of the Serpent Monte Carlo Reactor Physics Code for Full-Core Calculations" at the SNA + MC 2010 Conference, Tokyo, Japan
October 4, 2010

Presentation on Serpent development in an ANS Seminar at MIT
September 20-24, 2010

Serpent presentation at the 20th Symposium of AER on VVER Physics and Safety, Espoo, Finland
July 12-18, 2010

Presentation: "HTGR Modeling Capabilities in the Serpent Monte Carlo Code" at the IYNC-2010 Conference, Cape Town, South Africa
May 9, 2010

Presentation: "Reactor Physics Calculations with PSG2 / Serpent" at the Monte Carlo Workshop in PHYSOR 2010, Pittsburgh, PA, USA
May, 2010

Article: "Performance of Woodcock Delta-Tracking in Lattice Physics Applications Using the Serpent Monte Carlo Reactor Physics Burnup Calculation Code." published in Annals of Nuclear Energy (Leppänen, 2010b)
April 26-30, 2010

Poster: "New Data Processing Features in the Serpent Monte Carlo Code" at ND2010 Conference in Jeju, Korea (Viitanen, 2011a)
March, 2010

Serpent 1.1.7 available at RSICC  (Code Number C00757)
February 13, 2010

Serpent progress report 2009 completed
January 15, 2010

Serpent cross section libraries released as a separate NEA package (Package-ID NEA-1854)
January 6, 2010

NEA Base version upgraded to 1.1.7 (Package-ID NEA-1840)
January, 2010

Article: "Computing the Matrix Exponential in Burnup Calculations" published in Nuclear Science and Engineering (Pusa, 2010)
November 15-19, 2009

Presentation: "HTGR Reactor Physics and Burnup Calculations Using the Serpent Monte Carlo Code " at ANS Winter Meeting 2009, Washington, DC, USA (Leppänen, 2009d)
October 13, 2009

M.Sc. Thesis: "Implementing a Doppler-Preprocessor of Cross Sections in Reactor Physics Code Serpent" completed at Helsinki University of Technology (Viitanen, 2009)
September 29, 2009

Presentation: "On the use of the continuous-energy Monte Carlo method for lattice physics applications" at INAC 2009 Conference in Rio de Janeiro, Brazil  (Leppänen, 2009c)
July, 2009

Article: "Two practical methods for unionized energy grid construction in continuous-energy Monte Carlo neutron transport calculation" published in Annals of Nuclear Energy (Leppänen, 2009b)
May 26, 2009

Serpent 1.1.0 available at the OECD  / NEA Data Bank (Package-ID NEA-1840)
May 5, 2009

Presentation: "Burnup Calculation Capability in the PSG2 / Serpent Monte Carlo Reactor Physics Code" at M&C 2009 Conference in Saratoga Springs, NY  (Leppänen, 2009a)
April 8, 2009

Serpent 1.1.0 submitted to the OECD / NEA Data Bank for public distribution