# Difference between revisions of "Defining material volumes"

Getting the right volumes for burnable materials is crucial for normalizing the reaction rates in burnup calculation. If the volume used in the calculation is incorrect, the reaction rates are over- or under-estimated, which leads to accumulating errors in material compositions as they are burnt. This can be pretty confusing for the user, since the results are correct for the initial composition, and if the volumes are not off by several factors, it may take several burnup steps before the errors become apparent. Serpent tries to calculate the volumes automatically, and can do that pretty well for 2D assembly geometries constructed using the "pin" geometry type. If burnable regions are more complex, the code prints out an error message saying that the volumes must be entered manually, which is usually not a major problem either.

The real danger lies in geometries in which the code thinks that the volumes are appropriately calculated, and has no way of telling the user that something may be wrong. The most typical case where this happens is that the burnable regions are defined using the pin-structure, but some of the pins are cut by the boundaries of a universe at another geometry level. Imagine, for example, a 1/4 model of a PWR fuel assembly:

This type of geometry model would give correct results for k-eff, group constants and everything that does not need to be normalized to something that depends on volume. Flux used for burnup calculation, however, depends on global normalization (flux, power, power density, etc.) and the volume of the burnable material relative to the total volume. In this case, the code would be able to calulate the volume of all three fuel regions by calculating the volume of a single pin, and counting the number of pins in the lattice. What the code would not see, however, is that two rows of pins are cut in half by the outer (reflective) geometry boundary.

An easy way to check that the volumes used in the calculation are correct is to run the Monte Carlo based volume checker routine:

```sss2 -checkvolumes <N> <input>
```

The code samples <N> points in the geometry, and by counting the number of hits in each material region determines a stochastic estimate for the volumes. For the PWR case above the output looks like:

```...
Material FUE1          : 9.0920E+00 8.5550E+00 (0.001) :  -0.059
Material FUE2          : 1.3905E+01 1.3368E+01 (0.001) :  -0.039
Material FUE3          : 1.5510E+01 1.3367E+01 (0.001) :  -0.138
Material can           : 1.3719E+01 1.2251E+01 (0.001) :  -0.107
Material water         :        N/A 6.7527E+01 (0.000) :     N/A
...

```

The first column of values is the volume that will be used by Serpent in the transport calculation. The second column shows the Monte Carlo volume estimates along with the relative statistical errors, and the last column shows the relative difference between the two. So if this input was used in a burnup calculation, the volumes of materials FUE1, FUE2 and FUE3 would be over-estimated by about 6%, 4% and 14%, respectively, which would result in significant errors in the material compositions at later burnup steps.

In this type of geometry the volumes of the materials would be easy to calculate by hand, and they could be entered in the material cards in the input file. In more complicated geometries, however, and especially using the automated divisor feature, determining and entering the correct volumes becomes much more difficult. For more complicated cases Serpent 2 offers the capability to use the Monte Carlo volume checker routine for calculating the volumes for the transport calculation. When run, the routine produces an output file "<input>.mvol", which for the example PWR case looks like:

```% --- Material volumes:

% Produced Wed Jun 13 11:50:47 2012 by MC volume calculation routine by
% sampling 10000000 random points in the geometry.

set mvol

FUE1            0 8.55505E+00 % (0.001)
FUE2            0 1.33683E+01 % (0.001)
FUE3            0 1.33674E+01 % (0.001)
can             0 1.22507E+01 % (0.001)
water           0 6.75272E+01 % (0.000)

```

This is actually standard Serpent input (see set mvol option), that can be either copy-pasted to the main input file, or read separately using the include command. Parameter "set mvol" is followed by list of three values: material name, zone index and volume. The zone index is used for separating depletion zones produced by the use of the "div" card. If there is no division, the zone number is zero. The index is not really meant to be a human-readable parameter, since large burnup calculation problems may involve thousands of zones, and identifying which index corresponds to which region is pretty much impossible. The idea is that the calculation can be run in two parts:

1. Run the volume-checker routine with a very large number of points to produce volumes with a sufficient level of statistical accuracy (the statistical errors are entered as comments in the .mvol file)
2. Read the volumes from the .mvol file and use them in the burnup calculation

The zone indexes are used by the code to put the correct volume in the correct place. The calculation can also be done in a single run using the [[set mvcol option:

```set mcvol <N>
```

When run in the usual way, the code first runs a Monte Carlo volume calculation using <N> points, and the continues with a transport or burnup calculation with the stochastic volume estimates.