Running The Mini-Applications¶
Running the SPn Mini-Application¶
The SPn
mini-app is compiled into the executable xspn that has
the following options:
-
-i
¶
Load the subsequent xml input file.
The SPn
mini-app solves the \(SP_N\) form of the neutron transport
equation. The equations it solves are described in in this
technical note
.
Inputs are xml-driven. To run the application do the following:
> mpirun -np 1 ./xspn -i inf_med.xml
Infinite-Medium Problem Example¶
In this case inf_med.xml
is the xml input file. We can walk through
this case; it is one of the example inputs in packages/SPn/examples
:
<?xml version='1.0' encoding='ASCII'?>
<ParameterList name="profugus SPN input">
<ParameterList name="CORE">
<Parameter name="axial list" type="Array(string)" value="{core}"/>
<Parameter name="axial height" type="Array(double)" value="{ 1.00000e+01}"/>
<Parameter name="core" type="TwoDArray(int)" value="1x1:{0}"/>
</ParameterList>
<ParameterList name="ASSEMBLIES">
<Parameter name="pin pitch" type="double" value="10.0"/>
<Parameter name="assembly list" type="Array(string)" value="{assembly}"/>
<Parameter name="assembly" type="TwoDArray(int)" value="1x1:{0}"/>
</ParameterList>
<ParameterList name="SOURCE">
<Parameter name="source list" type="Array(string)" value="{uniform}"/>
<Parameter name="source map" type="TwoDArray(int)" value="1x1:{0}"/>
<Parameter name="axial source" type="Array(double)" value="{ 1.00000e+00}"/>
<ParameterList name="uniform">
<Parameter name="strength" type="TwoDArray(double)" value="1x1:{ 1.00000e+00}"/>
<Parameter name="shape" type="Array(double)" value="{ 1.00000e+00}"/>
</ParameterList>
</ParameterList>
<ParameterList name="MATERIAL">
<Parameter name="xs library" type="string" value="xs_1G.xml"/>
<Parameter name="mat list" type="Array(string)" value="{scatterer}"/>
</ParameterList>
<ParameterList name="PROBLEM">
<Parameter name="radial mesh" type="int" value="10"/>
<Parameter name="axial mesh" type="Array(int)" value="{10}"/>
<Parameter name="symmetry" type="string" value="full"/>
<Parameter name="Pn_order" type="int" value="0"/>
<Parameter name="SPn_order" type="int" value="1"/>
<Parameter name="problem_name" type="string" value="inf_med"/>
</ParameterList>
</ParameterList>
This is an input of a 1-group infinite-medium problem that has an analytical solution. Integrating the Boltzmann transport equation over energy and angle gives the following balance equation:
In an infinite medium (all reflecting boundaries with a uniform source and material everywhere), the divergence of the current vanishes and the solution for \(\phi\) is simply
The geometric model for SPn
is a simplified input for nuclear reactor
problems (although it can be used to describe other types of problems). In
this application area radial dimensions are xy* and axial dimensions are
z. A core is generally defined radially by 2D maps of assemblies and
pin-cells and axially by 1D dimensions. In this model a CORE is the
outermost object. A CORE contains ASSEMBLIES. The MATERIALS are
referenced by the ASSEMBLIES. For fixed-source problems a SOURCE may
be defined at the CORE level. Finally, a set of problem parameters that
dictates how the code is run is defined in PROBLEM. These are summarized
below:
- CORE
- Describes the outer geometric configuration of the problem. A core defines the axial (z-axis) definitions and a 2D assembly map.
- ASSEMBLIES
- Individual assembly types are defined in this block. Each assembly is an \(N\times M\) array of pin-cells. Each pin cell contains a single material, but can be descretized by a finer computational mesh grid.
- SOURCE
- Describes fixed sources. When this option is present,
SPn
is run in fixed-source mode; otherwise, an eigenvalue problem is run. - MATERIAL
- Specifies the xml-file containing the material cross sections and the list of materials referenced in the ASSEMBLIES block.
- PROBLEM
- Determines all problem solution parameters including computational mesh discretization, SPN-order of the problem (1, 3, 5, 7), Pn-order of the scattering expansion, boundary conditions, and solver parameters. Note that solver parameters can be passed to directly to Trilinos solvers by describing the appropriate parameters as shown below.
Details on how the problem parameters are used to set up a problem can be
ascertained by perusing the well-documented source code in the
Problem_Builder class
(this is a mini-app after all, so we do not consider it unreasonable to look
at code!).
Note
All of the 2D arrays in the xml-input are COLUMN-MAJOR (FORTRAN) ordered.
In other words, the i-indices of an array cycle fastest. Thus, 2D arrays
are stored internally as arrays with dimension [N_j][N_i]
, reflecting
the fact that C arrays are stored ROW-MAJOR.
Conversely, the scattering cross sections in the cross section xml files
are ROW-MAJOR ordered. Thus, the 2D arrays have dimensions [g][g']
.
This will become clean in the examples.
Let’s us now step through the input step-by-step. The CORE block for this problem defines the following parameters:
<Parameter name="axial list" type="Array(string)" value="{core}"/>
<Parameter name="axial height" type="Array(double)" value="{ 1.00000e+01}"/>
<Parameter name="core" type="TwoDArray(int)" value="1x1:{0}"/>
This first parameter defines a list of axial core maps. The second parameter
defines the height of each axial level and should have the same number of
entries as the axial list
parameter. The final set of parameters are the
core maps listed in hte axial list
array. In this case there is a single
axial core map named core
(the names can be unique). The core
map
specifies a core containing a single assembly. This indices in the core map
are ordered \([0,\ldots,N)\) and refer to assemblies defined in the
ASSEMBLIES block assembly list
parameter. This brings us to the
parameters defined in the ASSEMBLIES block:
<Parameter name="pin pitch" type="double" value="10.0"/>
<Parameter name="assembly list" type="Array(string)" value="{assembly}"/>
<Parameter name="assembly" type="TwoDArray(int)" value="1x1:{0}"/>
The pin pitch
parameter gives the width of each (square) pin-cell. The
assembly list
parameter gives the list of assembly types. As in the
CORE block, the final set of parameters are the 2D assembly maps for each
assembly defined in the assembly list
. Every assembly must have the same
dimensions, but they can be composed of different materials. Each assembly
map refers to a material defined in the MATERIAL block mat list
parameter and is ordered \([0,\ldots,N)\). So, this block defines a
single assembly type that is \(10\times 10\) cm in radial width that
contains a single pin-cell with material 0. Examining the 2 parameters in the
MATERIAL block:
<Parameter name="xs library" type="string" value="xs_1G.xml"/>
<Parameter name="mat list" type="Array(string)" value="{scatterer}"/>
We see from the mat list
parameter that material 0 corresponds to the
material scatterer
. This name refers to a material defined in the
cross-section file xs_1G.xml
that is loaded based on the value of the xs
library
parameter. The cross section file, xs_1G.xml
, containst the
following data:
<?xml version='1.0' encoding='ASCII'?>
<ParameterList name="cross sections">
<Parameter name="num groups" type="int" value="1"/>
<Parameter name="pn order" type="int" value="0"/>
<Parameter name="group v" type="Array(double)" value="{ 4.373937e+09}"/>
<ParameterList name="void">
<Parameter name="sigma_t" type="Array(double)" value="{ 0.00000e+00}"/>
<Parameter name="sigma_s0" type="TwoDArray(double)" value="1x1:{ 0.00000e+00}"/>
</ParameterList>
<ParameterList name="absorber">
<Parameter name="sigma_t" type="Array(double)" value="{ 1.00000e+00}"/>
<Parameter name="sigma_s0" type="TwoDArray(double)" value="1x1:{ 0.00000e+00}"/>
</ParameterList>
<ParameterList name="scatterer">
<Parameter name="sigma_t" type="Array(double)" value="{ 1.00000e+00}"/>
<Parameter name="sigma_s0" type="TwoDArray(double)" value="1x1:{ 9.00000e-01}"/>
</ParameterList>
<ParameterList name="fissionable">
<Parameter name="sigma_t" type="Array(double)" value="{ 1.00000e+00}"/>
<Parameter name="nu_sigma_f" type="Array(double)" value="{ 1.20000e+00}"/>
<Parameter name="sigma_f" type="Array(double)" value="{ 5.00000e-01}"/>
<Parameter name="chi" type="Array(double)" value="{ 1.00000e+00}"/>
<Parameter name="sigma_s0" type="TwoDArray(double)" value="1x1:{ 2.00000e-01}"/>
</ParameterList>
</ParameterList>
Thus, the geometric description of this problem is a \(10\times 10\times
10\) cm box containing the material scatterer
that has a total cross
section of 1.0 and a scattering cross section of 0.9 (resulting in an
aborption/removal cross section of 0.1).
To make this a fixed-source problem, the SOURCE block must be present:
<Parameter name="source list" type="Array(string)" value="{uniform}"/>
<Parameter name="source map" type="TwoDArray(int)" value="1x1:{0}"/>
<Parameter name="axial source" type="Array(double)" value="{ 1.00000e+00}"/>
<ParameterList name="uniform">
<Parameter name="strength" type="TwoDArray(double)" value="1x1:{ 1.00000e+00}"/>
<Parameter name="shape" type="Array(double)" value="{ 1.00000e+00}"/>
</ParameterList>
Here, the source list
parameter gives the list of sources. The source
map
parameter has the same dimensions as the core maps and gives the source
index that resides in each core location. A value of -1 indicates that there
is no source in a given location. A value in the range \([0,\ldots,N)\)
refers to the source indicated by the source list
. The axial source
parameter has the same number of entries as the axial list
and axial
height
parameters in the CORE block. The axial source
is a
multiplier that is applied to the source at each axial level. Each radial
source is defined in its own sublist. In this case, there is a single source,
uniform
. Each source sublist contains a strength
and shape
parameter. The strength
parameter gives a \(N\times M\) 2D axial
array of the source strength in each pin-cell. The shape
is dimensioned
by the number of groups in the xs library
parameter num groups
. It
gives the energy-spectral shape of the source. Thus, in any pin-cell, the
group source is given by the product of the shape and strength:
And, as described above, the strength
map is COLUMN-MAJOR ordered in the
xml file.
Finally, the PROBLEM database provides entries that control the problem setup and solver. Many of these entries will be set by default, although all can be overrided. In this example, we only set a few parameters:
<Parameter name="radial mesh" type="int" value="10"/>
<Parameter name="axial mesh" type="Array(int)" value="{10}"/>
<Parameter name="symmetry" type="string" value="full"/>
<Parameter name="Pn_order" type="int" value="0"/>
<Parameter name="SPn_order" type="int" value="1"/>
<Parameter name="problem_name" type="string" value="inf_med"/>
Here the radial mesh
indicates that each pin-cell is meshed
\(10\times 10\). The axial mesh
value is an array giving the number
of computational mesh cells in each axial level. The symmetry
parameter
tells that mesh generator to use the full problem description and not apply
any symmetry conditions. The Pn_order
parameter gives the scattering
order for the solver; it must be less than or equal to the pn order
specified in the cross section library file. The SPn_order
gives the
order of the \(SP_N\) approximation. Finally, the problem_name
gives
the base name that will be used for all output files. We have not specified
any specific solver options, so the defaults will be used.
The final specification of this problem is \(10\times 10\times 10\) cm box
with computational mesh cells with dimension \(1\times 1\times 1\) cm
resulting in 1000 total cells (\(10\times 10\times 10\)). There is a
uniform 1 particle/cc source throughout the box. The box has a uniform
material of scatterer
as defined in the xs_1G.xml
file. The
solver will run a SP1
calculation with P0
scattering.
Note
The only symmetry option currently supported is full`; however, ``qtr
symmetry will be added for 1/4 symmetry.
The outputs for this problem are contained in the examples
directory.
Automatically, the code will output a final problem xml file so that the user
can see what defaults were added. In this case, the output xml file is stored
in inf_med_db.xml
:
<ParameterList name="inf_med-PROBLEM">
<Parameter docString="" id="0" isDefault="false" isUsed="true" name="radial mesh" type="int" value="10"/>
<Parameter docString="" id="1" isDefault="false" isUsed="true" name="axial mesh" type="Array(int)" value="{10}"/>
<Parameter docString="" id="2" isDefault="false" isUsed="true" name="symmetry" type="string" value="full"/>
<Parameter docString="" id="3" isDefault="false" isUsed="true" name="Pn_order" type="int" value="0"/>
<Parameter docString="" id="4" isDefault="false" isUsed="true" name="SPn_order" type="int" value="1"/>
<Parameter docString="" id="5" isDefault="false" isUsed="true" name="problem_name" type="string" value="inf_med"/>
<Parameter docString="" id="6" isDefault="false" isUsed="true" name="num_cells_i" type="int" value="10"/>
<Parameter docString="" id="7" isDefault="false" isUsed="true" name="delta_x" type="double" value="1.00000000000000000e+01"/>
<Parameter docString="" id="8" isDefault="false" isUsed="true" name="num_cells_j" type="int" value="10"/>
<Parameter docString="" id="9" isDefault="false" isUsed="true" name="delta_y" type="double" value="1.00000000000000000e+01"/>
<Parameter docString="" id="10" isDefault="false" isUsed="true" name="z_edges" type="Array(double)" value="{0.00000000000000000e+00, 1.00000000000000000e+00, 2.00000000000000000e+00, 3.00000000000000000e+00, 4.00000000000000000e+00, 5.00000000000000000e+00, 6.00000000000000000e+00, 7.00000000000000000e+00, 8.00000000000000000e+00, 9.00000000000000000e+00, 1.00000000000000000e+01}"/>
<Parameter docString="" id="11" isDefault="false" isUsed="true" name="num_blocks_i" type="int" value="1"/>
<Parameter docString="" id="12" isDefault="false" isUsed="true" name="num_blocks_j" type="int" value="1"/>
<Parameter docString="" id="13" isDefault="false" isUsed="true" name="num_z_blocks" type="int" value="1"/>
<Parameter docString="" id="14" isDefault="false" isUsed="true" name="num_sets" type="int" value="1"/>
<Parameter docString="" id="15" isDefault="false" isUsed="true" name="dimension" type="int" value="3"/>
<Parameter docString="" id="16" isDefault="true" isUsed="true" name="g_first" type="int" value="0"/>
<Parameter docString="" id="17" isDefault="true" isUsed="true" name="g_last" type="int" value="0"/>
<Parameter docString="" id="18" isDefault="false" isUsed="true" name="problem_type" type="string" value="fixed"/>
<Parameter docString="" id="19" isDefault="true" isUsed="true" name="solver_type" type="string" value="stratimikos"/>
<Parameter docString="" id="20" isDefault="true" isUsed="true" name="tolerance" type="double" value="9.99999999999999955e-07"/>
<Parameter docString="" id="21" isDefault="true" isUsed="true" name="max_itr" type="int" value="100"/>
<ParameterList id="67" name="Stratimikos">
<Parameter docString="" id="22" isDefault="false" isUsed="true" name="Preconditioner Type" type="string" value="None"/>
<Parameter docString="" id="23" isDefault="false" isUsed="true" name="Linear Solver Type" type="string" value="AztecOO"/>
<Parameter docString="" id="24" isDefault="true" isUsed="true" name="Enable Delayed Solver Construction" type="bool" value="false"/>
<ParameterList id="66" name="Linear Solver Types">
<ParameterList id="65" name="AztecOO">
<Parameter docString="" id="25" isDefault="true" isUsed="true" name="Output Every RHS" type="bool" value="false"/>
<ParameterList id="43" name="Forward Solve">
<Parameter docString="" id="26" isDefault="true" isUsed="true" name="Max Iterations" type="int" value="400"/>
<Parameter docString="" id="27" isDefault="true" isUsed="true" name="Tolerance" type="double" value="9.99999999999999955e-07"/>
<ParameterList id="42" name="AztecOO Settings">
<Parameter docString="" id="28" isDefault="true" isUsed="true" name="Aztec Preconditioner" type="string" validatorId="0" value="none"/>
<Parameter docString="" id="29" isDefault="true" isUsed="true" name="Aztec Solver" type="string" validatorId="1" value="GMRES"/>
<Parameter docString="" id="30" isDefault="true" isUsed="true" name="Overlap" type="int" validatorId="2" value="0"/>
<Parameter docString="" id="31" isDefault="true" isUsed="true" name="Graph Fill" type="int" validatorId="3" value="0"/>
<Parameter docString="" id="32" isDefault="true" isUsed="true" name="Drop Tolerance" type="double" validatorId="4" value="0.00000000000000000e+00"/>
<Parameter docString="" id="33" isDefault="true" isUsed="true" name="Fill Factor" type="double" validatorId="5" value="1.00000000000000000e+00"/>
<Parameter docString="" id="34" isDefault="true" isUsed="true" name="Steps" type="int" validatorId="6" value="3"/>
<Parameter docString="" id="35" isDefault="true" isUsed="true" name="Polynomial Order" type="int" validatorId="7" value="3"/>
<Parameter docString="" id="36" isDefault="true" isUsed="true" name="RCM Reordering" type="string" validatorId="8" value="Disabled"/>
<Parameter docString="" id="37" isDefault="true" isUsed="true" name="Orthogonalization" type="string" validatorId="9" value="Classical"/>
<Parameter docString="" id="38" isDefault="true" isUsed="true" name="Size of Krylov Subspace" type="int" validatorId="10" value="300"/>
<Parameter docString="" id="39" isDefault="true" isUsed="true" name="Convergence Test" type="string" validatorId="11" value="r0"/>
<Parameter docString="" id="40" isDefault="true" isUsed="true" name="Ill-Conditioning Threshold" type="double" validatorId="12" value="1.00000000000000000e+11"/>
<Parameter docString="" id="41" isDefault="true" isUsed="true" name="Output Frequency" type="int" validatorId="13" value="0"/>
</ParameterList>
</ParameterList>
<ParameterList id="61" name="Adjoint Solve">
<Parameter docString="" id="44" isDefault="true" isUsed="true" name="Max Iterations" type="int" value="400"/>
<Parameter docString="" id="45" isDefault="true" isUsed="true" name="Tolerance" type="double" value="9.99999999999999955e-07"/>
<ParameterList id="60" name="AztecOO Settings">
<Parameter docString="" id="46" isDefault="true" isUsed="true" name="Aztec Solver" type="string" validatorId="1" value="GMRES"/>
<Parameter docString="" id="47" isDefault="true" isUsed="true" name="Aztec Preconditioner" type="string" validatorId="0" value="ilu"/>
<Parameter docString="" id="48" isDefault="true" isUsed="true" name="Overlap" type="int" validatorId="2" value="0"/>
<Parameter docString="" id="49" isDefault="true" isUsed="true" name="Graph Fill" type="int" validatorId="3" value="0"/>
<Parameter docString="" id="50" isDefault="true" isUsed="true" name="Drop Tolerance" type="double" validatorId="4" value="0.00000000000000000e+00"/>
<Parameter docString="" id="51" isDefault="true" isUsed="true" name="Fill Factor" type="double" validatorId="5" value="1.00000000000000000e+00"/>
<Parameter docString="" id="52" isDefault="true" isUsed="true" name="Steps" type="int" validatorId="6" value="3"/>
<Parameter docString="" id="53" isDefault="true" isUsed="true" name="Polynomial Order" type="int" validatorId="7" value="3"/>
<Parameter docString="" id="54" isDefault="true" isUsed="true" name="RCM Reordering" type="string" validatorId="8" value="Disabled"/>
<Parameter docString="" id="55" isDefault="true" isUsed="true" name="Orthogonalization" type="string" validatorId="9" value="Classical"/>
<Parameter docString="" id="56" isDefault="true" isUsed="true" name="Size of Krylov Subspace" type="int" validatorId="10" value="300"/>
<Parameter docString="" id="57" isDefault="true" isUsed="true" name="Convergence Test" type="string" validatorId="11" value="r0"/>
<Parameter docString="" id="58" isDefault="true" isUsed="true" name="Ill-Conditioning Threshold" type="double" validatorId="12" value="1.00000000000000000e+11"/>
<Parameter docString="" id="59" isDefault="true" isUsed="true" name="Output Frequency" type="int" validatorId="13" value="0"/>
</ParameterList>
</ParameterList>
<ParameterList id="64" name="VerboseObject">
<Parameter docString="" id="62" isDefault="true" isUsed="true" name="Output File" type="string" value="none"/>
<Parameter docString="" id="63" isDefault="true" isUsed="true" name="Verbosity Level" type="string" value="default"/>
</ParameterList>
</ParameterList>
</ParameterList>
</ParameterList>
<Parameter docString="" id="68" isDefault="true" isUsed="true" name="eqn_type" type="string" value="fv"/>
<Parameter docString="" id="69" isDefault="false" isUsed="true" name="boundary" type="string" value="reflect"/>
<ParameterList id="71" name="boundary_db">
<Parameter docString="" id="70" isDefault="false" isUsed="true" name="reflect" type="Array(int)" value="{1, 1, 1, 1, 1, 1}"/>
</ParameterList>
<Validators>
<Validator allowDouble="true" allowInt="true" allowString="true" prefferedType="int" type="anynumberValidator" validatorId="3"/>
<Validator caseSensitive="true" defaultParameterName="Aztec Solver" integralValue="int" type="StringIntegralValidator(int)" validatorId="1">
<String integralValue="0" stringValue="CG"/>
<String integralValue="1" stringValue="GMRES"/>
<String integralValue="2" stringValue="CGS"/>
<String integralValue="3" stringValue="TFQMR"/>
<String integralValue="4" stringValue="BiCGStab"/>
<String integralValue="10" stringValue="LU"/>
<String integralValue="7" stringValue="GMRESR"/>
<String integralValue="8" stringValue="FixedPoint"/>
</Validator>
<Validator caseSensitive="true" defaultParameterName="Aztec Preconditioner" integralValue="(anonymous namespace)::EAztecPreconditioner" type="StringIntegralValidator((anonymous namespace)::EAztecPreconditioner)" validatorId="0">
<String integralValue="0" stringValue="none"/>
<String integralValue="1" stringValue="ilu"/>
<String integralValue="2" stringValue="ilut"/>
<String integralValue="3" stringValue="Jacobi"/>
<String integralValue="4" stringValue="Symmetric Gauss-Seidel"/>
<String integralValue="5" stringValue="Polynomial"/>
<String integralValue="6" stringValue="Least-squares Polynomial"/>
</Validator>
<Validator allowDouble="true" allowInt="true" allowString="true" prefferedType="double" type="anynumberValidator" validatorId="4"/>
<Validator allowDouble="true" allowInt="true" allowString="true" prefferedType="int" type="anynumberValidator" validatorId="2"/>
<Validator allowDouble="true" allowInt="true" allowString="true" prefferedType="double" type="anynumberValidator" validatorId="5"/>
<Validator allowDouble="true" allowInt="true" allowString="true" prefferedType="int" type="anynumberValidator" validatorId="6"/>
<Validator allowDouble="true" allowInt="true" allowString="true" prefferedType="int" type="anynumberValidator" validatorId="7"/>
<Validator caseSensitive="true" defaultParameterName="RCM Reordering" integralValue="int" type="StringIntegralValidator(int)" validatorId="8">
<String integralValue="1" stringValue="Enabled"/>
<String integralValue="0" stringValue="Disabled"/>
</Validator>
<Validator allowDouble="true" allowInt="true" allowString="true" prefferedType="double" type="anynumberValidator" validatorId="12"/>
<Validator caseSensitive="true" defaultParameterName="Orthogonalization" integralValue="int" type="StringIntegralValidator(int)" validatorId="9">
<String integralValue="0" stringValue="Classical"/>
<String integralValue="1" stringValue="Modified"/>
</Validator>
<Validator allowDouble="true" allowInt="true" allowString="true" prefferedType="int" type="anynumberValidator" validatorId="10"/>
<Validator allowDouble="true" allowInt="true" allowString="true" prefferedType="int" type="anynumberValidator" validatorId="13"/>
<Validator caseSensitive="true" defaultParameterName="Convergence Test" integralValue="int" type="StringIntegralValidator(int)" validatorId="11">
<String integralValue="0" stringValue="r0"/>
<String integralValue="1" stringValue="rhs"/>
<String integralValue="2" stringValue="Anorm"/>
<String integralValue="6" stringValue="no scaling"/>
<String integralValue="3" stringValue="sol"/>
</Validator>
</Validators>
</ParameterList>
Perusing this database, we see the default solver options that were set. These
can be overriden by adding a Stratimikos
parameterlist to the
input xml. Other items of note are:
<Parameter name="num_blocks_i" type="int" value="1"/>
<Parameter name="num_blocks_j" type="int" value="1"/>
<Parameter name="g_first" type="int" value="0"/>
<Parameter name="g_last" type="int" value="0"/>
The num_blocks
parameters allow the user to specify a parallel
decomposition. The total number of processes is:
Note
The SPn
mini-app currenly only supports xy decompositions. This is an
historical requirement so that the SPn
matches a similar decomposition
in the |Exnihilo| production code for another physics model. It is not a
true restriction.
The g_first
and g_last
parameters allow the user to specify a range of
groups to run over. For example, if a 23-group cross section set is loaded,
but the user is only interested in the solution in groups 0 and 1 set:
<Parameter name="g_first" type="int" value="0"/>
<Parameter name="g_last" type="int" value="1"/>
If HDF5 is available, the group-wise fluxes are output in the file
inf_med_output.h5
. From (2) the solution to this
problem should be \(\phi = 10.0\) everywhere. Using h5dump on
the output file yields:
HDF5 "SPn_output.h5" {
GROUP "/" {
GROUP "fluxes" {
DATASET "group_0" {
DATATYPE H5T_IEEE_F64LE
DATASPACE SIMPLE { ( 10, 10, 10 ) / ( 10, 10, 10 ) }
DATA {
(0,0,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(0,1,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(0,2,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(0,3,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(0,4,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(0,5,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(0,6,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(0,7,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(0,8,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(0,9,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(1,0,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(1,1,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(1,2,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(1,3,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(1,4,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(1,5,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(1,6,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(1,7,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(1,8,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(1,9,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(2,0,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(2,1,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(2,2,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(2,3,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(2,4,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(2,5,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(2,6,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(2,7,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(2,8,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(2,9,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(3,0,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(3,1,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(3,2,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(3,3,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(3,4,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(3,5,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(3,6,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(3,7,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(3,8,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(3,9,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(4,0,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(4,1,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(4,2,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(4,3,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(4,4,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(4,5,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(4,6,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(4,7,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(4,8,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(4,9,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(5,0,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(5,1,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(5,2,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(5,3,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(5,4,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(5,5,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(5,6,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(5,7,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(5,8,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(5,9,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(6,0,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(6,1,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(6,2,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(6,3,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(6,4,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(6,5,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(6,6,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(6,7,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(6,8,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(6,9,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(7,0,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(7,1,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(7,2,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(7,3,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(7,4,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(7,5,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(7,6,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(7,7,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(7,8,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(7,9,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(8,0,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(8,1,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(8,2,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(8,3,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(8,4,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(8,5,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(8,6,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(8,7,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(8,8,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(8,9,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(9,0,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(9,1,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(9,2,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(9,3,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(9,4,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(9,5,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(9,6,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(9,7,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(9,8,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
(9,9,0): 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
}
ATTRIBUTE "data_order" {
DATATYPE H5T_STD_I32LE
DATASPACE SIMPLE { ( 1 ) / ( 1 ) }
DATA {
(0): 0
}
}
}
}
}
}
Thus, the correct solution is attained for this problem.