Page 1 of 4

### Automatic division of depletion zones

Posted: Fri Jun 08, 2012 1:37 pm
The main new feature in update 2.1.6 is the capability to divide material regions into separate depletion zones for burnup calculation. This capability existed already earlier for the pin-type structures, but the new method extends it to arbitrary 3D geometries. The division is invoked by a new input card:

Code: Select all

``````div <mat> [sep <1/0>] [subz <nz> <zmin> <zmax>] [subr <nr> <rmin> <rmax>] [subs <ns> <s0>]
``````
Parameter <mat> relates the division into the material that is divided. Optional parameter "sep" gets value 0 = no or 1 = yes, and it determines whether the material is divided into separate depletion zones. If the division is set, every cell containing material <mat> is handled separately in the burnup calculation. The division takes into account the universe-based geometry structure, so the same cell in two different univeses is treated as two separate cells. For fuel assembly geometries, for example, each pin is automatically treated as a separate material. If the assembly is put in a core lattice, the same pin in two different assembly positions are treated separately and so on. The method is really simple, but it easily results in a very large number of burnable materials. At the moment the division cannot account for symmetries, but I'm working on that...

The remaining parameters divide the materials into sub-regions. In the current update the sub-division is based on cylindrical objects. Parameter "subz" divides the material into <nz> axial regions between z = <zmin> and z = <zmax>. Parameter "subr" divides the region radially into <nr> rings between r = <rmin> and r = <rmax>. The last paramter "subs" divides the region into <ns> angular sectors, with the zero position given by angle <s0>.

Here's an example...

Imagine a BWR assembly geometry consisting of a 10 x 10 lattice of fuel pins with 13 different types:

Defining a div-card for each fuel composition:

Code: Select all

``````div fuel1 sep 1
div fuel2 sep 1
...
div fuel13 sep 1
``````
divides identical compositions into different depletion zones:

(some of the colors in the plot may be same or similar, but each regions now contains a different material)

Fuel types 9-13 contain gadolinium, so let's divide them into 10 rings:

Code: Select all

``````div fuel9 sep 1 subr 10 0.0 4.38E-01
div fuel10 sep 1 subr 10 0.0 4.38E-01
div fuel11 sep 1 subr 10 0.0 4.38E-01
div fuel12 sep 1 subr 10 0.0 4.38E-01
div fuel13 sep 1 subr 10 0.0 4.38E-01
``````
The division is made between 0 and 0.438 cm into 10 rings with equal cross-sectional area:

Finally let's divide every pin into 4 angular sectors:

Code: Select all

``````
div fuel1 sep 1 subs 4 45.0
div fuel2 sep 1 subs 4 45.0
...
div fuel13 sep 1 subr 10 0.0 4.38E-01 subs 4 45.0
``````
The angular segments are tilted by 45 degrees:

Here's a closer view of 4 divided pins:

The axial division works in a similar manner. The code should be able to calculate material volumes correctly for this type of geometries. The division can be used with any configuration, but if the volumes cannot be calculated for the original cells, they cannot be calculated for divisions either. I'll post more about new volume division features later...

### Re: Automatic division of depletion zones

Posted: Thu Jun 14, 2012 7:37 am
I forgot to mention that, with this new capability, it is very easy to produce extremely large depletion output files if all materials are included in the output. To avoid this, I added an option to print only the parent materials (materials explicitly defined in the input), partials (materials produced by Serpent from the parents by division) or both. The default is that only the parent materials are included in the _dep.m output file, and the results are produced by averaging over the partials. The default mode can be changed by:

Code: Select all

``````set depout <mode>
``````
where mode 1 = only partials, 2 = only parents, 3 = both. This methodology applies to all burnable materials, not only those produced by the new div card.

### Re: Automatic division of depletion zones

Posted: Thu Jun 14, 2012 7:42 am
Just before wrapping up update 2.1.6 I made one final adjustment to a material processing routine, that later turned out to become a major bottleneck if the number of material compositions is very large. If your calculation hangs for a long time after printing:

Code: Select all

``````Normalizing compositions and processing mixtures...
OK.
``````
go to processmaterials.c and comment out the two calls to function SortList(). I'll correct this flaw in the next update, which I will (hopefully) release very soon...

### Re: Automatic division of depletion zones

Posted: Thu Jun 06, 2013 7:05 pm
Is there a way to allocate the materials from a previous simulation that was divided up and burned to a new input with the same divisions? Since the code generates unique names for the new geometry and material, I would assume this is possible using the resulting *.bumat* to allocate the material data would be possible.

### Re: Automatic division of depletion zones

Posted: Thu Jun 06, 2013 8:49 pm
I can see that this would be a very useful feature, but at the moment it cannot be done that way. If you read the material compositions from a .bumat file, they are treated as any other unique material name in the input. I'll put this in my todo-list, but at the moment I have so many other things going on that it may take while before I can start implementing it.

You should also note that even if you construct the same geometry by manually dividing the material zones into sub-regions and assign them the names from the .bumat file, the resulting simulation is performed in a different way. When the code does the automatic division, it shares some pointer lists among the divided materials. If the same materials are defined in the input, each material is assigned with its own pointer lists. This will result in increased memory demand per burnable material, and the difference starts to become significant when the number of depletion zones is in the order ot 1000 or so. The coding behind the automatic material division is pretty complicated, and adding the capability to read the compositions from a previous calculation requires much more than just putting the nuclide densities in the correct place.

### Re: Automatic division of depletion zones

Posted: Thu Jun 06, 2013 8:56 pm
On a second thought... If you have the same burnable materials in the second calculation and all you need to do is override the initial compositions, it should be just a matter of putting the correct nuclide densities in place. At least as long as the material division remains unchanged. I'll look into it...

### Re: Automatic division of depletion zones

Posted: Thu Jun 06, 2013 9:46 pm
Hello,

The hope is to save myself the effort of decomposing the geometry and also to allow me the freedom to shuffle and test spatial resolution of the burnup splitting. For a particular case, the divisions are the same and fuel shuffling occurs yearly. With the material conventions I have, each cell has its own material so it is self-consistent with how Serpent renames the cells.

As I would imagine it: If I have two cells with materials 100 and 200, respectively, and each is split twice, then my new materials are 100z1 100z2, 200z1, and 200z2. Then, the desire to "shuffle" is to swap the materials in the cells from 100 and 200 to 200 and 100. The code then splits with it's own naming convention, 100z1, 100z2, etc. and loads the material file with the materials from the previous burnup case. Nothing else would have changed in regard to the geometry. I think this corresponds with your latest comment.

I completely understand the time constraints; I was just wondering if there was possibly an undocumented feature without introducing more work on your part.

### Re: Automatic division of depletion zones

Posted: Fri Jun 28, 2013 2:49 pm
The capability discussed above was added in update 2.1.14. The nuclide densities can be overridden by:

Code: Select all

``````set comp <file1> <file2> <file3> ...
``````
where the files are .bumat files written by a previous calculation. In order to work, the initial material compositions must be defined similar to the previous calculation, otherwise the naming of the divided materials may be different.

### Re: Automatic division of depletion zones

Posted: Tue Dec 24, 2013 12:14 pm
I added a new feature in the "div sep" card in version 2.1.16, that allows the division to be based on any geometry level, instead of a simple on/off switch:

Code: Select all

``````div <mat> [sep <lvl>] [subz <nz> <zmin> <zmax>] [subr <nr> <rmin> <rmax>] [subs <ns> <s0>]
``````
For example, if you have an LWR core, instead of handling each pin in each assembly as a separate depletion zone, the division can be done on assembly-basis, so that all pins in a single assembly are treated as a single material, and only pins in different assemblies are separated. Or in HTGR geometries, fuel kernels in each compact or pebble consist of a single burnable material, and the separation is done between compacts or pebbles.

The concept of a geometry level may be a bit difficult to undestand, but basically it means that whenever there is a lattice, "pbed" -structure or a cell filled with another universe, it adds a new level in the geometry. What makes things a bit more complicated is that lattices and pbed-structures themselves form a single level, so in a typlical BWR assembly geometry, for example, the levels are:

0: Structures defining channel box wall, moderator channels, etc. and the outside world
1: Lattice of fuel pins
2: pin universes

The number "<lvl>" following the "sep" entry determines the number of levels counted backwards from the last one (<lvl> = 1 being the last). I decided to go with this approach instead counting forwards because in complicated geometries the different levels may be difficult to see, and it might be easier to start with <lvl> = 1 and increase the number until the geometry plotter shows the desired result.

Consider another example, consisting of 4 HTGR-type fuel pebbles filled with 50 TRISO particles each. The geometry consits of 5 levels:

0: a cube containing the pebbles
1: pebble distribution
2: pebble universes
3: particle distributions
4: particle universes

With "div sep 1", the division is based on particle universes (level 4), and each particle in each pebble is handled as a separate depletion zone, resulting in a total of 200 burnable materials. A geometry plot shows each fuel kernel in different color:

With "div sep 3", the division is based on the pebble universe (level 2), and the number of depletion zones is reduced to 4, one for each pebble:

When the number of fuel kernels increases to several thousand, this makes a huge difference for the total number of depletion zones.

The way the division works is not always very intuitive. In the example above, <lvl> = 2 results in the same division as <lvl> = 1, and <lvl> = 4 in the same divison as <lvl> = 3. Usually the best way is to try different values and look at the geometry plotter for the result (note that setting rgb values in the material cards fixes the color scheme and doesn't show the division). Also note that this feature has been tested only in relatively simple geometries, so if you run into problems, let me know.

### Re: Automatic division of depletion zones

Posted: Mon Jan 13, 2014 9:11 pm
Dr. Leppänen,

I was wondering if there has been any progress on adding an option to automatically divide the detector into multiple bins, one for each subdivided zone? Also, for the time being, is there some sort of standard numbering / naming format for the subdivisions (<parent name> + ...)

Thanks,
Cole