\doxysection{gko::\+factorization::\+Par\+Ilut\texorpdfstring{$<$}{<} Value\+Type, Index\+Type \texorpdfstring{$>$}{>} Class Template Reference}
\hypertarget{classgko_1_1factorization_1_1ParIlut}{}\label{classgko_1_1factorization_1_1ParIlut}\index{gko::factorization::ParIlut$<$ ValueType, IndexType $>$@{gko::factorization::ParIlut$<$ ValueType, IndexType $>$}}


Par\+ILUT is an incomplete threshold-\/based LU factorization which is computed in parallel.  




{\ttfamily \+\#include $<$ginkgo/\+core/\+factorization/\+par\+\_\+ilut.\+hpp$>$}



Inheritance diagram for gko::\+factorization::\+Par\+Ilut\texorpdfstring{$<$}{<} Value\+Type, Index\+Type \texorpdfstring{$>$}{>}:\+
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{classgko_1_1factorization_1_1ParIlut__inherit__graph}
\end{center}
\end{figure}


Collaboration diagram for gko::\+factorization::\+Par\+Ilut\texorpdfstring{$<$}{<} Value\+Type, Index\+Type \texorpdfstring{$>$}{>}:\+
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{classgko_1_1factorization_1_1ParIlut__coll__graph}
\end{center}
\end{figure}
\doxysubsubsection*{Classes}
\begin{DoxyCompactItemize}
\item 
struct \doxymbox{\hyperlink{structgko_1_1factorization_1_1ParIlut_1_1parameters__type}{parameters\+\_\+type}}
\item 
class \doxymbox{\hyperlink{classgko_1_1factorization_1_1ParIlut_1_1Factory}{Factory}}
\end{DoxyCompactItemize}
\doxysubsubsection*{Public Types}
\begin{DoxyCompactItemize}
\item 
\Hypertarget{classgko_1_1factorization_1_1ParIlut_aa6087b2188cf49981cd3a649fc6207ec}\label{classgko_1_1factorization_1_1ParIlut_aa6087b2188cf49981cd3a649fc6207ec} 
using {\bfseries value\+\_\+type} = Value\+Type
\item 
\Hypertarget{classgko_1_1factorization_1_1ParIlut_ad1bc0c38ed5dded2d0225447f111d689}\label{classgko_1_1factorization_1_1ParIlut_ad1bc0c38ed5dded2d0225447f111d689} 
using {\bfseries index\+\_\+type} = Index\+Type
\item 
\Hypertarget{classgko_1_1factorization_1_1ParIlut_a6985155ad2a6bd102a03d23418737086}\label{classgko_1_1factorization_1_1ParIlut_a6985155ad2a6bd102a03d23418737086} 
using {\bfseries matrix\+\_\+type} = \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{matrix::\+\+Csr}}$<$Value\+Type, Index\+Type$>$
\item 
\Hypertarget{classgko_1_1factorization_1_1ParIlut_a17c1e7387296b0a052a55bbca42da2bf}\label{classgko_1_1factorization_1_1ParIlut_a17c1e7387296b0a052a55bbca42da2bf} 
using {\bfseries l\+\_\+matrix\+\_\+type} = matrix\+\_\+type
\item 
\Hypertarget{classgko_1_1factorization_1_1ParIlut_a697cbf354bbc09fdb568cfdf8d82458a}\label{classgko_1_1factorization_1_1ParIlut_a697cbf354bbc09fdb568cfdf8d82458a} 
using {\bfseries u\+\_\+matrix\+\_\+type} = matrix\+\_\+type
\end{DoxyCompactItemize}
\doxysubsection*{Public Types inherited from \doxymbox{\hyperlink{classgko_1_1Composition}{gko::\+\+Composition$<$ default\+\_\+precision $>$}}}
\begin{DoxyCompactItemize}
\item 
using {\bfseries value\+\_\+type}
\item 
using {\bfseries transposed\+\_\+type}
\end{DoxyCompactItemize}
\doxysubsection*{Public Types inherited from \doxymbox{\hyperlink{classgko_1_1EnablePolymorphicAssignment}{gko::\+\+Enable\+Polymorphic\+Assignment$<$ Composition$<$ default\+\_\+precision $>$ $>$}}}
\begin{DoxyCompactItemize}
\item 
using {\bfseries result\+\_\+type}
\end{DoxyCompactItemize}
\doxysubsubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\Hypertarget{classgko_1_1factorization_1_1ParIlut_ad954d0e71964a10ea58715d1936ae6bb}\label{classgko_1_1factorization_1_1ParIlut_ad954d0e71964a10ea58715d1936ae6bb} 
std::\+shared\+\_\+ptr$<$ const matrix\+\_\+type $>$ {\bfseries get\+\_\+l\+\_\+factor} () const
\item 
\Hypertarget{classgko_1_1factorization_1_1ParIlut_a2a965ba6a25e1814ab3cc7994e868633}\label{classgko_1_1factorization_1_1ParIlut_a2a965ba6a25e1814ab3cc7994e868633} 
std::\+shared\+\_\+ptr$<$ const matrix\+\_\+type $>$ {\bfseries get\+\_\+u\+\_\+factor} () const
\item 
\Hypertarget{classgko_1_1factorization_1_1ParIlut_a4077183ada037cac77745be3192336fa}\label{classgko_1_1factorization_1_1ParIlut_a4077183ada037cac77745be3192336fa} 
const \doxymbox{\hyperlink{structgko_1_1factorization_1_1ParIlut_1_1parameters__type}{parameters\+\_\+type}} \& {\bfseries get\+\_\+parameters} () const
\end{DoxyCompactItemize}
\doxysubsection*{Public Member Functions inherited from \doxymbox{\hyperlink{classgko_1_1Composition}{gko::\+\+Composition$<$ default\+\_\+precision $>$}}}
\begin{DoxyCompactItemize}
\item 
const std::\+vector$<$ std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} $>$ $>$ \& \doxymbox{\hyperlink{classgko_1_1Composition_aec22562876d3f5346ae78c96a436d525}{get\+\_\+operators}} () const noexcept
\begin{DoxyCompactList}\small\item\em Returns a list of operators of the composition. \end{DoxyCompactList}\item 
std::\+unique\+\_\+ptr$<$ \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} $>$ \doxymbox{\hyperlink{classgko_1_1Composition_a773045a3e20b724cdc0390c5c154f35c}{transpose}} () const override
\begin{DoxyCompactList}\small\item\em Returns a \doxylink{classgko_1_1LinOp}{Lin\+Op} representing the transpose of the \doxylink{classgko_1_1Transposable}{Transposable} object. \end{DoxyCompactList}\item 
std::\+unique\+\_\+ptr$<$ \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} $>$ \doxymbox{\hyperlink{classgko_1_1Composition_ae9d4e8a318c21b265cdcd7ed33175e52}{conj\+\_\+transpose}} () const override
\begin{DoxyCompactList}\small\item\em Returns a \doxylink{classgko_1_1LinOp}{Lin\+Op} representing the conjugate transpose of the \doxylink{classgko_1_1Transposable}{Transposable} object. \end{DoxyCompactList}\item 
\doxymbox{\hyperlink{classgko_1_1Composition_aad32bb5f4c1e90100eafa20be5c6f297}{Composition}} \& \doxymbox{\hyperlink{classgko_1_1Composition_a23a085f270d9df7842c33ede65f3a693}{operator=}} (const \doxymbox{\hyperlink{classgko_1_1Composition_aad32bb5f4c1e90100eafa20be5c6f297}{Composition}} \&)
\begin{DoxyCompactList}\small\item\em Copy-\/assigns a \doxylink{classgko_1_1Composition}{Composition}. \end{DoxyCompactList}\item 
\doxymbox{\hyperlink{classgko_1_1Composition_aad32bb5f4c1e90100eafa20be5c6f297}{Composition}} (const Composition \&)
\begin{DoxyCompactList}\small\item\em Copy-\/constructs a \doxylink{classgko_1_1Composition}{Composition}. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Public Member Functions inherited from \doxymbox{\hyperlink{classgko_1_1EnableLinOp}{gko::\+\+Enable\+Lin\+Op$<$ Composition$<$ default\+\_\+precision $>$ $>$}}}
\begin{DoxyCompactItemize}
\item 
const \doxymbox{\hyperlink{classgko_1_1Composition}{Composition}}$<$ \doxymbox{\hyperlink{namespacegko_a89637c833af7ae805802226d97cebebf}{default\+\_\+precision}} $>$ \texorpdfstring{$\ast$}{*} {\bfseries apply} (\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\+\_\+param}}$<$ const \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} $>$ b, \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\+\_\+param}}$<$ \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} $>$ x) const
\end{DoxyCompactItemize}
\doxysubsection*{Public Member Functions inherited from \doxymbox{\hyperlink{classgko_1_1EnablePolymorphicAssignment}{gko::\+\+Enable\+Polymorphic\+Assignment$<$ Composition$<$ default\+\_\+precision $>$ $>$}}}
\begin{DoxyCompactItemize}
\item 
void {\bfseries convert\+\_\+to} (result\+\_\+type \texorpdfstring{$\ast$}{*}result) const override
\item 
void {\bfseries move\+\_\+to} (result\+\_\+type \texorpdfstring{$\ast$}{*}result) override
\end{DoxyCompactItemize}
\doxysubsubsection*{Static Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\Hypertarget{classgko_1_1factorization_1_1ParIlut_aeb334934aae121de0997653e2a295bf9}\label{classgko_1_1factorization_1_1ParIlut_aeb334934aae121de0997653e2a295bf9} 
{\footnotesize template$<$typename... Args$>$ }\\static std::\+unique\+\_\+ptr$<$ \doxymbox{\hyperlink{classgko_1_1Composition_aad32bb5f4c1e90100eafa20be5c6f297}{Composition}}$<$ Value\+Type $>$ $>$ {\bfseries create} (Args \&\&... args)=delete
\item 
\Hypertarget{classgko_1_1factorization_1_1ParIlut_a4dd95aa924ed0c514c02a5e3322be654}\label{classgko_1_1factorization_1_1ParIlut_a4dd95aa924ed0c514c02a5e3322be654} 
static auto {\bfseries build} () -\/$>$ decltype(\doxymbox{\hyperlink{classgko_1_1EnableDefaultFactory_a1d077101d9e788e6c65f088612d14cc3}{Factory::\+create}}())
\item 
static \doxymbox{\hyperlink{structgko_1_1factorization_1_1ParIlut_1_1parameters__type}{parameters\+\_\+type}} \doxymbox{\hyperlink{classgko_1_1factorization_1_1ParIlut_a5aa65ab52efadb33fcfd311a72c870ea}{parse}} (const \doxymbox{\hyperlink{classgko_1_1config_1_1pnode}{config::\+pnode}} \&config, const \doxymbox{\hyperlink{classgko_1_1config_1_1registry}{config::\+registry}} \&context, const \doxymbox{\hyperlink{classgko_1_1config_1_1type__descriptor}{config::\+type\+\_\+descriptor}} \&td\+\_\+for\+\_\+child=config::\+make\+\_\+type\+\_\+descriptor$<$ Value\+Type, Index\+Type $>$())
\begin{DoxyCompactList}\small\item\em Create the parameters from the property\+\_\+tree. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Static Public Member Functions inherited from \doxymbox{\hyperlink{classgko_1_1EnableCreateMethod}{gko::\+\+Enable\+Create\+Method$<$ Composition$<$ default\+\_\+precision $>$ $>$}}}
\begin{DoxyCompactItemize}
\item 
static std::\+unique\+\_\+ptr$<$ \doxymbox{\hyperlink{classgko_1_1Composition}{Composition}}$<$ \doxymbox{\hyperlink{namespacegko_a89637c833af7ae805802226d97cebebf}{default\+\_\+precision}} $>$ $>$ {\bfseries create} (Args \&\&... args)
\end{DoxyCompactItemize}


\doxysubsection{Detailed Description}
\subsubsection*{template$<$typename Value\+Type = default\+\_\+precision, typename Index\+Type = int32$>$\newline
class gko::\+factorization::\+\+Par\+Ilut$<$ Value\+Type, Index\+Type $>$}
Par\+ILUT is an incomplete threshold-\/based LU factorization which is computed in parallel. 

$L$ is a lower unitriangular, while $U$ is an upper triangular matrix, which approximate a given matrix $A$ with $A \approx LU$. Here, $L$ and $U$ have a sparsity pattern that is improved iteratively based on their element-\/wise magnitude. The initial sparsity pattern is chosen based on the $ILU(0)$ factorization of $A$.

One iteration of the Par\+ILUT algorithm consists of the following steps:\+


\begin{DoxyEnumerate}
\item Calculating the residual $R = A - LU$
\item Adding new non-\/zero locations from $R$ to $L$ and $U$. The new non-\/zero locations are initialized based on the corresponding residual value.
\item Executing a fixed-\/point iteration on $L$ and $U$ according to        $F(L, U) =
\begin{cases}
    \frac{1}{u_{jj}}
        \left(a_{ij}-\sum_{k=1}^{j-1}l_{ik}u_{kj}\right), \quad & i>j \\
    a_{ij}-\sum_{k=1}^{i-1}l_{ik}u_{kj}, \quad & i\leq j
\end{cases}
$ For a more detailed description of the fixed-\/point iteration, see \doxylink{classgko_1_1factorization_1_1ParIlu}{Par\+Ilu}.
\item Removing the smallest entries (by magnitude) from $L$ and $U$
\item Executing a fixed-\/point iteration on the (now sparser) $L$ and $U$
\end{DoxyEnumerate}

This Par\+ILUT algorithm thus improves the sparsity pattern and the approximation of $L$ and $U$ simultaneously.

The implementation follows the design of H. Anzt et al., Par\+ILUT -\/ A Parallel Threshold ILU for GPUs, 2019 IEEE International Parallel and Distributed Processing Symposium (IPDPS), pp. 231–241.


\begin{DoxyTemplParams}{Template Parameters}
{\em Value\+Type} & Type of the values of all matrices used in this class \\
\hline
{\em Index\+Type} & Type of the indices of all matrices used in this class \\
\hline
\end{DoxyTemplParams}


\label{doc-func-members}
\Hypertarget{classgko_1_1factorization_1_1ParIlut_doc-func-members}
\doxysubsection{Member Function Documentation}
\Hypertarget{classgko_1_1factorization_1_1ParIlut_a5aa65ab52efadb33fcfd311a72c870ea}\index{gko::factorization::ParIlut$<$ ValueType, IndexType $>$@{gko::factorization::ParIlut$<$ ValueType, IndexType $>$}!parse@{parse}}
\index{parse@{parse}!gko::factorization::ParIlut$<$ ValueType, IndexType $>$@{gko::factorization::ParIlut$<$ ValueType, IndexType $>$}}
\doxysubsubsection{\texorpdfstring{parse()}{parse()}}
{\footnotesize\ttfamily \label{classgko_1_1factorization_1_1ParIlut_a5aa65ab52efadb33fcfd311a72c870ea} 
template$<$typename Value\+Type = default\+\_\+precision, typename Index\+Type = int32$>$ \\
\doxymbox{\hyperlink{structgko_1_1factorization_1_1ParIlut_1_1parameters__type}{parameters\+\_\+type}} \doxymbox{\hyperlink{classgko_1_1factorization_1_1ParIlut}{gko::\+factorization::\+\+Par\+Ilut}}$<$ Value\+Type, Index\+Type $>$::\+parse (\begin{DoxyParamCaption}\item[{const \doxymbox{\hyperlink{classgko_1_1config_1_1pnode}{config::\+pnode}} \&}]{config}{, }\item[{const \doxymbox{\hyperlink{classgko_1_1config_1_1registry}{config::\+registry}} \&}]{context}{, }\item[{const \doxymbox{\hyperlink{classgko_1_1config_1_1type__descriptor}{config::\+type\+\_\+descriptor}} \&}]{td\+\_\+for\+\_\+child}{ = {\ttfamily config:\+:\+make\+\_\+type\+\_\+descriptor$<$~ValueType,~IndexType~$>$()}}\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}



Create the parameters from the property\+\_\+tree. 

Because this is directly tied to the specific type, the value/\+index type settings within config are ignored and type\+\_\+descriptor is only used for children configs.


\begin{DoxyParams}{Parameters}
{\em config} & the property tree for setting \\
\hline
{\em context} & the registry \\
\hline
{\em td\+\_\+for\+\_\+child} & the type descriptor for children configs. The default uses the value/\+index type of this class.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
parameters 
\end{DoxyReturn}


References \doxymbox{\hyperlink{classgko_1_1Composition_aad32bb5f4c1e90100eafa20be5c6f297}{gko::\+\+Composition$<$ default\+\_\+precision $>$::\+\+Composition()}}.



The documentation for this class was generated from the following file:\+\begin{DoxyCompactItemize}
\item 
ginkgo/\+core/\+factorization/\+par\+\_\+ilut.\+hpp\end{DoxyCompactItemize}
