Domain decomposition

From Serpent Wiki
Jump to: navigation, search

Domain decomposition is used for saving computer memory by spatially dividing large burnup calculation problems between multiple calculation nodes. Each node handles particle transport only within its own domain, and particles crossing the domain boundaries are sent to another node to complete the history. The implementation in Serpent relies on a collision-based approach, i.e. the transfer is invoked when the particle undergoes a collision in a material which belongs to another domain. The decomposition affects only burnable materials divided into depletion zones using the div sep option. The most typical domain decomposition case is a full-core burnup calculation, in which the fuel is decomposed into separate domains to save memory. Interaction data for the other materials is shared by all parallel tasks.

The current implementation in Serpent 2 is relatively simple, and mainly designed for reactor cores. The number of domains is determined by the number of MPI tasks, and the division using the set dd input option. There are three division types:

  1. simple, based on depletion zone index
  2. geometry-based division into sectors
  3. geometry-based division into sectors and a central zone

The method is illustrated by full-core example, where the depletion zone division and domain decomposition is defined by input lines:

The following full-core example illustrates the divisions.

% --- Domain decomposition -----------------------------------------------------

% --- Divide fuel into depletion zones:

div fuel sep 1

% --- Plot:

plot 3 1000 1000 0 -187.6 187.6 -187.6 187.6

% -- Domain decomposition (1 = simple, 2 = sector, 3 = sector + center)

set dd 3

% ------------------------------------------------------------------------------