\doxysection{gko::\+solver::\+Multigrid::\+parameters\+\_\+type Struct Reference}
\hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type}{}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}


Inheritance diagram for gko::\+solver::\+Multigrid::\+parameters\+\_\+type:\+
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{structgko_1_1solver_1_1Multigrid_1_1parameters__type__inherit__graph}
\end{center}
\end{figure}


Collaboration diagram for gko::\+solver::\+Multigrid::\+parameters\+\_\+type:\+
\nopagebreak
\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[width=350pt]{structgko_1_1solver_1_1Multigrid_1_1parameters__type__coll__graph}
\end{center}
\end{figure}
\doxysubsubsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a1a19a2b6d6e85292736c14eafaf6513b}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a1a19a2b6d6e85292736c14eafaf6513b} 
{\footnotesize template$<$typename... Args, typename = std::\+enable\+\_\+if\+\_\+t$<$::\+std::\+conjunction$<$   std::\+is\+\_\+convertible$<$\+Args, ::\+gko::\+deferred\+\_\+factory\+\_\+parameter$<$   mg\+\_\+level\+\_\+type$>$$>$...$>$::\+value$>$$>$ }\\auto {\bfseries with\+\_\+mg\+\_\+level} (Args \&\&... factories) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a1647c3722f743ccf0f6f2b87ed3d3ccf}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a1647c3722f743ccf0f6f2b87ed3d3ccf} 
{\footnotesize template$<$typename Factory\+Type, typename = std::\+enable\+\_\+if\+\_\+t$<$std::\+is\+\_\+convertible$<$   Factory\+Type,   ::\+gko::\+deferred\+\_\+factory\+\_\+parameter$<$mg\+\_\+level\+\_\+type$>$$>$::\+value$>$$>$ }\\auto {\bfseries with\+\_\+mg\+\_\+level} (const std::\+vector$<$ Factory\+Type $>$ \&factories) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a73a5f38967c1892cd874c19df4b4f23b}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a73a5f38967c1892cd874c19df4b4f23b} 
{\footnotesize template$<$typename... Args$>$ }\\auto {\bfseries with\+\_\+level\+\_\+selector} (Args \&\&... \+\_\+value) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ad7f1f1cbad422d7e4ccde61a7a5627b1}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ad7f1f1cbad422d7e4ccde61a7a5627b1} 
{\footnotesize template$<$typename... Args, typename = std::\+enable\+\_\+if\+\_\+t$<$::\+std::\+conjunction$<$   std::\+is\+\_\+convertible$<$\+Args, ::\+gko::\+deferred\+\_\+factory\+\_\+parameter$<$   pre\+\_\+smoother\+\_\+type$>$$>$...$>$::\+value$>$$>$ }\\auto {\bfseries with\+\_\+pre\+\_\+smoother} (Args \&\&... factories) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a2092a9e71e836da9c5007e5899485ead}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a2092a9e71e836da9c5007e5899485ead} 
{\footnotesize template$<$typename Factory\+Type, typename = std::\+enable\+\_\+if\+\_\+t$<$std::\+is\+\_\+convertible$<$   Factory\+Type,   ::\+gko::\+deferred\+\_\+factory\+\_\+parameter$<$pre\+\_\+smoother\+\_\+type$>$$>$::\+value$>$$>$ }\\auto {\bfseries with\+\_\+pre\+\_\+smoother} (const std::\+vector$<$ Factory\+Type $>$ \&factories) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_af24450a49b0e906de74bd56bbf0736dd}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_af24450a49b0e906de74bd56bbf0736dd} 
{\footnotesize template$<$typename... Args, typename = std::\+enable\+\_\+if\+\_\+t$<$::\+std::\+conjunction$<$   std::\+is\+\_\+convertible$<$\+Args, ::\+gko::\+deferred\+\_\+factory\+\_\+parameter$<$   post\+\_\+smoother\+\_\+type$>$$>$...$>$::\+value$>$$>$ }\\auto {\bfseries with\+\_\+post\+\_\+smoother} (Args \&\&... factories) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a7bba6a4f237287f362234a426fac468a}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a7bba6a4f237287f362234a426fac468a} 
{\footnotesize template$<$typename Factory\+Type, typename = std::\+enable\+\_\+if\+\_\+t$<$std::\+is\+\_\+convertible$<$   Factory\+Type,   ::\+gko::\+deferred\+\_\+factory\+\_\+parameter$<$post\+\_\+smoother\+\_\+type$>$$>$::\+value$>$$>$ }\\auto {\bfseries with\+\_\+post\+\_\+smoother} (const std::\+vector$<$ Factory\+Type $>$ \&factories) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ace792dcd011f6f9e5b24292164deb202}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ace792dcd011f6f9e5b24292164deb202} 
{\footnotesize template$<$typename... Args, typename = std::\+enable\+\_\+if\+\_\+t$<$::\+std::\+conjunction$<$   std::\+is\+\_\+convertible$<$\+Args, ::\+gko::\+deferred\+\_\+factory\+\_\+parameter$<$   mid\+\_\+smoother\+\_\+type$>$$>$...$>$::\+value$>$$>$ }\\auto {\bfseries with\+\_\+mid\+\_\+smoother} (Args \&\&... factories) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a58dc05d37b0aeee543c3f0277afd66cc}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a58dc05d37b0aeee543c3f0277afd66cc} 
{\footnotesize template$<$typename Factory\+Type, typename = std::\+enable\+\_\+if\+\_\+t$<$std::\+is\+\_\+convertible$<$   Factory\+Type,   ::\+gko::\+deferred\+\_\+factory\+\_\+parameter$<$mid\+\_\+smoother\+\_\+type$>$$>$::\+value$>$$>$ }\\auto {\bfseries with\+\_\+mid\+\_\+smoother} (const std::\+vector$<$ Factory\+Type $>$ \&factories) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a910c1ac5aa515dcd9dfc3f6a69f413d0}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a910c1ac5aa515dcd9dfc3f6a69f413d0} 
{\footnotesize template$<$typename... Args$>$ }\\auto {\bfseries with\+\_\+post\+\_\+uses\+\_\+pre} (Args \&\&... \+\_\+value) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ad2c165648d9159a60249eae78db56b8c}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ad2c165648d9159a60249eae78db56b8c} 
{\footnotesize template$<$typename... Args$>$ }\\auto {\bfseries with\+\_\+mid\+\_\+case} (Args \&\&... \+\_\+value) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ad1673e35dd3a2a4faf3ba45a23b831b5}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ad1673e35dd3a2a4faf3ba45a23b831b5} 
{\footnotesize template$<$typename... Args$>$ }\\auto {\bfseries with\+\_\+max\+\_\+levels} (Args \&\&... \+\_\+value) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_af38549cde65a827a05574d7eb53657f3}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_af38549cde65a827a05574d7eb53657f3} 
{\footnotesize template$<$typename... Args$>$ }\\auto {\bfseries with\+\_\+min\+\_\+coarse\+\_\+rows} (Args \&\&... \+\_\+value) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a4a49f95122750780d12b8607827ee857}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a4a49f95122750780d12b8607827ee857} 
{\footnotesize template$<$typename... Args, typename = std::\+enable\+\_\+if\+\_\+t$<$::\+std::\+conjunction$<$   std::\+is\+\_\+convertible$<$\+Args, ::\+gko::\+deferred\+\_\+factory\+\_\+parameter$<$   coarsest\+\_\+solver\+\_\+type$>$$>$...$>$::\+value$>$$>$ }\\auto {\bfseries with\+\_\+coarsest\+\_\+solver} (Args \&\&... factories) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ab39bd1f8a81151ed4300251277c3cd1d}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ab39bd1f8a81151ed4300251277c3cd1d} 
{\footnotesize template$<$typename Factory\+Type, typename = std::\+enable\+\_\+if\+\_\+t$<$std::\+is\+\_\+convertible$<$   Factory\+Type,   ::\+gko::\+deferred\+\_\+factory\+\_\+parameter$<$coarsest\+\_\+solver\+\_\+type$>$$>$::\+value$>$$>$ }\\auto {\bfseries with\+\_\+coarsest\+\_\+solver} (const std::\+vector$<$ Factory\+Type $>$ \&factories) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a74c97f9064848ff1d4b60116a65bd780}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a74c97f9064848ff1d4b60116a65bd780} 
{\footnotesize template$<$typename... Args$>$ }\\auto {\bfseries with\+\_\+solver\+\_\+selector} (Args \&\&... \+\_\+value) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a95e232c37d2bb1f182c42ee40a5ada17}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a95e232c37d2bb1f182c42ee40a5ada17} 
{\footnotesize template$<$typename... Args$>$ }\\auto {\bfseries with\+\_\+cycle} (Args \&\&... \+\_\+value) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a94a4f4500c932ebd79d19be349a93402}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a94a4f4500c932ebd79d19be349a93402} 
{\footnotesize template$<$typename... Args$>$ }\\auto {\bfseries with\+\_\+kcycle\+\_\+base} (Args \&\&... \+\_\+value) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a2b9edcfc0198aa81d38941a767793683}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a2b9edcfc0198aa81d38941a767793683} 
{\footnotesize template$<$typename... Args$>$ }\\auto {\bfseries with\+\_\+kcycle\+\_\+rel\+\_\+tol} (Args \&\&... \+\_\+value) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a5fa3c6c7e548f96d0ce9bf82674eb8bd}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a5fa3c6c7e548f96d0ce9bf82674eb8bd} 
{\footnotesize template$<$typename... Args$>$ }\\auto {\bfseries with\+\_\+smoother\+\_\+relax} (Args \&\&... \+\_\+value) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ace31a03f3b5c7ed43ce8fa5a909b4353}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ace31a03f3b5c7ed43ce8fa5a909b4353} 
{\footnotesize template$<$typename... Args$>$ }\\auto {\bfseries with\+\_\+smoother\+\_\+iters} (Args \&\&... \+\_\+value) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a8576775163a89b8a5bafbf18a8a24928}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a8576775163a89b8a5bafbf18a8a24928} 
{\footnotesize template$<$typename... Args$>$ }\\auto {\bfseries with\+\_\+default\+\_\+initial\+\_\+guess} (Args \&\&... \+\_\+value) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\end{DoxyCompactItemize}
\doxysubsection*{Public Member Functions inherited from \doxymbox{\hyperlink{structgko_1_1solver_1_1enable__iterative__solver__factory__parameters}{gko::\+solver::\+enable\+\_\+iterative\+\_\+solver\+\_\+factory\+\_\+parameters$<$ parameters\+\_\+type, Factory $>$}}}
\begin{DoxyCompactItemize}
\item 
auto {\bfseries with\+\_\+criteria} (Args \&\&... factories) -\/$>$ std::\+decay\+\_\+t$<$ decltype(\texorpdfstring{$\ast$}{*}(this-\/$>$self()))$>$ \&
\end{DoxyCompactItemize}
\doxysubsection*{Public Member Functions inherited from \doxymbox{\hyperlink{classgko_1_1enable__parameters__type}{gko::\+enable\+\_\+parameters\+\_\+type$<$ parameters\+\_\+type, Factory $>$}}}
\begin{DoxyCompactItemize}
\item 
parameters\+\_\+type \& {\bfseries with\+\_\+loggers} (Args \&\&... \+\_\+value)
\begin{DoxyCompactList}\small\item\em Provides the loggers to be added to the factory and its generated objects in a fluent interface. \end{DoxyCompactList}\item 
std::\+unique\+\_\+ptr$<$ Factory $>$ \doxymbox{\hyperlink{classgko_1_1enable__parameters__type_a65a5adc4eb7078475d26e7991efae64d}{on}} (std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1Executor}{Executor}} $>$ exec) const
\begin{DoxyCompactList}\small\item\em Creates a new factory on the specified executor. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Public Attributes}
\begin{DoxyCompactItemize}
\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_af8671d3890209b0063dae79c31ce489d}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_af8671d3890209b0063dae79c31ce489d} 
std::\+vector$<$ std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1LinOpFactory}{Lin\+Op\+Factory}} $>$ $>$ {\bfseries mg\+\_\+level} \{\}
\begin{DoxyCompactList}\small\item\em Multigrid\+Level \doxylink{classgko_1_1solver_1_1Multigrid_1_1Factory}{Factory} list. \end{DoxyCompactList}\item 
std::\+function$<$ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}(const \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}, const \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} \texorpdfstring{$\ast$}{*})$>$ \doxymbox{\hyperlink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a99106889c07fe8076e65a73739d39a98}{level\+\_\+selector}} \{nullptr\}
\begin{DoxyCompactList}\small\item\em Custom selector \doxylink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type} (\doxylink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type} level, const Lin\+Op\texorpdfstring{$\ast$}{*} fine\+\_\+matrix) Selector function returns the element index in the vector for any given level index and the matrix of the fine level. \end{DoxyCompactList}\item 
std::\+vector$<$ std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1LinOpFactory}{Lin\+Op\+Factory}} $>$ $>$ \doxymbox{\hyperlink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a80863b6dcda27058ce478cac54e18873}{pre\+\_\+smoother}} \{\}
\begin{DoxyCompactList}\small\item\em Pre-\/smooth \doxylink{classgko_1_1solver_1_1Multigrid_1_1Factory}{Factory} list. \end{DoxyCompactList}\item 
std::\+vector$<$ std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1LinOpFactory}{Lin\+Op\+Factory}} $>$ $>$ \doxymbox{\hyperlink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a11e65993abbf3a397709cabd1958edbc}{post\+\_\+smoother}} \{\}
\begin{DoxyCompactList}\small\item\em Post-\/smooth \doxylink{classgko_1_1solver_1_1Multigrid_1_1Factory}{Factory} list. \end{DoxyCompactList}\item 
std::\+vector$<$ std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1LinOpFactory}{Lin\+Op\+Factory}} $>$ $>$ \doxymbox{\hyperlink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ac9cfc41847d5f9fe9b01b260a07e1d39}{mid\+\_\+smoother}} \{\}
\begin{DoxyCompactList}\small\item\em Mid-\/smooth \doxylink{classgko_1_1solver_1_1Multigrid_1_1Factory}{Factory} list. \end{DoxyCompactList}\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_abf546fafeff1ff864440bf05f6524dd0}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_abf546fafeff1ff864440bf05f6524dd0} 
bool {\bfseries post\+\_\+uses\+\_\+pre} \{true\}
\begin{DoxyCompactList}\small\item\em Whether post-\/smoothing-\/related calls use corresponding pre-\/smoothing-\/related calls. \end{DoxyCompactList}\item 
\doxymbox{\hyperlink{namespacegko_1_1solver_1_1multigrid_a24ab73573aae583623848c9bfaf0fddf}{multigrid::\+mid\+\_\+smooth\+\_\+type}} \doxymbox{\hyperlink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_abc24bca2fd9c007318d9d135f9b04ab6}{mid\+\_\+case}} \{multigrid::\+mid\+\_\+smooth\+\_\+type::\+standalone\}
\begin{DoxyCompactList}\small\item\em Choose the behavior of mid smoother between two cycles close to each other in the same level. \end{DoxyCompactList}\item 
\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} \doxymbox{\hyperlink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a2e4dd4ccd56c5becbbc60d3538b8dfe6}{max\+\_\+levels}} \{10\}
\begin{DoxyCompactList}\small\item\em The maximum number of mg\+\_\+level (without coarsest solver level) that can be used. \end{DoxyCompactList}\item 
\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} \doxymbox{\hyperlink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a6ad3e4e874e1fcc987b269e3473449c6}{min\+\_\+coarse\+\_\+rows}} \{64\}
\begin{DoxyCompactList}\small\item\em The minimal number of coarse rows. \end{DoxyCompactList}\item 
std::\+vector$<$ std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{classgko_1_1LinOpFactory}{Lin\+Op\+Factory}} $>$ $>$ \doxymbox{\hyperlink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a0ba9248107e2b06f82f38c772f3ff121}{coarsest\+\_\+solver}} \{\}
\begin{DoxyCompactList}\small\item\em Coarsest factory list. \end{DoxyCompactList}\item 
std::\+function$<$ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}(const \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}, const \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}} \texorpdfstring{$\ast$}{*})$>$ \doxymbox{\hyperlink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ac722bf3fa49f15200604b9e30f492621}{solver\+\_\+selector}} \{nullptr\}
\begin{DoxyCompactList}\small\item\em Custom coarsest\+\_\+solver selector \doxylink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type} (\doxylink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type} level, const \doxylink{classgko_1_1LinOp}{Lin\+Op} \texorpdfstring{$\ast$}{*}coarsest\+\_\+matrix) Selector function returns the correct element index in the vector for any given level index and the system matrix. \end{DoxyCompactList}\item 
\doxymbox{\hyperlink{namespacegko_1_1solver_1_1multigrid_a4f89fc8a003f879d4ff2f482c2fbab68}{multigrid::\+cycle}} \doxymbox{\hyperlink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_aa9d6ce71458ca0427a1e53d679f8ee7b}{cycle}} \{multigrid::\+cycle::\+v\}
\begin{DoxyCompactList}\small\item\em \doxylink{classgko_1_1solver_1_1Multigrid}{Multigrid} cycle type. \end{DoxyCompactList}\item 
\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} \doxymbox{\hyperlink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a870fb93b6b4af67fea91ae1c76671126}{kcycle\+\_\+base}} \{1\}
\begin{DoxyCompactList}\small\item\em kcycle\+\_\+base is a factor to choose how often enable FCG/\+\+GCR step. \end{DoxyCompactList}\item 
double \doxymbox{\hyperlink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_adf03e53e31294aeebdbcb1bd128f3221}{kcycle\+\_\+rel\+\_\+tol}} \{0.\+25\}
\begin{DoxyCompactList}\small\item\em kcycle\+\_\+rel\+\_\+tol decides whether run the second iteration of FCG/\+\+GCR step. \end{DoxyCompactList}\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a53ee23a630f6bce8940c98cc9000c561}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a53ee23a630f6bce8940c98cc9000c561} 
std::\+complex$<$ double $>$ {\bfseries smoother\+\_\+relax} \{0.\+9\}
\begin{DoxyCompactList}\small\item\em smoother\+\_\+relax is the relaxation factor of default generated smoother. \end{DoxyCompactList}\item 
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a88fd9e554c67014556e1da4d96e8c6d3}\label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a88fd9e554c67014556e1da4d96e8c6d3} 
\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} {\bfseries smoother\+\_\+iters} \{1\}
\begin{DoxyCompactList}\small\item\em smoother\+\_\+iters is the number of iteration of default generated smoother. \end{DoxyCompactList}\item 
\doxymbox{\hyperlink{namespacegko_1_1solver_a82d21321745fbd3dc65c276d5838bb8a}{initial\+\_\+guess\+\_\+mode}} \doxymbox{\hyperlink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a6f9a8a0ea54a9865cb0d2f62e0d8fc8e}{default\+\_\+initial\+\_\+guess}} \{\doxymbox{\hyperlink{namespacegko_1_1solver_a82d21321745fbd3dc65c276d5838bb8aad02c4c4cde7ae76252540d116a40f23a}{initial\+\_\+guess\+\_\+mode::\+zero}}\}
\begin{DoxyCompactList}\small\item\em Default initial guess mode. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsection*{Public Attributes inherited from \doxymbox{\hyperlink{structgko_1_1solver_1_1enable__iterative__solver__factory__parameters}{gko::\+solver::\+enable\+\_\+iterative\+\_\+solver\+\_\+factory\+\_\+parameters$<$ parameters\+\_\+type, Factory $>$}}}
\begin{DoxyCompactItemize}
\item 
std::\+vector$<$ std::\+shared\+\_\+ptr$<$ const \doxymbox{\hyperlink{namespacegko_1_1stop_a61839f234ddbaaf68db337e58e012499}{stop::\+\+Criterion\+Factory}} $>$ $>$ {\bfseries criteria}
\begin{DoxyCompactList}\small\item\em Stopping criteria to be used by the solver. \end{DoxyCompactList}\end{DoxyCompactItemize}
\doxysubsubsection*{Additional Inherited Members}
\doxysubsection*{Public Types inherited from \doxymbox{\hyperlink{classgko_1_1enable__parameters__type}{gko::\+enable\+\_\+parameters\+\_\+type$<$ parameters\+\_\+type, Factory $>$}}}
\begin{DoxyCompactItemize}
\item 
using {\bfseries factory}
\end{DoxyCompactItemize}


\label{doc-variable-members}
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_doc-variable-members}
\doxysubsection{Member Data Documentation}
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a0ba9248107e2b06f82f38c772f3ff121}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}!coarsest\_solver@{coarsest\_solver}}
\index{coarsest\_solver@{coarsest\_solver}!gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}
\doxysubsubsection{\texorpdfstring{coarsest\_solver}{coarsest\_solver}}
{\footnotesize\ttfamily \label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a0ba9248107e2b06f82f38c772f3ff121} 
std::\+vector$<$std::\+shared\+\_\+ptr$<$const \doxymbox{\hyperlink{classgko_1_1LinOpFactory}{Lin\+Op\+Factory}}$>$ $>$ gko::\+solver::\+\+Multigrid::\+parameters\+\_\+type::\+coarsest\+\_\+solver \{\}}



Coarsest factory list. 

If not set, then a direct LU solver will be used as solver on the coarsest level. \Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_aa9d6ce71458ca0427a1e53d679f8ee7b}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}!cycle@{cycle}}
\index{cycle@{cycle}!gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}
\doxysubsubsection{\texorpdfstring{cycle}{cycle}}
{\footnotesize\ttfamily \label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_aa9d6ce71458ca0427a1e53d679f8ee7b} 
\doxymbox{\hyperlink{namespacegko_1_1solver_1_1multigrid_a4f89fc8a003f879d4ff2f482c2fbab68}{multigrid::\+cycle}} gko::\+solver::\+\+Multigrid::\+parameters\+\_\+type::\+cycle \{multigrid::\+cycle::\+v\}}



\doxylink{classgko_1_1solver_1_1Multigrid}{Multigrid} cycle type. 

The default is multigrid::\+cycle::\+v.

\begin{DoxySeeAlso}{See also}
enum \doxylink{namespacegko_1_1solver_1_1multigrid_a4f89fc8a003f879d4ff2f482c2fbab68}{multigrid::\+cycle} 
\end{DoxySeeAlso}
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a6f9a8a0ea54a9865cb0d2f62e0d8fc8e}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}!default\_initial\_guess@{default\_initial\_guess}}
\index{default\_initial\_guess@{default\_initial\_guess}!gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}
\doxysubsubsection{\texorpdfstring{default\_initial\_guess}{default\_initial\_guess}}
{\footnotesize\ttfamily \label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a6f9a8a0ea54a9865cb0d2f62e0d8fc8e} 
\doxymbox{\hyperlink{namespacegko_1_1solver_a82d21321745fbd3dc65c276d5838bb8a}{initial\+\_\+guess\+\_\+mode}} gko::\+solver::\+\+Multigrid::\+parameters\+\_\+type::\+default\+\_\+initial\+\_\+guess \{\doxymbox{\hyperlink{namespacegko_1_1solver_a82d21321745fbd3dc65c276d5838bb8aad02c4c4cde7ae76252540d116a40f23a}{initial\+\_\+guess\+\_\+mode::\+zero}}\}}



Default initial guess mode. 

The available options are under \doxylink{namespacegko_1_1solver_a82d21321745fbd3dc65c276d5838bb8a}{initial\+\_\+guess\+\_\+mode}. \Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a870fb93b6b4af67fea91ae1c76671126}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}!kcycle\_base@{kcycle\_base}}
\index{kcycle\_base@{kcycle\_base}!gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}
\doxysubsubsection{\texorpdfstring{kcycle\_base}{kcycle\_base}}
{\footnotesize\ttfamily \label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a870fb93b6b4af67fea91ae1c76671126} 
\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} gko::\+solver::\+\+Multigrid::\+parameters\+\_\+type::\+kcycle\+\_\+base \{1\}}



kcycle\+\_\+base is a factor to choose how often enable FCG/\+\+GCR step. 

This parameter is ignored on v, w, f cycle. Enable the FCG/\+\+GCR step when level \% kcycle\+\_\+base == 0 and the next level is not coarsest level.

\begin{DoxyNote}{Note}
the FCG/\+\+GCR step works on the vectors of next level. 
\end{DoxyNote}
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_adf03e53e31294aeebdbcb1bd128f3221}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}!kcycle\_rel\_tol@{kcycle\_rel\_tol}}
\index{kcycle\_rel\_tol@{kcycle\_rel\_tol}!gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}
\doxysubsubsection{\texorpdfstring{kcycle\_rel\_tol}{kcycle\_rel\_tol}}
{\footnotesize\ttfamily \label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_adf03e53e31294aeebdbcb1bd128f3221} 
double gko::\+solver::\+\+Multigrid::\+parameters\+\_\+type::\+kcycle\+\_\+rel\+\_\+tol \{0.\+25\}}



kcycle\+\_\+rel\+\_\+tol decides whether run the second iteration of FCG/\+\+GCR step. 

kcycle\+\_\+rel\+\_\+tol \texorpdfstring{$<$}{<}= 0:\+ always run one iterations. kcycle\+\_\+rel\+\_\+tol == nan:\+ always run two iterations. \texorpdfstring{$\vert$}{|}\texorpdfstring{$\vert$}{|}updated\+\_\+r\texorpdfstring{$\vert$}{|}\texorpdfstring{$\vert$}{|} \texorpdfstring{$<$}{<}= kcycle\+\_\+rel\+\_\+tol \texorpdfstring{$\vert$}{|}\texorpdfstring{$\vert$}{|}r\texorpdfstring{$\vert$}{|}\texorpdfstring{$\vert$}{|}:\+ run second iteration. \Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a99106889c07fe8076e65a73739d39a98}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}!level\_selector@{level\_selector}}
\index{level\_selector@{level\_selector}!gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}
\doxysubsubsection{\texorpdfstring{level\_selector}{level\_selector}}
{\footnotesize\ttfamily \label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a99106889c07fe8076e65a73739d39a98} 
std::\+function$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}(const \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}, const \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}}\texorpdfstring{$\ast$}{*})$>$ gko::\+solver::\+\+Multigrid::\+parameters\+\_\+type::\+level\+\_\+selector \{nullptr\}}



Custom selector \doxylink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type} (\doxylink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type} level, const Lin\+Op\texorpdfstring{$\ast$}{*} fine\+\_\+matrix) Selector function returns the element index in the vector for any given level index and the matrix of the fine level. 

The level 0 is the finest level and it is ascending when going to coarser levels. For each level, this function is used to select the smoothers and multigrid level generation from the respective lists. For example, 
\begin{DoxyCode}{0}
\DoxyCodeLine{[](\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ level,\ \textcolor{keyword}{const}\ LinOp*\ fine\_matrix)\ \{}
\DoxyCodeLine{\ \ \ \ \textcolor{keywordflow}{if}\ (level\ <\ 3)\ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\{0\};}
\DoxyCodeLine{\ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (matrix-\/>get\_size()[0]\ >\ 1024)\ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\{1\};}
\DoxyCodeLine{\ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\{2\};}
\DoxyCodeLine{\ \ \ \ \}}
\DoxyCodeLine{\}}

\end{DoxyCode}
 It uses the 0-\/idx element if level \texorpdfstring{$<$}{<} 3, the 1-\/idx element if level \texorpdfstring{$>$}{>}= 3 and the number of rows of fine matrix \texorpdfstring{$>$}{>} 1024, or the 2-\/idx elements otherwise.

default selector:\+ use the level as the index when the level \texorpdfstring{$<$}{<} \doxylink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_af8671d3890209b0063dae79c31ce489d}{mg\+\_\+level} and reuse the last one when the level \texorpdfstring{$>$}{>}= \doxylink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_af8671d3890209b0063dae79c31ce489d}{mg\+\_\+level} \Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a2e4dd4ccd56c5becbbc60d3538b8dfe6}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}!max\_levels@{max\_levels}}
\index{max\_levels@{max\_levels}!gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}
\doxysubsubsection{\texorpdfstring{max\_levels}{max\_levels}}
{\footnotesize\ttfamily \label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a2e4dd4ccd56c5becbbc60d3538b8dfe6} 
\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} gko::\+solver::\+\+Multigrid::\+parameters\+\_\+type::\+max\+\_\+levels \{10\}}



The maximum number of mg\+\_\+level (without coarsest solver level) that can be used. 

If the multigrid hit the max\+\_\+levels limit, including the coarsest solver level contains max\+\_\+levels + 1 levels. \Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_abc24bca2fd9c007318d9d135f9b04ab6}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}!mid\_case@{mid\_case}}
\index{mid\_case@{mid\_case}!gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}
\doxysubsubsection{\texorpdfstring{mid\_case}{mid\_case}}
{\footnotesize\ttfamily \label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_abc24bca2fd9c007318d9d135f9b04ab6} 
\doxymbox{\hyperlink{namespacegko_1_1solver_1_1multigrid_a24ab73573aae583623848c9bfaf0fddf}{multigrid::\+mid\+\_\+smooth\+\_\+type}} gko::\+solver::\+\+Multigrid::\+parameters\+\_\+type::\+mid\+\_\+case \{multigrid::\+mid\+\_\+smooth\+\_\+type::\+standalone\}}



Choose the behavior of mid smoother between two cycles close to each other in the same level. 

The default is multigrid::\+mid\+\_\+smooth\+\_\+type::\+standalone.

\begin{DoxySeeAlso}{See also}
enum \doxylink{namespacegko_1_1solver_1_1multigrid_a24ab73573aae583623848c9bfaf0fddf}{multigrid::\+mid\+\_\+smooth\+\_\+type} 
\end{DoxySeeAlso}
\Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ac9cfc41847d5f9fe9b01b260a07e1d39}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}!mid\_smoother@{mid\_smoother}}
\index{mid\_smoother@{mid\_smoother}!gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}
\doxysubsubsection{\texorpdfstring{mid\_smoother}{mid\_smoother}}
{\footnotesize\ttfamily \label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ac9cfc41847d5f9fe9b01b260a07e1d39} 
std::\+vector$<$std::\+shared\+\_\+ptr$<$const \doxymbox{\hyperlink{classgko_1_1LinOpFactory}{Lin\+Op\+Factory}}$>$ $>$ gko::\+solver::\+\+Multigrid::\+parameters\+\_\+type::\+mid\+\_\+smoother \{\}}



Mid-\/smooth \doxylink{classgko_1_1solver_1_1Multigrid_1_1Factory}{Factory} list. 

If it contains available elements, multigrid always generates the corresponding smoother. However, it is only involved in the procedure when cycle is F or W. It is similar to Pre-\/smooth \doxylink{classgko_1_1solver_1_1Multigrid_1_1Factory}{Factory} list. It is ignored if the factory parameter mid\+\_\+case is not mid. \Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a6ad3e4e874e1fcc987b269e3473449c6}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}!min\_coarse\_rows@{min\_coarse\_rows}}
\index{min\_coarse\_rows@{min\_coarse\_rows}!gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}
\doxysubsubsection{\texorpdfstring{min\_coarse\_rows}{min\_coarse\_rows}}
{\footnotesize\ttfamily \label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a6ad3e4e874e1fcc987b269e3473449c6} 
\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}} gko::\+solver::\+\+Multigrid::\+parameters\+\_\+type::\+min\+\_\+coarse\+\_\+rows \{64\}}



The minimal number of coarse rows. 

If generation gets the matrix which contains less than {\ttfamily \doxylink{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a6ad3e4e874e1fcc987b269e3473449c6}{min\+\_\+coarse\+\_\+rows}}, the generation stops. \Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a11e65993abbf3a397709cabd1958edbc}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}!post\_smoother@{post\_smoother}}
\index{post\_smoother@{post\_smoother}!gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}
\doxysubsubsection{\texorpdfstring{post\_smoother}{post\_smoother}}
{\footnotesize\ttfamily \label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a11e65993abbf3a397709cabd1958edbc} 
std::\+vector$<$std::\+shared\+\_\+ptr$<$const \doxymbox{\hyperlink{classgko_1_1LinOpFactory}{Lin\+Op\+Factory}}$>$ $>$ gko::\+solver::\+\+Multigrid::\+parameters\+\_\+type::\+post\+\_\+smoother \{\}}



Post-\/smooth \doxylink{classgko_1_1solver_1_1Multigrid_1_1Factory}{Factory} list. 

It is similar to Pre-\/smooth \doxylink{classgko_1_1solver_1_1Multigrid_1_1Factory}{Factory} list. It is ignored if the factory parameter post\+\_\+uses\+\_\+pre is set to true. \Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a80863b6dcda27058ce478cac54e18873}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}!pre\_smoother@{pre\_smoother}}
\index{pre\_smoother@{pre\_smoother}!gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}
\doxysubsubsection{\texorpdfstring{pre\_smoother}{pre\_smoother}}
{\footnotesize\ttfamily \label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_a80863b6dcda27058ce478cac54e18873} 
std::\+vector$<$std::\+shared\+\_\+ptr$<$const \doxymbox{\hyperlink{classgko_1_1LinOpFactory}{Lin\+Op\+Factory}}$>$ $>$ gko::\+solver::\+\+Multigrid::\+parameters\+\_\+type::\+pre\+\_\+smoother \{\}}



Pre-\/smooth \doxylink{classgko_1_1solver_1_1Multigrid_1_1Factory}{Factory} list. 

Its size must be 0, 1 or be the same as mg\+\_\+level\textquotesingle{}s. when size = 0, use default smoother when size = 1, use the first factory when size \texorpdfstring{$>$}{>} 1, use the same selector as mg\+\_\+level

If this option is not set (i.\+e. size = 0) then the default smoother is used. The default smoother is one step of iterative refinement with a scalar Jacobi preconditioner.

If any element in the vector is a {\ttfamily nullptr} then the smoother application at the corresponding level is skipped. \Hypertarget{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ac722bf3fa49f15200604b9e30f492621}\index{gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}!solver\_selector@{solver\_selector}}
\index{solver\_selector@{solver\_selector}!gko::solver::Multigrid::parameters\_type@{gko::solver::Multigrid::parameters\_type}}
\doxysubsubsection{\texorpdfstring{solver\_selector}{solver\_selector}}
{\footnotesize\ttfamily \label{structgko_1_1solver_1_1Multigrid_1_1parameters__type_ac722bf3fa49f15200604b9e30f492621} 
std::\+function$<$\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}(const \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type}}, const \doxymbox{\hyperlink{classgko_1_1LinOp}{Lin\+Op}}\texorpdfstring{$\ast$}{*})$>$ gko::\+solver::\+\+Multigrid::\+parameters\+\_\+type::\+solver\+\_\+selector \{nullptr\}}



Custom coarsest\+\_\+solver selector \doxylink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type} (\doxylink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\+\_\+type} level, const \doxylink{classgko_1_1LinOp}{Lin\+Op} \texorpdfstring{$\ast$}{*}coarsest\+\_\+matrix) Selector function returns the correct element index in the vector for any given level index and the system matrix. 

It can be used to choose the sparse iterative solver if the coarsest matrix is still large but the dense solver if the matrix is small enough. For example, 
\begin{DoxyCode}{0}
\DoxyCodeLine{[](\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ level,\ \textcolor{keyword}{const}\ LinOp*\ coarsest\_matrix)\ \{}
\DoxyCodeLine{\ \ \ \ \textcolor{keywordflow}{if}\ (coarsest\_matrix-\/>get\_size()[0]\ >\ 1024)\ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\{0\};}
\DoxyCodeLine{\ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\{1\};}
\DoxyCodeLine{\ \ \ \ \}}
\DoxyCodeLine{\}}

\end{DoxyCode}
 Coarsest solver uses the 0-\/idx element if the number of rows of the coarsest\+\_\+matrix \texorpdfstring{$>$}{>} 1024 or 1-\/idx element for other cases.

default selector:\+ use the first factory 

The documentation for this struct was generated from the following file:\+\begin{DoxyCompactItemize}
\item 
ginkgo/\+core/\+solver/\+multigrid.\+hpp\end{DoxyCompactItemize}
