# Difference between revisions of "Domain decomposition"

Ana Jambrina (Talk | contribs) m |
Ana Jambrina (Talk | contribs) |
||

Line 1: | Line 1: | ||

− | 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 [[Input syntax manual#div (divisor definition)|div card]]. 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. | + | 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<ref>García, M., Leppänen, J. and Sánchez-Espinoza, V. ''"A Collision-based Domain Decomposition scheme for large-scale depletion with the Serpent 2 Monte Carlo code."'' Ann. Nucl. Energy [https://doi.org/10.1016/j.anucene.2020.108026 '''152''' (2021) 108026].</ref>, 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 [[Input syntax manual#div (divisor definition)|div card]]. 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 [[Input syntax manual#set dd|set dd]] input option. There are three division types: | 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 [[Input syntax manual#set dd|set dd]] input option. There are three division types: | ||

Line 5: | Line 5: | ||

# geometry-based division into sectors, <tt>''MODE''</tt> 2. | # geometry-based division into sectors, <tt>''MODE''</tt> 2. | ||

# geometry-based division into sectors and a central zone, <tt>''MODE''</tt> 3. | # geometry-based division into sectors and a central zone, <tt>''MODE''</tt> 3. | ||

+ | |||

+ | <u>Notes:</u> | ||

+ | *The methodology was implemented in version 2.1.31, and is still under development. Any bugs or problems should be reported at the [https://ttuki.vtt.fi/serpent Serpent discussion forum]. | ||

+ | *The domain decomposition methodology allows the use of the restart capability from Serpent 2.1.32 version. The multiple restart files generated within a domain decomposition simulation can be read either in a subsequent domain decomposition simulation, e.g., group-constant generation (matching the number of MPI tasks) or not, e.g., radioactive decay source. | ||

+ | *From Serpent 2.1.32 version and on, the associated depletion output file in a domain decomposition simulation is not limited to parent materials. | ||

+ | |||

+ | == Full-core example == | ||

The method is illustrated by a [[Domain decomposition example 1|full-core example]], where the depletion zone division and domain decomposition is defined by input lines: | The method is illustrated by a [[Domain decomposition example 1|full-core example]], where the depletion zone division and domain decomposition is defined by input lines: | ||

Line 57: | Line 64: | ||

[[File:Dd_mode3.png|358px]] [[File:Dd_mode2.png|358px]] [[File:Dd_mode1.png|358px]] | [[File:Dd_mode3.png|358px]] [[File:Dd_mode2.png|358px]] [[File:Dd_mode1.png|358px]] | ||

− | < | + | == References == |

− | + | ||

− | + | <references/> | |

− | + | ||

[[Category:Input]] | [[Category:Input]] | ||

[[Category:Theory]] | [[Category:Theory]] | ||

[[Category:Tutorials]] | [[Category:Tutorials]] |

## Revision as of 17:18, 24 December 2021

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^{[1]}, 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 card. 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:

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

__Notes:__

- The methodology was implemented in version 2.1.31, and is still under development. Any bugs or problems should be reported at the Serpent discussion forum.
- The domain decomposition methodology allows the use of the restart capability from Serpent 2.1.32 version. The multiple restart files generated within a domain decomposition simulation can be read either in a subsequent domain decomposition simulation, e.g., group-constant generation (matching the number of MPI tasks) or not, e.g., radioactive decay source.
- From Serpent 2.1.32 version and on, the associated depletion output file in a domain decomposition simulation is not limited to parent materials.

## Full-core example

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

% --- Domain decomposition ----------------------------------------------------- % --- Divide fuel into depletion zones: div fuel sep 1 % -- Domain decomposition (1 = simple, 2 = sector, 3 = sector + center) set dd 3 % ------------------------------------------------------------------------------

When the calculation is run with 5 MPI tasks, it produces the following output:

sss2 -mpi 5 core (...) ividing materials into depletion zones... Material fuel: - 63624 cells - 63624 depletion zones in total Sorting lists (this may take a while)... OK. Counting cells... OK. Decomposing 63624 divided materials into 5 domains: Domain 1: 12744 materials (20.0%) Domain 2: 12720 materials (20.0%) Domain 3: 12720 materials (20.0%) Domain 4: 12720 materials (20.0%) Domain 5: 12720 materials (20.0%) (...)

and a geometry plot that shows the domains in different colors (switching the current setup from ` MODE` 3, to

`2, to`

*MODE*`1, respectively):`

*MODE*(a) sector-wise division plus central zone (` MODE` 3), (b) sector-wise division (

`2), (c) index-based division (`

*MODE*`1).`

*MODE*## References

- ^ García, M., Leppänen, J. and Sánchez-Espinoza, V.
*"A Collision-based Domain Decomposition scheme for large-scale depletion with the Serpent 2 Monte Carlo code."*Ann. Nucl. Energy**152**(2021) 108026.