Serpent is a multi-purpose three-dimensional continuous-energy neutron and photon transport code, developed at VTT Technical Research Centre of Finland since 2004. The code is distributed with different license options for non-commercial research and educational use, and for commercial work. The distribution is handled by VTT and two data centers: the OECD/NEA Data Bank and the Radiation Safety Information Computational Center (RSICC) in the US. See the users sub-page for more information on Serpent distribution. The recommended publication for referencing Serpent is:

Leppänen, J., et al. (2015) "The Serpent Monte Carlo code: Status, development and applications in 2013." Ann. Nucl. Energy, 82 (2015) 142-150.

It should be noted, however, that this review article is largely outdated, and does not cover many of the features and capabilities available in the current version. More publications are listed on a separate sub-page. Support for users is provided at the Serpent Discussion Forum, and the Serpent Wiki acts as an on-line user manual.

Typical applications

The continuous-energy Monte Carlo method can be used for a wide range of particle transport applications. The physics model in Serpent covers neutron, photon and coupled neutron-photon simulations. Serpent was originally developed as a reactor physics code, but the scope has been considerably broadened over the years. The most common applications for Serpent are introduced in the following, together with the associated key features and capabilities.

One of the drawbacks of the Monte Carlo method is its high computational cost, which emphasizes the significance of parallel computing. Serpent features a hybrid MPI / OpenMP approach, which operates at CPU core and clusted node level. Modern multi-core workstations are sufficient for most applications, but large (full-core) burnup calculation problems, dynamic simulations and coupled multi-physics calculations may require a large computer cluster to reach an acceptable overall running time.

Reactor modeling

Serpent has been used for the modeling of different types of nuclear fission reactors since the beginning of the project. The standard geometry model relies on a universe-based constructive solid geometry (CSG) type, which is sufficient for most reactor types based on a regular geometry. Additional geometry options include an explicit particle / pebble fuel model for high-temperature gas-cooled reactors, and a CAD-based geometry type for complicated irregular structures. The Monte Carlo method is inherently three-dimensional, and scalable to an arbitrary level of spatial detail.

Neutron interaction physics in Serpent is based on classical collision kinematics and ENDF reaction laws. Cross sections are read from ACE format data libraries. The format was originally developed for the MCNP code from Los Alamos National Laboratory, and is also used by other Monte Carlo codes, such as OpenMC and Geant4. The continuous-energy interaction data is produced from evaluated nuclear data files without major approximations. This also means that the best available knowledge on neutron interactions can be used in the simulations as-is. Monte Carlo codes can be used with any reactor technology without application-specific limitations. ACE format cross section libraries are pre-processed to a specific temperature. The temperatures can be further adjusted using a built-in Doppler broadening routine.

Serpent features built-in burnup calculation capability for tracking the nuclide concentrations subject to neutron interactions and radioactive decay. The methodology is applicable to nuclear fuel and activated materials. Depletion zone division and the formation of transmutation and decay paths is accomplished automatically, with minimal input from the user. Serpent uses the Chebyshev Rational Approximation method for the solution of the Bateman depletion equations and provides various time integration methods to perform the iterations between the neutronics and depletion solution.

To reduce the memory demand in burnup calculations, Serpent provides different optimization modes for small- and large-scale systems. Features used to speed-up the transport simulation can be switched off to improve memory efficiency. The standard methodology is applicable up to SMR-scale full-core burnup calculations. A collision-based domain decomposition scheme enables running burnup calculations in traditional large LWRs, albeit at high computational cost.

Standard detectors (tallies) in Serpent enable calculating flux, power and reaction rate distributions in geometry cells and materials, as well as regular structures, such as lattices and super-imposed meshes. In addition to the standard (space-discretized) volume- and surface-integrated detectors, Serpent provides a methodology to reconstruct spatial distributions into functional form. Such an approach relies on the so-called functional expansion tallies (FET), based on orthonormal polynomial bases. FET's methodology endows Monte Carlo estimates with a deterministic/hybrid capability.

Reactor modeling covers a wide range of applications with different methodologies. Other relevant capabilities within this scope include a dynamic simulation mode with delayed neutron physics, methods for sensitivity and uncertainty analyses and advanced heat deposition modes with gamma heating. Coupling to other physics solvers is addressed separately below.

Group constant generation

One of the original intended uses for Serpent was group constant generation for deterministic fuel cycle simulator and transient analyses codes. Serpent can produce all input parameters needed for nodal diffusion calculations, including homogenized macroscopic reaction cross sections, isotopic microscopic cross sections, diffusion coefficients, assembly discontinuity factors, poison cross sections and point-kinetics and delayed neutron parameters. The calculation of most parameters relies on standard Monte Carlo tallies. For diffusion coefficients Serpent uses the cumulative migration method (CMM), and effective delayed neutron fractions are calculated using the iterated fission probability method (IFP). Group constant generation can be performed as infinite or critical spectrum calculation.

Group constant generation requires repeating the calculation for a large number of burnup points and variations in the thermal hydraulic and reactivity conditions. Managing the calculation chain involving thousands of runs becomes a formidable task, which can be considerably simplified using built-in features. Serpent provides a branch capability to invoke small variations in the operating conditions. The casematrix feature enables organizing the history and restart calculations in an optimal way to be run in computer clusters. With sufficient computational resources the Monte Carlo method can be considered a viable option for group constant generation.

The methodology used for group constant generation has been designed to be compatible with VTT's Ants nodal neutronics code, used as part of the Kraken computational framework (see below). Serpent has also been widely used for producing input data for other nodal codes, such as DYN3D and PARCS.

Coupled multi-physics applications and the Kraken framework

Modeling of an operating nuclear reactor requires solving a coupled problem between neutronics, thermal hydraulics and fuel behavior. One of the challenges of coupling a Monte Carlo neutronics solver to such multi-physics calculation chain is handling the two-way data transfer between the solvers. The approach in Serpent is to completely separate the thermal hydraulic state-point distributions from the user-defined geometry model. Information on material temperatures and densities is brought into the transport simulation via a universal multi-physics interface, which is essentially a three-dimensional structure super-imposed over the underlying geometry.

For the code user this means that no modifications are needed in the geometry model when Serpent is coupled to another solver. Internally the distributions are handled using an efficient rejection sampling based algorithm, which allows both discretized and continuous changes in temperature and density. Temperature modifications are performed using an on-the-fly Doppler-broadening routine, so there is no need to store cross sections at multiple temperatures. The multi-physics interface supports several distribution types, including an unstructured OpenFOAM mesh, and a special interface type for fuel performance code coupling.

Since 2017 Serpent has been developed as part of VTT's new Kraken computational core physics framework, where the code can be used either for producing group constants for the Ants nodal neutronics code (reduced-order approach), or directly coupled to the other solvers (high-fidelity approach).

Radiation transport and fusion applications

Even though Serpent was originally developed as a reactor physics code, the implementation of new methods and capabilities has enabled applications beyond the scope of fission reactors. The CAD-based geometry type is a practical option for the modeling of complicated and irregular structures. Such geometries are commonly encountered in fusion and radiation transport applications. The same neutron and photon physics routines developed for fission applications are similarly valid, regardless of the source from which the particles were emitted.

One of the major advantages of Serpent in radiation transport applications is that the built-in burnup calculation capability provides the means to generate source terms comprised of spent nuclear fuel or neutron-activated materials. Practical examples include radiation shielding calculations carried out for a spent nuclear fuel storage cask, or shut-down dose rate calculations for a fusion reactor. The source term is formed automatically using the material compositions obtained from a burnup/activation calculation, combined with photon emission spectra read from ENDF format decay data files. No additional processing is required from the user.

Radiation shielding calculations often require extensive use of variance reduction, in order to get sufficient statistics in the heavily shielded parts of the geometry. The variance reduction scheme in Serpent is based on the conventional weight-windows method, with weight-window boundaries defined by a super imposed importance mesh. The importances can be read from MCNP WWINP format files, or generated using a built-in response matrix method based solver. The built-in solver supports calculating importances with respect to one or multiple responses, and and global variance reduction option to populate the entire geometry. Mesh options include rectangular and cylindrical types and self-adapted mesh that can be automatically refined around heavily shielded structures.

Verification and validation

Throughout its development Serpent has been verified by comparison to MCNP, in which the neutron physics model is based on the same ENDF reaction laws. The differences are generally within the range of statistical accuracy when the same ACE libraries are used in the calculations. Differences to other Monte Carlo codes (Keno, OpenMC, Tripoli, etc.) are small, but statistically significant discrepancies can be observed in some cases. The photon physics model in Serpent differs to some extent from that in MCNP. Similar level of agreement cannot be expected as in neutron transport simulations, but the differences should remain small.

Verification of burnup calculations becomes more complicated, due to the lack of a perfect reference code. The same applies to multi-physics simulations, in which Serpent is coupled to thermal hydraulics and/or fuel performance codes. In addition to discrepancies in the transport physics, there are additional factors related to data used in the calculations, coupling algorithms, methods used in external solvers, and so on. The largest uncertainties in burnup calculations often originate from the fundamental nuclear data, and approximations applied in the formulation of the transmutation chains.

Considerable effort from both Serpent developers and the user community has been devoted to the verification and validation of Serpent by computational benchmarks. The calculation cases cover a wide range of applications, and some benchmarks provide experimental data for comparison. Related publications and reports are collected in Serpent Wiki.

Updates on website
October 4, 2022
Website for the 11th International Serpent UGM set up.
August 2, 2022
The 11th Serpent UGM announced (from August 29 to September 1).
May 23, 2022
New base version 2.2.0 released to the OECD/NEA Data Bank, contents of the website completely revised.
February 24, 2021
New code version released.

Serpent Discussion Forum

Serpent Wiki

Base version:

2.2.0 (see distribution)

Current update:

2.2.0 (May 5, 2022)

Some recent and upcoming events
August 29 - September 1, 2022

11th Serpent User Group meeting. in Garching, Germany.
July 1, 2022

VTT and Studsvik Scandpower announce collaboration on the development and distribution of an NQA-1-2015 certified version of Serpent as part of SSP's software family (see press release for more information).
May 23, 2022

Serpent 2.2 available at the OECD  / NEA Data Bank (Package-ID NEA-1923/01)
May 15-20, 2022

Kraken workshop at the PHYSOR 2022 conference in Pittsburgh, PA, USA, May 15-20, 2022. (download material)
October 27-30, 2020

10th International Serpent User Group Meeting organized as an on-line event by the Technical University of Munich.
October 14-19, 2019

9th International Serpent User Group Meeting in Atlanta, GA, USA.
May 29 - June 1, 2018

8th International Serpent User Group Meeting in Espoo, Finland.
April 22-26, 2018

Serpent workshop at the PHYSOR 2018 conference in Cancún, México, April, 22-26, 2016.
November 6-9, 2017

7th International Serpent User Group Meetingin Gainesville, FL, USA.
May 19, 2017

Ville Valtavirta defended his Doctoral Thesis: Development and applications of multi-physics capabilities in a continuous energy Monte Carlo neutron transport code at Aalto University.
September 26-29, 2016

6th International Serpent User Group Meeting in Milan, Italy.
October 13-16, 2015

5th International Serpent User Group meeting in Knoxville, TN, USA
May 8, 2015

Tuomas Viitanen defended his Doctoral Thesis: Development of a stochastic temperature treatment technique for Monte Carlo neutron tracking at Aalto University.
September 17-19, 2014

4th International Serpent User Group meeting in Cambridge, UK
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)
May 24, 2013

Maria Pusa defended her Doctoral Thesis on Numerical methods for nuclear fuel burnup calculations at Aalto University.
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)
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)
March, 2010

Serpent 1.1.7 available at RSICC  (Code Number C00757)
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)
May 26, 2009

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

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