Universes and Lattices

Efficient modeling of repeated structures

Why Use Universes?

Nuclear systems contain many identical components. Instead of defining hundreds of fuel pins individually, universes let you create one template and reuse it everywhere.

Key Benefits

Efficiency

Define once, use everywhere

Consistency

All instances identical

Maintenance

Change template, update all

Memory

Reduced input file size

Creating Your First Universe

A universe is a complete geometry template. Let's build a simple fuel pin universe step by step.

Step 1: Define Surfaces

mcnp
c Fuel pin surfaces
1  cz   0.4095    $ Fuel radius
2  cz   0.4178    $ Gap radius  
3  cz   0.4750    $ Clad radius

Step 2: Create Universe Cells

mcnp
c Universe 1: Fuel pin
10  1  -10.4   -1     u=1  imp:n=1    $ UO2 fuel
11  0           1 -2  u=1  imp:n=1    $ Helium gap
12  2  -6.56    2 -3  u=1  imp:n=1    $ Zircaloy clad
13  3  -0.714   3     u=1  imp:n=1    $ Water (infinite)

The `u=1` parameter assigns all cells to universe 1. Cell 13 extends to infinity, ensuring the universe fills all space.

Step 3: Use the Universe

mcnp
c Place fuel pin in assembly
20  0  10 -11 12 -13  fill=1  imp:n=1    $ Pin location

c Boundary surfaces
10  px  -0.63    $ Pin boundaries
11  px   0.63    $ (1.26 cm pitch)
12  py  -0.63
13  py   0.63

The `fill=1` parameter places universe 1 inside the cell boundaries.

Multiple Universe Types

Real assemblies need different components. Create separate universes for each type, then mix them as needed.

mcnp
c Universe 1: Fuel pin (already defined)

c Universe 2: Guide tube  
20  2  -6.56   -4     u=2  imp:n=1    $ Steel tube
21  3  -0.714   4     u=2  imp:n=1    $ Water inside

c Universe 3: Water hole
30  3  -0.714         u=3  imp:n=1    $ Pure water

c Additional surface
4  cz   0.612    $ Guide tube radius

Each universe serves a specific purpose: fuel pins for power, guide tubes for control rods, water holes for neutron moderation.

Rectangular Lattices

For regular arrays, lattices automatically place universes in a grid pattern. This is perfect for fuel assemblies.

Simple 3×3 Lattice

mcnp
c 3x3 lattice universe
100  0  20 -21 22 -23  lat=1  u=10  imp:n=1
     fill=0:2 0:2 0:0      $ 3x3 grid (indices 0-2)
     1 1 1                 $ Row 0: fuel-fuel-fuel
     1 2 1                 $ Row 1: fuel-guide-fuel  
     1 1 1                 $ Row 2: fuel-fuel-fuel

c Lattice boundaries
20  px  -1.89    $ Left edge (-3 × 0.63)
21  px   1.89    $ Right edge
22  py  -1.89    $ Bottom edge
23  py   1.89    $ Top edge

The `lat=1` creates a rectangular lattice. Numbers in the fill data specify which universe goes in each grid position.

Using the Lattice

mcnp
c Place 3x3 assembly in reactor
200  0  30 -31 32 -33  fill=10  imp:n=1    $ Assembly location

c Assembly boundaries  
30  px  -2.5     $ Assembly box
31  px   2.5
32  py  -2.5
33  py   2.5

Realistic PWR Assembly

Let's create a simplified 5×5 PWR assembly with proper guide tube placement.

mcnp
c 5x5 PWR assembly
300  0  40 -41 42 -43  lat=1  u=20  imp:n=1
     fill=0:4 0:4 0:0      $ 5x5 grid
     1 1 1 1 1             $ Row 0: all fuel
     1 1 2 1 1             $ Row 1: guide tube in center
     1 2 3 2 1             $ Row 2: guide-instrument-guide
     1 1 2 1 1             $ Row 3: guide tube in center
     1 1 1 1 1             $ Row 4: all fuel

c Assembly boundaries (5 × 1.26 cm pitch)
40  px  -3.15    $ Half-width
41  px   3.15
42  py  -3.15
43  py   3.15

This pattern places guide tubes at strategic locations for control rod insertion and includes an instrument tube in the center.

Positioning and Transformations

Universes can be positioned anywhere using translation vectors or transformation cards.

Translation Vectors

mcnp
c Place assemblies at different positions
400  0  -50 51 -52 53  fill=20 (0 0 0)      imp:n=1    $ Assembly 1
401  0  -54 55 -56 57  fill=20 (10 0 0)     imp:n=1    $ Assembly 2
402  0  -58 59 -60 61  fill=20 (0 10 0)     imp:n=1    $ Assembly 3
403  0  -62 63 -64 65  fill=20 (10 10 0)    imp:n=1    $ Assembly 4

Translation vectors in parentheses specify the (x,y,z) offset for each universe placement.

Best Practices

Universe Design

  • • Make outermost cell infinite
  • • Use consistent surface numbering
  • • Keep universes simple and focused
  • • Document universe purpose clearly

Lattice Design

  • • Check lattice boundaries carefully
  • • Verify fill pattern matches intent
  • • Use consistent indexing (0-based)
  • • Test with simple cases first

Common Mistakes

  • • Forgetting to make outermost universe cell infinite
  • • Mismatching lattice boundaries with fill dimensions
  • • Using wrong universe numbers in fill data
  • • Overlapping or undefined geometry regions

Quick Start Guide

Follow these steps to create your first universe-based model:

  1. Design your component: Identify what geometry you want to repeat
  2. Create surfaces: Define all boundaries needed for the component
  3. Build universe cells: Add u=N parameter to assign cells to universe N
  4. Make infinite boundary: Ensure outermost cell extends to infinity
  5. Use the universe: Place it with fill=N in other cells
  6. Test and verify: Check geometry with visualization tools