\doxysection{jacobi.\+hpp}
\hypertarget{include_2ginkgo_2core_2preconditioner_2jacobi_8hpp_source}{}\label{include_2ginkgo_2core_2preconditioner_2jacobi_8hpp_source}\index{ginkgo/core/preconditioner/jacobi.hpp@{ginkgo/core/preconditioner/jacobi.hpp}}

\begin{DoxyCode}{0}
\DoxyCodeLine{00001\ \textcolor{comment}{//\ SPDX-\/FileCopyrightText:\ 2017\ -\/\ 2025\ The\ Ginkgo\ authors}}
\DoxyCodeLine{00002\ \textcolor{comment}{//}}
\DoxyCodeLine{00003\ \textcolor{comment}{//\ SPDX-\/License-\/Identifier:\ BSD-\/3-\/Clause}}
\DoxyCodeLine{00004\ }
\DoxyCodeLine{00005\ \textcolor{preprocessor}{\#ifndef\ GKO\_PUBLIC\_CORE\_PRECONDITIONER\_JACOBI\_HPP\_}}
\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#define\ GKO\_PUBLIC\_CORE\_PRECONDITIONER\_JACOBI\_HPP\_}}
\DoxyCodeLine{00007\ }
\DoxyCodeLine{00008\ }
\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/array.hpp>}}
\DoxyCodeLine{00010\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/lin\_op.hpp>}}
\DoxyCodeLine{00011\ \textcolor{preprocessor}{\#include\ <ginkgo/core/config/config.hpp>}}
\DoxyCodeLine{00012\ \textcolor{preprocessor}{\#include\ <ginkgo/core/config/registry.hpp>}}
\DoxyCodeLine{00013\ \textcolor{preprocessor}{\#include\ <ginkgo/core/matrix/csr.hpp>}}
\DoxyCodeLine{00014\ \textcolor{preprocessor}{\#include\ <ginkgo/core/matrix/dense.hpp>}}
\DoxyCodeLine{00015\ \textcolor{preprocessor}{\#include\ <ginkgo/core/matrix/diagonal.hpp>}}
\DoxyCodeLine{00016\ }
\DoxyCodeLine{00017\ }
\DoxyCodeLine{00018\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko}{gko}}\ \{}
\DoxyCodeLine{00024\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1preconditioner}{preconditioner}}\ \{}
\DoxyCodeLine{00025\ }
\DoxyCodeLine{00026\ }
\DoxyCodeLine{00027\ \textcolor{comment}{//\ TODO:\ replace\ this\ with\ a\ custom\ accessor}}
\DoxyCodeLine{00036\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00037\ \textcolor{keyword}{struct\ }block\_interleaved\_storage\_scheme\ \{}
\DoxyCodeLine{00038\ \ \ \ \ block\_interleaved\_storage\_scheme()\ =\ \textcolor{keywordflow}{default};}
\DoxyCodeLine{00039\ }
\DoxyCodeLine{00040\ \ \ \ \ block\_interleaved\_storage\_scheme(IndexType\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_ada09b37f171d433cc74818961fc6eccc}{block\_offset}},}
\DoxyCodeLine{00041\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ IndexType\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_aa8a6723ef709e69bda55eaabaeee582e}{group\_offset}},\ \doxymbox{\hyperlink{namespacegko_a7cf056fa904140b50658e0637fba428c}{uint32}}\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_a8fa279f4178c767bdbf52ef4d7e23ad1}{group\_power}})}
\DoxyCodeLine{00042\ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_ada09b37f171d433cc74818961fc6eccc}{block\_offset}}\{\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_ada09b37f171d433cc74818961fc6eccc}{block\_offset}}\},}
\DoxyCodeLine{00043\ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_aa8a6723ef709e69bda55eaabaeee582e}{group\_offset}}\{\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_aa8a6723ef709e69bda55eaabaeee582e}{group\_offset}}\},}
\DoxyCodeLine{00044\ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_a8fa279f4178c767bdbf52ef4d7e23ad1}{group\_power}}\{\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_a8fa279f4178c767bdbf52ef4d7e23ad1}{group\_power}}\}}
\DoxyCodeLine{00045\ \ \ \ \ \{\}}
\DoxyCodeLine{00046\ }
\DoxyCodeLine{00050\ \ \ \ \ IndexType\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_ada09b37f171d433cc74818961fc6eccc}{block\_offset}};}
\DoxyCodeLine{00051\ }
\DoxyCodeLine{00055\ \ \ \ \ IndexType\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_aa8a6723ef709e69bda55eaabaeee582e}{group\_offset}};}
\DoxyCodeLine{00056\ }
\DoxyCodeLine{00062\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a7cf056fa904140b50658e0637fba428c}{uint32}}\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_a8fa279f4178c767bdbf52ef4d7e23ad1}{group\_power}};}
\DoxyCodeLine{00063\ }
\DoxyCodeLine{00069\ \ \ \ \ GKO\_ATTRIBUTES\ IndexType\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_af5eee19f00b1cd4c378ac3410be72093}{get\_group\_size}}()\ const\ noexcept}
\DoxyCodeLine{00070\ \ \ \ \ \{}
\DoxyCodeLine{00071\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{namespacegko_a0059e27f8f4bc348ff65c1e60caf47c8}{one<IndexType>}}()\ <<\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_a8fa279f4178c767bdbf52ef4d7e23ad1}{group\_power}};}
\DoxyCodeLine{00072\ \ \ \ \ \}}
\DoxyCodeLine{00073\ }
\DoxyCodeLine{00086\ \ \ \ \ GKO\_ATTRIBUTES\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}}
\DoxyCodeLine{00087\ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_ae46b38432c1e1b87d5743a649f2cfe84}{compute\_storage\_space}}(\doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ num\_blocks)\ \textcolor{keyword}{const}\ \textcolor{keyword}{noexcept}}
\DoxyCodeLine{00088\ \ \ \ \ \{}
\DoxyCodeLine{00089\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ (num\_blocks\ +\ 1\ ==\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\{0\})}
\DoxyCodeLine{00090\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ?\ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\{0\}}
\DoxyCodeLine{00091\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{namespacegko_a93065a86872e6511b701b73b75823483}{ceildiv}}(num\_blocks,\ this-\/>\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_af5eee19f00b1cd4c378ac3410be72093}{get\_group\_size}}())\ *\ group\_offset;}
\DoxyCodeLine{00092\ \ \ \ \ \}}
\DoxyCodeLine{00093\ }
\DoxyCodeLine{00101\ \ \ \ \ GKO\_ATTRIBUTES\ IndexType\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_a66a04b4dc90547fde872359c78ee22a4}{get\_group\_offset}}(IndexType\ block\_id)\ \textcolor{keyword}{const}\ \textcolor{keyword}{noexcept}}
\DoxyCodeLine{00102\ \ \ \ \ \{}
\DoxyCodeLine{00103\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_aa8a6723ef709e69bda55eaabaeee582e}{group\_offset}}\ *\ (block\_id\ >>\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_a8fa279f4178c767bdbf52ef4d7e23ad1}{group\_power}});}
\DoxyCodeLine{00104\ \ \ \ \ \}}
\DoxyCodeLine{00105\ }
\DoxyCodeLine{00113\ \ \ \ \ GKO\_ATTRIBUTES\ IndexType\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_a6384280dc1ad46fc1589d0b9165fd022}{get\_block\_offset}}(IndexType\ block\_id)\ \textcolor{keyword}{const}\ \textcolor{keyword}{noexcept}}
\DoxyCodeLine{00114\ \ \ \ \ \{}
\DoxyCodeLine{00115\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_ada09b37f171d433cc74818961fc6eccc}{block\_offset}}\ *\ (block\_id\ \&\ (this-\/>\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_af5eee19f00b1cd4c378ac3410be72093}{get\_group\_size}}()\ -\/\ 1));}
\DoxyCodeLine{00116\ \ \ \ \ \}}
\DoxyCodeLine{00117\ }
\DoxyCodeLine{00125\ \ \ \ \ GKO\_ATTRIBUTES\ IndexType}
\DoxyCodeLine{00126\ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_ad8356b187814609c7d77bd03e025c48f}{get\_global\_block\_offset}}(IndexType\ block\_id)\ \textcolor{keyword}{const}\ \textcolor{keyword}{noexcept}}
\DoxyCodeLine{00127\ \ \ \ \ \{}
\DoxyCodeLine{00128\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ this-\/>\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_a66a04b4dc90547fde872359c78ee22a4}{get\_group\_offset}}(block\_id)\ +}
\DoxyCodeLine{00129\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_a6384280dc1ad46fc1589d0b9165fd022}{get\_block\_offset}}(block\_id);}
\DoxyCodeLine{00130\ \ \ \ \ \}}
\DoxyCodeLine{00131\ }
\DoxyCodeLine{00137\ \ \ \ \ GKO\_ATTRIBUTES\ IndexType\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_aa07119fbf99fae71b1f9c4f693e14ce4}{get\_stride}}()\ const\ noexcept}
\DoxyCodeLine{00138\ \ \ \ \ \{}
\DoxyCodeLine{00139\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_ada09b37f171d433cc74818961fc6eccc}{block\_offset}}\ <<\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme_a8fa279f4178c767bdbf52ef4d7e23ad1}{group\_power}};}
\DoxyCodeLine{00140\ \ \ \ \ \}}
\DoxyCodeLine{00141\ \};}
\DoxyCodeLine{00142\ }
\DoxyCodeLine{00143\ }
\DoxyCodeLine{00186\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType\ =\ default\_precision,\ \textcolor{keyword}{typename}\ IndexType\ =\ \textcolor{keywordtype}{int}32>}
\DoxyCodeLine{00187\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}\ :\ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<Jacobi<ValueType,\ IndexType>>,}
\DoxyCodeLine{00188\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<matrix::Dense<ValueType>>,}
\DoxyCodeLine{00189\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1WritableToMatrixData}{WritableToMatrixData}}<ValueType,\ IndexType>,}
\DoxyCodeLine{00190\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1Transposable}{Transposable}}\ \{}
\DoxyCodeLine{00191\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}>;}
\DoxyCodeLine{00192\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1EnablePolymorphicObject}{EnablePolymorphicObject}}<\doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}},\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}>;}
\DoxyCodeLine{00193\ \ \ \ \ GKO\_ASSERT\_SUPPORTED\_VALUE\_AND\_INDEX\_TYPE;}
\DoxyCodeLine{00194\ }
\DoxyCodeLine{00195\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00196\ \ \ \ \ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}>::convert\_to;}
\DoxyCodeLine{00197\ \ \ \ \ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}>::move\_to;}
\DoxyCodeLine{00198\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<ValueType>}}>::convert\_to;}
\DoxyCodeLine{00199\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<ValueType>}}>::move\_to;}
\DoxyCodeLine{00200\ \ \ \ \ \textcolor{keyword}{using\ }value\_type\ =\ ValueType;}
\DoxyCodeLine{00201\ \ \ \ \ \textcolor{keyword}{using\ }index\_type\ =\ IndexType;}
\DoxyCodeLine{00202\ \ \ \ \ \textcolor{keyword}{using\ }mat\_data\ =\ \doxymbox{\hyperlink{structgko_1_1matrix__data}{matrix\_data<ValueType,\ IndexType>}};}
\DoxyCodeLine{00203\ \ \ \ \ \textcolor{keyword}{using\ }transposed\_type\ =\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi<ValueType,\ IndexType>}};}
\DoxyCodeLine{00204\ }
\DoxyCodeLine{00213\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_afb44d8e560f00f65c46c6813638ce24c}{get\_num\_blocks}}()\ const\ noexcept\ \{\ \textcolor{keywordflow}{return}\ num\_blocks\_;\ \}}
\DoxyCodeLine{00214\ }
\DoxyCodeLine{00223\ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1block__interleaved__storage__scheme}{block\_interleaved\_storage\_scheme<index\_type>}}\&\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a002424039907724d1e7161f147c1922c}{get\_storage\_scheme}}()}
\DoxyCodeLine{00224\ \ \ \ \ \ \ \ \ const\ noexcept}
\DoxyCodeLine{00225\ \ \ \ \ \{}
\DoxyCodeLine{00226\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ storage\_scheme\_;}
\DoxyCodeLine{00227\ \ \ \ \ \}}
\DoxyCodeLine{00228\ }
\DoxyCodeLine{00240\ \ \ \ \ \textcolor{keyword}{const}\ value\_type*\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_aa4b706a515442fe4bd1ce367f39b7f86}{get\_blocks}}()\ const\ noexcept}
\DoxyCodeLine{00241\ \ \ \ \ \{}
\DoxyCodeLine{00242\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ blocks\_.get\_const\_data();}
\DoxyCodeLine{00243\ \ \ \ \ \}}
\DoxyCodeLine{00244\ }
\DoxyCodeLine{00254\ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{namespacegko_a107302a750bfa82a2107c77293f791c9}{remove\_complex<value\_type>}}*\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a6ea5e49b78d2c090ce94a8e5a49e4b49}{get\_conditioning}}()\ const\ noexcept}
\DoxyCodeLine{00255\ \ \ \ \ \{}
\DoxyCodeLine{00256\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ conditioning\_.get\_const\_data();}
\DoxyCodeLine{00257\ \ \ \ \ \}}
\DoxyCodeLine{00258\ }
\DoxyCodeLine{00264\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_af238130016f4534089edfb95918f14d1}{get\_num\_stored\_elements}}()\ const\ noexcept}
\DoxyCodeLine{00265\ \ \ \ \ \{}
\DoxyCodeLine{00266\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ blocks\_.get\_size();}
\DoxyCodeLine{00267\ \ \ \ \ \}}
\DoxyCodeLine{00268\ }
\DoxyCodeLine{00269\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a7cb327baf9ca9018d06fa5554464d29d}{convert\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<value\_type>}}*\ result)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00270\ }
\DoxyCodeLine{00271\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a6fcc3453bf500454b56a5f2f196b871c}{move\_to}}(\doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<value\_type>}}*\ result)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00272\ }
\DoxyCodeLine{00273\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_af82d8f7795fefcf5f38a38895e316c02}{write}}(mat\_data\&\ data)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00274\ }
\DoxyCodeLine{00275\ \ \ \ \ std::unique\_ptr<LinOp>\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a96319afdb21239eff448d93451e946c0}{transpose}}()\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00276\ }
\DoxyCodeLine{00277\ \ \ \ \ std::unique\_ptr<LinOp>\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a10927b50a7eb32f8a027ae55a3864955}{conj\_transpose}}()\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00278\ }
\DoxyCodeLine{00283\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}\&\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_ad709ab1e2c6437a6024c65e7c5c10247}{operator=}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}\&\ other);}
\DoxyCodeLine{00284\ }
\DoxyCodeLine{00290\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}\&\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_ad20899deaa69a9d04101e5431dd577e3}{operator=}}(\doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}\&\&\ other);}
\DoxyCodeLine{00291\ }
\DoxyCodeLine{00296\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}\&\ other);}
\DoxyCodeLine{00297\ }
\DoxyCodeLine{00303\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a747ca4267e56029521a80410c64a2f13}{Jacobi}}(\doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}\&\&\ other);}
\DoxyCodeLine{00304\ }
\DoxyCodeLine{00305\ \ \ \ \ \doxymbox{\hyperlink{group__LinOp_ga1fc8e9d8be0c9ad2d72bc1ddfc6d8358}{GKO\_CREATE\_FACTORY\_PARAMETERS}}(parameters,\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_1_1Factory}{Factory}})}
\DoxyCodeLine{00306\ \ \ \ \ \{}
\DoxyCodeLine{00315\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a7cf056fa904140b50658e0637fba428c}{uint32}}\ \doxymbox{\hyperlink{group__LinOp_ga49d4c09c39f06b22bebbbfd1d8bfe450}{GKO\_FACTORY\_PARAMETER\_SCALAR}}(\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1Jacobi_1_1parameters__type_a7d11d10b347b25b64b5b916e6a74364e}{max\_block\_size}},\ 32u);}
\DoxyCodeLine{00316\ }
\DoxyCodeLine{00326\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a7cf056fa904140b50658e0637fba428c}{uint32}}\ \doxymbox{\hyperlink{group__LinOp_ga49d4c09c39f06b22bebbbfd1d8bfe450}{GKO\_FACTORY\_PARAMETER\_SCALAR}}(\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1Jacobi_1_1parameters__type_a042df68c54ea721101c4b064ed450a1f}{max\_block\_stride}},\ 0u);}
\DoxyCodeLine{00327\ }
\DoxyCodeLine{00345\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{group__LinOp_ga49d4c09c39f06b22bebbbfd1d8bfe450}{GKO\_FACTORY\_PARAMETER\_SCALAR}}(\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1Jacobi_1_1parameters__type_adfc8ea4f7d80b7de39b396dbbc1e5654}{skip\_sorting}},\ \textcolor{keyword}{false});}
\DoxyCodeLine{00346\ }
\DoxyCodeLine{00372\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{gko::array<index\_type>}}\ \doxymbox{\hyperlink{group__LinOp_gaa292314d27ec1fb7ad54debaa3606ea8}{GKO\_FACTORY\_PARAMETER\_VECTOR}}(\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1Jacobi_1_1parameters__type_ad90b07202f15b6cd5c649f6b61480053}{block\_pointers}},}
\DoxyCodeLine{00373\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{nullptr});}
\DoxyCodeLine{00374\ }
\DoxyCodeLine{00386\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{group__LinOp_ga49d4c09c39f06b22bebbbfd1d8bfe450}{GKO\_FACTORY\_PARAMETER\_SCALAR}}(\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1Jacobi_1_1parameters__type_afa467c5ec8491236cde56117b09cd821}{aggregate\_l1}},\ \textcolor{keyword}{false});}
\DoxyCodeLine{00387\ }
\DoxyCodeLine{00388\ \ \ \ \ \textcolor{keyword}{private}:}
\DoxyCodeLine{00389\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ See\ documentation\ of\ storage\_optimization\ parameter\ for\ details\ about}}
\DoxyCodeLine{00390\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ this\ class}}
\DoxyCodeLine{00391\ \ \ \ \ \ \ \ \ \textcolor{keyword}{struct\ }storage\_optimization\_type\ \{}
\DoxyCodeLine{00392\ \ \ \ \ \ \ \ \ \ \ \ \ storage\_optimization\_type(\doxymbox{\hyperlink{classgko_1_1precision__reduction}{precision\_reduction}}\ p)}
\DoxyCodeLine{00393\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ is\_block\_wise\{false\},\ of\_all\_blocks\{p\}}
\DoxyCodeLine{00394\ \ \ \ \ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00395\ }
\DoxyCodeLine{00396\ \ \ \ \ \ \ \ \ \ \ \ \ storage\_optimization\_type(}
\DoxyCodeLine{00397\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1array}{array<precision\_reduction>}}\&\ block\_wise\_opt)}
\DoxyCodeLine{00398\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ is\_block\_wise\{block\_wise\_opt.get\_size()\ >\ 0\},}
\DoxyCodeLine{00399\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ block\_wise\{block\_wise\_opt\}}
\DoxyCodeLine{00400\ \ \ \ \ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00401\ }
\DoxyCodeLine{00402\ \ \ \ \ \ \ \ \ \ \ \ \ storage\_optimization\_type(}
\DoxyCodeLine{00403\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<precision\_reduction>}}\&\&\ block\_wise\_opt)}
\DoxyCodeLine{00404\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ :\ is\_block\_wise\{block\_wise\_opt.get\_size()\ >\ 0\},}
\DoxyCodeLine{00405\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ block\_wise\{\doxymbox{\hyperlink{namespacestd}{std}}::move(block\_wise\_opt)\}}
\DoxyCodeLine{00406\ \ \ \ \ \ \ \ \ \ \ \ \ \{\}}
\DoxyCodeLine{00407\ }
\DoxyCodeLine{00408\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{operator}\ \doxymbox{\hyperlink{classgko_1_1precision__reduction}{precision\_reduction}}()\ \{\ \textcolor{keywordflow}{return}\ of\_all\_blocks;\ \}}
\DoxyCodeLine{00409\ }
\DoxyCodeLine{00410\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ is\_block\_wise;}
\DoxyCodeLine{00411\ \ \ \ \ \ \ \ \ \ \ \ \ precision\_reduction\ of\_all\_blocks;}
\DoxyCodeLine{00412\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{gko::array<precision\_reduction>}}\ block\_wise;}
\DoxyCodeLine{00413\ \ \ \ \ \ \ \ \ \};}
\DoxyCodeLine{00414\ }
\DoxyCodeLine{00415\ \ \ \ \ \textcolor{keyword}{public}:}
\DoxyCodeLine{00483\ \ \ \ \ \ \ \ \ storage\_optimization\_type\ \doxymbox{\hyperlink{group__LinOp_gaa292314d27ec1fb7ad54debaa3606ea8}{GKO\_FACTORY\_PARAMETER\_VECTOR}}(}
\DoxyCodeLine{00484\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1Jacobi_1_1parameters__type_a51d0eec65f99d6dd5b0ebe5ba69390dd}{storage\_optimization}},\ \doxymbox{\hyperlink{classgko_1_1precision__reduction}{precision\_reduction}}(0,\ 0));}
\DoxyCodeLine{00485\ }
\DoxyCodeLine{00512\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a107302a750bfa82a2107c77293f791c9}{remove\_complex<value\_type>}}\ \doxymbox{\hyperlink{group__LinOp_ga49d4c09c39f06b22bebbbfd1d8bfe450}{GKO\_FACTORY\_PARAMETER\_SCALAR}}(}
\DoxyCodeLine{00513\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1preconditioner_1_1Jacobi_1_1parameters__type_ad4fd0de7ce4d390584e947afb6d0ce73}{accuracy}},\ \textcolor{keyword}{static\_cast<}\doxymbox{\hyperlink{namespacegko_a107302a750bfa82a2107c77293f791c9}{remove\_complex<value\_type>}}\textcolor{keyword}{>}(1e-\/1));}
\DoxyCodeLine{00514\ \ \ \ \ \};}
\DoxyCodeLine{00515\ \ \ \ \ \doxymbox{\hyperlink{group__LinOp_ga8e0af90ec2414b768266f77cedffc309}{GKO\_ENABLE\_LIN\_OP\_FACTORY}}(\doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}},\ parameters,\ Factory);}
\DoxyCodeLine{00516\ \ \ \ \ \doxymbox{\hyperlink{group__LinOp_ga521f65604cc4cf427dcb2ecfa49b757c}{GKO\_ENABLE\_BUILD\_METHOD}}(Factory);}
\DoxyCodeLine{00517\ }
\DoxyCodeLine{00534\ \ \ \ \ \textcolor{keyword}{static}\ parameters\_type\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a7f29f4d4e64fe69528696a339803f599}{parse}}(}
\DoxyCodeLine{00535\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1config_1_1pnode}{config::pnode}}\&\ config,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1config_1_1registry}{config::registry}}\&\ context,}
\DoxyCodeLine{00536\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1config_1_1type__descriptor}{config::type\_descriptor}}\&\ td\_for\_child\ =}
\DoxyCodeLine{00537\ \ \ \ \ \ \ \ \ \ \ \ \ config::make\_type\_descriptor<ValueType,\ IndexType>());}
\DoxyCodeLine{00538\ }
\DoxyCodeLine{00539\ \textcolor{keyword}{protected}:}
\DoxyCodeLine{00545\ \ \ \ \ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}(std::shared\_ptr<const\ Executor>\ exec)}
\DoxyCodeLine{00546\ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}>(exec),}
\DoxyCodeLine{00547\ \ \ \ \ \ \ \ \ \ \ num\_blocks\_\{\},}
\DoxyCodeLine{00548\ \ \ \ \ \ \ \ \ \ \ blocks\_(exec),}
\DoxyCodeLine{00549\ \ \ \ \ \ \ \ \ \ \ conditioning\_(exec)}
\DoxyCodeLine{00550\ \ \ \ \ \{}
\DoxyCodeLine{00551\ \ \ \ \ \ \ \ \ parameters\_.block\_pointers.set\_executor(exec);}
\DoxyCodeLine{00552\ \ \ \ \ \ \ \ \ parameters\_.storage\_optimization.block\_wise.set\_executor(exec);}
\DoxyCodeLine{00553\ \ \ \ \ \}}
\DoxyCodeLine{00554\ }
\DoxyCodeLine{00562\ \ \ \ \ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi_a51fb3164a0886cb3c48b3c26c6af7513}{Jacobi}}(\textcolor{keyword}{const}\ Factory*\ factory,}
\DoxyCodeLine{00563\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ LinOp>\ system\_matrix)}
\DoxyCodeLine{00564\ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1preconditioner_1_1Jacobi}{Jacobi}}>(factory-\/>get\_executor(),}
\DoxyCodeLine{00565\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko}{gko}}::\doxymbox{\hyperlink{namespacegko_aacad7f87b38d3f26674ed034d442a1a0}{transpose}}(system\_matrix-\/>get\_size())),}
\DoxyCodeLine{00566\ \ \ \ \ \ \ \ \ \ \ parameters\_\{factory-\/>get\_parameters()\},}
\DoxyCodeLine{00567\ \ \ \ \ \ \ \ \ \ \ storage\_scheme\_\{this-\/>compute\_storage\_scheme(}
\DoxyCodeLine{00568\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ parameters\_.max\_block\_size,\ parameters\_.max\_block\_stride)\},}
\DoxyCodeLine{00569\ \ \ \ \ \ \ \ \ \ \ num\_blocks\_\{parameters\_.block\_pointers.get\_size()\ -\/\ 1\},}
\DoxyCodeLine{00570\ \ \ \ \ \ \ \ \ \ \ blocks\_(factory-\/>get\_executor(),}
\DoxyCodeLine{00571\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ storage\_scheme\_.compute\_storage\_space(}
\DoxyCodeLine{00572\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ parameters\_.block\_pointers.get\_size()\ -\/\ 1)),}
\DoxyCodeLine{00573\ \ \ \ \ \ \ \ \ \ \ conditioning\_(factory-\/>get\_executor())}
\DoxyCodeLine{00574\ \ \ \ \ \{}
\DoxyCodeLine{00575\ \ \ \ \ \ \ \ \ parameters\_.\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1Jacobi_1_1parameters__type_ad90b07202f15b6cd5c649f6b61480053}{block\_pointers}}.\doxymbox{\hyperlink{classgko_1_1array_aba67dcaa3c627446ca187c7a35536cd3}{set\_executor}}(this-\/>get\_executor());}
\DoxyCodeLine{00576\ \ \ \ \ \ \ \ \ parameters\_.\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1Jacobi_1_1parameters__type_a51d0eec65f99d6dd5b0ebe5ba69390dd}{storage\_optimization}}.block\_wise.set\_executor(}
\DoxyCodeLine{00577\ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>get\_executor());}
\DoxyCodeLine{00578\ \ \ \ \ \ \ \ \ this-\/>generate(system\_matrix.get(),\ parameters\_.\doxymbox{\hyperlink{structgko_1_1preconditioner_1_1Jacobi_1_1parameters__type_adfc8ea4f7d80b7de39b396dbbc1e5654}{skip\_sorting}});}
\DoxyCodeLine{00579\ \ \ \ \ \}}
\DoxyCodeLine{00580\ }
\DoxyCodeLine{00589\ \ \ \ \ block\_interleaved\_storage\_scheme<index\_type>\ compute\_storage\_scheme(}
\DoxyCodeLine{00590\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a7cf056fa904140b50658e0637fba428c}{uint32}}\ max\_block\_size,\ \doxymbox{\hyperlink{namespacegko_a7cf056fa904140b50658e0637fba428c}{uint32}}\ param\_max\_block\_stride)}
\DoxyCodeLine{00591\ \ \ \ \ \{}
\DoxyCodeLine{00592\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a7cf056fa904140b50658e0637fba428c}{uint32}}\ default\_block\_stride\ =\ 32;}
\DoxyCodeLine{00593\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ If\ the\ executor\ is\ hip,\ the\ warp\ size\ is\ 32\ or\ 64}}
\DoxyCodeLine{00594\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ hip\_exec\ =\ std::dynamic\_pointer\_cast<const\ gko::HipExecutor>(}
\DoxyCodeLine{00595\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ this-\/>get\_executor()))\ \{}
\DoxyCodeLine{00596\ \ \ \ \ \ \ \ \ \ \ \ \ default\_block\_stride\ =\ hip\_exec-\/>get\_warp\_size();}
\DoxyCodeLine{00597\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00598\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a7cf056fa904140b50658e0637fba428c}{uint32}}\ max\_block\_stride\ =\ default\_block\_stride;}
\DoxyCodeLine{00599\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (param\_max\_block\_stride\ !=\ 0)\ \{}
\DoxyCodeLine{00600\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ if\ parameter\ max\_block\_stride\ is\ not\ zero,\ set\ max\_block\_stride\ =}}
\DoxyCodeLine{00601\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ param\_max\_block\_stride}}
\DoxyCodeLine{00602\ \ \ \ \ \ \ \ \ \ \ \ \ max\_block\_stride\ =\ param\_max\_block\_stride;}
\DoxyCodeLine{00603\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (this-\/>get\_executor()\ !=\ this-\/>get\_executor()-\/>get\_master()\ \&\&}
\DoxyCodeLine{00604\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ max\_block\_stride\ !=\ default\_block\_stride)\ \{}
\DoxyCodeLine{00605\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ only\ support\ the\ default\ value\ on\ the\ gpu\ device}}
\DoxyCodeLine{00606\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ GKO\_NOT\_SUPPORTED(\textcolor{keyword}{this});}
\DoxyCodeLine{00607\ \ \ \ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00608\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00609\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (parameters\_.max\_block\_size\ >\ max\_block\_stride\ ||}
\DoxyCodeLine{00610\ \ \ \ \ \ \ \ \ \ \ \ \ parameters\_.max\_block\_size\ <\ 1)\ \{}
\DoxyCodeLine{00611\ \ \ \ \ \ \ \ \ \ \ \ \ GKO\_NOT\_SUPPORTED(\textcolor{keyword}{this});}
\DoxyCodeLine{00612\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00613\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keyword}{auto}\ group\_size\ =\ \textcolor{keyword}{static\_cast<}\doxymbox{\hyperlink{namespacegko_a7cf056fa904140b50658e0637fba428c}{uint32}}\textcolor{keyword}{>}(}
\DoxyCodeLine{00614\ \ \ \ \ \ \ \ \ \ \ \ \ max\_block\_stride\ /\ \doxymbox{\hyperlink{namespacegko_ad39645fe8148a8a812a9528865a77600}{get\_superior\_power}}(\doxymbox{\hyperlink{namespacegko_a7cf056fa904140b50658e0637fba428c}{uint32}}\{2\},\ max\_block\_size));}
\DoxyCodeLine{00615\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keyword}{auto}\ block\_offset\ =\ max\_block\_size;}
\DoxyCodeLine{00616\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keyword}{auto}\ block\_stride\ =\ group\_size\ *\ block\_offset;}
\DoxyCodeLine{00617\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \textcolor{keyword}{auto}\ group\_offset\ =\ max\_block\_size\ *\ block\_stride;}
\DoxyCodeLine{00618\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \{\textcolor{keyword}{static\_cast<}index\_type\textcolor{keyword}{>}(block\_offset),}
\DoxyCodeLine{00619\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{static\_cast<}index\_type\textcolor{keyword}{>}(group\_offset),}
\DoxyCodeLine{00620\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a4eea40e4123a3fdb60fcd92f902c6d6d}{get\_significant\_bit}}(group\_size)\};}
\DoxyCodeLine{00621\ \ \ \ \ \}}
\DoxyCodeLine{00622\ }
\DoxyCodeLine{00632\ \ \ \ \ \textcolor{keywordtype}{void}\ generate(\textcolor{keyword}{const}\ LinOp*\ system\_matrix,\ \textcolor{keywordtype}{bool}\ skip\_sorting);}
\DoxyCodeLine{00633\ }
\DoxyCodeLine{00641\ \ \ \ \ \textcolor{keywordtype}{void}\ detect\_blocks(\textcolor{keyword}{const}\ matrix::Csr<ValueType,\ IndexType>*\ system\_matrix);}
\DoxyCodeLine{00642\ }
\DoxyCodeLine{00643\ \ \ \ \ \textcolor{keywordtype}{void}\ apply\_impl(\textcolor{keyword}{const}\ LinOp*\ b,\ LinOp*\ x)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00644\ }
\DoxyCodeLine{00645\ \ \ \ \ \textcolor{keywordtype}{void}\ apply\_impl(\textcolor{keyword}{const}\ LinOp*\ alpha,\ \textcolor{keyword}{const}\ LinOp*\ b,\ \textcolor{keyword}{const}\ LinOp*\ beta,}
\DoxyCodeLine{00646\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ LinOp*\ x)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00647\ }
\DoxyCodeLine{00648\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00649\ \ \ \ \ block\_interleaved\_storage\_scheme<index\_type>\ storage\_scheme\_\{\};}
\DoxyCodeLine{00650\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{size\_type}}\ num\_blocks\_;}
\DoxyCodeLine{00651\ \ \ \ \ array<value\_type>\ blocks\_;}
\DoxyCodeLine{00652\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_ae749a5ea11a93c1bcc9158d9a6e9fb68af1f713c9e000f5d3f280adbd124df4f5}{array<remove\_complex<value\_type>}}>\ conditioning\_;}
\DoxyCodeLine{00653\ \};}
\DoxyCodeLine{00654\ }
\DoxyCodeLine{00655\ }
\DoxyCodeLine{00656\ \}\ \ \textcolor{comment}{//\ namespace\ preconditioner}}
\DoxyCodeLine{00657\ \}\ \ \textcolor{comment}{//\ namespace\ gko}}
\DoxyCodeLine{00658\ }
\DoxyCodeLine{00659\ }
\DoxyCodeLine{00660\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_PUBLIC\_CORE\_PRECONDITIONER\_JACOBI\_HPP\_}}

\end{DoxyCode}
