\section{INPUT DATA SPECIFICATIONS} \subsection{Syntactic rules for input data specifications} The input data to any module is read in free format using the subroutine {\tt REDGET}. The rules for specifying the input data are therefore given in this section. The users guide was written using the following conventions: \begin{itemize} \item the parameters surrounded by single square brackets `$[\;]$' denote an optional input; \item the parameters surrounded by double square brackets `$[[\;]]$' denote an optional input which may be repeated as many times as desired; \item the parameters in braces separated by vertical bars `$\{\; |\; |\; \}$' denote a choice of input where (one and {\sl only} one is mandatory); \item the parameters in {\bf{bold face}} and in brackets `( )' denote an input structure; \item the parameters in italics and in brackets with an index `({\it data}(i), i=1,n)' denote a set of n inputs; \item the words using the typewriter font are character constants {\tt keywordS} used as keywords; \item the words in italics are user defined variables, they should be lower case and are of type integer (starting with {\it i} to {\it n}) and real (starting with {\it a} to {\it h} or {\it o} to {\it z}) or of type character in uppercase {\it CHARACTER}. \end{itemize} \subsection{The global input structure} TRIVAC is built around the Ganlib kernel and its modules can be called from CLE-2000.\cite{ganlib5,cle2000} Input data must therefore follow the calling specifications given below: \begin{DataStructure}{Structure \dstr{TRIVAC}} $[$ \moc{LINKED\_LIST} $[[$ \dusa{NAME1} $]]$ \moc{;} $]$ \\ $[$ \moc{XSM\_FILE} $[[$ \dusa{NAME2} $]]$ \moc{;} $]$ \\ $[$ \moc{SEQ\_BINARY} $[[$ \dusa{NAME3} $]]$ \moc{;} $]$ \\ $[$ \moc{SEQ\_ASCII} $[[$ \dusa{NAME4} $]]$ \moc{;} $]$ \\ $[$ \moc{MODULE} $[[$ \dusa{NAME5} $]]$ \moc{;} $]$ \\ $[[$ \dstr{specif} $]]$ \\ \moc{END: ;} \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{NAME1}] {\tt Character*12} name of a {\sc lcm} object. \item[\dusa{NAME2}] {\tt Character*12} name of an {\sc xsm} file. \item[\dusa{NAME3}] {\tt Character*12} name of a sequential binary file. \item[\dusa{NAME4}] {\tt Character*12} name of a sequential {\sc ascii} file. \item[\dusa{NAME5}] {\tt Character*12} name of a module. \item[\dstr{specif}] Input specifications for a single module. Specifications for TRIVAC modules will be given in the following sections. \end{ListeDeDescription} The input data always begins with the declaration of each {\sc lcm} object, {\sc xsm} file, sequential (binary or {\sc ascii}) file that will be required by the following modules. This is followed by the declaration of the modules actually used in the input data deck. The following data describes a sequence of module calls, in the format of the GAN generalized driver. As indicated in Fig.~\fig(trivac3), the modules communicate with each other through {\sc lcm} objects or {\sc xsm} files whose specifications are given in section 2. The TRIVAC user generally has the choice to declare its data structures as {\tt LINKED\_LIST} to reduce CPU time resources or as {\tt XSM\_FILE} to reduce CPU memory resources. \vskip 0.2cm The input data always ends with a call to the {\tt END:} module. \begin{figure}[htbp] \begin{center} \epsfxsize=16cm \centerline{ \epsffile{trivac3.eps}} \parbox{14cm}{\caption{The TRIVAC modular approach.} \label{fig:trivac3}} \end{center} \end{figure} \subsection{The {\tt GEO:} module} The {\tt GEO:} module is used to create or modify a geometry. The geometry definition module in TRIVAC permits all the characteristics (coordinates, material mixture type indices and boundary conditions) of a simple or complex geometry to be specified. The method used to specify the geometry is independent of the discretization module to be used subsequently. Each geometry is represented by a name ({\tt character*12}) and is saved in a {\sc lcm} object or an {\sc xsm} file under its given name. It is always possible to modify a given existing geometry or copy it into a neighbouring {\sc lcm} object under a new name. The calling specifications are: \begin{DataStructure}{Structure \dstr{GEO:}} $\{$ \dusa{GEOM1} \moc{:=} \moc{GEO: ::} \dstr{geo\_data1} $|$ \\ \dusa{GEOM1} \moc{:=} \moc{GEO:} $\{$ \dusa{GEOM1} $|$ \dusa{GEOM2} $\}$ \moc{::} \dstr{geo\_data2} $\}$ \end{DataStructure} \noindent \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{GEOM1}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_GEOM}) that will contain the geometry. \item[\dusa{GEOM2}] {\tt character*12} name of a {\sc lcm} object (type {\tt L\_GEOM}) containing the existing geometry. The type and all the characteristics of \dusa{GEOM2} will be copied onto \dusa{GEOM1}. \item[\dstr{geo\_data1}] structure describing the characteristics of a new geometry (see Sect.~\ref{sect:geo_data1}). \item[\dstr{geo\_data2}] structure describing the change to the characteristics of an existing geometry (see Sect.~\ref{sect:geo_data1}). \end{ListeDeDescription} \vskip 0.2cm \subsubsection{Data input for module {\tt GEO:}}\label{sect:geo_data1} Structures \dstr{geo\_data1} and \dstr{geo\_data2} serve to define the principle components of a geometry (dimensions, materials, boundary conditions): \begin{DataStructure}{Structure \dstr{geo\_data1}} $\{$ \moc{HOMOGE} $|$ \moc{CAR1D} \dusa{lx} $|$ \moc{TUBE} \dusa{lr} $|$ \moc{SPHERE} \dusa{lr} $|$ \moc{CAR2D} \dusa{lx} \dusa{ly} $|$ \moc{TUBEZ} \dusa{lr} \dusa{lz} $|$ \moc{CAR3D} \dusa{lx} \dusa{ly} \dusa{lz} $|$ \\ ~~~~~~ \moc{HEX} \dusa{lh} $|$ \moc{HEXZ} \dusa{lh} \dusa{lz} $\}$ \\ $[$ \moc{EDIT} \dusa{iprint} $]$ \\ \dstr{descBC} \\ \dstr{descMC} \\ \dstr{descPOS} \\ ; \end{DataStructure} \begin{DataStructure}{Structure \dstr{geo\_data2}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ \dstr{descBC} \\ \dstr{descMC} \\ \dstr{descPOS} \\ ; \end{DataStructure} \noindent \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{HOMOGE}] infinite homogeneous geometry. \item[\moc{CAR1D}] one dimensional plane geometry (infinite slabs). \item[\moc{TUBE}] cylindrical geometry (infinite tubes or cylinders). \item[\moc{SPHERE}] spherical geometry (concentric spheres). \item[\moc{CAR2D}] two-dimensional cartesian geometry. \item[\moc{TUBEZ}] polar geometry ($R-Z$). \item[\moc{CAR3D}] three-dimensional cartesian geometry. \item[\moc{HEX}] two-dimensional hexagonal geometry. \item[\moc{HEXZ}] three-dimensional hexagonal geometry. \item[\dusa{lx}] number of subdivisions along the $X$ axis (before mesh-splitting). \item[\dusa{ly}] number of subdivisions along the $Y$ axis (before mesh-splitting). \item[\dusa{lz}] number of subdivisions along the $Z$ axis (before mesh-splitting). \item[\dusa{lr}] number of cylinders or spherical shells (before mesh-splitting). \item[\dusa{lh}] number of hexagons in an axial plane (including the virtual hexagons). \item[\moc{EDIT}] keyword used to set \dusa{iprint}. \item[\dusa{iprint}] index used to control the printing in module {\tt GEO:}. =0 for no print; =1 for minimum printing (default value); =2 for printing the geometry state vector. \item[\dstr{descBC}] structure allowing the boundary conditions surrounding the geometry to be treated. \item[\dstr{descMC}] structure allowing material mixtures to be associated with a geometry. \item[\dstr{descPOS}] structure allowing the coordinates of a geometry to be described. \end{ListeDeDescription} The inputs corresponding to the \dstr{descBC} structure are the following: \begin{DataStructure}{Structure \dstr{descBC}} $[$ \moc{X-} $\{$ \moc{VOID} $|$ \moc{REFL} $|$ \moc{DIAG} $|$ \moc{TRAN} $|$ \moc{SYME} $|$ \moc{ALBE} $\{$ \dusa{albedo} $|$ \dusa{icode} $\}$ $|$ \moc{ZERO} \\ ~~~~~~~~ $|$ \moc{CYLI} $|$ \moc{ACYL} $\{$ \dusa{albedo} $|$ \dusa{icode} $\}$ $\}$ $]$ \\ $[$ \moc{X+} $\{$ \moc{VOID} $|$ \moc{REFL} $|$ \moc{DIAG} $|$ \moc{TRAN} $|$ \moc{SYME} $|$ \moc{ALBE} $\{$ \dusa{albedo} $|$ \dusa{icode} $\}$ $|$ \moc{ZERO} \\ ~~~~~~~~ $|$ \moc{CYLI} $|$ \moc{ACYL} $\{$ \dusa{albedo} $|$ \dusa{icode} $\}$ $\}$ $]$ \\ $[$ \moc{Y-} $\{$ \moc{VOID} $|$ \moc{REFL} $|$ \moc{DIAG} $|$ \moc{TRAN} $|$ \moc{SYME} $|$ \moc{ALBE} $\{$ \dusa{albedo} $|$ \dusa{icode} $\}$ $|$ \moc{ZERO} \\ ~~~~~~~~ $|$ \moc{CYLI} $|$ \moc{ACYL} $\{$ \dusa{albedo} $|$ \dusa{icode} $\}$ $\}$ $]$ \\ $[$ \moc{Y+} $\{$ \moc{VOID} $|$ \moc{REFL} $|$ \moc{DIAG} $|$ \moc{TRAN} $|$ \moc{SYME} $|$ \moc{ALBE} $\{$ \dusa{albedo} $|$ \dusa{icode} $\}$ $|$ \moc{ZERO} \\ ~~~~~~~~ $|$ \moc{CYLI} $|$ \moc{ACYL} $\{$ \dusa{albedo} $|$ \dusa{icode} $\}$ $\}$ $]$ \\ $[$ \moc{Z-} $\{$ \moc{VOID} $|$ \moc{REFL} $|$ \moc{TRAN} $|$ \moc{SYME} $|$ \moc{ALBE} $\{$ \dusa{albedo} $|$ \dusa{icode} $\}$ $|$ \moc{ZERO} $\}$ $]$ \\ $[$ \moc{Z+} $\{$ \moc{VOID} $|$ \moc{REFL} $|$ \moc{TRAN} $|$ \moc{SYME} $|$ \moc{ALBE} $\{$ \dusa{albedo} $|$ \dusa{icode} $\}$ $|$ \moc{ZERO} $\}$ $]$ \\ $[$ \moc{R+} $\{$ \moc{VOID} $|$ \moc{REFL} $|$ \moc{ALBE} $\{$ \dusa{albedo} $|$ \dusa{icode} $\}$ $|$ \moc{ZERO} $|$ $\}$ $]$ \\ $[$ \moc{HBC} $\{$ \moc{S30} $|$ \moc{SA60} $|$ \moc{SB60} $|$ \moc{S90} $|$ \moc{R120} $|$ \moc{R180} $|$ \moc{SA180} $|$ \moc{SB180} $|$ \moc{COMPLETE} $\}$ \\ $\{$ \moc{VOID} $|$ \moc{REFL} $|$ \moc{SYME} $|$ \moc{ALBE} $\{$ \dusa{albedo} $|$ \dusa{icode} $\}$ $|$ \moc{ZERO} $\}$ $]$ \\ $[$ \moc{RADS} $[$ \moc{ANG} $]$ \dusa{nrads} (\dusa{xrad}(ir), \dusa{rrad}(ir) $[$, \dusa{ang}(ir) $]$, ir=1,nrads ) $]$ \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{X-}] negative $X$ side. \item[\moc{Y-}] negative $Y$ side. \item[\moc{Z-}] negative $Z$ side. \item[\moc{X+}] positive $X$ side. \item[\moc{Y+}] positive $Y$ side. \item[\moc{Z+}] positive $Z$ side. \item[\moc{R+}] side surrounding cylinders or spheres. \item[\moc{HBC}] side surrounding a hexagonal geometry. \item[\moc{VOID}] the side under consideration has a zero incoming current boundary condition. \item[\moc{REFL}] the side under consideration has a reflective boundary condition. \item[\moc{DIAG}] the side under consideration is external to a diagonal axis of symmetry. \item[\moc{TRAN}] the side under consideration is connected to the opposite side of the domain. This option permits a translation condition to be treated. \item[\moc{SYME}] the side under consideration is next to an axial axis of symmetry. (symmetric with respect to the central axis of the last row of volumes). The {\tt SYME} condition can also be used in hexagonal geometry, but only with {\tt S30} and {\tt SA60} symmetries. \item[\moc{ALBE}] the side under consideration has an arbitrary albedo to be specified. \item[\dusa{albedo}] geometrical albedo corresponding to the boundary condition \moc{ALBE} (\dusa{albedo} $\ge$ 0.0). \item[\dusa{icode}] index of a physical albedo corresponding to the boundary condition \moc{ALBE}. The numerical values of the physical albedo are supplied by the module \moc{MAC:}. \item[\moc{ZERO}] the side under consideration has a zero flux boundary condition. \item[\moc{CYLI}] the side under consideration has a zero incoming current boundary condition with a circular correction applied on the Cartesian boundary. This option is only available in the $X$--$Y$ plane for \moc{CAR2D} and \moc{CAR3D} geometries defined for TRIVAC full--core calculations. \item[\moc{ACYL}] the side under consideration has an arbitrary albedo with a circular correction applied on the Cartesian boundary. This option is only available in the $X$--$Y$ plane for \moc{CAR2D} and \moc{CAR3D} geometries defined for TRIVAC full--core calculations. \item[\moc{S30}] hexagonal symmetry of one twelfth of an assembly (see Fig. \fig(s30)). \begin{figure}[htbp] \begin{center} \epsfxsize=10cm \centerline{ \epsffile{Fig1.eps}} \parbox{14cm}{\caption{Hexagonal geometries of type S30 and SA60}\label{fig:s30}} \end{center} \end{figure} \item[\moc{SA60}] hexagonal symmetry of one sixth of an assembly of type A (see Fig. \fig(s30)). \item[\moc{SB60}] hexagonal symmetry of one sixth of an assembly of type B (see Fig. \fig(sb60)). \begin{figure}[htbp] \begin{center} \epsfxsize=12cm \centerline{ \epsffile{Fig2.eps}} \parbox{14cm}{\caption{Hexagonal geometries of type SB60 and S90}\label{fig:sb60}} \end{center} \end{figure} \item[\moc{S90}] hexagonal symmetry of one quarter of an assembly (see Fig. \fig(sb60)). \item[\moc{R120}] hexagonal symmetry of one third of an assembly (rotational symmetry) (see Fig. \fig(r120)). \begin{figure}[htbp] \begin{center} \epsfxsize=10cm \centerline{ \epsffile{Fig3.eps}} \parbox{14cm}{\caption{Hexagonal geometries of type R120 and R180}\label{fig:r120}} \end{center} \end{figure} \item[\moc{R180}] rotational symmetry of a half assembly (see Fig. \fig(r120)). \item[\moc{SA180}] hexagonal symmetry of half a type A assembly (see Fig. \fig(sa180)). \begin{figure}[htbp] \begin{center} \epsfxsize=5cm \centerline{ \epsffile{Fig4a.eps}} \parbox{14cm}{\caption{Hexagonal geometry of type SA180}\label{fig:sa180}} \end{center} \end{figure} \item[\moc{SB180}] hexagonal symmetry of half a type B assembly (see Fig. \fig(sb180)). \begin{figure}[htbp] \begin{center} \epsfxsize=10cm \centerline{ \epsffile{Fig4b.eps}} \parbox{14cm}{\caption{Hexagonal geometry of type SB180}\label{fig:sb180}} \end{center} \end{figure} \item[\moc{COMPLETE}] complete hexagonal assembly (see Fig.~\fig(compl)). \begin{figure}[htbp] \begin{center} \epsfxsize=9cm \centerline{ \epsffile{Fig5.eps}} \parbox{14cm}{\caption{Hexagonal geometry of type COMPLETE}\label{fig:compl}} \end{center} \end{figure} \item[\moc{RADS}] This keyword is used to specify the cylindrical correction applied in the $X-Y$ plane for \moc{CAR2D} and \moc{CAR3D} geometries.\cite{roy} \item[\moc{ANG}] This keyword allows the angle (see Fig. \fig(corr)) of the cylindrical notch to be set. By default, no notch is present. \item[\dusa{nrads}] Number of different corrections along the cylinder main axis (i.e. the $Z$ axis). \item[\dusa{xrad}(ir)] Coordinate of the $Z$ axis from which the correction is applied. \item[\dusa{rrad}(ir)] Radius of the real cylindrical boundary. \item[\dusa{ang}(ir)] Angle of the cylindrical notch. This data is given if and only if the keyword \moc{ANG} is present. \dusa{ang}(ir) $= {\pi \over 2}$ by default (i.e. the correction is applied at every angle). \begin{figure}[htbp] \begin{center} \epsfxsize=5cm \centerline{ \epsffile{Fig6.eps}} \parbox{14cm}{\caption{Cylindrical correction in Cartesian geometry} \label{fig:corr}} \end{center} \end{figure} \end{ListeDeDescription} The only combinations of diagonal symmetry permitted are: \moc{X+} \moc{DIAG} \moc{Y-} \moc{DIAG} and \moc{X-} \moc{DIAG} \moc{Y+} \moc{DIAG}. In these cases the geometry must be a square. The only combinations of translational symmetry permitted are: \moc{X-} \moc{TRAN} \moc{X+} \moc{TRAN}, \moc{Y-} \moc{TRAN} \moc{Y+} \moc{TRAN} and \moc{Z-} \moc{TRAN} \moc{Z+} \moc{TRAN}. \vskip 0.2cm \goodbreak The input corresponding to the \dstr{descMC} structure are the following: \begin{DataStructure}{Structure \dstr{descMC}} $[$ \moc{MIX} $\{$ (\dusa{imix}(i),i=1,$lreg$) $|$\\ $~~~~[[$ \moc{PLANE} \dusa{iplan} $\{$ (\dusa{imix}(i),i=1,\dusa{lp}) $|$ \moc{SAME} \dusa{iplan1}\\ $~~~~|~[[$ \moc{CROWN} $\{$ (\dusa{imix}(i),i=1,\dusa{lc}) $|$ \moc{ALL} \dusa{jmix} $|$ \moc{SAME} \dusa{iplan1} $\}~]]$\\ $~~~~|~[[$ \moc{UPTO} \dusa{ic} \moc{ALL} \dusa{jmix} $|$ \moc{SAME} \dusa{iplan1} $\}~]]~]]~\}$\\ $]$ \end{DataStructure} \noindent \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{MIX}] keyword to attribute an material mixture number to each volume inside the axes of symmetry. When a volume is located inside the axes of symmetry but outside the calculation region it must be declared `virtual' (for example, the corners of a nuclear reactor). The material mixture number should be specified for each volume before mesh-splitting. \item[\dusa{imix}] type of material mixture associated with a region. It is important that \dusa{imix}$\le$\dusa{nmixt} where \dusa{nmixt} is defined in the {\tt } module. If \dusa{imix}=0, the corresponding volume is replaced by a \moc{VOID} boundary condition. In this case the volume is considered to be virtual and the flux is not calculated. In the case of a diagonal symmetry, the type indicator must not be specified for the volumes outside the axis of symmetry. These values must be specified in the following order: from \moc{X-} to \moc{X+}, from \moc{Y-} to \moc{Y+}, from \moc{Z-} to \moc{Z+} and finally radially from the inside out. \item[\moc{PLANE}] keyword to attribute mixture numbers to each volume inside a single 2D plane. This option is valid only for 3D geometries, Cartesian or hexagonal. \item[\dusa{iplan}] plane number for which material mixture are input. \item[\moc{SAME}] keyword to attribute the same material mixture numbers of the \dusa{iplan1} plane to the \dusa{iplan} plane. In hexagonal geometry, it can indicate that the mixture numbers of the current crown of the \dusa{iplan}th plane will be identical to those of the same crown of the \dusa{iplan1}th plane. \item[\dusa{iplan1}] plane number used as reference to input the current plane or crown(s). \item[\dusa{lp}] number of volumes in a plane. In Cartesian geometry, $lp=lx*ly$ and in hexagonal geometry, $lp=lh$. \item[\moc{CROWN}] keyword to attribute mixture numbers to each hexagon of a single crown. This option is only valid for \moc{COMPLETE} hexagonal geometry definition. Each use of the keyword \moc{CROWN} increases the crown number by 1. So it is not required to give its number, but crowns must be defined from the center to the peripherical regions of a plane. \item[\dusa{lc}] number of hexagons in the current crown. For the \dusa{i}th crown of a compelete hexagonal plane, $lc=(i-1)*6$. The first crown is composed of only one hexagon. \item[\moc{ALL}] keyword to specify that the \dusa{lc} material mixture number of the current crown have the same value \dusa{jmix}. \item[\moc{UPTO}] keyword to attribute material mixture numbers of the current crown up to the \dusa{ic} one. \item[\dusa{ic}] number of the last crown in \moc{UPTO} option. Its value must be greater than equal to the current crown number. \end{ListeDeDescription} Here we will assume that $lreg$\index{$lreg$} is the exact number of cells or elementary cases to be considered. For example, if we had used the \moc{DIAG} option with a geometry of type \moc{CAR3D} (\dusa{lx}=\dusa{ly}), we would have: $lreg$=(\dusa{lx}+1)$*$\dusa{ly}$*$\dusa{lz}/2. \vskip 0.2cm The following dimensional constraints must also be respected: \begin{itemize} \item $nmerge$=number of merged cells (with $nmerge \ge lreg$.), \item $ngen$=number of generation cells (with $ngen \ge nmerge$.), \end{itemize} The inputs corresponding to the \dstr{descPOS} structure are the following: \begin{DataStructure}{Structure \dstr{descPOS}} $[$ \moc{MESHX} (\dusa{xxx}(i),i=1,\dusa{lx}+1) $]$\\ $[$ \moc{MESHY} (\dusa{yyy}(i),i=1,\dusa{ly}+1) $]$\\ $[$ \moc{MESHZ} (\dusa{zzz}(i),i=1,\dusa{lz}+1) $]$\\ $[$ \moc{RADIUS} (\dusa{rrr}(i),i=1,\dusa{lr}+1) $]$\\ $[$ \moc{SIDE} \dusa{sidhex} $]$\\ $[$ \moc{SPLITX} (\dusa{ispltx}(i),i=1,\dusa{lx}) $]$\\ $[$ \moc{SPLITY} (\dusa{isplty}(i),i=1,\dusa{ly}) $]$\\ $[$ \moc{SPLITZ} (\dusa{ispltz}(i),i=1,\dusa{lz}) $]$\\ $[$ \moc{SPLITR} (\dusa{ispltr}(i),i=1,\dusa{lr}) $]$\\ $[~\{$ \moc{SPLITH} \dusa{isplth} $|$ \moc{SPLITL} \dusa{ispltl} $\}~]$ \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{MESHX}] keyword for the mesh of the geometry along the $X$ axis. \item[\moc{MESHY}] keyword for the mesh of the geometry along the $Y$ axis. \item[\moc{MESHZ}] keyword for the mesh of the geometry along the $Z$ axis. \item[\moc{RADIUS}] keyword for the mesh of the geometry in the radial direction. \item[\moc{SIDE}] keyword for the length of a side of a hexagon. \item[\dusa{xxx}] abscissa, corresponding to the limits of the regions making up the geometry. These values must be given in order, from \moc{X-} to \moc{X+}. If the geometry presents a diagonal symmetry this data will also be used for the ordinate. \item[\dusa{yyy}] ordinate, corresponding to the limits of the regions making up the geometry. These values must be given in order, from \moc{Y-} to \moc{Y+}. \item[\dusa{zzz}] height, corresponding to the limits of the regions making up the geometry. These values must be given in order, from \moc{Z-} to \moc{Z+}. \item[\dusa{rrr}] Radii in the cases of cylindrical (\moc{TUBE} or \moc{TUBEZ}), spherical (\moc{SPHERE}). It is important to note that we must have \dusa{rrr}(1)=0.0. \item[\dusa{sidhex}] length of a side of a hexagon. \item[\moc{SPLITX}] keyword for mesh splitting of the geometry along the $X$ axis. \item[\moc{SPLITY}] keyword for mesh splitting of the geometry along the $Y$ axis. \item[\moc{SPLITZ}] keyword for mesh splitting of the geometry along the $Z$ axis. \item[\moc{SPLITR}] keyword for mesh splitting of the geometry in the radial direction. \item[\dusa{ispltx}] number of sub-volumes that will be defined for each row of the volume along the $X$-axis. If the geometry presents a diagonal symmetry this input will also be used for the splitting along the $Y$-axis. By default, \dusa{ispltx}=1. \item[\dusa{isplty}] number of sub-volumes that will be defined for each row of the volume along the $Y$-axis. If the geometry presents a diagonal symmetry this input will also be used for the splitting along the $X$-axis. By default, \dusa{isplty}=1. \item[\dusa{ispltz}] number of sub-volumes that will be defined for each row of the volume along the $Z$-axis. By default, \dusa{ispltz}(i)=1. \item[\dusa{ispltr}] the value of \dusa{ispltr} gives the number of sub-volumes that will be defined for each tube or each spherical shell. A negative value permits a splitting into equal sub-volumes; a positive value permits a splitting into equal sub-radius spacings. By default, \dusa{ispltr}=1. \item[\moc{SPLITH}] keyword to specify that a triangular mesh splitting of the hexagonal geometry is to be performed -- for \moc{HEX} and \moc{HEXZ} type geometries. \item[\dusa{isplth}] value of the triangular mesh splitting. The number of triangles per hexagon is given by $6 \times$\dusa{isplth}$^2$. \dusa{isplth} $=0$ is used for full hexagon discretization. \item[\moc{SPLITL}] keyword to specify that a lozenge mesh splitting of the hexagonal geometry is to be performed -- for \moc{HEX} and \moc{HEXZ} type geometries. \item[\dusa{ispltl}] value of the lozenge splitting. The number of lozenges per hexagon is given by $3 \times$\dusa{ispltl}$^2$. \end{ListeDeDescription} The user of the options described above should take care not to exceed the limits imposed by the amount of dynamically allocated memory available. For a pure geometry, let us define the variables $lxp$, $lyp$, $lzp$ and $lrp$ as: \begin{eqnarray*} lxp&=&\sum_{i=1}^{{\it lx}} {\it ispltx}(i) \\ lyp&=&\sum_{i=1}^{{\it ly}} {\it isplty}(i) \\ lzp&=&\sum_{i=1}^{{\it lz}} {\it ispltz}(i) \\ lrp&=&\sum_{i=1}^{{\it lr}} {\it ispltr}(i) \\ \end{eqnarray*} \noindent thus, the limits that must be respected are the following: \begin{itemize} \item $lxp\ge$\dusa{maxpts} for a \moc{CAR1D} geometry. \item \dusa{lh}$\ge$\dusa{maxpts} for a \moc{HEX} geometry. \item $lrp\ge$\dusa{maxpts} for the \moc{TUBE} and \moc{SPHERE} geometries. \item $lxp*lyp\ge$\dusa{maxpts} for the \moc{CAR2D} geometry without diagonal symmetry. \item $lxp*(lyp+1)/2\ge$\dusa{maxpts} for the \moc{CAR2D} geometry with diagonal symmetry. \item $lrp*lzp\ge$\dusa{maxpts} for the \moc{TUBEZ} geometry. \item $lxp*lyp*lzp\ge$\dusa{maxpts} for the \moc{CAR3D} geometry without diagonal symmetry. \item $lxp*(lyp+1)*lzp/2\ge$\dusa{maxpts} for the \moc{CAR3D} geometry with diagonal symmetry. \item \dusa{lh}$*lzp\ge$\dusa{maxpts} for the \moc{HEXZ} geometry. \end{itemize} \vskip 0.2cm \subsubsection{Examples of geometries} We will now give a few examples which will permit users to better understand the procedure used to define the geometries in TRIVAC. \begin{enumerate} \item Slab geometry (see Fig. \fig(plaque)): \begin{verbatim} GEOMETRY1 := GEO: :: CAR1D 6 X- VOID X+ ALBE 1.2 MESHX 0.0 0.1 0.3 0.5 0.6 0.8 1.0 SPLITX 2 2 2 1 2 1 MIX 1 2 3 4 5 6 ; \end{verbatim} \begin{figure}[htbp] \begin{center} \epsfxsize=9cm \centerline{ \epsffile{Fig9.eps}} \parbox{14cm}{\caption{Slab geometry with mesh-splitting} \label{fig:plaque}} \end{center} \end{figure} \item Two-dimensional hexagonal geometry (see Fig. \fig(hexcel)): \begin{verbatim} GEOMETRY4 := GEO: :: HEX 12 HBC S30 ALBE 1.6 SIDE 1.3 MIX 1 1 1 2 2 2 3 3 3 4 5 6 ; \end{verbatim} \begin{figure}[htbp] \begin{center} \epsfxsize=7cm \centerline{ \epsffile{Fig12.eps}} \parbox{14cm}{\caption{Two-dimensional hexagonal geometry} \label{fig:hexcel}} \end{center} \end{figure} \end{enumerate} \clearpage \subsection{The {\tt MAC:} module} In TRIVAC the macroscopic cross sections and diffusion coefficients are read from the input data file using REDLEC. The general format of the data for the \moc{MAC:} module in TRIVAC is the following: \begin{DataStructure}{Structure \dstr{MAC:}} \dusa{MACR1} \moc{:=} \moc{MAC:} $[~\{$ \dusa{MACR1} $|$ \dusa{MACR2} $\}~]$ \moc{::} \dstr{mac\_data} \end{DataStructure} \goodbreak \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{MACR1}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing the new Macrolib produced by the module. A Macrolib contains macroscopic cross sections and diffusion coefficients. If \dusa{MACR1} appears on both LHS and RHS, it is updated; otherwise, it is created. If \dusa{MACR1} is created, all macroscopic cross sections and diffusion coefficients are first initialized to zero. \item[\dusa{MACR2}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing a read-only Macrolib. The information existing in \dusa{MACR2} is copied into \dusa{MACR1}, but \dusa{MACR2} is not modified. \item[\dstr{mac\_data}] structure containing the data to module {\tt MAC:} (see Sect.~\ref{sect:mac_data}). \end{ListeDeDescription} \vskip 0.2cm \subsubsection{Data input for module {\tt MAC:}}\label{sect:mac_data} \begin{DataStructure}{Structure \dstr{mac\_data}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ $[$ \moc{NGRO} \dusa{ngroup} $]$ \\ $[$ \moc{NIFI} \dusa{nifiss} $]$ \\ $[$ \moc{DELP} \dusa{ndel} $]$ \\ $[$ \moc{ANIS} \dusa{naniso} $]$ \\ $[$ \moc{NMIX} \dusa{nmixt} $]$ \\ $[$ \moc{DELP} \dusa{ndg} $]$ \\ $[$ \moc{ANIS} \dusa{naniso} $]$ \\ $[$ \moc{ALBP} \dusa{nalbp} ((\dusa{albedp}(ig,ia),ig=1,\dusa{ngroup}),ia=1,\dusa{nalbp}) $]$ \\ $[$ \moc{READ} \moc{INPUT} $\{$ $[[$ \dstr{macxs} $]]$ $|$ \moc{OLD} \dstr{triv2} $|$ \moc{DOLD} \dstr{trip2} $\}$ $]$ \\ $[[$ \moc{STEP} \dusa{istep} \moc{READ} \moc{INPUT} $[[$ \dstr{macxs} $]]$ $]]$ \\ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{EDIT}] keyword used to set \dusa{iprint}. \item[\dusa{iprint}] index used to control the printing in module {\tt MAC:}. =0 for no print. The macroscopic cross sections will be printed if the parameter \dusa{iprint} is greater than or equal to 2. The transfer cross sections will be printed if this parameter is greater than or equal to 3. \item[\moc{NGRO}] keyword used to define the number of energy groups. This data is given if and only if \dusa{MACR1} is created. \item[\dusa{ngroup}] the number of energy groups used for the calculations in TRIVAC. \item[\moc{NIFI}] keyword used to specify the maximum number of fissile spectrum associated with each mixture. Each fission spectrum generally represents a fissile isotope. This information is required only if \dusa{MACLIB} is created and the cross sections are taken directly from the input data stream. \item[\dusa{nifiss}] the maximum number of fissile isotopes per mixture. The default value is \dusa{nifiss}=1. \item[\moc{DELP}] keyword used to specify the number of delayed neutron groups. \item[\dusa{ndel}] the number of delayed neutron groups. The default value is \dusa{ndel}=0. \item[\moc{ANIS}] keyword used to specify the maximum level of anisotropy permitted in the scattering cross sections. This information is required only if \dusa{MACLIB} is created and the cross sections are taken directly from the input data stream. \item[\dusa{naniso}] number of Legendre orders for the representation of the scattering cross sections. The default value is \dusa{naniso}=1 corresponding to the use of isotropic scattering cross sections. \item[\moc{NMIX}] keyword used to define the number of material mixtures. This data is given if and only if \dusa{MACR1} is created. \item[\dusa{nmixt}] the maximum number of material mixtures (a material mixture is characterized by a distinct set of macroscopic cross sections). \item[\moc{DELP}] keyword used to set \dusa{ndg}. This data is used only if the fission spectrum $\vec{\chi}_p$ is different from the delayed neutron spectrum $\vec{\chi}_i$ for each precursor group $i$. \item[\dusa{ndg}] number of delayed neutron groups. \item[\moc{ANIS}] keyword used to specify the maximum level of anisotropy permitted in the diffusion cross sections. This data is given only if \dusa{MACR1} is created. \item[\dusa{naniso}] the maximum level of anisotropy. The default value is \dusa{naniso}=1. \item[\moc{ALBP}] keyword used for the input of the physical albedos. \item[\dusa{nalbp}] the number of physical albedos per energy group. \item[\dusa{albedp}] multigroup physical albedo array (real numbers). \item[\moc{STEP}] keyword used to create a perturbation directory. \item[\dusa{istep}] the index of the perturbation directory. \item[\moc{READ}] keyword used to specify input of the cross section information from default input by REDLEC. \item[\dstr{macxs}] structure describing the format used for reading the mixture cross sections and diffusion coefficients (or perturbation values of the cross sections and diffusion coefficients) from the input data file. \item[\moc{OLD}] keyword used to specify input of the cross section information from default input by REDLEC in the TRIVAC-2 format. The nuclear data will be translated into TRIVAC format and printed on the listing. \item[\dstr{triv2}] structure describing the format used for reading the mixture cross sections and diffusion coefficients from the input data file in TRIVAC-2 format. \item[\moc{DOLD}] keyword used to specify perturbed input of the cross section information from default input by REDLEC in the TRIVAC-2 format. The perturbed nuclear data will be translated into TRIVAC format and printed on the listing. \item[\dstr{trip2}] structure describing the format used for reading the mixture values of the perturbed cross sections and diffusion coefficients from the input data file in TRIVAC-2 format. \end{ListeDeDescription} \vskip 0.2cm \goodbreak \subsubsection{Description of the nuclear data} \begin{DataStructure}{Structure \dstr{macxs}} \moc{MIX} \dusa{matnum} \\ $~~[~\{$ \moc{NTOT0} $|$ \moc{TOTAL} $\}$ (\dusa{xssigt}(jg), jg=1,\dusa{ngroup}) $]$ \\ $~~[$ \moc{NTOT1} (\dusa{xssig1}(jg), jg=1,\dusa{ngroup}) $]$ \\ $~~[$ \moc{TRANC} (\dusa{xsstra}(jg), jg=1,\dusa{ngroup}) $]$ \\ $~~[$ \moc{NUSIGF} ((\dusa{xssigf}(jf,jg), jg=1,\dusa{ngroup}), jf=1,\dusa{nifiss}) $]$ \\ $~~[$ \moc{CHI} ((\dusa{xschi}(jf,jg), jg=1,\dusa{ngroup}), jf=1,\dusa{nifiss})$]$ \\ $~~[$ \moc{FIXE} (\dusa{xsfixe}(jg), jg=1,\dusa{ngroup}) $]$ \\ $~~[$ \moc{DIFF} (\dusa{diff}(jg), jg=1,\dusa{ngroup}) $]$ \\ $~~[$ \moc{DIFFX} (\dusa{xdiffx}(jg), jg=1,\dusa{ngroup}) $]$ \\ $~~[$ \moc{DIFFY} (\dusa{xdiffy}(jg), jg=1,\dusa{ngroup}) $]$ \\ $~~[$ \moc{DIFFZ} (\dusa{xdiffz}(jg), jg=1,\dusa{ngroup}) $]$ \\ $~~[$ \moc{NUSIGD} (((\dusa{xssigd}(jf,idel,jg), jg=1,\dusa{ngroup}), idel=1,\dusa{ndel}), jf=1,\dusa{nifiss}) $]$ \\ $~~[$ \moc{CHDL} (((\dusa{xschid}(jf,idel,jg), jg=1,\dusa{ngroup}), idel=1,\dusa{ndel}), jf=1,\dusa{nifiss})$]$ \\ $~~[$ \moc{OVERV} (\dusa{overv}(jg), jg=1,\dusa{ngroup}) $]$ \\ $~~[$ \moc{H-FACTOR} (\dusa{xhfact}(jg), jg=1,\dusa{ngroup}) $]$ \\ $~~[$ \moc{SCAT} ((\dusa{nbscat}(jl,jg), \dusa{ilastg}(jl,jg), (\dusa{scat}(jl,jg,ig), ig=1,\dusa{nbscat}(jl,jg) ), jg=1,\dusa{ngroup}), jl=1,\dusa{naniso}) $]$ \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{MIX}] keyword to specify that the macroscopic cross sections associated with a new mixture are to be read. \item[\dusa{matnum}] identifier for the next mixture to be read. The maximum value permitted for this identifier is \dusa{nmixt}. When \dusa{matnum} is absent, the mixtures are numbered consecutively starting with 1 or with the last mixture number read either on the GOXS or the input stream. \item[\moc{NTOT0}] keyword to specify that the total macroscopic cross sections for this mixture follows. \item[\moc{TOTAL}] alias keyword for \moc{NTOT0}. \item[\dusa{xssigt}] array representing the multigroup total macroscopic cross section ($\Sigma^{g}$ in \xsunit) associated with this mixture. \item[\moc{NTOT1}] keyword to specify that the $P_1$--weighted total macroscopic cross sections for this mixture follows. \item[\dusa{xssig1}] array representing the multigroup $P_1$--weighted total macroscopic cross section ($\Sigma_1^{g}$ in \xsunit) associated with this mixture. \item[\moc{TRANC}] keyword to specify that the transport correction macroscopic cross sections for this mixture follows. \item[\dusa{xsstra}] array representing the multigroup transport correction macroscopic cross section ($\Sigma_{\rm tc}^{g}$ in \xsunit) associated with this mixture. \item[\moc{NUSIGF}] keyword to specify that the macroscopic fission cross section multiplied by the average number of neutrons per fission for this mixture follows. \item[\dusa{xssigf}] array representing the multigroup macroscopic fission cross section multiplied by the average number of neutrons per fission ($\nu\Sigma_{f}^{g}$ in \xsunit) for all the fissile isotopes associated with this mixture. \item[\moc{CHI}] keyword to specify that the fission spectrum for this mixture follows. By default, if \moc{CHI} is not provided, all fission neutrons are emitted in group index 1 (fast group). \item[\dusa{xschi}] array representing the multigroup fission spectrum ($\chi^{g}$) for all the fissile isotopes associated with this mixture. \item[\moc{FIXE}] keyword to specify that the fixed neutron source density for this mixture follows. \item[\dusa{xsfixe}] array representing the multigroup fixed neutron source density for this mixture ($S^{g}$ in $s^{-1}cm^{-3}$). \item[\moc{DIFF}] keyword to specify that the isotropic diffusion coefficient for this mixture follows. \item[\dusa{diff}] array representing the multigroup isotropic diffusion coefficient for this mixture ($D^{g}$ in $cm$). \item[\moc{DIFFX}] keyword for input of the $X$--directed diffusion coefficient. \item[\dusa{xdiffx}] array representing the multigroup $X$--directed diffusion coefficient ($D^g_x$ in cm) for the mixture \dusa{matnum}. \item[\moc{DIFFY}] keyword for input of the $Y$--directed diffusion coefficient. \item[\dusa{xdiffy}] array representing the multigroup $Y$--directed diffusion coefficient ($D^g_y$ in cm) for the mixture \dusa{matnum}. \item[\moc{DIFFZ}] keyword for input of the $Z$--directed diffusion coefficient. \item[\dusa{xdiffz}] array representing the multigroup $Z$--directed diffusion coefficient ($D^g_z$ in cm) for the mixture \dusa{matnum}. \item[\moc{NUSIGD}] keyword to specify that the delayed macroscopic fission cross section multiplied by the average number of neutrons per fission for this mixture follows. \item[\dusa{xssigd}] array representing the delayed multigroup macroscopic fission cross section multiplied by the average number of neutrons per fission ($\nu\Sigma_{f}^{g,idel}$ in \xsunit) for all the fissile isotopes associated with this mixture. \item[\moc{CHDL}] keyword to specify that the delayed fission spectrum for this mixture follows. \item[\dusa{xschid}] array representing the delayed multigroup fission spectrum ($\chi^{g,idel}$) for all the fissile isotopes associated with this mixture. \item[\moc{OVERV}] keyword for input of the multigroup average of the inverse neutron velocity. \item[\dusa{overv}] array representing the multigroup average of the inverse neutron velocity ($<1/v>_{m}^g$) for the mixture \dusa{matnum}. \item[\moc{H-FACTOR}] keyword to specify that the power factor for this mixture follows. \item[\dusa{hfact}] array representing the multigroup power factor for this mixture ($H^{g}$ in $eV~cm^{-1}$). \item[\moc{SCAT}] keyword to specify that the macroscopic scattering cross section matrix for this mixture follows. \item[\dusa{nbscat}] array representing the number of secondary groups ig with non vanishing macroscopic scattering cross section towards the primary group jg considered for each anisotropy level associated with this mixture. \item[\dusa{ilastg}] array representing the group index of the most thermal group with non-vanishing macroscopic scattering cross section towards the primary group jg considered for each anisotropy level associated with this mixture. \item[\dusa{xsscat}] array representing the multigroup macroscopic scattering cross section ($\Sigma_{sl}^{ig\to jg}$ in \xsunit) from the secondary group ig towards the primary group jg considered for each anisotropy level associated with this mixture. The elements are ordered using decreasing secondary group number ig, from \dusa{ilastg} to (\dusa{ilastg}$-$\dusa{nbscat}$+1$), and an increasing primary group number jg. \end{ListeDeDescription} For example, the two group isotropic and linearly anisotropic scattering cross sections (\dusa{ngroup}=2, \dusa{naniso}=2) given by: \begin{center} \begin{tabular}{lcccc} $L$ & $\Sigma_{s,l}^{1\to 1}$ & $\Sigma_{s,l}^{1\to 2}$ & $\Sigma_{s,l}^{2\to 1}$ & $\Sigma_{s,l}^{2\to 2}$ \\ 0 & 0.50 ${\rm cm}^{-1}$ & 0.20 ${\rm cm}^{-1}$ & 0.03 ${\rm cm}^{-1}$ & 0.40 ${\rm cm}^{-1}$ \\ 1 & 0.05 ${\rm cm}^{-1}$ & 0.00 ${\rm cm}^{-1}$ & 0.00 ${\rm cm}^{-1}$ & 0.04 ${\rm cm}^{-1}$ \end{tabular} \end{center} \noindent must be entered as: \begin{verbatim} SCAT (*L=0*) 2 2 (*2->1*) 0.03 (*1->1*) 0.50 2 2 (*2->2*) 0.40 (*1->2*) 0.20 (*L=1*) 1 1 (*1->1*) 0.05 1 2 (*2->2*) 0.04 \end{verbatim} \clearpage \subsection{The {\tt BIVACT:} module}\label{sect:bivact} The {\tt BIVACT:} module is used to perform a BIVAC-type {\sc tracking} on a 1D/2D geometry.\cite{bivac,benaboud,SVAT1} The geometry is analyzed and a LCM object with signature {\tt L\_BIVAC} is created with the following information: \begin{itemize} \item Diagonal and hexagonal symmetries are unfolded and the mesh-splitting operations are performed. Volumes, material mixture and averaged flux recovery indices are computed on the resulting geometry. \item A finite element discretization is performed and the corresponding numbering is saved. \item The unit finite element matrices (mass, stiffness, etc.) are recovered. \end{itemize} The calling specifications are: \begin{DataStructure}{Structure \dstr{BIVACT:}} \dusa{TRACK} \moc{:=} \moc{BIVACT:} $[$ \dusa{TRACK} $]$ \dusa{GEOM} \moc{::} \dstr{bivact\_data} \end{DataStructure} \goodbreak \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{TRACK}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_BIVAC}) containing the {\sc tracking} information. If \dusa{TRACK} appears on the RHS, the previous settings will be applied by default. \item[\dusa{GEOM}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_GEOM}) containing the geometry. \item[\dstr{bivact\_data}] structure containing the data to module {\tt BIVACT:} (see Sect.~\ref{sect:bivact_data}). \end{ListeDeDescription} \vskip 0.2cm \subsubsection{Data input for module {\tt BIVACT:}}\label{sect:bivact_data} \begin{DataStructure}{Structure \dstr{bivact\_data}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ $[$ \moc{TITL} \dusa{TITLE} $]$ \\ $[$ \moc{MAXR} \dusa{maxpts} $]$ \\ $[$ $\{$ \moc{PRIM} $[$ \dusa{ielem} \dusa{icol} $]$ \\ ~~~~$|$ \moc{DUAL} $[$ \dusa{ielem} \dusa{icol} $]$ \\ ~~~~$|$ \moc{MCFD} $\}~]$ \\ $[~\{$ \moc{PN} $|$ \moc{SPN} $\}$ $[$ \moc{DIFF} $]$ \dusa{nlf} $[$ \moc{SCAT} \dusa{iscat} $]~[$ \moc{VOID} \dusa{nvd}~$]~]$ \\ {\tt ;} \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmmm} \item[\moc{EDIT}] keyword used to set \dusa{iprint}. \item[\dusa{iprint}] index used to control the printing in module {\tt BIVACT:}. =0 for no print; =1 for minimum printing (default value); Larger values produce increasing amounts of output. \item[\moc{TITL}] keyword which allows the run title to be set. \item[\dusa{TITLE}] the title associated with a TRIVAC run. This title may contain up to 72 characters. The default when \moc{TITL} is not specified is no title. \item[\moc{MAXR}] keyword which permits the maximum number of regions to be considered during a TRIVAC run to be specified. \item[\dusa{maxpts}] maximum dimensions of the problem to be considered. The default value is set to the number of regions previously computed by the {\tt GEO:} module but this value is insufficient if symmetries or mesh-splitting are specified. \item[\moc{PRIM}] keyword to set a primal finite element (classical) discretization. \item[\moc{DUAL}] keyword to set a mixed-dual finite element discretization. If the geometry is hexagonal, a Thomas-Raviart-Schneider method is used.\cite{rts} \item[\moc{MCFD}] keyword to set a mesh-centered finite difference discretization in hexagonal geometry. \item[\dusa{ielem}] order of the finite element representation. The values permitted are 1 (linear polynomials), 2 (parabolic polynomials), 3 (cubic polynomials) or 4 (quartic polynomials). By default \dusa{ielem}=1. \item[\dusa{icol}] type of quadrature used to integrate the mass matrices. The values permitted are 1 (analytical integration), 2 (Gauss-Lobatto quadrature) or 3 (Gauss-Legendre quadrature). By default \dusa{icol}=2. The analytical integration corresponds to classical finite elements; the Gauss-Lobatto quadrature corresponds to a variational or nodal type collocation and the Gauss-Legendre quadrature corresponds to superconvergent finite elements. \item[\moc{PN}] keyword to set a spherical harmonics ($P_n$) expansion of the flux.\cite{nse2005} \item[\moc{SPN}] keyword to set a simplified spherical harmonics ($SP_n$) expansion of the flux.\cite{nse2005,ane10a} This option is currently available with 1D and 2D Cartesian geometries and with 2D hexagonal geometries. \item[\moc{DIFF}] keyword to force using $1/3D^{g}$ as $\Sigma_1^{g}-\Sigma_{{\rm s}1}^{g}$ cross sections. A $P_1$ or $SP_1$ method will therefore behave as diffusion theory. \item[\dusa{nlf}] order of the $P_n$ or $SP_n$ expansion (odd number). Set to zero for diffusion theory (default value). \item[\moc{SCAT}] keyword to limit the anisotropy of scattering sources. \item[\dusa{iscat}] number of terms in the scattering sources. \dusa{iscat} $=1$ is used for isotropic scattering in the laboratory system. \dusa{iscat} $=2$ is used for linearly anisotropic scattering in the laboratory system. The default value is set to $n+1$ in $P_n$ or $SP_n$ case. \item[\moc{VOID}] keyword to set the number of base points in the Gauss-Legendre quadrature used to integrate void boundary conditions if \dusa{icol} $=3$ and \dusa{n} $\ne 0$. \item[\dusa{nvd}] type of quadrature. The values permitted are: 0 (use a (\dusa{n}$+2$)--point quadrature consistent with $P_{{\rm n}}$ theory), 1 (use a (\dusa{n}$+1$)--point quadrature consistent with $S_{{\rm n}+1}$ theory), 2 (use an analytical integration of the void boundary conditions). By default \dusa{nvd}=0. \end{ListeDeDescription} Various finite element approximations can be obtained by combining different values of \dusa{ielem} and \dusa{icol}: \begin{itemize} \item {\tt PRIM 1 1~:} Linear finite elements; \item {\tt PRIM 1 2~:} Mesh corner finite differences; \item {\tt PRIM 1 3~:} Linear superconvergent finite elements; \item {\tt PRIM 2 1~:} Quadratic finite elements; \item {\tt PRIM 2 2~:} Quadratic variational collocation method; \item {\tt PRIM 2 3~:} Quadratic superconvergent finite elements; \item {\tt PRIM 3 1~:} Cubic finite elements; \item {\tt PRIM 3 2~:} Cubic variational collocation method; \item {\tt PRIM 3 3~:} Cubic superconvergent finite elements; \item {\tt PRIM 4 2~:} Quartic variational collocation method; \item {\tt DUAL 1 1~:} Mixed-dual linear finite elements; \item {\tt DUAL 1 2~:} Mesh centered finite differences; \item {\tt DUAL 1 3~:} Mixed-dual linear superconvergent finite elements (numerically equivalent to {\tt PRIM~1~3}); \item {\tt DUAL 2 1~:} Mixed-dual quadratic finite elements; \item {\tt DUAL 2 2~:} Quadratic nodal collocation method; \item {\tt DUAL 2 3~:} Mixed-dual quadratic superconvergent finite elements (numerically equivalent to {\tt PRIM~2~3}); \item {\tt DUAL 3 1~:} Mixed-dual cubic finite elements; \item {\tt DUAL 3 2~:} Cubic nodal collocation method; \item {\tt DUAL 3 3~:} Mixed-dual cubic superconvergent finite elements (numerically equivalent to {\tt PRIM~3~3}); \item {\tt DUAL 4 2~:} Quartic nodal collocation method; \end{itemize} \clearpage \subsection{The {\tt TRIVAT:} module} The {\tt TRIVAT:} module is used to perform a TRIVAC-type {\sc tracking} on a 1D/2D/3D geometry.\cite{SVAT1,SVAT2,MCFD,Trivac,mixte-dual,benaboud} The geometry is analyzed and a LCM object with signature {\tt L\_TRIVAC} is created with the following information: \begin{itemize} \item Diagonal and hexagonal symmetries are unfolded and the mesh-splitting operations are performed. Volumes, material mixture and averaged flux recovery indices are computed on the resulting geometry. \item A finite element discretization is performed and the corresponding numbering is saved. \item The unit finite element matrices (mass, stiffness, etc.) are recovered. \item Indices related to an ADI preconditioning with or without supervectorization are saved. \end{itemize} The calling specifications are: \begin{DataStructure}{Structure \dstr{TRIVAT:}} \dusa{TRACK} \moc{:=} \moc{TRIVAT:} $[$ \dusa{TRACK} $]$ \dusa{GEOM} \moc{::} \dstr{trivat\_data} \end{DataStructure} \goodbreak \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{TRACK}] {\tt character*12} of the {\sc lcm} object (type {\tt L\_TRIVAC}) containing the {\sc tracking} information. If \dusa{TRACK} appears on the RHS, the previous settings will be applied by default. \item[\dusa{GEOM}] {\tt character*12} of the {\sc lcm} object (type {\tt L\_GEOM}) containing the geometry. \item[\dstr{trivat\_data}] structure containing the data to module {\tt TRIVAT:} (see Sect.~\ref{sect:trivat_data}). \end{ListeDeDescription} \vskip 0.2cm \subsubsection{Data input for module {\tt TRIVAT:}}\label{sect:trivat_data} \begin{DataStructure}{Structure \dstr{trivat\_data}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ $[$ \moc{TITL} \dusa{TITLE} $]$ \\ $[$ \moc{MAXR} \dusa{maxpts} $]$ \\ $[~\{$ \moc{PRIM} $[$ \dusa{ielem} $]~|$ \moc{DUAL} $[$ \dusa{ielem} \dusa{icol} $]~|$ \moc{MCFD} $[$ \dusa{ielem} $]~|$ \moc{LUMP} $[$ \dusa{ielem} $]~\}~]$ \\ $[$ \moc{SPN} $[$ \moc{DIFF} $]$ \dusa{nlf} $[$ \moc{SCAT} \dusa{iscat} $]~[$ \moc{VOID} \dusa{nvd} $]~]$ \\ $[$ \moc{ADI} \dusa{nadi} $]$ \\ $[$ \moc{VECT} $[$ \dusa{iseg} $]~[$ \moc{PRTV} \dusa{impv} $]~]$ \\ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{EDIT}] keyword used to set \dusa{iprint}. \item[\dusa{iprint}] index used to control the printing in module {\tt TRIVAT:}. =0 for no print; =1 for minimum printing (default value); Larger values produce increasing amounts of output. \item[\moc{TITL}] keyword which allows the run title to be set. \item[\dusa{TITLE}] the title associated with a TRIVAC run. This title may contain up to 72 characters. The default when \moc{TITL} is not specified is no title. \item[\moc{MAXR}] keyword which permits the maximum number of regions to be considered during a TRIVAC run to be specified. \item[\dusa{maxpts}] maximum dimensions of the problem to be considered. The default value is set to the number of regions previously computed by the {\tt GEO:} module but this value is insufficient if symmetries or mesh-splitting are specified. \item[\moc{PRIM}] keyword to set a discretization based on the variational collocation method. \item[\moc{DUAL}] keyword to set a mixed-dual finite element discretization. If the geometry is hexagonal, a Thomas-Raviart-Schneider method is used.\cite{rts} \item[\moc{MCFD}] keyword to set a discretization based on the nodal collocation method. The mesh centered finite difference approximation is the default option and is generally set using {\tt MCFD~1}. The {\tt MCFD} approximations are numerically equivalent to the {\tt DUAL} approximations with \dusa{icol}=2; however, the {\tt MCFD} approximations are less expensive. \item[\moc{LUMP}] keyword to set a discretization based on the nodal collocation method with serendipity approximation. The serendipity approximation is different from the \moc{MCFD} option in cases with \dusa{ielem}$\ge$2. This option is not available for hexagonal geometries. \item[\dusa{ielem}] order of the finite element representation. The values permitted are: 1 (linear polynomials), 2 (parabolic polynomials), 3 (cubic polynomials) or 4 (quartic polynomials). By default \dusa{ielem}=1. \item[\dusa{icol}] type of quadrature used to integrate the mass matrices. The values permitted are: 1 (analytical integration), 2 (Gauss-Lobatto quadrature) or 3 (Gauss-Legendre quadrature). By default \dusa{icol}=2. The analytical integration corresponds to classical finite elements; the Gauss-Lobatto quadrature corresponds to a variational or nodal type collocation and the Gauss-Legendre quadrature corresponds to superconvergent finite elements. \item[\moc{SPN}] keyword to set a simplified spherical harmonics ($SP_n$) expansion of the flux.\cite{nse2005,ane10a} This option is available with 1D, 2D and 3D Cartesian geometries and with 2D and 3D hexagonal geometries. \item[\moc{DIFF}] keyword to force using $1/3D^{g}$ as $\Sigma_1^{g}-\Sigma_{{\rm s}1}^{g}$ cross sections. A $P_1$ or $SP_1$ method will therefore behave as diffusion theory. \item[\dusa{nlf}] order of the $P_n$ or $SP_n$ expansion (odd number). Set to zero for diffusion theory (default value). \item[\moc{SCAT}] keyword to limit the anisotropy of scattering sources. \item[\dusa{iscat}] number of terms in the scattering sources. \dusa{iscat} $=1$ is used for isotropic scattering in the laboratory system. \dusa{iscat} $=2$ is used for linearly anisotropic scattering in the laboratory system. The default value is set to $n+1$ in $P_n$ or $SP_n$ case. \item[\moc{VOID}] keyword to set the number of base points in the Gauss-Legendre quadrature used to integrate void boundary conditions if \dusa{icol} $=3$ and \dusa{n} $\ne 0$. \item[\dusa{nvd}] type of quadrature. The values permitted are: 0 (use a (\dusa{n}$+2$)--point quadrature consistent with $P_{\rm n}$ theory), 1 (use a (\dusa{n}$+1$)--point quadrature consistent with $S_{{\rm n}+1}$ theory), 2 (use an analytical integration of the void boundary conditions). By default \dusa{nvd}=0. \item[\moc{ADI}] keyword to set the number of ADI iterations at the inner iterative level. \item[\dusa{nadi}] number of ADI iterations (default: \dusa{nadi} $=2$). \item[\moc{VECT}] keyword to set an ADI preconditionning with supervectorization. By default, TRIVAC uses an ADI preconditionning without supervectorization. \item[\dusa{iseg}] width of a vectorial register. \dusa{iseg} is generally a multiple of 64. By default, \dusa{iseg}=64. \item[\moc{PRTV}] keyword used to set \dusa{impv}. \item[\dusa{impv}] index used to control the printing in supervectorization subroutines. =0 for no print; =1 for minimum printing (default value); Larger values produce increasing amounts of output. \end{ListeDeDescription} Various finite element approximations can be obtained with different values of \dusa{ielem} (see Sect.~\ref{sect:bivact}). \clearpage \subsection{The {\tt BIVACA:} module} The {\tt BIVACA:} module is used to compute the finite element system matrices (type {\tt L\_SYSTEM}) corresponding to a BIVAC {\sc tracking} (type {\tt L\_BIVAC}) and to a set of nuclear properties (type {\tt L\_MACROLIB}). The calling specifications are: \begin{DataStructure}{Structure \dstr{BIVACA:}} \dusa{SYST} \moc{:=} \moc{BIVACA:} $[$ \dusa{SYST} $]$ \dusa{MACRO} \dusa{TRACK} \moc{::} \dstr{bivaca\_data} \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{SYST}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_SYSTEM}) containing the system matrices. If \dusa{SYST} appears on the RHS, the system matrices previously stored in \dusa{SYST} are kept. \item[\dusa{MACRO}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing the macroscopic cross sections and diffusion coefficients. \item[\dusa{TRACK}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_BIVAC}) containing the BIVAC {\sc tracking}. \item[\dstr{bivaca\_data}] structure containing the data to module {\tt BIVACA:} (see Sect.~\ref{sect:bivaca_data}). \end{ListeDeDescription} \vskip 0.2cm \subsubsection{Data input for module {\tt BIVACA:}}\label{sect:bivaca_data} \begin{DataStructure}{Structure \dstr{bivaca\_data}} $[$ \moc{EDIT} \dusa{iprint} $]~[$ \moc{UNIT} $]$ \\ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{EDIT}] keyword used to set \dusa{iprint}. \item[\dusa{iprint}] index used to control the printing in module {\tt BIVACA:}. =0 for no print; =1 for minimum printing (default value); Larger values produce increasing amounts of output. \item[\moc{UNIT}] A system matrix corresponding to cross sections all set to 1.0 is computed. This keyword is mandatory if the system matrices in \dusa{SYST} are going to be used by \moc{INIKIN:} or \moc{KINSOL:} modules (see Sects.~\ref{sect:inikin} and~\ref{sect:kinsol}). \end{ListeDeDescription} \clearpage \subsection{The {\tt TRIVAA:} module} The TRIVAA: module is used to compute the finite element system matrices (type {\tt L\_SYSTEM}) corresponding to a TRIVAC {\sc tracking} (type {\tt L\_TRIVAC}) and to a set of nuclear properties (type {\tt L\_MACROLIB}). The calling specifications are: \begin{DataStructure}{Structure \dstr{TRIVAA:}} \dusa{SYST} \moc{:=} \moc{TRIVAA:} $[$ \dusa{SYST} $]$ \dusa{MACRO} \dusa{TRACK} $[$ \dusa{DMACRO} $]$ \moc{::} \dstr{trivaa\_data} \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{SYST}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_SYSTEM}) containing the system matrices. If \dusa{SYST} appears on the RHS, the system matrices previously stored in \dusa{SYST} are kept. \item[\dusa{MACRO}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing the macroscopic cross sections and diffusion coefficients. \item[\dusa{TRACK}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_TRIVAC}) containing the TRIVAC {\sc tracking}. \item[\dusa{DMACRO}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing derivatives or perturbations of the macroscopic cross sections and diffusion coefficients. If \dusa{DMACRO} is given, only the derivatives or perturbations of the system matrices are computed. \item[\dstr{trivaa\_data}] structure containing the data to module {\tt TRIVAA:} (see Sect.~\ref{sect:trivaa_data}). \end{ListeDeDescription} \vskip 0.2cm \subsubsection{Data input for module {\tt TRIVAA:}}\label{sect:trivaa_data} \begin{DataStructure}{Structure \dstr{trivaa\_data}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ $[$ \moc{SKIP} $]$ $~[\{$ \moc{DERI} $|$ \moc{PERT} $\}]$ $~[$ \moc{UNIT} $]~[$ \moc{OVEL} $]$\\ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{EDIT}] keyword used to set \dusa{iprint}. \item[\dusa{iprint}] index used to control the printing in module {\tt TRIVAA:}. =0 for no print; =1 for minimum printing (default value); Larger values produce increasing amounts of output. \item[\moc{SKIP}] keyword used to skip the system matrix assembly but to perform the $L-D-L^T$ factorization. Use the system matrices already present in \dusa{SYST}. \item[\moc{DERI}] The information recovered from \dusa{DMACRO} is used as derivatives of nuclear properties with respect to a state variable. Derivatives of system matrices with respect to the same state variable are computed. \item[\moc{PERT}] The information recovered from \dusa{DMACRO} is used as the perturbation of the nuclear properties. Perturbations of the system matrices are computed. \item[\moc{UNIT}] A system matrix corresponding to cross sections all set to 1.0 is computed. This keyword is mandatory if the system matrices in \dusa{SYST} are going to be used by \moc{INIKIN:} or \moc{KINSOL:} modules (see Sects.~\ref{sect:inikin} and~\ref{sect:kinsol}). \item[\moc{OVEL}] The reciprocal neutron velocities for each material mixture are recovered from the input {\sc macrolib} \dusa{MACRO} and used to compute the corresponding system matrices. This capability is deprecated. \end{ListeDeDescription} \clearpage \subsection{The {\tt FLUD:} module} The {\tt FLUD:} module is used to compute the solution to an eigenvalue problem corresponding to a set of system matrices (type {\tt L\_SYSTEM}). The calling specifications are: \begin{DataStructure}{Structure \dstr{FLUD:}} \dusa{FLUX} \moc{:=} \moc{FLUD:} $[$ \dusa{FLUX} $]$ \dusa{SYST} \dusa{TRACK} $[$ \dusa{MACRO} $]$ \moc{::} \dstr{flud\_data} \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{FLUX}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_FLUX}) containing the solution. If \dusa{FLUX} appears on the RHS, the solution previously stored in \dusa{FLUX} is used to initialize the new iterative process; otherwise, a uniform unknown vector is used. \item[\dusa{SYST}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_SYSTEM}) containing the system matrices. \item[\dusa{TRACK}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_TRACK}) containing the {\sc tracking}. \item[\dusa{MACRO}] {\tt character*12} name of the optional {\sc lcm} object (type {\tt L\_MACROLIB}) containing the cross sections. This object is only used to set a link to the {\sc macrolib} name inside the {\sc flux} object. By default, the name of the {\sc macrolib} is recovered from the link in the {\sc system} object. \item[\dstr{flud\_data}] structure containing the data to module {\tt FLUD:} (see Sect.~\ref{sect:fld_data}). \end{ListeDeDescription} \vskip 0.2cm \subsubsection{Data input for module {\tt FLUD:}}\label{sect:fld_data} \begin{DataStructure}{Structure \dstr{flud\_data}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ $[~\{$ \moc{VAR1} $|$ \moc{ACCE} $\}$ \dusa{icl1} \dusa{icl2} $]~[$ \moc{IRAM} \dusa{blsz} \dusa{korg} $[$ \dusa{nstard} $[$ \moc{EPSG} \dusa{epsmsr} $]~]~]$ \\ $[$ \moc{EXTE} $[$ \dusa{maxout} $]~[$ \dusa{epsout} $]~]$ \\ $[$ \moc{THER} $[$ \dusa{maxthr} $]~[$ \dusa{epsthr} $]~]$ \\ $[$ \moc{ADI} \dusa{nadi} $]$ \\ $[$ \moc{ADJ} $]$ \\ $[$ \moc{MONI} \dusa{lmod} $[$ \moc{RAND} $]$ $]$ \\ $[$ \moc{RELAX} \dusa{relax} $]$ \\ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{EDIT}] keyword used to set \dusa{iprint}. \item[\dusa{iprint}] index used to control the printing in module {\tt FLUD:}. =0 for no print; =1 for minimum printing (default value); =2 iteration history is printed; =3 the solution is printed; =4 at each iteration, the new solution is compared to a reference solution previously stored in \dusa{FLUX} under name {\tt REF}; =5 the convergence histogram is stored in \dusa{FLUX}. \item[\moc{VAR1}] keyword used to set the parameters \dusa{icl1} and \dusa{icl2}. These parameter are used with the symmetrical variational acceleration technique (SVAT) for convergence of the generalized eigenvalue problem (default option) and to accelerate up-scattering iterations. \item[\moc{ACCE}] alias keyword for \moc{VAR1}. \item[\dusa{icl1}] number of free outer iterations in a cycle of the variational acceleration technique. The default value is \dusa{icl1} $=3$. \item[\dusa{icl2}] number of accelerated outer iterations in a cycle of the variational acceleration technique. The default value is \dusa{icl2} $=3$. A convergence in free iterations is obtained by setting \dusa{icl1} $=200$ (or \dusa{icl1} $=$ \dusa{maxout}) and \dusa{icl2} $=0$. \item[\moc{IRAM}] keyword used to to switch on the implicit restarted Arnoldi method (IRAM) and to set the parameters \dusa{blsz}, \dusa{korg} and \dusa{nstard}.\cite{iram} By default, the symmetrical variational acceleration technique (SVAT) is used. \item[\dusa{blsz}] block size of the Arnoldi Hessenberg matrix. \dusa{blsz} is the number of fixed-source Boltzmann transport equations solved similtaneously at each iteration of the implicit restarted Arnoldi method. The recommended value is \dusa{blsz} $=3$. \item[\dusa{korg}] number of desired eigenvalues with \dusa{korg} $\ge$ \dusa{blsz}. \item[\dusa{nstard}] number of iterations before restarting with the GMRES(m) acceleration method for solving the ADI-preconditionned linear systems in Trivac. The maximum number of GMRES iterations is set to \dusa{nadi}. By default, GMRES(m) acceleration is not used and \dusa{nadi} free iterations are performed. \item[\moc{EPSG}] keyword to specify the inner iteration GMRES epsilon. \item[\dusa{epsmsr}] convergence criterion for the inner iteration GMRES iterations. The fixed default value is \dusa{epsmsr} $=1.0\times 10^{-6}$. \item[\moc{EXTE}] keyword to specify that the control parameters for the external iteration are to be modified. \item[\dusa{maxout}] maximum number of external iterations. The fixed default value is \dusa{maxout} $=200$. \item[\dusa{epsout}] convergence criterion for the external iterations. The fixed default value is \dusa{epsout} $=1.0\times 10^{-4}$. The outer iterations are stopped when the following criteria is reached: $$\max_i | \Phi_i^{(k-1)} - \Phi_i^{(k)} | \ \le \ epsout \times \max_i | \Phi_i^{(k)} |$$ \noindent where $\vec\Phi^{(k)}={\rm col}\{\Phi_i^{(k)} \ ; \ i=1,I\}$ is the product of the $B$ matrix times the unknown vector at the $k$-th outer iteration. \item[\moc{THER}] keyword to specify that the control parameters for the thermal iterations are to be modified. \item[\dusa{maxthr}] maximum number of thermal iterations. The fixed default value is \dusa{maxthr} $=0$ corresponding to no thermal iterations. \item[\dusa{epsthr}] convergence criterion for the thermal iterations. The fixed default value is \dusa{epsthr} $=1.0\times 10^{-5}$. \item[\moc{ADI}] keyword used to set the number of alternating direction implicit (ADI) inner iterations in cases where Trivac is used. This keyword is also used to set the number of flux iterations over Legendre orders with $SP_n$ Bivac and Trivac cases if $n\ge 3$. \item[\dusa{nadi}] number of ADI inner or Legendre order iterations per outer iteration. The default value is $nadi=1$. If this value causes a failure of the acceleration process, it is recommended that a larger value be tried. The optimal choice is generally the minimum value of $nadi$ which allows a convergence in less than 75 outer iterations. $nadi=1$ or $nadi=2$ is generally the best choice for production-type calculations. The greater $nadi$ is, the smaller the asymptotic convergence constant (ACC) becomes. Taking an arbitrary large value (e.g., $nadi=20$) leads to numerical results identical to those of the inverse power method where the system matrices are accurately inverted at each outer iteration (at a prohibitive CPU cost). In this case, the ACC is almost equal to the dominance ratio of the iterative matrix. The default value is recovered in the state vector of the {\sc tracking} object \dusa{TRACK}. \item[\moc{ADJ}] keyword used to obtain the solution to both the direct and adjoint eigenvalue problems. The adjoint solution is required if we subsequently want to perform a perturbation calculation. This option is limited to Trivac. \item[\moc{MONI}] keyword used to obtain the first harmonics of the solution and to set \dusa{lmod}. {\sl A full core representation of the reactor should be used to compute its harmonics. If symmetries are set in the geometry, some harmonics may be skipped. If the reactor is symmetric, a uniform initial estimate of the harmonics may cause some harmonics to be skipped; the keyword \moc{RAND} should therefore be used.} \item[\dusa{lmod}] the $lmod$ first bi-orthonormalized harmonics of the solution are computed using the SVAT-accelerated preconditioned power method with a Hotelling deflation procedure.\cite{wilkinson} \item[\moc{RAND}] keyword used to initialize the harmonics calculations (option \moc{MONI}) with a random estimate rather than a uniform estimate. This option has no effect if \dusa{FLUX} appears on the RHS. \item[\moc{RELAX}] keyword used to set the relaxation parameter. This keyword must be specified each time a relaxation is required. \item[\dusa{relax}] relaxation parameter selected in the interval $0<$ \dusa{relax} $\le 1.0$ and used to update the flux information in the \dusa{FLUX} object. The updated value is taken equal to $(1.0-$\dusa{relax}$)$ times the previous value (given in the RHS \dusa{FLUX} object) plus \dusa{relax} times the value computed within current {\tt FLUD:} call. The default value is \dusa{relax} $=1.0$. \end{ListeDeDescription} \clearpage \subsection{The {\tt DELTA:} module} The {\tt DELTA:} module is used to compute the source components of a fixed source eigenvalue problem corresponding to a set of unperturbed and perturbation system matrices (type {\tt L\_SYSTEM}). In the direct case, the fixed source is computed as: \begin{equation} \vec S=\left( \delta\shadowA - \lambda_o \, \delta \shadowB\right) \vec \Phi - \delta \lambda \, \shadowB_o\vec \Phi \end{equation} \noindent where the direct source vector $\vec S$ is orthogonal to the unperturbed adjoint flux $\Phi^*$. In the adjoint case, the fixed source is computed as: \begin{equation} \vec S^*=\left( \delta \shadowA^\top - \lambda_o \, \delta \shadowB^\top\right) \vec \Phi^*- \delta \lambda \, \shadowB_o^\top\vec \Phi^* \end{equation} \noindent where the adjoint source vector $\vec S^*$ is orthogonal to the unperturbed direct flux $\Phi$ and where $\delta \lambda$ is the perturbation of the eigenvalue, as computed from the Rayleigh ratio. The calling specifications are: \begin{DataStructure}{Structure \dstr{DELTA:}} \dusa{GPT} \moc{:=} \moc{DELTA:} $[$ \dusa{GPT} $]$ \dusa{FLUX0} \dusa{SYST0} \dusa{DSYST} \dusa{TRACK} \moc{::} \dstr{delta\_data} \end{DataStructure} \goodbreak \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{GPT}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_SOURCE}) containing the fixed source. If \dusa{GPT} appears on the RHS, this information is used to initialize the state vector. \item[\dusa{FLUX0}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_FLUX}) containing the unperturbed flux. \item[\dusa{SYST0}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_SYSTEM}) containing the unperturbed system matrices. \item[\dusa{DSYST}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_SYSTEM}) containing a perturbation to the system matrices. \item[\dusa{TRACK}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_TRACK}) containing the {\sc tracking}. \item[\dstr{delta\_data}] structure containing the data to module {\tt DELTA:} (see Sect.~\ref{sect:delta_data}). \end{ListeDeDescription} \vskip 0.2cm \subsubsection{Data input for module {\tt DELTA:}}\label{sect:delta_data} \begin{DataStructure}{Structure \dstr{delta\_data}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ $[$ \moc{ADJ} $]$ \\ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{EDIT}] keyword used to set \dusa{iprint}. \item[\dusa{iprint}] index used to control the printing in module {\tt DELTA:}. \item[\moc{ADJ}] keyword used to set the source on an adjoint fixed source eigenvalue problem. \end{ListeDeDescription} \clearpage \subsection{The {\tt GPTFLU:} module} The {\tt GPTFLU:} module is used to compute the solution to a fixed source eigenvalue problem corresponding to a set of unperturbed system matrices and sources vectors. If $\vec S$ is the source term of the explicit generalized adjoint equation, this module will solve: \begin{equation} \left( \shadowA_o - \lambda_o \, \shadowB_o\right) \vec \Gamma_{i} = \vec S_{i} \end{equation} \noindent where the direct source vector $\vec S_{i}$ is orthogonal to the adjoint flux. If $\vec S$ is the source term of the implicit generalized adjoint equation, this module will solve: \begin{equation} \left( \shadowA_o^\top - \lambda_o \, \shadowB_o^\top\right) \vec \Gamma_{j}^* = \vec S_{j}^{*} \end{equation} \noindent where the adjoint source vector $\vec S_{j}^*$ is orthogonal to the direct flux. The calling specifications are: \begin{DataStructure}{Structure \dstr{GPTFLU:}} \dusa{FLUX\_GPT} \moc{:=} \moc{GPTFLU:} $[$ \dusa{FLUX\_GPT} $]$ \dusa{GPT} \dusa{FLUX0} \dusa{SYST} \dusa{TRACK} \moc{::} \dstr{gptflu\_data} \end{DataStructure} \goodbreak \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{FLUX\_GPT}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_FLUX}) containing the GPT solution. If \dusa{FLUX\_GPT} appears on the RHS, the solution previously stored in \dusa{FLUX\_GPT} is used to initialize the new iterative process; otherwise, a uniform unknown vector is used. \item[\dusa{GPT}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_SOURCE}) containing the fixed sources. \item[\dusa{FLUX0}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_FLUX}) containing the unperturbed flux used to decontaminate the GPT solution. \item[\dusa{SYST}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_SYSTEM}) containing the unperturbed system matrices. \item[\dusa{TRACK}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_TRACK}) containing the {\sc tracking}. \item[\dstr{gptflu\_data}] structure containing the data to module {\tt GPTFLU:}\label{sect:gptflu_data}. \end{ListeDeDescription} \vskip 0.2cm \subsubsection{Data input for module {\tt GPTFLU:}}\label{sect:gptflu_data} \begin{DataStructure}{Structure \dstr{gptflu\_data}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ $[~\{$ \moc{VAR1} $|$ \moc{ACCE} $\}$ \dusa{icl1} \dusa{icl2} $]~[$ \moc{GMRES} \dusa{nstart} $]$ \\ $[$ \moc{EXTE} $[$ \dusa{maxout} $]~[$ \dusa{epsout} $]~]$ \\ $[$ \moc{THER} $[$ \dusa{maxthr} $]~[$ \dusa{epsthr} $]~]$ \\ $[$ \moc{ADI} \dusa{nadi} $]$ \\ $[$ \{ \moc{EXPLICIT} $|$ \moc{IMPLICIT} \} $]$ \\ \moc{FROM-TO} $\{$ \moc{ALL} $|$ \dusa{$i_{src1}$} \dusa{$i_{src2}$} $\}$ \\ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{EDIT}] keyword used to set \dusa{iprint}. \item[\dusa{iprint}] index used to control the printing in module {\tt GPTFLU:}. =0 for no print; =1 for minimum printing (default value); =2 iteration history is printed; =3 the solution is printed; =4 at each iteration, the new solution is compared to a reference solution previously stored in \dusa{FLUX\_GPT} under the name {\tt REF}; =5 the convergence histogram is stored in \dusa{FLUX\_GPT}. \item[\moc{VAR1}] keyword used to set the parameters \dusa{icl1} and \dusa{icl2}. These parameter are used with the variational acceleration technique for convergence of the fixed-source iterations (default option) and to accelerate up-scattering iterations. \item[\moc{ACCE}] alias keyword for \moc{VAR1}. \item[\dusa{icl1}] number of free outer iterations in a cycle of the variational acceleration technique. The default value is \dusa{icl1} $=3$. \item[\dusa{icl2}] number of accelerated outer iterations in a cycle of the variational acceleration technique. The default value is \dusa{icl2} $=3$. A convergence in free iterations is obtained by setting \dusa{icl1} $=200$ (or \dusa{icl1} $=$ \dusa{maxout}) and \dusa{icl2} $=0$. \item[\moc{GMRES}] keyword to switch on the GMRES(m) acceleration of the fixed-source iterations. By default, the variational acceleration technique is used. \item[\dusa{nstart}] restarts the GMRES method every \dusa{nstart} outer iterations. The recommended value is \dusa{nstart} $=10$. \item[\moc{EXTE}] keyword to specify that the control parameters for the external iteration are to be modified. \item[\dusa{maxout}] maximum number of external iterations. The fixed default value is \dusa{maxout} $=200$. \item[\dusa{epsout}] convergence criterion for the external iterations. The fixed default value is \dusa{epsout} $=1.0\times 10^{-4}$. The outer iterations are stopped when the following criteria is reached: $$\max_i | \Gamma_i^{(k-1)} - \Gamma_i^{(k)} | \ \le \ epsout \times \max_i | \Gamma_i^{(k)} |$$ \noindent where $\vec\Gamma^{(k)}={\rm col}\{\Gamma_i^{(k)} \ ; \ i=1,I\}$ is the product of the $\shadowB$ matrix times the unknown vector at the $k$-th outer iteration. \item[\moc{THER}] keyword to specify that the control parameters for the thermal iterations are to be modified. \item[\dusa{maxthr}] maximum number of thermal iterations. The fixed default value is \dusa{maxthr} $=0$ corresponding to no thermal iterations. \item[\dusa{epsthr}] convergence criterion for the thermal iterations. The fixed default value is \dusa{epsthr} $=1.0\times 10^{-2}$. \item[\moc{ADI}] keyword used to set \dusa{nadi} in cases where Trivac is used. \item[\dusa{nadi}] number of alternating direction implicit (ADI) inner iterations per outer iteration. The default value is $nadi=1$. If this value causes a failure of the acceleration process, it is recommended that a larger value be tried. The optimal choice is generally the minimum value of $nadi$ which allows a convergence in less than 75 outer iterations. $nadi=1$ or $nadi=2$ is generally the best choice for production-type calculations. The greater $nadi$ is, the smaller the asymptotic convergence constant (ACC) becomes. Taking an arbitrary large value (e.g., $nadi=20$) leads to numerical results identical to those obtained by inverting the system matrices at each outer iteration (at a prohibitive CPU cost). In this case, the ACC is almost equal to the dominance ratio of the iterative matrix. \item[\moc{EXPLICIT}] keyword used to obtain the solution of an direct fixed source eigenvalue problem. \item[\moc{IMPLICIT}] keyword used to obtain the solution of an adjoint fixed source eigenvalue problem. If neither '\moc{EXPLICIT}' nor '\moc{IMPLICIT}' are provided the default value will be chosen as a function of $n_{var}$ and $n_{cst}+1$. \item[\moc{FROM-TO}] keyword used to specify the numbers of the sources for which a generalized adjoint will be calculated. \item[\moc{ALL}] keyword used to recover all sources available in \dusa{GPT}. \item[\dusa{$i_{src1}$}] number of the first source. \item[\dusa{$i_{src1}$}] number of the last source. \end{ListeDeDescription} \clearpage \subsection{The {\tt OUT:} module} The {\tt OUT:} module is used to compute the reaction rates and to store them in an extended {\sc macrolib} (type {\tt L\_MACROLIB}) corresponding to a solution (type {\tt L\_FLUX}) of the matrix system. The calling specifications are: \begin{DataStructure}{Structure \dstr{OUT:}} \dusa{MACRO2} \moc{:=} \moc{OUT:} $[$ \dusa{MACRO2} $]$ \dusa{FLUX} \dusa{TRACK} \dusa{MACRO} \dusa{GEOM} \moc{::} \dstr{out\_data} \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{MACRO2}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing the extended {\sc macrolib}. \item[\dusa{FLUX}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_FLUX}) containing a solution. \item[\dusa{TRACK}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_TRACK}) containing a {\sc tracking}. \item[\dusa{MACRO}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing the reference {\sc macrolib}. \item[\dusa{GEOM}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_GEOM}) containing the reference {\sc geometry}. \item[\dstr{out\_data}] structure containing the data to module {\tt OUT:}\label{sect:out_data}. \end{ListeDeDescription} \vskip 0.2cm \subsubsection{Data input for module {\tt OUT:}}\label{sect:out_data} \begin{DataStructure}{Structure \dstr{out\_data}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ $[$ \moc{MODE} \dusa{imode} $]$ \\ $[~\{$ \moc{DIRE} $|$ \moc{PROD} $\}~]$ \\ $[~\{$ \moc{POWR} \dusa{power} $|$ \moc{FISS} \dusa{number} $|$ \moc{SOUR} \dusa{snumb} $\}~]$ \\ $[$ \moc{COND} $[~\{$ \moc{NONE} $|$ (\dusa{icond}(i), i=1,ngcond) $\}~]~]$ \\ $[$ \moc{INTG} $\{$ \moc{NONE} $|$ \moc{IN} $|$ \moc{MIX} $|$ (\dusa{ihom}(i), i=1,nreg) $\}~]$ \\ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{EDIT}] keyword used to set \dusa{iprint}. \item[\dusa{iprint}] index used to control the printing in module {\tt OUT:}. =0 for no print; =1 for minimum printing (default value). \item[\moc{MODE}] keyword to specify the flux harmonic index \dusa{imode}. \item[\dusa{imode}] index of the flux harmonic recovered by the {\tt OUT:} module if the {\tt MONI} keyword was set in module {\tt FLUD:} (see Sect.~\ref{sect:fld_data}). By default, it is assumed that the {\tt MONI} keyword was not used. \item[\moc{DIRE}] use the direct flux to perform homogenization and/or condensation (default option). \item[\moc{PROD}] use the product of adjoint and direct fluxes to perform homogenization and/or condensation. \item[\moc{POWR}] keyword used to set \dusa{power}. \item[\dusa{power}] value of the power in MW used to normalize the flux. By default, the flux is not normalized. \item[\moc{FISS}] keyword used to set \dusa{number}. \item[\dusa{number}] number of secondary neutrons produced by fission. This value may be set to 1.0 to obtain the legacy power method normalization. By default, the flux is not normalized. \item[\moc{SOUR}] keyword used to set \dusa{snumb}. \item[\dusa{snumb}] number of source particles used to normalize the flux. By default, the flux is not normalized. \item[\moc{COND}] keyword to specify that a group condensation of the flux is to be performed. By default, no group condensation of the flux is to be performed, so that \dusa{ngcond}$=$\dusa{ngroup}. \item[\dusa{icond}] array of increasing energy group limits that will be associated with each of the \dusa{ngcond} condensed groups. We must have \dusa{ngcond}$\le$\dusa{ngroup}. By default, if \moc{COND} is set and \dusa{icond} is not set, all energy groups are condensed together. \item[\moc{NONE}] keyword to specify that no group condensation of the flux is to be performed, so that \dusa{ngcond}$=$\dusa{ngroup} (default option). \item[\moc{INTG}] keyword used to compute the reaction rates. \item[\moc{NONE}] keyword for computing the reaction rates on the geometry mesh (see Sect.~\ref{sect:geo_data1}) after mesh-splitting. \item[\moc{IN}] keyword for computing the reaction rates on the geometry mesh (see Sect.~\ref{sect:geo_data1}) before mesh-splitting. \item[\moc{MIX}] keyword for computing the reaction rates on the mixture mesh previously used to define the geometry (see Sect.~\ref{sect:geo_data1}) before mesh-splitting. \item[\dusa{ihom}] index of the homogenized region corresponding to the each region of the geometry (see Sect.~\ref{sect:geo_data1}) before mesh-splitting. \end{ListeDeDescription} \clearpage \subsection{The {\tt ERROR:} module} The {\tt ERROR:} module is used to compare reaction rates contained into two extended {\sc macrolibs} and to print statistics regarding the comparison. \vskip 0.2cm The QUANDRY-type power densities are first compared. These power densities are defined by the following relation: $$P^{\rm quandry}_i={\sum\limits_i V_i \over V_i} {P_i \over \sum\limits_i P_i}$$ \noindent where $P_i$ is the total power and $V_i$ is the volume of the region $i$. The maximum and averaged errors are respectively defined by: $$\epsilon_{\rm max}=\max_i {|P_i^{\rm quandry}-P_i^{{\rm quandry}*}| \over P_i^{{\rm quandry}*}}$$ \noindent and $$\bar\epsilon = {1 \over V_{\rm core}} \sum_i \left[ {|P_i^{\rm quandry}-P_i^{{\rm quandry}*}| \over P_i^{{\rm quandry}*}}\right] V_i$$ \noindent where $P_i^{{\rm quandry}*}$ is computed using the reference powers (stored in \dusa{MACRO1}) and $V_{\rm core}$ is the total volume of the regions where the power density is not equal to zero. \vskip 0.2cm The normalized removal rates $T_{i,g}^{\rm norm}$ in each region $i$ and energy group $g$ are next computed using the following formula: $$T_{i,g}=(\Sigma_{i,g} -\Sigma_{{\rm w}i,g}) \ \phi_{i,g} V_i$$ $$T_{i,g}^{\rm norm}={1 \over \sum\limits_i \sum\limits_g T_{i,g}} \ T_{i,g}$$ \noindent where $\Sigma_{i,g}$ is the total macroscopic cross section, $\Sigma_{{\rm w}i,g}$ is the within-group scattering cross section and $\phi_{i,g}$ is the neutron flux. The maximum and averaged errors are respectively defined by: $$\epsilon_{{\rm max} \ g}=\max_i {|T_{i,g}^{\rm norm}-T_{i,g}^{{\rm norm}*}| \over T_{i,g}^{{\rm norm}*}}$$ \noindent and $$\bar\epsilon_g = {1 \over N} \sum_i \left[ {|T_{i,g}^{\rm norm}-T_{i,g}^{{\rm norm}*}| \over T_{i,g}^{{\rm norm}*}}\right]$$ \noindent where $T_{i,g}^{{\rm norm}*}$ is computed using the reference values (stored in \dusa{MACRO1}) and $N$ is the total number of regions in the {\sc macrolib}. \vskip 0.2cm \goodbreak The calling specifications are: \begin{DataStructure}{Structure \dstr{ERROR:}} \moc{ERROR:} \dusa{MACRO1} \dusa{MACRO2} \moc{::} $[$ \moc{HREA} \dusa{hname} $]~[$ \moc{NREG} \dusa{nreg} $]$ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{MACRO1}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing the extended {\sc macrolib} used to compute the reference reaction rates. \item[\dusa{MACRO2}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing the extended {\sc macrolib} used to compute the approximate reaction rates. \item[\moc{HREA}] keyword used to set the character name \dusa{hname}. \item[\dusa{hname}] character*8 name of the nuclear reaction used to compute the power map. By default, reaction {\tt H-FACTOR} is used. \item[\moc{NREG}] keyword used to set the \dusa{nreg} number. \item[\dusa{nreg}] integer number set to the number of regions used in statistics. By default, all available regions are used. \end{ListeDeDescription} \clearpage \subsection{The {\tt INIKIN:} module}\label{sect:inikin} The {\tt INIKIN:} module is used to recover the steady-state solution and to initialize the kinetics parameters. The delayed neutron information can be provided directly from the input file or recovered from the {\sc macrolib} data structure. The initial presursor concentrations are obtained as a function of the strady-state solution. If $\phi_g(\bff(r),t_0)$ is the initial flux in energy group $g$ divided by $k_{\rm eff}$, the corresponding initial conditions of the precursors are obtained as \begin{equation} c_{\ell}(\bff(r),t_0)={1 \over \lambda_\ell} \sum_{h=1}^G \nu\Sigma_{{\rm f}\ell,h}^{\rm del}(\bff(r)) \, \phi_h(\bff(r),t_0) ; \ \ \ \ell=1,N_d . \label{eq:eq_inikin_1} \end{equation} \noindent where $\nu\Sigma_{{\rm f}\ell,h}^{\rm del}(\bff(r))$ is $\nu$ times the delayed macroscopic fission cross section in energy group $h$ for precursor group $\ell$. The calling specifications are: \begin{DataStructure}{Structure \dstr{INIKIN:}} \dusa{KINET} \moc{:=} \moc{INIKIN:} \dusa{MACRO} \dusa{TRACK} \dusa{SYST} \dusa{FLUX} \moc{::} \dstr{inikin\_data} \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{KINET}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_KINET}) to be created by the module. \item[\dusa{MACRO}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing the {\sc macrolib} information. \item[\dusa{TRACK}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_TRACK}) containing the {\sc tracking} information. \item[\dusa{SYST}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_SYSTEM}) corresponding to {\sc macrolib} \dusa{MACRO} and {\sc tracking} \dusa{TRACK}. \item[\dusa{FLUX}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_FLUX}) containing the initial steady-state solution. \item[\dstr{inikin\_data}] structure containing the data to module {\tt INIKIN:} (see Sect.~\ref{sect:inikin_data}). \end{ListeDeDescription} \vskip 0.2cm \subsubsection{Data input for module {\tt INIKIN:}}\label{sect:inikin_data} \begin{DataStructure}{Structure \dstr{inikin\_data}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ $[$ \moc{NGRP} \dusa{ngrp} $]$ \\ ~\moc{NDEL} \dusa{ndg} \\ $[$ \moc{BETA} (\dusa{beta}(i), i=1,\dusa{ndg}) $]$ \\ $[$ \moc{LAMBDA} (\dusa{lambda}(i), i=1,\dusa{ndg}) $]$ \\ $[$ \moc{CHID} ((\dusa{chid}(i), i=1,\dusa{ndg}), j=1,\dusa{ngrp}) $]$ \\ $[$ \moc{NORM} $\{$ \dusa{fnorm} $|$ \moc{MAX} $|$ \moc{POWER-INI} \dusa{power} $\}~]$ \\ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{EDIT}] keyword used to set \dusa{iprint} index. \item[\dusa{iprint}] integer index used to control the printing in module {\tt INIKIN:}. =0 for no print; =1 for minimum printing (default value); larger values of \dusa{iprint} will produce increasing amounts of output. \item[\moc{NGRP}] keyword used to set the \dusa{ngrp} number. By default, this information is recovered from the solution object \dusa{FLUX}. \item[\dusa{ngrp}] integer total number of energy groups. \item[\moc{NDEL}] keyword used to set the \dusa{ndg} number. \item[\dusa{ndg}] integer total number of the delayed neutron groups. \item[\moc{BETA}] keyword used to indicate the reading of \dusa{beta} values from the input file. If these values are not provided, they should be recorded in the {\sc macrolib} data structure. \item[\dusa{beta}] real array containing the delayed neutron fractions for each delayed group. \item[\moc{LAMBDA}] keyword used to indicate the reading of \dusa{lambda} values from the input file. If these values are not provided, they should be recorded in the {\sc macrolib} data structure. \item[\dusa{lambda}] real array containing the precursors decay constants for each delayed group. \item[\moc{CHID}] keyword used to indicate the reading of \dusa{chid} values from the input file. If these values are not provided, they should be recorded in the {\sc macrolib} data structure. \item[\dusa{chid}] real array representing the delayed multigroup fission spectrum. \item[\moc{NORM}] keyword used to normalize the initial flux. By default, the flux is not normalized. \item[\dusa{fnorm}] real normalization factor. \item[\moc{MAX}] keyword used to set the flux normalization factor to $1/f_{\rm max}$ where $f_{\rm max}$ is the maximum flux in the core. \item[\moc{POWER-INI}] keyword used to set the flux normalization factor to a given value of the initial power. \item[\dusa{power}] real initial power in MW. \end{ListeDeDescription} \clearpage \subsection{The {\tt KINSOL:} module}\label{sect:kinsol} The {\tt KINSOL:} module is used to solve the space-time neutron kinetics equations at current time step of transient. \subsubsection{The direct (forward) solution} We first consider the discretization of the legacy forward space-time kinetics equation. Several implicit numerical schemes are available for this purpose. Consider first the differential equation for precursor concentrations: \begin{equation} {\partial c_{\ell}(\bff(r),t) \over \partial t}+\lambda_\ell \, c_{\ell}(\bff(r),t) =\sum_{h=1}^G \nu\Sigma_{{\rm f}\ell,h}^{\rm del}(\bff(r)) \, \phi_h(\bff(r),t); \ \ \ \ell=1,N_d. \label{eq:eq_inikin_2} \end{equation} Consider a solution between times $t_{n-1}$ and $t_{n}=t_{n-1}+\Delta t_n$. First, an analytic solution can be obtained by assuming a ramp variation of the fission reaction rates over time step $\Delta t_n$. This solution is written \begin{eqnarray} \nonumber c_{\ell}(\bff(r),t_n)\negthinspace\negthinspace&=&\negthinspace\negthinspace c_{\ell}(\bff(r),t_{n-1}) \, {\rm e}^{-\lambda_\ell \, \Delta t_n}+{F_\ell(\bff(r),t_{n-1})\over \lambda_\ell} \left[ {1\over\lambda_\ell \, \Delta t_n}\left( 1- {\rm e}^{-\lambda_\ell \, \Delta t_n}\right)-{\rm e}^{-\lambda_\ell \, \Delta t_n} \right] \\ &+&\negthinspace\negthinspace {F_\ell(\bff(r),t_n)\over \lambda_\ell} \left[ 1-{1\over\lambda_\ell \, \Delta t_n}\left( 1- {\rm e}^{-\lambda_\ell \, \Delta t_n}\right) \right] \label{eq:eq_inikin_3} \end{eqnarray} \noindent where the delayed fission reaction rates are defined as \begin{eqnarray} F_\ell(\bff(r),t_{n})=\sum_{h=1}^G \nu\Sigma_{{\rm f}\ell,h}^{\rm del}(\bff(r)) \, \phi_h(\bff(r),t_n)=\beta_\ell \sum_{h=1}^G \nu\Sigma_{{\rm f}h}(\bff(r)) \, \phi_h(\bff(r),t_n) . \label{eq:eq_inikin_4} \end{eqnarray} An {\sl implicit theta solution} is presented in Chapter~5 of Ref.~\citen{PIP2009}. This solution is written \begin{eqnarray} \nonumber c_{\ell}(\bff(r),t_n)\negthinspace\negthinspace&=&\negthinspace\negthinspace \left[ {1-(1- \Theta_{\rm p}) \, \lambda_\ell \, \Delta t_n \over 1+ \Theta_{\rm p}\, \lambda_\ell \, \Delta t_n }\right] c_{\ell}(\bff(r),t_{n-1}) +{F_\ell(\bff(r),t_{n-1})\over \lambda_\ell} \left[{(1- \Theta_{\rm p}) \, \lambda_\ell \, \Delta t_n\over 1+ \Theta_{\rm p}\, \lambda_\ell \, \Delta t_n } \right] \\ &+&\negthinspace\negthinspace{F_\ell(\bff(r),t_n)\over \lambda_\ell} \left[{ \Theta_{\rm p} \, \lambda_\ell \,\Delta t_n\over 1+ \Theta_{\rm p}\, \lambda_\ell \, \Delta t_n} \right] \label{eq:eq_inikin_5} \end{eqnarray} \noindent where $\Theta_{\rm p}$ is the theta-factor for precursors. The fixed-source corresponding to the analytic solution for precursors is written \begin{eqnarray} \nonumber S_g^{\rm exact}(\bff(r),t_n)\negthinspace\negthinspace&=&\negthinspace\negthinspace{1\over V_{{\rm n},g}\, \Delta t_n} \,\phi_g(\bff(r),t_{n-1}) + \sum_\ell\lambda_\ell \left[ 1- \Theta_{\rm f}+ \Theta_{\rm f} \, {\rm e}^{-\lambda_\ell \, \Delta t_n}\right]\chi_{\ell,g}^{\rm del}(\bff(r)) \, c_\ell(\bff(r),t_{n-1})\\ \nonumber &+& \negthinspace\negthinspace(1- \Theta_{\rm f})\bigg\{\bff(\nabla) \cdot \shadowD_g(\bff(r)) \bff(\nabla) \phi_g(\bff(r),t_{n-1}) - \Sigma_{{\rm r}g}(\bff(r)) \, \phi_g(\bff(r),t_{n-1}) \\ \nonumber&+&\negthinspace\negthinspace \sum_{{h=1} \atop {h \not= g}}^G \Sigma_{g \leftarrow h}(\bff(r)) \, \phi_h(\bff(r),t_{n-1})+\chi_g^{\rm ss}(\bff(r))\, F(\bff(r),t_{n-1})\bigg\} \\ &-& \negthinspace\negthinspace \sum_\ell \left[1- \Theta_{\rm f}- \Theta_{\rm f} \left( {1\over\lambda_\ell \, \Delta t_n}\left( 1- {\rm e}^{-\lambda_\ell \, \Delta t_n}\right)-{\rm e}^{-\lambda_\ell \, \Delta t_n} \right) \right] \chi_{\ell,g}^{\rm del}(\bff(r)) \, F_\ell(\bff(r),t_{n-1}) \label{eq:eq_inikin_6} \end{eqnarray} \noindent where the steady-state fission reaction rates are defined as \begin{eqnarray} F(\bff(r),t_{n})=\sum_{h=1}^G \nu\Sigma_{{\rm f}h}(\bff(r)) \, \phi_h(\bff(r),t_n) . \label{eq:eq_inikin_7} \end{eqnarray} The fixed-source corresponding to the implicit theta solution is presented in Chapter~5 of Ref.~\citen{PIP2009} and is written \begin{eqnarray} \nonumber S_g^\Theta(\bff(r),t_n)\negthinspace\negthinspace&=&\negthinspace\negthinspace{1\over V_{{\rm n},g}\, \Delta t_n} \,\phi_g(\bff(r),t_{n-1}) + \sum_\ell\lambda_\ell \left[ 1- \Theta_{\rm f}+ \Theta_{\rm f} \, {1-(1- \Theta_{\rm p}) \, \lambda_\ell \, \Delta t_n \over 1+ \Theta_{\rm p}\, \lambda_\ell \, \Delta t_n }\right]\chi_{\ell,g}^{\rm del}(\bff(r)) \, c_\ell(\bff(r),t_{n-1})\\ \nonumber &+& \negthinspace\negthinspace(1- \Theta_{\rm f})\bigg\{\bff(\nabla) \cdot \shadowD_g(\bff(r)) \bff(\nabla) \phi_g(\bff(r),t_{n-1}) - \Sigma_{{\rm r}g}(\bff(r)) \, \phi_g(\bff(r),t_{n-1}) \\ \nonumber&+&\negthinspace\negthinspace \sum_{{h=1} \atop {h \not= g}}^G \Sigma_{g \leftarrow h}(\bff(r)) \, \phi_h(\bff(r),t_{n-1})+\chi_g^{\rm ss}(\bff(r))\, F(\bff(r),t_{n-1})\bigg\} \\ &-& \negthinspace\negthinspace \sum_\ell \left[1- \Theta_{\rm f}- \Theta_{\rm f} \, {(1- \Theta_{\rm p}) \, \lambda_\ell \, \Delta t_n \over 1+ \Theta_{\rm p}\, \lambda_\ell \, \Delta t_n } \right] \chi_{\ell,g}^{\rm del}(\bff(r)) \, F_\ell(\bff(r),t_{n-1}) . \label{eq:eq_inikin_8} \end{eqnarray} The flux equation at end-of-step is now presented. The equation corresponding to the analytic solution for precursors is written \begin{eqnarray} \nonumber&~&{1\over V_{{\rm n},g}\, \Delta t_n} \, \phi_g(\bff(r),t_n) - \Theta_{\rm f} \, \bff(\nabla) \cdot \shadowD_g(\bff(r)) \bff(\nabla) \phi_g(\bff(r),t_n) + \Theta_{\rm f} \, \Sigma_{{\rm r}g}(\bff(r)) \, \phi_g(\bff(r),t_n) \\ \nonumber&~& \ \ \ \ \ \ = \, S_g^{\rm exact}(\bff(r),t_n)+ \Theta_{\rm f} \, \sum_{{h=1} \atop {h \not= g}}^G \Sigma_{g \leftarrow h}(\bff(r)) \, \phi_h(\bff(r),t_n)\\ &~& \ \ \ \ \ \ + \ \Theta_{\rm f} \, \chi_g^{\rm ss}(\bff(r)) \, F(\bff(r),t_{n}) -\Theta_{\rm f} \sum_\ell \chi_{\ell,g}^{\rm del}(\bff(r)) \, {1\over\lambda_\ell \, \Delta t_n}\left( 1- {\rm e}^{-\lambda_\ell \, \Delta t_n}\right) F_\ell(\bff(r),t_{n}) . \label{eq:eq_inikin_9} \end{eqnarray} The equation corresponding to the implicit theta solution is presented in Chapter~5 of Ref.~\citen{PIP2009} and is written \begin{eqnarray} \nonumber&~&{1\over V_{{\rm n},g}\, \Delta t_n} \, \phi_g(\bff(r),t_n) - \Theta_{\rm f} \, \bff(\nabla) \cdot \shadowD_g(\bff(r)) \bff(\nabla) \phi_g(\bff(r),t_n) + \Theta_{\rm f} \, \Sigma_{{\rm r}g}(\bff(r)) \, \phi_g(\bff(r),t_n) \\ \nonumber&~& \ \ \ \ \ \ = \, S_g^\Theta(\bff(r),t_n)+ \Theta_{\rm f} \, \sum_{{h=1} \atop {h \not= g}}^G \Sigma_{g \leftarrow h}(\bff(r)) \, \phi_h(\bff(r),t_n)\\ &~& \ \ \ \ \ \ + \ \Theta_{\rm f} \, \chi_g^{\rm ss}(\bff(r)) \, F(\bff(r),t_{n}) -\Theta_{\rm f} \sum_\ell \chi_{\ell,g}^{\rm del}(\bff(r)) \, {1 \over 1+\Theta_{\rm p} \, \lambda_\ell\, \Delta t_n} \, F_\ell(\bff(r),t_{n}) . \label{eq:eq_inikin_10} \end{eqnarray} \subsubsection{The adjoint (backward) solution} The negative sign in front of the term $(1/v) \partial\phi^*/\partial t$ suggest some sort of backward approach to compute the importance (as opposed to the direct or forward approach for the direct neutron flux). Hence, while it is necessary to define an initial state of the system to solve the direct equations, solving the importance equations requires final conditions and to proceed backward with respect to time. \vskip 0.08cm Discretization of the adjoint space-time kinetics equations using the {\sl implicit theta solution} leads to the following equations. The solution for precursors is written \begin{eqnarray} \nonumber c^*_{\ell}(\bff(r),t_{n-1})\negthinspace\negthinspace&=&\negthinspace\negthinspace \left[ {1-(1- \Theta_{\rm p}) \, \lambda_\ell \, \Delta t_n \over 1+ \Theta_{\rm p}\, \lambda_\ell \, \Delta t_n}\right] c^*_{\ell}(\bff(r),t_{n}) + \left[{(1- \Theta_{\rm p}) \, \lambda_\ell \, \Delta t_n\over 1+ \Theta_{\rm p}\, \lambda_\ell \, \Delta t_n } \right] \sum_{h=1}^G \chi_{\ell,h}^{\rm del}(\bff(r)) \, \phi^*_h(\bff(r),t_{n}) \\ &+&\negthinspace\negthinspace \left[{ \Theta_{\rm p} \, \lambda_\ell \,\Delta t_n\over 1+ \Theta_{\rm p}\, \lambda_\ell \, \Delta t_n} \right]\sum_{h=1}^G \chi_{\ell,h}^{\rm del}(\bff(r)) \, \phi^*_h(\bff(r),t_{n-1}) . \label{eq:eq_inikin_11} \end{eqnarray} \goodbreak The flux equation at beginning-of-step is written \begin{eqnarray} \nonumber&~&{1\over V_{{\rm n},g}\, \Delta t_n} \, \phi^*_g(\bff(r),t_{n-1}) - \Theta_{\rm f} \, \bff(\nabla) \cdot \shadowD_g(\bff(r)) \bff(\nabla) \phi^*_g(\bff(r),t_{n-1}) + \Theta_{\rm f} \, \Sigma_{{\rm r}g}(\bff(r)) \, \phi^*_g(\bff(r),t_{n-1}) \\ \nonumber&~& \ \ \ \ \ \ = \, S_g^{*\Theta}(\bff(r),t_{n-1})+ \Theta_{\rm f} \, \sum_{{h=1} \atop {h \not= g}}^G \Sigma_{h \leftarrow g}(\bff(r)) \, \phi^*_h(\bff(r),t_{n-1})\\ &~& \ \ \ \ \ \ + \ \Theta_{\rm f}\sum_{h=1}^G \left[\nu\Sigma_{{\rm f}g}(\bff(r))\, \chi_h^{\rm ss}(\bff(r)) - \sum_\ell \nu\Sigma_{{\rm f}\ell,g}^{\rm del}(\bff(r))\,\chi_{\ell,h}^{\rm del}(\bff(r)) \, {1 \over 1+\Theta_{\rm p} \, \lambda_\ell\, \Delta t_{n-1}}\right] \phi^*_h(\bff(r),t_{n-1}) \label{eq:eq_inikin_12} \end{eqnarray} \noindent where the fixed-source $S_g^{*\Theta}(\bff(r),t_{n-1})$ is written \begin{eqnarray} \nonumber S_g^{*\Theta}(\bff(r),t_{n-1})\negthinspace\negthinspace&=&\negthinspace\negthinspace{1\over V_{{\rm n},g}\, \Delta t_n} \,\phi_g(\bff(r),t_{n}) + \sum_\ell \nu\Sigma_{{\rm f}\ell,g}^{\rm del}(\bff(r)) \left[ 1- \Theta_{\rm f}+ \Theta_{\rm f} \, {1-(1- \Theta_{\rm p}) \, \lambda_\ell \, \Delta t_n \over 1+ \Theta_{\rm p}\, \lambda_\ell \, \Delta t_n }\right] c^*_\ell(\bff(r),t_{n})\\ \nonumber &+& \negthinspace\negthinspace(1- \Theta_{\rm f})\bigg\{\bff(\nabla) \cdot \shadowD_g(\bff(r)) \bff(\nabla) \phi^*_g(\bff(r),t_{n}) - \Sigma_{{\rm r}g}(\bff(r)) \, \phi^*_g(\bff(r),t_{n}) \\ \nonumber&+&\negthinspace\negthinspace \sum_{{h=1} \atop {h \not= g}}^G \Sigma_{h \leftarrow g}(\bff(r)) \, \phi^*_h(\bff(r),t_{n})+ \sum_{h=1}^G \nu\Sigma_{{\rm f}g}(\bff(r))\, \chi_h^{\rm ss}(\bff(r)) \, \phi^*_h(\bff(r),t_{n}) \bigg\} \\ &-& \negthinspace\negthinspace \sum_\ell \left[1- \Theta_{\rm f}- \Theta_{\rm f} \, {(1- \Theta_{\rm p}) \, \lambda_\ell \, \Delta t_n \over 1+ \Theta_{\rm p}\, \lambda_\ell \, \Delta t_n } \right] \sum_{h=1}^G \nu\Sigma_{{\rm f}\ell,g}^{\rm del}(\bff(r))\,\chi_{\ell,h}^{\rm del}(\bff(r)) \, \phi^*_h(\bff(r),t_{n}) . \label{eq:eq_inikin_13} \end{eqnarray} The equations corresponding to the analytic solution for precursors are obtained by replacing the following terms in Eqs.~(\ref{eq:eq_inikin_11}) to~(\ref{eq:eq_inikin_13}): \begin{equation} {1\over 1+ \Theta_{\rm p}\, \lambda_\ell \, \Delta t_n} \ \Rightarrow \ {1-\exp^{-\lambda_\ell \, \Delta t_n} \over \lambda_\ell \, \Delta t_n} \ \ \ {\rm and} \ \ \ {1-(1-\Theta_{\rm p}\,\lambda_\ell \, \Delta t_n \over 1+ \Theta_{\rm p}\, \lambda_\ell \, \Delta t_n} \ \Rightarrow \ \exp^{-\lambda_\ell \, \Delta t_n} . \label{eq:eq_inikin_14} \end{equation} \goodbreak \subsubsection{The calling specifications} The calling specifications are: \begin{DataStructure}{Structure \dstr{KINSOL:}} \dusa{KINET} \moc{:=} \moc{KINSOL:} \dusa{KINET} \dusa{MACRO} \dusa{TRACK} \dusa{SYST} $[$ \dusa{MACRO\_0} \dusa{SYST\_0} $]$ \moc{::} \dstr{kinsol\_data} \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{KINET}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_KINET}) in modification mode. \item[\dusa{MACRO}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing the {\sc macrolib} information corresponding to the current time step of a transient. \item[\dusa{TRACK}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_TRACK}) containing the {\sc tracking} information. \item[\dusa{SYST}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_SYSTEM}) corresponding to {\sc macrolib} \dusa{MACRO} and {\sc tracking} \dusa{TRACK}. \item[\dusa{MACRO\_0}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing the {\sc macrolib} information corresponding to the beginning-of-step conditions in case a ramp variation of the cross sections in set. {\sl Beginning-of-step conditions should not be confused with beginning-of-transient or initial conditions.} By default, a step variation is set where cross sections are assumed constant and given by \dusa{MACRO}. \item[\dusa{SYST\_0}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_SYSTEM}) corresponding to {\sc macrolib} \dusa{MACRO\_0} and {\sc tracking} \dusa{TRACK}. \item[\dstr{kinsol\_data}] structure containing the data to module {\tt KINSOL:} (see Sect.~\ref{sect:kinsol_data}). \end{ListeDeDescription} \vskip 0.2cm \subsubsection{Data input for module {\tt KINSOL:}}\label{sect:kinsol_data} \begin{DataStructure}{Structure \dstr{kinsol\_data}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ ~\moc{DELTA} \dusa{delta} \\ ~\moc{SCHEME} ~\moc{FLUX} $[$ \moc{TEXP} $]~\{$ \moc{IMPLIC} $|$ \moc{CRANK} $|$ \moc{THETA} \dusa{ttflx} $\}$ \\ ~\moc{PREC} $\{$ \moc{IMPLIC} $|$ \moc{CRANK} $|$ \moc{EXPON} $|$ \moc{THETA} \dusa{ttprc} $\}$ \\ $[~\{$ \moc{VAR1} $|$ \moc{ACCE} $\}$ \dusa{icl1} \dusa{icl2} $]$ \\ $[$ \moc{EXTE} $[$ \dusa{maxout} $]~[$ \dusa{epsout} $]~]$ \\ $[$ \moc{THER} $[$ \dusa{maxthr} $]~[$ \dusa{epsthr} $]~]$ \\ $[$ \moc{ADI} \dusa{nadi} $]$ \\ $[$ \moc{ADJ} $]$ \\ $[$ \moc{PICK} {\tt >>} \dusa{power\_out} {\tt <<} $]$ \\ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{EDIT}] keyword used to set \dusa{iprint} index. \item[\dusa{iprint}] integer index used to control the printing in module {\tt KINSOL:}. =0 for no print; =1 for minimum printing (default value); larger values of \dusa{iprint} will produce increasing amounts of output. \item[\moc{DELTA}] keyword used to set the \dusa{delta} value. \item[\dusa{delta}] current time increment $\Delta t_n$ of transient. \item[\moc{SCHEME}] keyword used to indicate the temporal numerical schemes. \item[\moc{TEXP}] keyword used to enable the exponential transformation procedure on transient flux. Mixture- and group-dependent factors $\omega_{m,g}$ are set such that the flux at point $\bff(r)$ is defined as \begin{equation} \phi_g(\bff(r),t)=e^{\omega_{m,g} t} \tilde\phi_g(\bff(r),t) \label{eq:eq_kinsol_1} \end{equation} \noindent where $m$ is the mixture index corresponding to point $\bff(r)$. Factors $\omega_{m,g}$ are initialized to zero by module {\tt INIKIN:} and are recomputed at the end of each time step. \item[\moc{FLUX}] keyword used to select the temporal scheme for the fluxes equations. \item[\moc{PREC}] keyword used to select the temporal scheme for the precursors equations. \item[\moc{IMPLIC}] keyword used to indicate the full implicit temporal scheme. \item[\moc{CRANK}] keyword used to indicate the Crank-Nicholson temporal scheme. \item[\moc{EXPON}] keyword used to indicate the analytical integration scheme for precursors equations. \item[\moc{THETA}] keyword used to indicate the general temporal scheme according to the \dusa{theta} method. \item[\dusa{ttflx}] value of \dusa{theta} parameter $ \Theta_{\rm f}$ for the flux equations. This value should be greater than 0.5 and less than 1.0. \item[\dusa{ttprc}] value of \dusa{theta} parameter $ \Theta_{\rm p}$ for the precursors equations. This value should be greater than 0.5 and less than 1.0. \item[\moc{VAR1}] keyword used to switch on the variational acceleration technique and to set the parameters \dusa{icl1} and \dusa{icl2}. \item[\moc{ACCE}] alias keyword for \moc{VAR1}. \item[\dusa{icl1}] number of free outer iterations in a cycle of the variational acceleration technique. The default value is \dusa{icl1} $=3$. \item[\dusa{icl2}] number of accelerated outer iterations in a cycle of the variational acceleration technique. The default value is \dusa{icl2} $=3$. A convergence in free iterations is obtained by setting \dusa{icl1} $=200$ (or \dusa{icl1} $=maxout$) and \dusa{icl2} $=0$. \item[\moc{EXTE}] keyword to specify that the control parameters for the external iteration are to be modified. \item[\dusa{maxout}] maximum number of external iterations. The fixed default value is \dusa{maxout} $=200$. \item[\dusa{epsout}] convergence criterion for the external iterations. The fixed default value is \dusa{epsout} $=1.0\times 10^{-4}$. The outer iterations are stopped when the following criteria is reached: $$\max_i | \Phi_i^{(k-1)} - \Phi_i^{(k)} | \ \le \ epsout \times \max_i | \Phi_i^{(k)} |$$ \noindent where $\vec\Phi^{(k)}={\rm col}\{\Phi_i^{(k)} \ ; \ i=1,I\}$ is the product of the $B$ matrix times the unknown vector at the $k$-th outer iteration. \item[\moc{THER}] keyword to specify that the control parameters for the thermal iterations are to be modified. \item[\dusa{maxthr}] maximum number of thermal iterations. The fixed default value is \dusa{maxthr} $=0$ corresponding to no thermal iterations. \item[\dusa{epsthr}] convergence criterion for the thermal iterations. The fixed default value is \dusa{epsthr} $=1.0\times 10^{-2}$. \item[\moc{ADI}] keyword used to set \dusa{nadi} in cases where Trivac is used. \item[\dusa{nadi}] number of alternating direction implicit (ADI) inner iterations per outer iteration. The default value is $nadi=1$. If this value causes a failure of the acceleration process, it is recommended that a larger value be tried. The optimal choice is generally the minimum value of $nadi$ which allows a convergence in less than 75 outer iterations. $nadi=1$ or $nadi=2$ is generally the best choice for production-type calculations. The greater $nadi$ is, the smaller the asymptotic convergence constant (ACC) becomes. Taking an arbitrary large value (e.g., $nadi=20$) leads to numerical results identical to those obtained by inverting the system matrices at each outer iteration (at a prohibitive CPU cost). In this case, the ACC is almost equal to the dominance ratio of the iterative matrix. The default value is recovered in the state vector of the {\sc tracking} object \dusa{TRACK}. \item[\moc{ADJ}] keyword used to perform an adjoint (backward) space-time kinetics calculation. By default, a direct (forward) space-time kinetics calculation is performed. \item[\moc{PICK}] keyword used to recover the end-of-stage power (in MW) in a CLE-2000 variable. \item[\dusa{power\_out}] \texttt{character*12} CLE-2000 variable name in which the extracted power value will be placed. \end{ListeDeDescription} \clearpage \subsection{The {\tt VAL:} module}\label{sect:VALData} The \moc{VAL:} module supplies an interpolation of the flux in diffusion calculations for Cartesian geometries. This module also provide {\sl flux reconstruction} with nodal methods. The calling specifications are: \begin{DataStructure}{Structure \dstr{VAL:}} \dusa{IFLU} \moc{:=} \moc{VAL:} \dusa{TRKNAM} \dusa{FLUNAM} $[$ \dusa{MACRO} $]$ \moc{::} \dstr{descval} \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmmmm} \item[\dusa{IFLU}] {\tt character*12} name of the \dds{interpflux} data structure ({\tt L\_FVIEW} signature) where the interpolated flux distribution will be stored. \item[\dusa{TRKNAM}] {\tt character*12} name of the read-only \dds{tracking} data structure ({\tt L\_TRACK} signature) containing the tracking. \item[\dusa{FLUNAM}] {\tt character*12} name of the read-only \dds{fluxunk} data structure ({\tt L\_FLUX} signature) containing a transport solution. \item[\dusa{MACRO}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing the cross sections and diffusion coefficients. This data structure is required with nodal methods and in case the \moc{POWR} keyword is set. \item[\dstr{descval}] structure containing the input data to this module to compute interpolated flux (see \Sect{descval}). \end{ListeDeDescription} \subsubsection{Data input for module {\tt VAL:}}\label{sect:descval} \begin{DataStructure}{Structure \dstr{descval}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ $[$ \moc{MODE} \dusa{imode} $]$ \\ $[$ \moc{POWR} \dusa{power} $]$ \\ $[~\{$ \moc{NOCCOR} $|$ \moc{CCOR} $\}~]$ \\ \moc{DIM} \dusa{dim} (\dusa{dxyz}$(i)$, $i=1,dim$) \\ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmmmm} \item[\moc{EDIT}] keyword used to modify the print level \dusa{iprint}. \item[\dusa{iprint}] integer index used to control the printing in module {\tt VAL:}. =0 for no print; =1 for minimum printing (default value); larger values of \dusa{iprint} will produce increasing amounts of output. \item[\moc{MODE}] keyword to specify the flux harmonic index \dusa{imode}. \item[\dusa{imode}] index of the flux harmonic recovered by the {\tt VAL:} module if the {\tt MONI} keyword was set in module {\tt FLUD:} (see Sect.~\ref{sect:fld_data}). By default, it is assumed that the {\tt MONI} keyword was not used. \item[\moc{POWR}] keyword used to set \dusa{power}. \item[\moc{NOCCOR}] keyword used to desactivate {\sl corner flux correction} with 2D/3D nodal methods. \item[\moc{CCOR}] keyword used to activate {\sl corner flux correction} with 2D/3D nodal methods (default option). \item[\dusa{power}] value of the power in MW used to normalize the flux. By default, the flux is not normalized. \item[\moc{DIM}] keyword to specify the number \dusa{dim}. \item[\dusa{dim}] number of dimension of the geometry. \item[\dusa{dxyz}] mesh interval along each direction which is used to define the grid where the flux is interpolated. \end{ListeDeDescription} \clearpage \subsection{The {\tt NSST:} module} The {\tt NSST:} module is used to perform a {\sc tracking} for the Nodal Expansion Method (NEM)\cite{nestle} or the Analytic Nodal Method (ANM)\cite{anm08}. \vskip 0.08cm The calling specifications are: \begin{DataStructure}{Structure \dstr{NSST:}} \dusa{TRACK} \moc{:=} \moc{NSST:} $[$ \dusa{TRACK} $]$ \dusa{GEOM} \moc{::} \dstr{NSST\_data} \end{DataStructure} \goodbreak \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{TRACK}] {\tt character*12} of the {\sc lcm} object (type {\tt L\_TRIVAC}) containing the {\sc tracking} information. If \dusa{TRACK} appears on the RHS, the previous settings will be applied by default. \item[\dusa{GEOM}] {\tt character*12} of the {\sc lcm} object (type {\tt L\_GEOM}) containing the geometry. \item[\dstr{NSST\_data}] structure containing the data to module {\tt NSST:} (see Sect.~\ref{sect:NSST_data}). \end{ListeDeDescription} \subsubsection{Data input for module {\tt NSST:}}\label{sect:NSST_data} \begin{DataStructure}{Structure \dstr{NSST\_data}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ $[$ \moc{TITL} \dusa{TITLE} $]$ \\ $[$ \moc{MAXR} \dusa{maxpts} $]$ \\ $[$ \moc{HYPE} \dusa{igmax} $]$ \\ $[~\{$ \moc{CMFD} $|$ \moc{NEM} $|$ \moc{ANM} $\}~]$ \\ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{EDIT}] keyword used to set \dusa{iprint}. \item[\dusa{iprint}] index used to control the printing in module {\tt NSST:}. =0 for no print; =1 for minimum printing (default value); Larger values produce increasing amounts of output. \item[\moc{TITL}] keyword which allows the run title to be set. \item[\dusa{TITLE}] the title associated with a nodal expansion method run. This title may contain up to 72 characters. The default when \moc{TITL} is not specified is no title. \item[\moc{MAXR}] keyword which permits the maximum number of regions to be considered during a nodal run to be specified. \item[\dusa{maxpts}] maximum dimensions of the problem to be considered. The default value is set to the number of regions previously computed by the {\tt GEO:} module but this value is insufficient if symmetries or mesh-splitting are specified. \item[\moc{HYPE}] keyword used to specify the type of nodal expansion base functions used to represent the transverse integrated flux. By default, the polynomial base~(\ref{eq:nem1}) is used in all energy groups. This keyword has no effect with the analytic nodal method. \item[\dusa{igmax}] hyperbolic base functions~(\ref{eq:nem2}) are used for energy groups with indices $\ge$ \dusa{igmax}. \item[\moc{CMFD}] keyword used to impose the coarse mesh finite difference method. Only polynomials $p_0(u)$ to $p_2(u)$ are used to expand the flux. \item[\moc{NEM}] keyword used to impose the nodal expansion method. This is the default option. \item[\moc{ANM}] keyword used to impose the analytic nodal method. \end{ListeDeDescription} \clearpage \subsection{The {\tt NSSF:} module} The {\tt NSSF:} module is used to compute the solution to an eigenvalue problem corresponding to a nodal discretization with the Nodal Expansion Method or the Analytic Nodal Method. The actual implementation is limited to \begin{itemize} \item NEM and ANM discretizations in 1D Cartesian geometries; \item ANM discretization in 1D, 2D and 3D Cartesian geometries. \end{itemize} \vskip 0.08cm The nodal expansion method (NEM) is based on an expansion of the {\sl transverse integrated flux} in terms of polynomials defined over the $(-0.5,0.5)$ interval\cite{nestle}: \begin{eqnarray} \nonumber P_0(u)\negthinspace &=&\negthinspace 1\\ \nonumber P_1(u)\negthinspace &=&\negthinspace u\\ \nonumber P_2(u)\negthinspace &=&\negthinspace 3u^2-{1\over 4}\\ \nonumber P_3(u)\negthinspace &=&\negthinspace \left( u^2-{1\over 4}\right)u\\ P_4(u)\negthinspace &=&\negthinspace \left( u^2-{1\over 4}\right)\left( u^2-{1\over 20}\right) \label{eq:nem1} \end{eqnarray} There is the option of using hyperbolic functions in some energy groups: \begin{eqnarray} \nonumber P_3(u)\negthinspace &=&\negthinspace \sinh(\zeta_g u)\\ P_4(u)\negthinspace &=&\negthinspace \cosh(\zeta_g u)-{2\over \zeta}\, \sinh(\zeta_g/2) \label{eq:nem2} \end{eqnarray} \noindent where \begin{equation} \zeta_g=\Delta x\sqrt{\Sigma_{{\rm r},g} \over D_g} \end{equation} \noindent where $\Delta x$, $\Sigma_{{\rm r},g}$ and $D_g$ are the node width (cm), the macroscopic removal cross section (cm$^{-1}$) and the diffusion coefficient (cm) in group $g$, respectively. \vskip 0.1cm % \vspace{2pt} \begin{figure}[!h] \centering \includegraphics[scale=0.75]{./nodal_update.eps} \parbox{11cm}{\caption{The nodal update procedure.}\label{fig:nodal_update}} \vspace{2pt} \end{figure} % The analytic nodal method (ANM) is based on the {\sl Annals of Nuclear Energy} paper of Ref.~\citen{anm08}. The convergence of the ANM relies on {\sl nodal correction iterations} consisting of repetitive solutions of the {\sl coarse mesh finite difference} (CMFD) method, as depicted in Fig.~\ref{fig:nodal_update}. The CMFD method is similar to the {\sl mesh centered finite difference} (MCFD) method with the introduction of {\sl drift factors} $\tilde D_{i,g}^{\pm(n)}$ at each nodal correction iteration. Solution of the CMFD equations relies on {\sl alternating direction implicit} (ADI) preconditionning with $LU$ factorization. \goodbreak The calling specifications are: \begin{DataStructure}{Structure \dstr{NSSF:}} \dusa{FLUX} \moc{:=} \moc{NSSF:} $[$ \dusa{FLUX} $]$ \dusa{TRACK} \dusa{MACRO} \moc{::} \dstr{NSSF\_data} \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\dusa{FLUX}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_FLUX}) containing the solution. If \dusa{FLUX} appears on the RHS, the solution previously stored in \dusa{FLUX} is used to initialize the new iterative process; otherwise, a uniform unknown vector is used. \item[\dusa{TRACK}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_TRACK}) containing the {\sc tracking}. \item[\dusa{MACRO}] {\tt character*12} name of the {\sc lcm} object (type {\tt L\_MACROLIB}) containing the cross sections, diffusion coefficients and discontinuity factors. \item[\dstr{NSSF\_data}] structure containing the data to module {\tt NSSF:} (see Sect.~\ref{sect:nssf_data}). \end{ListeDeDescription} \vskip 0.2cm \subsubsection{Data input for module {\tt NSSF:}}\label{sect:nssf_data} \begin{DataStructure}{Structure \dstr{NSSF\_data}} $[$ \moc{EDIT} \dusa{iprint} $]$ \\ $[~\{$ \moc{VAR1} $|$ \moc{ACCE} $\}$ \dusa{icl1} \dusa{icl2} $]$ \\ $[$ \moc{ADI} \dusa{nadi} $]$ \\ $[$ \moc{NUPD} $[$ \dusa{max\_no\_nodal\_iter} $[$ \dusa{no\_transverse\_iter} $]~]~[$ \dusa{nodal\_tol} $]~]$ \\ $[$ \moc{EXTE} $[$ \dusa{max\_no\_outer\_iter} $]~[$ \dusa{outer\_tol} $]~]$ \\ $[$ \moc{THER} $[$ \dusa{max\_no\_group\_iter} $]~[$ \dusa{group\_tol} $]~]$ \\ $[$ \moc{NODF} $]$ \\ $[$ \moc{LEAK} $\{$ \moc{flat} $|$ \moc{quadratic} $\}~]$ \\ $[$ \moc{BUCK} \dusa{valb2} $]$ \\ ; \end{DataStructure} \noindent where \begin{ListeDeDescription}{mmmmmm} \item[\moc{EDIT}] keyword used to set \dusa{iprint}. \item[\dusa{iprint}] index used to control the printing in module {\tt NSSF:}. =0 for no print; =1 for minimum printing (default value). \item[\moc{VAR1}] keyword used to set the parameters \dusa{icl1} and \dusa{icl2}. These parameter are used with the symmetrical variational acceleration technique (SVAT) for convergence of the generalized CMFD eigenvalue problem (default option) and to accelerate up-scattering iterations. \item[\moc{ACCE}] alias keyword for \moc{VAR1}. \item[\dusa{icl1}] number of free outer iterations in a cycle of the variational acceleration technique. The default value is \dusa{icl1} $=3$. \item[\dusa{icl2}] number of accelerated outer iterations in a cycle of the variational acceleration technique. The default value is \dusa{icl2} $=3$. A convergence in free iterations is obtained by setting \dusa{icl1} $=200$ (or \dusa{icl1} $=$ \dusa{max\_no\_outer\_iter}) and \dusa{icl2} $=0$. \item[\moc{ADI}] keyword to set the number of ADI iterations at the inner CMFD iterative level. \item[\dusa{nadi}] number of ADI iterations (default: \dusa{nadi} $=2$). \item[\moc{NUPD}] keyword to specify the maximum number of nodal update iterations. \item[\dusa{max\_no\_nodal\_iter}] maximum number of nodal update iterations iterations. The fixed default value is \dusa{max\_no\_outer\_iter} $=300$. \item[\dusa{no\_transverse\_iter}] number of tranverse current iterations in each nodal update iteration. We recommend to use the minimum value required for convergence of nodal update iterations. The fixed default value is \dusa{no\_transverse\_iter} $=3$. \item[\dusa{nodal\_tol}] convergence criterion for the nodal update iterations. The fixed default value is \dusa{nodal\_tol} $=1.0\times 10^{-6}$. \item[\moc{EXTE}] keyword to specify that the control parameters for the $K_{\rm eff}$ CMFD iteration are to be modified. \item[\dusa{max\_no\_outer\_iter}] maximum number of $K_{\rm eff}$ iterations. The fixed default value is \dusa{max\_no\_outer\_iter} $=100$. \item[\dusa{outer\_tol}] convergence criterion for the $K_{\rm eff}$ iterations. The fixed default value is \dusa{outer\_tol} $=1.0\times 10^{-5}$. \item[\moc{THER}] keyword to specify that the control parameters for the thermal upscattering iteration are to be modified. \item[\dusa{max\_no\_group\_iter}] maximum number of thermal upscattering iterations. The fixed default value is \dusa{max\_no\_group\_iter} $=0$. \item[\dusa{group\_tol}] convergence criterion for the thermal upscattering iterations. The fixed default value is \dusa{group\_tol} $=1.0\times 10^{-6}$. \item[\moc{NODF}] keyword used to force discontinuity factors to one. \item[\moc{LEAK}] keyword to specify the type of transverse leakage approximation. \item[\moc{flat}] flat leakage approximation. \item[\moc{quadratic}] quadratic leakage approximation in the internal nodes and linear leakage approximation in the boundary nodes. \item[\moc{BUCK}] keyword used to specify the fixed buckling. By default, \dusa{valb2} $=0$ cm$^{-2}$ \item[\dusa{valb2}] value of the fixed total buckling in cm$^{-2}$. \end{ListeDeDescription} \clearpage