The Universe Concept in Serpent

Hierarchical geometry modeling through self-contained geometric domains, coordinate transformations, and modular nesting

Universe Fundamentals

A universe in Serpent is a self-contained geometric domain with its own cells, surfaces, and local coordinate system. Geometry components are defined independently of their placement, enabling hierarchical construction, reuse at multiple locations, nested coordinate systems, and repeating patterns through lattices.

Universes function as geometry containers placed inside cells of other universes. Serpent organizes them in a strict hierarchy: universe 0 is the top-level universe containing the entire model. Nested universes are placed inside cells using the fill operator. Lattice universes organize collections of universes into regular repeating patterns (rectangular or hexagonal arrays). This hierarchy mirrors the physical structure of nuclear systems — pins inside assemblies, assemblies inside core regions, the core inside the reactor vessel.

Creating and Using Universes

Universes are defined implicitly through cell definitions. When a cell card specifies a universe number, that cell belongs to that universe. There is no separate universe declaration card — a universe comes into existence the moment it is referenced in a cell definition.

Universe Definition Through Cell Cards

text
% Cells in the base universe (0)
cell outside_world 0 outside    1000       % Outside world in universe 0
cell water_reflector 0 water    -1000 100  % Water reflector in universe 0
cell core_region 0 fill 10      -100       % Core region filled with universe 10

% Cells in universe 1 (fuel pin)
cell fuel   1 fuel   -10        % Fuel region in universe 1
cell clad   1 zirc   -20 10     % Cladding in universe 1
cell water1 1 water  -30 20     % Water in universe 1

In this example, the first three cells belong to universe 0 (the base universe), while the next three cells belong to universe 1 (a fuel pin universe). Universe 10 is referenced by the fill operator in the core_region cell but would need to be defined elsewhere in the input file with its own set of cells.

When a cell specifies fill N instead of a material name, the entire geometric content of universe N is inserted into that cell. The filled universe's geometry is clipped to the receiving cell's boundaries — anything extending beyond is silently discarded. The receiving cell must be large enough to contain the relevant portions of the filled universe.

Using the Fill Operator

text
% Define a boundary for a fuel pin cell
surf pin_cell_bound cuboid -0.63 0.63 -0.63 0.63 -10 10

% Fill a cell with universe 1
cell fuel_pin_cell 10 fill 1 -pin_cell_bound  % Cell in universe 10, filled with universe 1
cell outside_pin  10 outside pin_cell_bound   % Outside region in universe 10

Universe Nesting

Universes can be nested to arbitrary depth. A fuel pin universe is placed inside an assembly universe, which is placed inside a core universe, and so on. At each level, geometry is defined in local coordinates, so modifying one component does not affect the rest of the model.

Hierarchical Nesting Example

text
% Universe 1: Fuel pin
cell fuel  1 fuel  -10         % Fuel
cell clad  1 zirc  -20 10      % Cladding
cell mod1  1 water -30 20      % Moderator

% Universe 2: Guide tube
cell guide 2 zirc  -40 35      % Guide tube
cell mod2  2 water -35         % Water inside
cell mod3  2 water -50 40      % Water outside

% Universe 10: Assembly with pins and guide tubes
surf assy cuboid -10.5 10.5 -10.5 10.5 -100 100
cell fuel_pin_loc 10 fill 1 -p1  % Location for fuel pin (universe 1)
cell guide_tube_loc 10 fill 2 -p2  % Location for guide tube (universe 2)
cell assy_water 10 water -assy p1 p2  % Assembly water

% Universe 0: Core with assemblies
surf core cuboid -100 100 -100 100 -150 150
cell core_region 0 fill 10 -core  % Core filled with assembly (universe 10)
cell reflector 0 water -refl core  % Reflector
cell outside 0 outside refl       % Outside world

All surfaces and coordinates within a universe are specified relative to its local origin. The universe is positioned in the parent through the fill operation, optionally combined with coordinate transformations. Always define each component at its own local origin (0, 0, 0) — this makes placement, rotation, and lattice usage straightforward, since all transformations apply relative to the local origin.

Coordinate Systems in Nested Universes

text
% Define pin geometry (surfaces are global, reusable across universes)
surf fuel_rad cylz 0.0 0.0 0.4

% Universe 1: Fuel pin placed at (-10, 0, 0)
cell fuel_a 1 fuel -fuel_rad
trans u 1 -10.0 0.0 0.0

% Universe 2: Fuel pin placed at (10, 0, 0)
cell fuel_b 2 fuel -fuel_rad
trans u 2 10.0 0.0 0.0

% Place both universes in the base universe (universe 0)
cell pin1 0 fill 1 -pin_bound1
cell pin2 0 fill 2 -pin_bound2

Universe Transformations

The trans card translates and rotates universes, enabling geometry reuse at different positions and orientations. It is written as a separate input card (not inline on the cell card). Translation moves a universe from its local origin to a specified parent-coordinate position; rotation reorients it about one or more axes. Because trans u applies globally to a universe, placing the same geometry at multiple positions requires separate universe numbers (each sharing surfaces but with its own trans card), or a lattice.

Translation of Universes

text
% Shared surfaces
surf fuel_s cylz 0.0 0.0 0.41
surf clad_s cylz 0.0 0.0 0.47

% Universe 1: Pin at origin (no transformation needed)
cell pin_fuel_1 1 fuel -fuel_s
cell pin_clad_1 1 zirc -clad_s fuel_s

% Universe 2: Pin translated to (5, 0, 0)
cell pin_fuel_2 2 fuel -fuel_s
cell pin_clad_2 2 zirc -clad_s fuel_s
trans u 2 5.0 0.0 0.0

% Universe 3: Pin translated to (0, 5, 0)
cell pin_fuel_3 3 fuel -fuel_s
cell pin_clad_3 3 zirc -clad_s fuel_s
trans u 3 0.0 5.0 0.0

% Place all in base universe
cell pin_loc1 0 fill 1 -c1
cell pin_loc2 0 fill 2 -c2
cell pin_loc3 0 fill 3 -c3

Rotation of Universes

text
% Shared surfaces for a non-symmetric component
surf comp_inner cylz 0.0 0.0 3.0
surf comp_outer cuboid -5.0 5.0 -3.0 3.0 -10.0 10.0

% Universe 2: Component translated to (10, 0, 0)
cell asym_comp_2 2 steel -comp_inner
cell asym_void_2 2 void -comp_outer comp_inner
trans u 2 10.0 0.0 0.0

% Universe 3: Component translated and rotated 90° around z
cell asym_comp_3 3 steel -comp_inner
cell asym_void_3 3 void -comp_outer comp_inner
trans u 3 10.0 10.0 0.0 0.0 0.0 90.0

% Place in base universe
cell comp_loc1 0 fill 2 -c4
cell comp_loc2 0 fill 3 -c5

The trans card supports two main formats. The simplest form provides only a translation vector (dx, dy, dz). The second form adds rotation angles in degrees about the x, y, and z axes for combined translation and rotation. In Serpent, the rotation angles in the trans card are specified as rotations about the x-axis, y-axis, and z-axis, respectively. This convention may differ from other Monte Carlo codes, so care must be taken when transferring models between different transport codes.

Transformation Syntax Formats

text
% Format 1: Translation only (applied to a universe)
trans u UNIV dx dy dz

% Format 2: Translation and rotation (angles in degrees about x, y, z axes)
trans u UNIV dx dy dz ang_x ang_y ang_z

% Apply to a surface instead of a universe
trans s SURF dx dy dz
trans s SURF dx dy dz ang_x ang_y ang_z

Translations and rotations can be combined to produce complex placements. A common application is placing control rods or instrument tubes at various angular positions around a reactor core, where each instance requires both a radial translation and an azimuthal rotation.

Combined Translation and Rotation

text
% Define control rod geometry (shared surface)
surf rod_cyl cylz 0.0 0.0 2.5

% Universe 3: Control rod along x-axis
cell rod_body_3 3 boron -rod_cyl
trans u 3 20.0 0.0 0.0 0.0 90.0 0.0

% Universe 4: Control rod at 45° around z
cell rod_body_4 4 boron -rod_cyl
trans u 4 14.14 14.14 0.0 0.0 90.0 45.0

% Universe 5: Control rod along y-axis
cell rod_body_5 5 boron -rod_cyl
trans u 5 0.0 20.0 0.0 0.0 90.0 90.0

% Place control rods in base universe
cell rod1 0 fill 3 -c10
cell rod2 0 fill 4 -c11
cell rod3 0 fill 5 -c12

Advanced Universe Techniques

Since material assignments occur at the cell level (not the universe level), multiple universes can share the same surface definitions while assigning different materials to their cells. This models regions with different enrichments or compositions without duplicating geometry.

Reusing Geometry with Different Materials

text
% Define a generic pin geometry
surf pin_fuel cylz 0.0 0.0 0.41
surf pin_clad cylz 0.0 0.0 0.47

% Fuel pin with 3.1% enrichment
cell fuel1_1 101 fuel3  -pin_fuel      % "fuel3" material (3.1%)
cell clad1_1 101 zirc   -pin_clad pin_fuel
cell water1_1 101 water  pin_clad

% Identical geometry with 4.5% enrichment
cell fuel1_2 102 fuel4  -pin_fuel      % "fuel4" material (4.5%)
cell clad1_2 102 zirc   -pin_clad pin_fuel
cell water1_2 102 water  pin_clad

% Use both universes in an assembly
lat 10 1 0.0 0.0 17 17 1.26
101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101
101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101
101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101 101
101 101 101 102 102 102 102 102 102 102 102 102 102 102 101 101 101
...

To place the same geometry at multiple positions with different transformations, define separate universe numbers sharing the same surfaces, each with its own trans card.

Separate Universes with Individual Transformations

text
% Each universe shares the same surfaces but has its own trans card
trans u 1 10.0 0.0 0.0                    % Translation only
trans u 2 0.0 10.0 0.0 0.0 0.0 90.0      % Translation with 90° z-rotation
trans u 3 -10.0 0.0 0.0 180.0 0.0 0.0    % Translation with 180° x-rotation

cell c1 0 fill 1 -s1
cell c2 0 fill 2 -s2
cell c3 0 fill 3 -s3

A common hierarchy has four levels: pin-level universes (fuel pins, guide tubes, instrument tubes), assembly-level universes containing lattices of pins, core-level universes arranging assemblies, and the full model (core, reflector, pressure vessel, surroundings). Changes at one level propagate automatically through the hierarchy.

Multiple Levels of Nesting

text
% Level 1: Fuel pin (universe 1)
surf f_rad cylz 0.0 0.0 0.41
surf c_rad cylz 0.0 0.0 0.47
cell fuel 1 uo2    -f_rad
cell clad 1 zirc   -c_rad f_rad
cell cool 1 water  c_rad

% Level 2: 3x3 pin array (universe 10)
lat 10 1 0.0 0.0 3 3 1.26
1 1 1
1 2 1
1 1 1

% Level 3: Assembly with 2x2 array of 3x3 pin blocks (universe 20)
% A lattice arranges universe 10 at each position automatically
lat 20 1 0.0 0.0 2 2 10.0
10 10
10 10

% Level 4: Core with multiple assemblies (universe 0)
surf core_bound cuboid -50 50 -50 50 -170 170
cell core 0 fill 20 -core_bound
cell outside 0 outside core_bound

Practical Applications

Fuel pins in real reactors are not axially uniform — they typically contain a lower plenum, an active fuel region, and an upper plenum or gas gap. Each axial zone is defined as a separate universe and stacked along the z-axis in a parent universe, keeping each zone self-contained and independently modifiable.

Pin Cell with Axial Zones

text
% Define fuel pin universes with different materials
% Bottom plenum (universe 1)
surf p_rad cylz 0.0 0.0 0.47
cell plenum1 1 ss   -p_rad
cell water1 1 water p_rad

% Fuel region (universe 2)
surf f_rad cylz 0.0 0.0 0.41
surf c_rad cylz 0.0 0.0 0.47
cell fuel2 2 uo2   -f_rad
cell clad2 2 zirc  -c_rad f_rad
cell water2 2 water c_rad

% Top plenum (universe 3)
cell plenum3 3 ss   -p_rad
cell water3 3 water p_rad

% Assemble axial regions into a complete pin (universe 0)
surf bot_bound pz -150
surf fuel_bot pz -100
surf fuel_top pz 100
surf top_bound pz 150

cell bot_region 0 fill 1 -fuel_bot bot_bound   % Bottom plenum
cell fuel_region 0 fill 2 -fuel_top fuel_bot   % Fuel region
cell top_region 0 fill 3 -top_bound fuel_top   % Top plenum
cell outside 0 outside top_bound : -bot_bound  % Outside region

Many reactor calculations exploit geometric symmetry to reduce computational cost. A quarter-core model with reflective boundary conditions on two faces effectively simulates the full core while tracking neutrons in only one quadrant. The universe structure remains the same as a full-core model; only the outermost boundary and boundary conditions change.

Quarter-Core Model with Reflective Boundaries

text
% Define all pin and assembly universes as before...

% Quarter-core model with reflective boundaries
surf quarter_core cuboid 0.0 107.1 0.0 107.1 -150 150
surf refl_bound cuboid -20 127.1 -20 127.1 -170 170

% Place quarter-core with reflective boundaries on x and y axes
cell core_region 0 fill 20 -quarter_core
cell reflector 0 water -refl_bound quarter_core
cell outside 0 outside refl_bound

% Set reflective boundary conditions
set bc 2               % Reflective boundary conditions (all faces)

Control rod insertion is modeled by defining the absorber rod and guide tube as separate universes and using axial bounding surfaces to partition the channel into "rod present" and "rod absent" regions. Different insertion depths correspond to different axial surface positions. Alternatively, the trans card can translate the rod universe axially, which is more efficient when many rods share the same design but differ in insertion depth.

Control Rod Movement at Multiple Insertion Levels

text
% Define control rod (universe 10)
surf rod_rad cylz 0.0 0.0 0.4
cell rod_abs 10 boron -rod_rad
cell rod_out 10 outside rod_rad

% Define guide tube with water (universe 11)
surf guide_in cylz 0.0 0.0 0.54
surf guide_out cylz 0.0 0.0 0.60
cell guide_tube 11 zirc -guide_out guide_in
cell guide_water_in 11 water -guide_in
cell guide_water_out 11 outside guide_out

% Different insertion levels (universe 0)
surf rod_bottom pz -100.0
surf rod_25pct pz -50.0
surf rod_50pct pz 0.0
surf rod_75pct pz 50.0
surf rod_top pz 100.0

% Fully inserted (universe 20)
cell rod_full 20 fill 10 -rod_top rod_bottom -guide_in    % Control rod
cell guide_full 20 fill 11 -guide_out guide_in             % Guide tube annulus

% 75% inserted (universe 21)
cell rod_75 21 fill 10 -rod_75pct rod_bottom -guide_in     % Rod in lower 75%
cell water_75 21 water -rod_top rod_75pct -guide_in        % Water above rod
cell guide_75 21 fill 11 -guide_out guide_in               % Guide tube annulus

% 50% inserted (universe 22)
cell rod_50 22 fill 10 -rod_50pct rod_bottom -guide_in     % Rod in lower 50%
cell water_50 22 water -rod_top rod_50pct -guide_in        % Water above rod
cell guide_50 22 fill 11 -guide_out guide_in               % Guide tube annulus

% 25% inserted (universe 23)
cell rod_25 23 fill 10 -rod_25pct rod_bottom -guide_in     % Rod in lower 25%
cell water_25 23 water -rod_top rod_25pct -guide_in        % Water above rod
cell guide_25 23 fill 11 -guide_out guide_in               % Guide tube annulus

% Fully withdrawn (universe 24)
cell water_out 24 water -rod_top rod_bottom -guide_in      % All water inside
cell guide_water_out 24 fill 11 -guide_out guide_in        % Guide tube annulus

Common Pitfalls and Debugging

Overlapping universe definitions occur when cells with the same universe ID define conflicting geometric regions. All cells belonging to a given universe must form a consistent, non-overlapping partition of space. Use unique universe IDs for distinct geometric configurations.

Serpent applies rotations in a specific order (x-axis, then y-axis, then z-axis), which may not match other codes' conventions. Test complex transformations with simplified models before incorporating them into full-scale problems. Material assignments are made at the cell level, not the universe level — when the same geometry must appear with different compositions, separate universes with different cell-to-material mappings are required.

The plot card is invaluable for debugging nested universes. Geometry plots at different axial slices isolate cell definition or transformation issues within a specific universe without the visual clutter of the full hierarchy.

Universes and Lattices

Universes are the right tool for modular, reusable components, placement with transformations, hierarchical organization, and irregular arrangements. Lattices are the right tool for regular repeating patterns — fuel pins in an assembly, assemblies in a core — arranged on rectangular or hexagonal grids.

Most reactor models follow a natural progression: define basic components as universes (fuel pins, guide tubes, burnable absorbers), arrange them in lattices to form assemblies, define each assembly as a universe, and arrange assemblies in a core-level lattice. A consistent numbering convention aids maintainability — for example, IDs 1–99 for pins, 100–199 for assemblies, and 200+ for core-level structures.

Summary

Universes are self-contained geometric domains with their own cells and local coordinate systems. The fill operator places one universe inside another's cell, clipping to the cell boundaries. The trans card provides translation and rotation for geometry reuse. Nesting creates hierarchical structures from pin level through assembly level to full core. Combined with lattices for repeating patterns, universes provide an efficient framework for modeling complex nuclear systems.