User Manual
Generic information about how to use dictionaries in writing an input file can be found in Dictionary Input. Here, more specific information about the input options available are described.
Physics Package
In SCONE, the physics package is what determines the flow of a calculation. The possible options and related input files are shown below.
eigenPhysicsPackage
eigenPhysicsPackage, used for criticality (or eigenvalue) calculations
pop: number of particles used per cycle
active: number of active cycles
inactive: number of inactive cycles
dataType: determines type of nuclear data used; can be
ce
ormg
XSdata: keyword to the name of the nuclearDataHandle used
seed (optional): initial seed for the pseudo random number generator
outputFile (optional, default = ‘output’): name of the output file
outputFormat (optional, default =
asciiMATLAB
): type of output file. Choices areasciiMATLAB
andasciiJSON
printSource (optional, default = 0): 1 for true; 0 for false; requests to print the particle source (location, direction, energy of each particle in the particleDungeon) to a text file
Example:
type eigenPhysicsPackage;
pop 100000;
active 100;
inactive 50;
dataType ce;
XSdata ceData;
seed -244654;
outputFile PWR_1;
outputFormat asciiJSON;
transportOperator { <Transport operator definition> }
collisionOperator { <Collision operator definition> }
inactiveTally { <Inactive tally definition> }
activeTally { <Active tally definition> }
geometry { <Geometry definition> }
nuclearData { <Nuclear data definition> }
Optional entries
uniformFissionSites { <Uniform fission sites definition> }
varianceReduction { <Weight windows definition> }
source { <Source definition> }
Note
Although a source
definition is not required, it can be included to replace
the default uniform fission source guess used in the first cycle
fixedSourcePhysicsPackage
fixedSourcePhysicsPackage, used for fixed source calculations
pop: number of particles used per batch
cycles: number of batches
dataType: determines type of nuclear data used. Can be
ce
ormg
XSdata: keyword to the name of the nuclearDataHandle used
seed (optional): initial seed for the pseudo random number generator
outputFile (optional, default = ‘output’): name of the output file
outputFormat (optional, default =
asciiMATLAB
): type of output file. Choices areasciiMATLAB
andasciiJSON
printSource (optional, default = 0): 1 for true; 0 for false; requests to print the particle source (location, direction, energy of each particle in the particleDungeon) to a text file
buffer (optional, default = 50): size of the particle bank used by each OpenMP thread to store secondary particles
commonBufferSize (optional): if not included, the common buffer is not used; if included, after each particle history the particles in each thread-private buffer (or bank, or dungeon) are moved to a buffer common to all threads to avoid long histories
bufferShift (optional, default = 10): threshold of particles to be stored in a thread-private buffer, after which particles are shifted to the common buffer
Example:
type fixedSourcePhysicsPackage;
pop 100000;
cycles 200;
dataType ce;
XSdata ceData;
seed 2829741;
outputFile shield_type11;
buffer 10000;
commonBufferSize 50000;
transportOperator { <Transport operator definition> }
collisionOperator { <Collision operator definition> }
tally { <Tally definition> }
source { <Source definition> }
geometry { <Geometry definition> }
nuclearData { <Nuclear data definition> }
Optional entries
varianceReduction { <Weight windows definition> }
rayVolPhysicsPackage
rayVolPhysicsPackage, used to perform ray-tracing based volume calculation
pop: number of rays used per cycle
cycles: number of cycles
mfp: mean length of ray segments
abs_prob: ray absorption probability after each segment
robust: 1 for true; 0 for false; enable robust mode: in this case at each collision, each particle verifies that the material it currently thinks it is in and the one obtained by placing a particle in the geometry with the same spatial position and direction are in agreement
cache: 1 for true; 0 for false; enable distance caching
seed (optional): initial seed for the pseudo random number generator
Example:
type rayVolPhysicsPackage;
pop 1000000;
cycles 100;
mfp 0.3;
abs_prob 0.1;
robust 1;
cache 1;
geometry { <Geometry definition> }
nuclearData { <Nuclear data definition. Requires material names only> }
vizPhysicsPackage
vizPhysicsPackage, used for visualising geometry
Example:
type vizPhysicsPackage;
geometry { <Geometry definition> }
viz { <Visualiser definition> }
Source
For the moment, the only possible external source types in SCONE are point source and material source.
pointSource
The properties of a point source are:
r: (x y z) vector with the origin position. [cm]
particle:
neutron
orphoton
, according to the type of particles emitted by the sourceE or G: emission energy
E: energy of the particles emitted, for continuous energy calculations. [MeV]
G: energy group of the particles emitted, for multi-group calculations.
dir (optional, default = isotropic): (u v w) vector with the direction of the source particles
Hence, an input would look like:
source { type pointSource; r (0.0 1.0 5.2); particle neutron; E 14.1; dir (0.0 1.0 0.0); }
materialSource
A material source is a particle source which can only be produced in a given material. It is a type of volumetric source. For the moment it is constrained to neutrons. The properties of a material source are:
mat: the name of the material from which to sample (must be defined in materials).
data (optional, default = continuous energy): data type for source particles. Can be
ce
ormg
.E (optional, default = 1E-6): energy of the particles emitted, for continuous energy calculations. [MeV]
G (optional, default = 1): energy group of the particles emitted, for multi-group calculations.
boundingBox (optional, default is the geometry bounding box): (x_min y_min z_min x_max y_max z_max) vector describing a bounding box to improve sampling efficiency or to localise material sampling to a particular region.
Hence, an input would look like:
source { type materialSource; mat myMat; data ce; E 2.0;
boundingBox (-5.0 -3.0 2.0 5.0 4.0 3.0); }
fissionSource
A source intended to initialise eigenvalue calculations. If it is not defined in the input file, it is used with the default settings. It is a type of volumetric source, which uniformly distributes fission sites in the geometry. The energy spectrum of the fission neutrons is based on a fixed incident energy provided by the user. The properties of a fission source are:
data (optional, default=’ce’): data type for source particles. Can be
ce
ormg
.E (optional, default=1E-6): energy of the incident neutron causing fission [MeV]. Makes sense for continuous energy source only.
G (optional, default=1): energy group of the incident neutron causing fission. Makes sense for multi-group source only.
attempts (optional, default=10000): number of attempts to sample a fission site in a cell before throwing an error.
bottom (optional): Lower point determining axis-aligned bounding box where to sample points. If provided
top
must also be provided.top (optional): Upper point determining axis-aligned bounding box where to sample points. If provided
bottom
must also be provided.
Transport Operator
The transport operator takes care of moving the particles from one collision location to another. In the input file, one must include:
transportOperator { type <transportOperatorType>; *keywords* }
The possible types are:
transportOperatorST, performs surface tracking (ST) or ray tracing
transportOperatorDT, performs Woodcock delta tracking (DT)
transportOperatorHT, performs a hybrid between ST and DT
cutoff (optional, default = 0.9): cutoff between ST and DT. If, at the particle energy, the ratio between the local material cross section and the majorant cross section is larger than the cutoff, DT is used; otherwise ST is used.
Example:
transportOperator { type transportOperatorHT; cutoff 0.85; }
Collision Operator
The collision operator process all collision types. It samples the colliding nuclide and the reaction, and calculates all relevant by-products. In the input file, one must include:
collisionOperator { neutronCE { type <ceCollisionOperatorType>; *keywords* } }
if continuos energy nuclear data are used, or
collisionOperator { neutronMG { type <ceCollisionOperatorType>; } }
if multi-group nuclear data are used. In a hybrid simulation, both neutronCE
and
neutronMG
can be included.
The possible types to be used with continuous energy data are:
neutronCEstd
neutronCEstd, to perform analog collision processing
minEnergy (optional, default = 1.0e-11): minimum energy cut-off. [MeV]
maxEnergy (optional, default = 20.0): maximum energy cut-off. [MeV]
energyThreshold (optional, default = 400): energy threshold for explicit treatment of target nuclide movement. Target movement is sampled if neutron energy E < kT ∗ energyThreshold where kT is target material temperature in [MeV]. [-]
massThreshold (optional, default = 1): mass threshold for explicit treatment of target nuclide movement. Target movement is sampled if target mass A < massThreshold. [Mn]
DBRCeMin (optional, default = 1.0e-08): minimum DBRC energy. [MeV]
DBRCeMax (optional, default = 2.0e-04): maximum DBRC energy. [MeV]
Example:
collisionOperator { neutronCE { type neutronCEstd; minEnergy 1.0e-12; maxEnergy 30.0;
energyThreshold 200; massThreshold 2; DBRCeMin 1.0e-06; DBRCeMax 0.001; } }
neutronCEimp
neutronCEimp, to perform implicit collision processing
minEnergy (optional, default = 1.0e-11): minimum energy cut-off. [MeV]
maxEnergy (optional, default = 20.0): maximum energy cut-off. [MeV]
energyThreshold (optional, default = 400): energy threshold for explicit treatment of target nuclide movement. Target movement is sampled if neutron energy E < kT ∗ energyThreshold where kT is target material temperature in [MeV]. [-]
massThreshold (optional, default = 1): mass threshold for explicit treatment of target nuclide movement. Target movement is sampled if target mass A < massThreshold. [Mn]
splitting (optional, default = 0): 1 for true; 0 for false; enables splitting for particles above a certain weight
roulette (optional, default = 0): 1 for true; 0 for false; enables rouletting of particles below a certain weight
minWgt (optional, default = 0.25): minimum particle weight for rouletting
maxWgt (optional, default = 1.25): maximum particle weight for splitting
avgWgt (optional, default = 0.5): weight of a particle on surviving rouletting
maxSplit (optional, default = 1000): maximum number of splits allowed per particle
impAbs (optional, default = 0): 1 for true; 0 for false; enables implicit capture
impGen (optional, default = 1): 1 for true; 0 for false; enables implicit fission sites generation
weightWindows (optional, default = 0): 1 for true; 0 for false; enables the use of weight windows
UFS (optional, default = 0): 1 for true; 0 for false; enables the use of uniform fission sites
DBRCeMin (optional, default = 1.0e-08): minimum DBRC energy. [MeV]
DBRCeMax (optional, default = 2.0e-04): maximum DBRC energy. [MeV]
Example:
collisionOperator { neutronCE { type neutronCEimp; minEnergy 1.0e-12; maxEnergy 30.0;
impAbs 1; roulette 1; splitting 1; impGen 1; maxWgt 2.0; minWgt 0.1; UFS 1; } }
The possible types to be used with multi-group data are:
neutronMGstd
neutronMGstd, to perform analog collision processing
Example:
collisionOperator { neutronMG { type neutronMGstd; } }
neutronMGimp
neutronMGimp, to perform implicit collision processing
maxSplit (optional, default = 1000): maximum number of splits allowed per particle
weightWindows (optional, default = 0): 1 for true; 0 for false; enables the use of weight windows
Example:
collisionOperator { neutronMG { type neutronMGimp; weightWindows 1; maxSplit 50; } }
Weight Windows
Weight windows can be used if, inside the collision operator neutronCEimp
, the
keyword weightWindows
is set to 1. Then, in the input file, one needs to add:
varianceReduction { type weightWindowsField; file <pathToWeightWindowsFile>; }
The file that contains weight windows has to include:
map: map as defined for the tallies
wLower: array with the lower weight windows weights, where the order of the values in the array must correspond to the order of the bins in the map
wUpper: array with the upper weight windows weights, where the order of the values in the array must correspond to the order of the bins in the map
constSurvival: multiplication constant. Multiplied by the lower weights, gives the survival weight for Russian roulette
Example:
map { type multiMap; maps (mapx mapy);
mapx { type spaceMap; axis x; grid unstruct; bins (0.0 1.0 2.0); }
mapy { type spaceMap; axis y; grid unstruct; bins (0.0 5.0 10.0 15.0); } }
constSurvival 2.0;
wLower (0.5 0.1 0.2 0.1 0.5 0.5);
wUpper (2.0 1.2 1.5 1.1 2.0 4.0);
Uniform Fission Sites
Uniform Fission Sites can be used if, inside the collision operator neutronCEimp
, the
keyword UFS
is set to 1. Then, in the input file, one needs to add:
uniformFissionSites { type uniFissSitesField; map { <Map definition> } *keywords* }
In the input above, map
is the geometrical map used for UFS. The map has to contain
fissile material for the method to make sense. Other keywords are:
uniformVolMap (optional, default = 0): 1 for true; 0 for false; flag that states whether the bins of the map contain equal volumes of fissile material or not
popVolumes (optional, default = 1.0e7): if
uniformVolMap
is false, a Monte Carlo calculation is run to estimate the fissile material volumes in each map bin. This entry correspond to the number of points sampled in the geometry for the volume calculation. Note that this volume calculation is done only once during initialisation
Example:
uniformFissionSites { type uniFissSitesField; uniformVolMap 0; popVolumes 1.0e8;
map { <Map definition> }
}
Geometry
A detailed description about the geometry modelling adopted in SCONE can be found at Geometry. In an input file, one has to include:
geometry { type <geometryType>; boundary (a b c d e f); graph { type <graphType>; }
surfaces { <Surfaces definition> }
cells { <Cells definition> }
universes { <Universes definition> }
}
At the moment, the only geometry type available is geometryStd
. As for the boundary
six integers have to be inputted. These correspond to the boundary conditions at boundaries
(-x +x -y +y -z +z). The possibilities are:
vacuum, or black: input 0
reflective: input 1
periodic: input 2
Note
Strictly speaking it is up to a particular boundary surface to interpret how the values in the boundary condition sequence are interpreted. For all cube-like surfaces the rule above holds, but for more exotic boundaries (e.g., hexagons) it is worth double checking the documentation comment of the particular surface in the source code.
Note
Curved surfaces only allow for vacuum boundaries.
The graph definition allows two options:
shrunk: each local (material) cell has the same uniqueID in all universe instances
extended: every local (material) cell has its own uniqueID in all universe instances
Hence, an example of a geometry input could look like:
geometry { type geometryStd; boundary (1 1 1 1 0 0); graph { type shrunk; }
surfaces { <Surfaces definition> }
cells { <Cells definition> }
universes { <Universes definition> }
}
For more details about the graph-like structure of the nested geometry see the relevant section.
Surfaces
To define one or multiple surfaces, the necessary entries are:
surfaces {
<name1> { id <idNumber1>; type <surfaceType>; *keywords* }
<name2> { id <idNumber2>; type <surfaceType>; *keywords* }
...
<nameN> { id <idNumberN>; type <surfaceType>; *keywords* }
}
Here, the name
can be anything at the discretion of the user, as long as it doesn’t
contain spaces. The idNumber
can be any integer; attention must be paid that all
idNumbers
are unique.
Several surfaceTypes
are possible:
box: axis aligned box
origin: (x y z) vector with the origin position. [cm]
halfwidth: (x y z) vector with the halfwidth of each side. [cm]
Example:
surf1 { id 92; type box; origin (0.0 0.0 9.0); halfwidth (1.0 2.0 0.3); }
squareCylinder: infinitely long square cylinder aligned with x, y or z axis. The
input type has to be xSquareCylinder
, ySquareCylinder
or zSquareCylinder
origin: (x y z) vector with the origin position; the entry corresponding to the cylinder axis is ignored. [cm]
halfwidth: (x y z) vector with the halfwidth of each side; the entry corresponding to the cylinder axis is ignored. [cm]
Example:
surf2 { id 25; type ySquareCylinder; origin (3.0 0.0 9.0); halfwidth (4.4 0.0 0.1); }
truncCylinder: finite length cylinder aligned with x, y or z axis. The input type has to be
xTruncCylinder
,yTruncCylinder
orzTruncCylinder
origin: (x y z) vector with the origin position. [cm]
halfwidth: axial halfwidth. [cm]
radius: cylinder radius. [cm]
Example:
surf3 { id 3; type zTruncCylinder; origin (3.0 2.1 5.0); halfwidth 20.0;
radius 1.6; }
aPlane: plane with normal along x, y or z. The input type has to be
xPlane
,yPlane
orzPlane
a0: position of the plane on the axis. The input type has to be
x0
,y0
orz0
. [cm]
Example:
surf4 { id 8; type xPlane; x0 4.0; }
plane: generic plane (F(r) = c1 * x + c2 * y + c3 * z - c4)
coeffs: (c1 c2 c3 c4) vector with coefficients
Example:
surf5 { id 55; type plane; coeffs (8.6 3.0 66.0 1.5); }
cylinder: infinitely long cylinder aligned with x, y or z axis. The input type has to be
xCylinder
,yCylinder
orzCylinder
origin: (x y z) vector with the origin position; the entry corresponding to the cylinder axis is ignored. [cm]
radius: cylinder radius. [cm]
Example:
billy { id 92; type xCylinder; origin (0.0 0.0 9.0); radius 4.8; }
sphere
origin: (x y z) vector with the origin position. [cm]
radius: sphere radius. [cm]
Example:
surf6 { id 234; type sphere; origin (5.0 86.0 19.4); radius 18.3; }
Cells
Similarly to the surfaces, the cells in the geometry can be defined as:
cells {
<name1> { id <idNumber1>; type <cellType>; surfaces (<surfaces>); filltype <fillType>; *keywords* }
<name2> { id <idNumber2>; type <cellType>; surfaces (<surfaces>); filltype <fillType>; *keywords* }
...
<nameN> { id <idNumberN>; type <cellType>; surfaces (<surfaces>); filltype <fillType>; *keywords* }
}
At the moment, in SCONE, the only cellType
available is simpleCell
.
In the surface definition, one should include the indexes of the corresponding
surfaces with no sign to indicate a positive half-space, or minus sign to indicate
a negative half-space. The space in between cells corresponds to an intersection.
The possible fillTypes
are:
mat: if the cells is filled with a homogeneous material
material: takes as an input the material name
Example:
cell1 { id 1; type simpleCell; surfaces (1 -6 90); filltype mat; material fuel; }
uni: if the cell is filled with a universe
universe: takes as an input the universe
id
Example:
cellX { id 5; type simpleCell; surfaces (2 -3); filltype uni; universe 6; }
outside: if the cell is outside of the geometry
Example:
cellixx { id 55; type simpleCell; surfaces (-10); filltype outside; }
Universes
Similarly to the surfaces and cells, the universes in the geometry can be defined as:
universes {
<name1> { id <idNumber1>; type <universeType>; *keywords* }
<name2> { id <idNumber2>; type <universeType>; *keywords* }
...
<nameN> { id <idNumberN>; type <universeType>; *keywords* }
}
Several universeTypes
are possible:
cellUniverse, composed of the union of different cells. Note that overlaps are forbidden, but there is no check to find overlaps
cells: array containing the
cellIds
as used in the cell definitionorigin (optional, default = (0.0 0.0 0.0)): (x y z) array with the origin of the universe. [cm]
rotation (optional, default = (0.0 0.0 0.0)): (x y z) array with the rotation angles in degrees applied to the universe. [°]
Note
When creating a cellUniverse
a user needs to take care to avoid leaving
any ‘unspecified’ regions (sets in space which do not belong to any cell).
If these are reachable by a particle (e.g., are not covered by any higher
level universe) they will cause a calculation to crash.
Example:
uni3 { id 3; type cellUniverse; cells (1 2 55); origin (1.0 0.0 0.0); rotation (0.0 90.0 180.0); }
pinUniverse, composed of infinite co-centred cylinders
radii: array containing the radii of the co-centred cylinders. There must be an entry equal to 0.0, which corresponds to the outermost layer, which is infinite. [cm]
fills: array containing the names or ids of what is inside each cylindrical shell. The order of the fills must correspond to the order of the corresponding radii. An entry can be a material name, the keyword
void
, or au<id>
, whereid
is the id of a defined universeorigin (optional, default = (0.0 0.0 0.0)): (x y z) array with the origin of the universe. [cm]
rotation (optional, default = (0.0 0.0 0.0)): (x y z) array with the rotation angles in degrees applied to the universe. [°]
Example:
uni3 { id 3; type pinUniverse; radii (0.2 1.0 1.1 1.3 0.0); fills (u<1> fuel void clad coolant); }
latUniverse, cartesian lattice of constant pitch
shape: (x y z) array of integers, stating the numbers of x, y and z elements of the lattice. For a 2D lattice, one of the entries has to be 0
pitch: (x y z) array with the x, y and z lattice pitches. In a 2D lattice, the value entered in the third dimension is not used. [cm]
padmat: material name or universe index (u<id>) that fills the possible extra space between the lattice and its bounding surface. Also the keyword
void
is allowedmap: map that includes the universe ids of the elements of the lattice. The order is: increasing x, increasing y and then increasing z
origin (optional, default = (0.0 0.0 0.0)): (x y z) array with the origin of the universe. [cm]
rotation (optional, default = (0.0 0.0 0.0)): (x y z) array with the rotation angles in degrees applied to the universe. [°]
Example:
uni_lattice { id 10; type latUniverse; shape (3 2 2); pitch (1.0 1.0 1.5); padMat u<3>; map (
1 2 3 // x: 1-3, y: 2, z: 2
4 5 6 // x: 1-3, y: 1, z: 2
7 8 9 // x: 1-3, y: 2, z: 1
10 11 12 ) } // x: 1-3, y: 1, z: 1
Note
The order of the elements in the lattice is different from other MC codes, e.g., Serpent. The lattice is written in the style WYSIWYG: What You See Is What You Get.
rootUniverse: top level universe of geometry
border: id of the boundary surface for the whole geometry
fill: inside filling, as a material name or a universe (u<id>)
Example:
root { id 1000; type rootUniverse; border 10; fill u<1>; }
Visualiser
To plot a geometry, the keyword viz
must be present in the input file:
viz {
<name1> { type <vizType>; *keywords* }
<name2> { type <vizType>; *keywords* }
}
The possible types of files that the geometry is plotted in are:
vtk
corner: (x y z) array with the corner of the geometry [cm]
width: (x y z) array with the width of the mesh in each direction [cm]
vox: (x y z) array with the number of voxels requested in each direction
what (optional, default = material): defines what is highlighted in the plot; options are
material
anduniqueID
, whereuniqueID
highlights unique cell IDs
Example:
plotVTK { type vtk; corner (10.0 6.0 2.0); width (20.0 12.0 4.0); vox (4000 120 400); what uniqueID; }
bmp
centre: (x y z) array with the coordinates of the center of the plot [cm]
axis:
x
,y
orz
, it’s the axis normal to the 2D plotwidth (optional, default = whole geometry): (y z), (x z) or (x y) array with the width of the geometry plotted in each direction [cm]
res: (y z), (x z) or (x y) array with the resolution of the mesh in each direction
output: name of the output file, with extension
.bmp
what (optional, default = material): defines what is highlighted in the plot; options are
material
anduniqueID
, whereuniqueID
highlights unique cell IDsoffset (optional, default = random) An integer (positive or negative) that shifts the sequence of colours assigned to materials. Allows to change colours from the default sequence in a parametric way.
Example:
plotBMP { type bmp; axis z; centre (0.0 0.0 0.0); width (50 10); res (1000 200); output geomZ; what material; }
Note
SCONE can be run to visualise geometry without actually doing transport, by
including --plot
when running the application. In this case the visualiser
has to be included in the file.
Nuclear Data
SCONE can be used with both continuous energy data and multi-group data. The type
of data used must be specified in the physicsPackage
options, as well as in the
collisionOperator
options. As for nuclear data, the input files has to look like:
nuclearData {
handles { <Nuclear data handles definition> }
materials { <Materials definition> }
}
The handles definition is structured as the following:
handles {
<handleName1> { type <databaseType>; *keywords* }
<handleName2> { type <databaseType>; *keywords* }
}
The name of a handle has to be the same as defined in a physicsPackage
under the
keyword XSdata
.
Otherwise, the possible nuclear database types allowed are:
aceNeutronDatabase
aceNeutronDatabase, used for continuous energy data. In this case, the data is read from ACE files.
aceLibrary: includes the path to the .aceXS file, which includes the paths to the ACE files
ures (optional, default = 0): 1 for true; 0 for false; activates the unresolved resonance probability tables treatment
DBRC (optional, default = no DBRC): list of ZAIDs of nuclides for which DBRC has to be applied.
majorant (optional, default = 1): 1 for true; 0 for false; flag to activate the pre-construction of a unionised majorant cross section
Example:
ceData { type aceNuclearDatabase; aceLibrary ./myFolder/ACElib/JEF311.aceXS;
ures 1; DBRC (92238 94242)}
Note
If DBRC is applied, the 0K cross section ace files of the relevant nuclides must be included in the aceLibrary file.
baseMgNeutronDatabase
baseMgNeutronDatabase, used for multi-group data. In this case, the data is read from files provided by the user.
PN: includes a flag for anisotropy treatment. Could be
P0
orP1
Example:
mgData { type baseMgNeutronDatabase; PN P1; }
Materials definition
The materials definition is structured as:
materials {
<materialName1> { temp <temp1>;
composition { <Composition definition> }
*keywords* }
<materialName2> { temp <temp2>;
composition { <Composition definition> }
*keywords* }
}
In this case, materialName
can be any name chosen by the user; temp
is the
material temperature in [K].
Note
At the moment temp
is not used in any way since SCONE has no way to treat
the temperature dependence of cross-sections. It is included for future use.
To change the temperature, a user needs to set appropriate suffix to each
individual nuclide in the composition definition.
The composition
dictionary must always be included, but it can be empty in
multi-group simulations. In continuous energy simulations, it should include a
list of the ZAIDs of all the nuclides that compose that material, and the respective
atomic densities in [atoms/cm/barn]. The ZAIDs are normally in the form ZZAAA.TT
,
or ZAAA.TT
for nuclides with Z<10. The code TT
indicates the temperature used
in the nuclear data evaluation, and the options are 03, 06, 09, 12 and 15,
corresponding to temperatures of 300K, 600K, 900K, 1200K and 1500K.
Other options are:
moder: dictionary that includes information on thermal scattering data. It has to include a list of ZAIDs for which S(a,b) has to be used, and the name of the file that contains the data. The file has to be included in the list of files in the .aceXS input file. Note that this input is ignored if the nuclide or nuclides listed are not included in the material. Only needed for continuous energy simulations.
xsFile: needed for multi-group simulations. Must contain the path to the file where the multi-group cross sections are stored.
rgb (optional): An array of three integers specifying the RGB colour e.g.
(255 0 0)
. The colour defined in this way will be used for visualisation of the material in the geometry plots.
Example 1:
materials {
fuel { temp 273;
composition {
92238.03 0.021;
92235.03 0.004;
8016.03 0.018535464; }
}
water { temp 273;
rgb (0 0 200);
composition {
1001.03 0.0222222;
8016.03 0.00535; }
moder { 1001.03 h-h2o.42; }
}
}
Example 2:
materials {
fuel { temp 573;
composition { }
xsFile ./xss/fuel.txt
}
}
Multi-group cross sections
In the case of a multi-group calculation, multi-group cross sections must be provided by the user. These are in separate files compared to the input file. The structure of such cross section files is the following: they must include
numberOfGroups: number of energy groups used (=N)
capture: vector of size N with the material-wise macroscopic capture cross section. The order of the elements corresponds to groups from fast (group 1) to thermal (group N)
fission (optional): vector of size N with the material-wise macroscopic fission cross section. The order of the elements corresponds to groups from fast (group 1) to thermal (group N). Must be included only if the materials is fissile
nu (optional): vector of size N with the material-wise macroscopic neutron production nu-bar. The order of the elements corresponds to groups from fast (group 1) to thermal (group N). Must be included only if the materials is fissile
chi (optional): vector of size N with the material-wise fission spectrum. The order of the elements corresponds to groups from fast (group 1) to thermal (group N). Must be included only if the materials is fissile
P0: P0 scattering matrix, of size NxN. In the case of a 3x3 matrix, the elements are ordered as:
1 -> 1 1 -> 2 1 -> 3 2 -> 1 2 -> 2 2 -> 3 3 -> 1 3 -> 2 3 -> 3
scatteringMultiplicity: P0 scattering multiplicity matrix, of size NxN. Contains multiplicative elements that will be multiplied to the P0 matrix elements for scattering production cross section, hence all elements must be >= 1.0
P1 (optional): necessary only if
P1
is defined in thebaseMgNeutronDatabase
entryPN
. It contains the P1 scattering matrix, of size NxN
An example file is:
numberOfGroups 2;
capture (0.0010046 0.025788);
fission (0.0010484 0.050632);
nu (2.5 2.5);
chi (1.0 0.0);
scatteringMultiplicity (
1.0 1.0
1.0 1.0 );
P0 (
0.62568 0.029227
0.0 2.443830
);
P1 (
0.27459 0.0075737
0.0 0.83318
);
Tallies
As mentioned previously, one might have to include the keywords inactiveTally
and
activeTally
in the input file (in the case of eigenPhysicsPackage
), or just
tally
(in the case of fixedSourcePhysicsPackage
). Either way, the tally
definition is the same for all cases:
tally {
*keywords*
<resName1> { type <clerkType1>; response (<responseName>); <responseName> { type <responseType>; *keywords* } *keywords* }
<resName2> { type <clerkType2>; *keywords* }
...
<resNameN> { type <clerkTypeN>; }
}
In this case, resName
can be any name chosen by the user, and it is what will be
reported in the output file.
Tally Clerks
The tally clerks determine which kind of estimator will be used. The options are:
collisionClerk, for a collision estimator of flux and reaction rates
response: defines which response function has to be used for this tally. Note that more than one response can be defined per each tally
map (optional): contains a dictionary with the
tallyMap
definition, that defines the domains of integration of each tallyfilter (optional): can filter out particles with certain properties, preventing them from scoring results
handleVirtual (optional, default = 0): if set to 1, delta tracking virtual collisions are tallied with a collisionClerk as well as physical collisions
trackClerk
response: defines which response function has to be used for this tally. Note that more than one response can be defined per each tally
map (optional): contains a dictionary with the
tallyMap
definition, that defines the domains of integration of each tallyfilter (optional): can filter out particles with certain properties, preventing them from scoring results
Example:
tally {
collision_estimator { type collisionClerk; response (<responseName>); <responseName> { type <responseType>; *keywords* }
map { <Map definition> }
filter { <Filter definition> }
}
track_estimator { type trackClerk; response (<responseName1> <responseName2>);
<responseName1> { type <responseType>; *keywords* }
<responseName2> { type <responseType>; *keywords* }
}
}
keffAnalogClerk, analog k_eff estimator
keffImplicitClerk, implicit k_eff estimator - handleVirtual (optional, default = 0): if set to 1, delta tracking virtual collisions
are tallied with a collisionClerk as well as physical collisions
Example:
tally {
k_eff1 { type keffAnalogClerk; }
k_eff2 { type keffImplicitClerk; handleVirtual 1; }
}
centreOfMassClerk, geometrical 3D center of mass estimator
cycles: number of cycles for which to track center of mass
Example:
tally {
com { type comClerk; cycles 200; }
}
collisionProbabilityClerk, tallies a collision probability matrix
map: contains a dictionary with the
tallyMap
definition, that defines the bins of the matrix
Example:
tally {
collisionProb { type collisionProbabilityClerk; map { <Map definition> } }
}
dancoffBellClerk, calculates a single-term rational approximation for a lattice
fuelMat: list of fuel material names
modMat: list of moderator material names
Elow (optional, default = 0.0): bottom energy boundary; [MeV]
Etop (optional, default = 20.0): top energy boundary; [MeV]
Example:
tally {
dancoff_bell_factors { type dancoffBellClerk; fuelMat (fuel1 fuel2 fuel_Gd); modMat (water); Elow 0.06; Etop 10.0; }
}
mgXsClerk, calculates multi-group cross sections via a collision estimator of reaction rates and analog tallies of fission spectrum and scattering events ingoing and outgoing energies and multiplicity
energyMap (optional, default = 1 group): definition of the energy group structure to be used
spaceMap (optional, default = whole geometry): definition of a spatial tally map
PN (optional, default = 0): 1 for true; 0 for false; flag that indicates whether to calculate scattering matrices only up to P1 (
PN 0
) or P7 (PN 1
)handleVirtual (optional, default = 0): if set to 1, delta tracking virtual collisions are tallied with a collisionClerk as well as physical collisions
Example:
tally {
MGxss { type mgXsClerk;
energyMap { <Map definition> }
spaceMap { <Map definition> }
PN 1; }
}
shannonEntropyClerk, implicit Shannon entropy estimator
map: contains a dictionary with the
tallyMap
definition, that defines the (spatial) discretisation used to score the entropycycles: number of cycles to tally the entropy for
Example:
tally {
shannon_entropy { type shannonEntropyClerk;
map { <Map definition> }
cycles 200; }
}
simpleFMClerk, 1D fission matrix collision estimator
map: contains a dictionary with the
tallyMap
definition, that defines the bins of the matrixhandleVirtual (optional, default = 0): if set to 1, delta tracking virtual collisions are tallied with a collisionClerk as well as physical collisions
Example:
tally {
fissionMat { type simpleFMClerk; map { <Map definition> } }
}
Tally Responses
Certain tally clerks, like the collisionClerk
and trackClerk
, require
a response function. The different types of responses could be:
fluxResponse: used to calculate the flux, i.e., the response function is 1.0
Example:
tally {
collision_estimator { type collisionClerk; response (flux); flux { type fluxResponse; } }
}
macroResponse: used to score macroscopic reaction rates
MT: MT number of the desired reaction. The options are: -1 total, -2 capture, -6 fission, -7 nu*fission, -21 absorption
Example:
tally {
collision_estimator { type collisionClerk; response (total fission);
total { type macroResponse; MT -1; }
fission { type macroResponse; MT -6; } }
}
microResponse: used to score microscopic reaction rates
MT: MT number of the desired reaction. The options are: 1 total, 2 elastic scattering, 18 fission, 27 absorption, 102 capture
material: material name where to score the reaction. The material must be defined to include only one nuclide; its density could be anything, it doesn’t affect the result
Example:
tally {
collision_estimator { type collisionClerk; response (elScatter capture);
elScatter { type microResponse; MT 2; material water; }
capture { type microResponse; MT 102; material fuel; }
}
}
weightResponse: response for scoring particle weights
moment (optional, default = 1): moment of the weight scored
Example:
tally {
collision_estimator { type collisionClerk; response (weight0 weight1 weight2);
weight0 { type weightResponse; moment 0; }
weight1 { type weightResponse; moment 1; }
weight2 { type weightResponse; moment 2; }
}
}
Note
To calculate the average weight, one should divide weight moment 1 (weight1) by weight moment 0 (weight0). To calculate the variance of the weights, the tally results have to be post-processed as: var = weight2/weight0 - (weight1/weight0)^2
Tally Maps
The different types of tally maps are:
cellMap (1D map), cell-wise map
cells: list of ids of the cells to be used an map bins
undefBin (optional, default = false): ‘yes’,’y’,’true’,’TRUE’,’T’ for true; ‘no’, ‘n’, ‘false’, ‘FALSE’, ‘F’ for false; flag that indicates whether all the cells not listed in
cells
should constitute a map bin or not
Example:
map { type cellMap; cells (1 5 3 2 4 100); undefBin T; }
energyMap (1D map), defines an energy group structure
grid:
log
for logarithmically spaced bins orlin
for linearly spaced binsmin: bottom energy [MeV]
max: top energy [MeV]
N: number of bins
grid:
unstruct
for unstructured grids, to be manually definedbins: array with the explicit definition of the energy bin boundaries to be used
grid:
predef
name: name of the predefined group structure. Options are:
wims69
,wims172
,casmo40
,casmo23
,casmo12
,casmo7
,ecco33
,vitaminj
Examples:
map1 { type energyMap; grid log; min 1.0e-11; max 20.0; N 300; }
map2 { type energyMap; grid lin; min 1.0; max 20.0; N 100; }
map3 { type energyMap; grid unstruct; bins (1.0E-9 1.0E-8 0.6E-6 0.3 20.0); }
map4 { type energyMap; grid predef; name casmo12; }
homogMatMap (1D map), divides based on the material a particle is in with the possibility of grouping some materials together
bins: list of names of the material bins, that can contain one or more materials; this is followed by all the bin names as key, and the material names included in the bin as an entry
undefBin (optional, default = false): ‘yes’,’y’,’true’,’TRUE’,’T’ for true; ‘no’, ‘n’, ‘false’, ‘FALSE’, ‘F’ for false; flag that indicates whether all the materials not included in any bin should constitute a map bin or not
Example:
map { type homogMatMap; bins (bin1 bin2 bin3);
bin1 (mat1 mat2 mat3);
bin2 (fuel1 fuel3 uo2);
bin3 (water);
undefBin T;
}
materialMap (1D map), material-wise map
materials: list of material names to be used as map bins
undefBin (optional, default = false): ‘yes’,’y’,’true’,’TRUE’,’T’ for true; ‘no’, ‘n’, ‘false’, ‘FALSE’, ‘F’ for false; flag that indicates whether all the materials not included should constitute a map bin or not
Example:
map { type materialMap; materials (fuel water cladding reflector fuelGd); undefBin T; }
multiMap, ensemble of multiple 1D maps
maps: list of the names of the maps that will compose the
multiMap
. This is followed by dictionaries that define the requested maps
Example:
map { type multiMap; maps (map1 map2 map10);
map1 { <1D map definition> }
map2 { <1D map definition> }
map10 { <1D map definition> }
}
spaceMap (1D map), geometric cartesian map
axis:
x
,y
orz
grid:
lin
for linearly spaced binsmin: bottom coordinate [cm]
max: top coordinate [cm]
N: number of bins
grid:
unstruct
for unstructured grids, to be manually definedbins: array with the explicit definition of the bin boundaries to be used
Examples:
map1 { type spaceMap; axis x; grid lin; min -50.0; max 50.0; N 100; }
map2 { type spaceMap; axis z; grid unstruct; bins (0.0 0.2 0.3 0.5 0.7 0.8 1.0); }
sphericalMap, geometric spherical map
origin (optional, default = (0.0 0.0 .0.)): (x y z) vector with the origin of the spherical map
grid:
lin
for linearly spaced bins orequivolume
for spherical shellsRmin (optional, default = 0.0): minimum radius [cm]
Rmax: maximum radius [cm]
N: number of radial bins
grid:
unstruct
for unstructured grids, to be manually definedbins: array with the explicit definition of the spherical bin boundaries to be used
Examples:
map1 { type sphericalMap; origin (2.0 1.0 0.0); grid lin; Rmin 3.0; Rmax 10.0; N 14; }
map2 { type sphericalMap; grid equivolume; Rmax 20.0; N 10; }
map3 { type sphericalMap; grid unstruct; bins (1.0 2.0 2.5 3.0 5.0); }
cylindricalMap, geometric cylindrical map; other than the radial discretisation, one could add axial and azimuthal discretisation
orientation (optional, default =
z
):x
,y
orz
, axial directionorigin (optional, default = (0.0 0.0)): (y z), (x z) or (x y) vector with the origin of the cylindrical map
rGrid:
lin
for linearly spaced bins orequivolume
for cylindrical shellsRmin (optional, default = 0.0): minimum radius [cm]
Rmax: maximum radius [cm]
rN: number of radial bins
rGrid:
unstruct
for unstructured grids, to be manually definedbins: array with the explicit definition of the cylindrical radial bin boundaries to be used
axGrid (optional, default = 1 bin):
lin
for linearly spaced axial binsaxMin: minimum axial coordinate [cm]
axMax: maximum axial coordinate [cm]
axN: number of axial bins
azimuthalN (optional, default = 1 bin): number of angular azimuthal bins
Example:
map1 { type cylindricalMap; orientation y; origin (7.0 0.0); rGrid lin; Rmax 5.0; rN 10; }
map2 { type cylindricalMap; rGrid unstruct; bins (2.0 3.0 4.5 5.0); axGrid lin; axMin 0.0; axMax 6.0 axN 24; azimuthalN 8; }
collNumMap (1D map), filters the particles tallied over number of collisions they underwent
collNumbers: list of collision numbers (integers) to be used as map bins
Examples:
map1 { type collNumMap; collNumbers ( 0 1 2 3 4 5 10 20); }
weightMap (1D map), divides weight into number of discrete bins
grid:
log
for logarithmically spaced bins orlin
for linearly spaced binsmin: bottom weight
max: top weight
N: number of bins
grid:
unstruct
for unstructured grids, to be manually definedbins: array with the explicit definition of the weight bin boundaries to be used
Examples:
map1 { type weightMap; grid log; min 1.0e-3; max 100.0; N 100; }
map2 { type weightMap; grid lin; min 0.1; max 2.0; N 20; }
map3 { type weightMap; bins (0.0 0.2 0.4 0.6 0.8 1.0 2.0 5.0 10.0); }
Tally Filters
Another option that can be included in the tallies is tally filters. These allow to filter out certain types of particles when scoring results. For now, the only type of filter existing is:
energyFilter, to stop particles within a certain energy range from contributing to a certain tally
Emin (for continuous energy particles): minimum energy [MeV]
Emax (for continuous energy particles): maximum energy [MeV]
Gtop (for multi-group particles): top energy group
Glow (for multi-group particles): bottom energy group
Example:
CEfilter { type energyFilter; Emin 10.0; Emax 20.0; }
MGfilter { type energyFilter; Gtop 1; Glow 5; }
Other options
Other keywords, such as for results normalisation, that could be included are:
norm: its entry is the name of the tally,
resName
, to be used as a normalisation criterion. If the tally has multiple bins, (e.g. has a map), the bin with index 1 will be used for normalisationnormVal: value to normalise the tally
resName
todisplay: its entry is the name of the tally,
resName
, which will be displayed each cycle. Only the tally clerkskeffAnalogClerk
andkeffImplicitClerk
support display at the momentbatchSize (optional, default = 1): the number of cycles that constitute a single batch for the purpose of statistical estimation. For example, a value of 5 means that a single estimate is obtained from a score accumulated over 5 cycles
Example:
tally {
display (k-eff);
norm fissRate;
normVal 100.0;
k-eff { type keffAnalogClerk;}
fissRate { type collisionClerk; response (fission); fission {type macroResponse; MT -6;} }
}