Page 3 of 4

Re: Automatic division of depletion zones

Posted: Thu Mar 31, 2016 12:31 pm
by Andy_Turner
Hi Jaakko

Thanks an improved volume estimator would be very useful.
Jaakko Leppänen wrote:The problem is that the code has no way of knowing which material zones are part of the actual geometry and which are not. The only way of identifying the zones would be to run the Monte Carlo based volume calculation routine, but at that point the division is already made.
I thought during MC volume estimate the burn zones don't use up much memory, so not a problem to divide it up and run volume estimate - it is only when allocating the storage for nuclide inventory in each zone that the memory use goes up.

So I was thinking was it possible that having already run the MC volume estimate, the neutron and burn calculation reads in the volume file, and uses it to decide whether to allocate memory for the burn zone or not. (zero material volume = not allocated). i.e. the burn zone index number is actually the same, but not all the zones are allocated (you store on a smaller array, and need a second array to relate 'array position for active burn zone ID' to the 'original burn ID'...). In this way you do not consume memory allocating for the zones that do not contain any of the specific material. This was what I was thinking. Maybe it is indeed a big change I don't know.

Re: Automatic division of depletion zones

Posted: Thu Mar 31, 2016 1:30 pm
by Jaakko Leppänen
Yes, I believe this would be possible.

Most of the material-wise memory footprint actually consists of pre-calculated cross sections and storage space for flux spectrum in burnup mode. These are not used in the lower optimization modes (1 and 2). Storing the isotopic compositions alone doesn't take up that much memory, especially in the case of non-fissile materials.

I'll make a note in my TODO-list.

Re: Automatic division of depletion zones

Posted: Wed Jul 06, 2016 4:14 pm
by bilodid
Hi Jaakko,

I have created a small 2D supercell from VVER pins. And subdivided each pin into rings and sectors.
To test symmetry option, described in wiki I made two inputs:
1. full supercell described explicitly
2. 1/6 sector is described explicitly and reflected to other sectors using "set usym "

plot of geometry looks the same in both cases.
But the results start to deviate from the second step of depletion:
burnup deviation,pcm
0 24
0.01 146
0.02 249
0.03 245
0.05 242
0.1 264
0.2 269
0.5 276

in the material cards I haven't specified materials volumes. Could that be a problem? how should I specify volume in "usym" case - as for a full geometry or for a sector?


now I've got results till 50 MWd/kgHM - the deviation is growing with burnup up to 8000 pcm

Re: Automatic division of depletion zones

Posted: Thu Jul 07, 2016 10:40 pm
by Jaakko Leppänen
It's probably related to the volumes. Try running the Monte Carlo based volume calculation routine. That will show you the actual volumes and the values used in the calculation. For more information, see: ... al_volumes

Also note that the symmetry option covers part of your geometry, so you if you are using the "sep" option with the div card you should replace the pins in the lattice positions that are not included in the geometry with empty lattice positions. Otherwise you'll get a large number of fuel materials that are not actually part of the geometry.

Re: Automatic division of depletion zones

Posted: Fri Jul 08, 2016 2:56 pm
by bilodid
Thanks a lot!

It looks like an automated volume estimation is not working right if option "set usym" is used.
Giving the right volumes explicitly is also not obvious if an automatic division of depletion zones is used.

So the solution which works for me:
1. first run -checkvolumes to find approximate volumes of each depletion zone
2. replace approximate volumes in file .mvol by exact volumes
3. run serpent with "include .mvol"

Re: Automatic division of depletion zones

Posted: Fri Jul 08, 2016 4:35 pm
by Jaakko Leppänen
Yes, the problem with the automatic volume calculation routine is that it only sees the fuel pins as part of the lattice structure, and has no way of determining which part of the geometry is included in the symmetry sector.

I usually calculate multiplicity factors by dividing the Monte Carlo estimates with the volume of a single fuel pin and rounding the value to the nearest integer (or half-integer if the symmetry planes pass through fuel pins). By multiplying with the pin volume I get accurate volumes for the mvol-card.

Re: Automatic division of depletion zones

Posted: Wed Nov 23, 2016 5:20 pm
by bilodid

I have also tried to use the option together with equilibrium xenon:

Code: Select all

mat fuel11  -10.26   burn 1
mat fuel12  -10.26   burn 1
mat fuel21  -10.26   burn 1
mat fuel22  -10.26   burn 1
div fuel11 sep 1 

include v1000.mvol

set xenon 1
But I have got an error:

Code: Select all

Input error:

Volume of material fuel21z12 must be given
volumes for all materials I generate with -checkvolumes and provide back.
How can I get equilibrium xenon?


Re: Automatic division of depletion zones

Posted: Sun Nov 27, 2016 10:59 pm
by Jaakko Leppänen
This error might result from fuel regions that are not physically part of the geometry (outside the symmetry sector or something similar). The regions with zero volume are not printed in the mvol-file, but you should see them in the output log that you get when running the Monte Carlo volume calculation routine. Do you see any regions with zero volume? If so, is it possible to remove those entries from you lattices?

I can see that this may be a problem for some geometries, and the best solution would probably be to allow zero volumes and just disregard them in the xenon calculation.

Re: Automatic division of depletion zones

Posted: Mon Nov 28, 2016 6:47 pm
by bilodid
Yes, you are right - material fuel21z12 is the first which has zero volume.
I can’t see how exclude that zone from geometry. May be you could suggest?
I sent you input by email.

Re: Automatic division of depletion zones

Posted: Tue Nov 29, 2016 1:47 pm
by Jaakko Leppänen
In pin-level calculations it is easy to remove the unnecessary pins from the lattice, but when you have a full-core model, this may not be a practical approach since you often have the same assembly type both fully inside the symmetry sector and also at the border, in which case half of the pins are cut out. The same applies to pin-level calculations when you sub-divide the pins into multiple sectors.

I checked the source code, and it seems that excluding the zero-volume materials in the calculation should not lead to any additional errors. To do this, you'll need to replace the two checks (one in the xenon branch and another in the samarium branch) in poisoneq.c:

Code: Select all

	  if ((vol = RDB[mat + MATERIAL_VOLUME]) < ZERO)
	    Error(0, "Volume of material %s must be given", 
		  GetText(mat + MATERIAL_PTR_NAME));

Code: Select all

  if ((vol = RDB[mat + MATERIAL_VOLUME]) < ZERO)
	      /* Next material */

	      mat = NextItem(mat);

	      /* Cycle loop */

I'll include a fix in the next update (2.1.28).