Starting everything from zero allows me to take into account all the lessons and best practices learned from the previous work. One major thing is the wasteful use of computer memory. The use of the unionized energy grid and pre-calculated material-wise cross sections allows the simulation to run very fast, but the excessive memory demand limits the number of materials in burnup calculation. At first this wasn't a big issue, since the code was mainly intended for 2D lattice calculations. Now it seems, however, that the trend is towards larger systems with thousands of depletion zones. Another major limitation is that Serpent cannot use shared memory in parallel calculation mode (threading), which seriously limits the applicability in clusters and multi-processor workstations. There are also some important capabilities still missing (gamma transport, etc.), and the implementation of the calculation routines becomes much easier starting from scratch.
The work is estimated to take several years, but I should have a working beta version with limited capability out for distribution by the end of this year. Here is a brief description on where the project is at the moment (January 14, 2011):
- Cross section data, decay constants and fission yields are read from ACE and ENDF format files into an internal data structure. Decay and transmutation chains are generated automatically from intial composition.
- Geometry is read and processed. All major geometry features in Serpent 1 are included (universes, lattices, explicit stochasting geometry, etc.) and cell definitions now include also the union operator. Plotter routine and Monte Carlo volume calculation routines are completed and tested.
- Energy grid is unionized, microscopic, macroscopic and majorant cross sections can be interpolated for an arbitrary energy. Four levels of optimization control the trade-off between speed an memory usage. The "tricks" used in Serpent 1 are available but optional, which essentially removes the memory limitations (at the cost of CPU time) and should eventually increase the maximum number of burnable materials to more than 100,000.
- Geometry plotter, MC volume calculation routine and a tester routine for cross section data are implemented with threading using OpenMP. There are several issues related to parallel calculation with shared memory, which I will address soon in another topic.
I hope this topic will inspire a lot of discussion and ideas - I know I will have a lot of questions, especially regarding supercomputing and parallelization, which is still a relatively new area for me. I will still continue working on Serpent 1 as well, correcting bugs and implementing new features, but all major development goals will be deferred to the new version from now on.