\doxysection{triangular.\+hpp}
\hypertarget{triangular_8hpp_source}{}\label{triangular_8hpp_source}\index{ginkgo/core/solver/triangular.hpp@{ginkgo/core/solver/triangular.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\_SOLVER\_TRIANGULAR\_HPP\_}}
\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#define\ GKO\_PUBLIC\_CORE\_SOLVER\_TRIANGULAR\_HPP\_}}
\DoxyCodeLine{00007\ }
\DoxyCodeLine{00008\ }
\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ <memory>}}
\DoxyCodeLine{00010\ \textcolor{preprocessor}{\#include\ <utility>}}
\DoxyCodeLine{00011\ }
\DoxyCodeLine{00012\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/abstract\_factory.hpp>}}
\DoxyCodeLine{00013\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/array.hpp>}}
\DoxyCodeLine{00014\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/dim.hpp>}}
\DoxyCodeLine{00015\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/exception\_helpers.hpp>}}
\DoxyCodeLine{00016\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/lin\_op.hpp>}}
\DoxyCodeLine{00017\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/polymorphic\_object.hpp>}}
\DoxyCodeLine{00018\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/types.hpp>}}
\DoxyCodeLine{00019\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/utils.hpp>}}
\DoxyCodeLine{00020\ \textcolor{preprocessor}{\#include\ <ginkgo/core/config/config.hpp>}}
\DoxyCodeLine{00021\ \textcolor{preprocessor}{\#include\ <ginkgo/core/config/registry.hpp>}}
\DoxyCodeLine{00022\ \textcolor{preprocessor}{\#include\ <ginkgo/core/log/logger.hpp>}}
\DoxyCodeLine{00023\ \textcolor{preprocessor}{\#include\ <ginkgo/core/matrix/csr.hpp>}}
\DoxyCodeLine{00024\ \textcolor{preprocessor}{\#include\ <ginkgo/core/matrix/identity.hpp>}}
\DoxyCodeLine{00025\ \textcolor{preprocessor}{\#include\ <ginkgo/core/solver/solver\_base.hpp>}}
\DoxyCodeLine{00026\ }
\DoxyCodeLine{00027\ }
\DoxyCodeLine{00028\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko}{gko}}\ \{}
\DoxyCodeLine{00029\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1solver}{solver}}\ \{}
\DoxyCodeLine{00030\ }
\DoxyCodeLine{00031\ }
\DoxyCodeLine{00032\ \textcolor{keyword}{struct\ }SolveStruct;}
\DoxyCodeLine{00033\ }
\DoxyCodeLine{00034\ }
\DoxyCodeLine{00040\ \textcolor{keyword}{enum\ class}\ \doxymbox{\hyperlink{namespacegko_1_1solver_a68b5a3da69a6acb5f0bb656a96e4eb0a}{trisolve\_algorithm}}\ \{\ sparselib,\ syncfree\ \};}
\DoxyCodeLine{00041\ }
\DoxyCodeLine{00042\ }
\DoxyCodeLine{00043\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00044\ \textcolor{keyword}{class\ }UpperTrs;}
\DoxyCodeLine{00045\ }
\DoxyCodeLine{00046\ }
\DoxyCodeLine{00064\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType\ =\ default\_precision,\ \textcolor{keyword}{typename}\ IndexType\ =\ \textcolor{keywordtype}{int}32>}
\DoxyCodeLine{00065\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}}\ :\ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<LowerTrs<ValueType,\ IndexType>>,}
\DoxyCodeLine{00066\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ EnableSolverBase<LowerTrs<ValueType,\ IndexType>,}
\DoxyCodeLine{00067\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ matrix::Csr<ValueType,\ IndexType>>,}
\DoxyCodeLine{00068\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1Transposable}{Transposable}}\ \{}
\DoxyCodeLine{00069\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}}>;}
\DoxyCodeLine{00070\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1EnablePolymorphicObject}{EnablePolymorphicObject}}<\doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}},\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}>;}
\DoxyCodeLine{00071\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs}{UpperTrs}}<ValueType,\ IndexType>;}
\DoxyCodeLine{00072\ \ \ \ \ GKO\_ASSERT\_SUPPORTED\_VALUE\_AND\_INDEX\_TYPE;}
\DoxyCodeLine{00073\ }
\DoxyCodeLine{00074\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00075\ \ \ \ \ \textcolor{keyword}{using\ }value\_type\ =\ ValueType;}
\DoxyCodeLine{00076\ \ \ \ \ \textcolor{keyword}{using\ }index\_type\ =\ IndexType;}
\DoxyCodeLine{00077\ \ \ \ \ \textcolor{keyword}{using\ }transposed\_type\ =\ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs}{UpperTrs<ValueType,\ IndexType>}};}
\DoxyCodeLine{00078\ }
\DoxyCodeLine{00079\ \ \ \ \ std::unique\_ptr<LinOp>\ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a7a5f0015597617ac9308e7f3b6f2b6c1}{transpose}}()\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00080\ }
\DoxyCodeLine{00081\ \ \ \ \ std::unique\_ptr<LinOp>\ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a985ecd78af865dd514bad65db8154d0d}{conj\_transpose}}()\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00082\ }
\DoxyCodeLine{00083\ \ \ \ \ \doxymbox{\hyperlink{group__LinOp_ga1fc8e9d8be0c9ad2d72bc1ddfc6d8358}{GKO\_CREATE\_FACTORY\_PARAMETERS}}(parameters,\ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_1_1Factory}{Factory}})}
\DoxyCodeLine{00084\ \ \ \ \ \{}
\DoxyCodeLine{00091\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{gko::size\_type}}\ \doxymbox{\hyperlink{group__LinOp_ga49d4c09c39f06b22bebbbfd1d8bfe450}{GKO\_FACTORY\_PARAMETER\_SCALAR}}(\doxymbox{\hyperlink{structgko_1_1solver_1_1LowerTrs_1_1parameters__type_a2221c5c06cfb041ad41e5a5bdf9968f2}{num\_rhs}},\ 1u);}
\DoxyCodeLine{00092\ }
\DoxyCodeLine{00097\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{group__LinOp_ga49d4c09c39f06b22bebbbfd1d8bfe450}{GKO\_FACTORY\_PARAMETER\_SCALAR}}(\doxymbox{\hyperlink{structgko_1_1solver_1_1LowerTrs_1_1parameters__type_a5777aed3bffc9bdef27c6bcb1cd414f9}{unit\_diagonal}},\ \textcolor{keyword}{false});}
\DoxyCodeLine{00098\ }
\DoxyCodeLine{00105\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1solver_a68b5a3da69a6acb5f0bb656a96e4eb0a}{trisolve\_algorithm}}\ \doxymbox{\hyperlink{group__LinOp_ga49d4c09c39f06b22bebbbfd1d8bfe450}{GKO\_FACTORY\_PARAMETER\_SCALAR}}(}
\DoxyCodeLine{00106\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1solver_1_1LowerTrs_1_1parameters__type_a39f01cb27d3a256a2168055079b3a1ce}{algorithm}},\ trisolve\_algorithm::sparselib);}
\DoxyCodeLine{00107\ \ \ \ \ \};}
\DoxyCodeLine{00108\ \ \ \ \ \doxymbox{\hyperlink{group__LinOp_ga8e0af90ec2414b768266f77cedffc309}{GKO\_ENABLE\_LIN\_OP\_FACTORY}}(\doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}},\ parameters,\ Factory);}
\DoxyCodeLine{00109\ \ \ \ \ \doxymbox{\hyperlink{group__LinOp_ga521f65604cc4cf427dcb2ecfa49b757c}{GKO\_ENABLE\_BUILD\_METHOD}}(Factory);}
\DoxyCodeLine{00110\ }
\DoxyCodeLine{00124\ \ \ \ \ \textcolor{keyword}{static}\ parameters\_type\ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a5fa61ec1620703e7a0b17aca8f21a60a}{parse}}(}
\DoxyCodeLine{00125\ \ \ \ \ \ \ \ \ \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{00126\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1config_1_1type__descriptor}{config::type\_descriptor}}\&\ td\_for\_child\ =}
\DoxyCodeLine{00127\ \ \ \ \ \ \ \ \ \ \ \ \ config::make\_type\_descriptor<ValueType,\ IndexType>());}
\DoxyCodeLine{00128\ }
\DoxyCodeLine{00134\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}}\&);}
\DoxyCodeLine{00135\ }
\DoxyCodeLine{00142\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_aa719a79cf29b83a743788541156ea53d}{LowerTrs}}(\doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}}\&\&);}
\DoxyCodeLine{00143\ }
\DoxyCodeLine{00149\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}}\&\ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a9177d0ad6c50bcfcbc6d3f46b05d89d7}{operator=}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}}\&);}
\DoxyCodeLine{00150\ }
\DoxyCodeLine{00156\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}}\&\ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a3b7dc05f0283071bead9af34bc1c90f6}{operator=}}(\doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}}\&\&);}
\DoxyCodeLine{00157\ }
\DoxyCodeLine{00158\ \textcolor{keyword}{protected}:}
\DoxyCodeLine{00159\ \ \ \ \ \textcolor{keyword}{using\ }CsrMatrix\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{matrix::Csr<ValueType,\ IndexType>}};}
\DoxyCodeLine{00160\ }
\DoxyCodeLine{00161\ \ \ \ \ \textcolor{keywordtype}{void}\ apply\_impl(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00162\ }
\DoxyCodeLine{00163\ \ \ \ \ \textcolor{keywordtype}{void}\ apply\_impl(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ alpha,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ beta,}
\DoxyCodeLine{00164\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00165\ }
\DoxyCodeLine{00170\ \ \ \ \ \textcolor{keywordtype}{void}\ generate();}
\DoxyCodeLine{00171\ }
\DoxyCodeLine{00172\ \ \ \ \ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}}(std::shared\_ptr<const\ Executor>\ exec)}
\DoxyCodeLine{00173\ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}}>(\doxymbox{\hyperlink{namespacestd}{std}}::move(exec))}
\DoxyCodeLine{00174\ \ \ \ \ \{\}}
\DoxyCodeLine{00175\ }
\DoxyCodeLine{00176\ \ \ \ \ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs_a6eed5049026b95714bd899db0fb78945}{LowerTrs}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1solver_1_1Factory}{Factory}}*\ factory,}
\DoxyCodeLine{00177\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ LinOp>\ system\_matrix)}
\DoxyCodeLine{00178\ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs}{LowerTrs}}>(factory-\/>get\_executor(),}
\DoxyCodeLine{00179\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko}{gko}}::\doxymbox{\hyperlink{namespacegko_aacad7f87b38d3f26674ed034d442a1a0}{transpose}}(system\_matrix-\/>get\_size())),}
\DoxyCodeLine{00180\ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1solver_1_1EnableSolverBase}{EnableSolverBase}}<\doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs}{LowerTrs}}<ValueType,\ IndexType>,\ CsrMatrix>\{}
\DoxyCodeLine{00181\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_ae4916d7f4a38162b665935d0adfb3825}{copy\_and\_convert\_to<CsrMatrix>}}(factory-\/>get\_executor(),}
\DoxyCodeLine{00182\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ system\_matrix)\},}
\DoxyCodeLine{00183\ \ \ \ \ \ \ \ \ \ \ parameters\_\{factory-\/>get\_parameters()\}}
\DoxyCodeLine{00184\ \ \ \ \ \{}
\DoxyCodeLine{00185\ \ \ \ \ \ \ \ \ this-\/>generate();}
\DoxyCodeLine{00186\ \ \ \ \ \}}
\DoxyCodeLine{00187\ }
\DoxyCodeLine{00188\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00189\ \ \ \ \ std::shared\_ptr<solver::SolveStruct>\ solve\_struct\_;}
\DoxyCodeLine{00190\ \};}
\DoxyCodeLine{00191\ }
\DoxyCodeLine{00192\ }
\DoxyCodeLine{00193\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00194\ \textcolor{keyword}{struct\ }\doxymbox{\hyperlink{structgko_1_1solver_1_1workspace__traits}{workspace\_traits}}<\doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs}{LowerTrs}}<ValueType,\ IndexType>>\ \{}
\DoxyCodeLine{00195\ \ \ \ \ \textcolor{keyword}{using\ }Solver\ =\ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs}{LowerTrs<ValueType,\ IndexType>}};}
\DoxyCodeLine{00196\ \ \ \ \ \textcolor{comment}{//\ number\ of\ vectors\ used\ by\ this\ workspace}}
\DoxyCodeLine{00197\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ num\_vectors(\textcolor{keyword}{const}\ Solver\&);}
\DoxyCodeLine{00198\ \ \ \ \ \textcolor{comment}{//\ number\ of\ arrays\ used\ by\ this\ workspace}}
\DoxyCodeLine{00199\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ num\_arrays(\textcolor{keyword}{const}\ Solver\&);}
\DoxyCodeLine{00200\ \ \ \ \ \textcolor{comment}{//\ array\ containing\ the\ num\_vectors\ names\ for\ the\ workspace\ vectors}}
\DoxyCodeLine{00201\ \ \ \ \ \textcolor{keyword}{static}\ std::vector<std::string>\ op\_names(\textcolor{keyword}{const}\ Solver\&);}
\DoxyCodeLine{00202\ \ \ \ \ \textcolor{comment}{//\ array\ containing\ the\ num\_arrays\ names\ for\ the\ workspace\ vectors}}
\DoxyCodeLine{00203\ \ \ \ \ \textcolor{keyword}{static}\ std::vector<std::string>\ array\_names(\textcolor{keyword}{const}\ Solver\&);}
\DoxyCodeLine{00204\ \ \ \ \ \textcolor{comment}{//\ array\ containing\ all\ varying\ scalar\ vectors\ (independent\ of\ problem\ size)}}
\DoxyCodeLine{00205\ \ \ \ \ \textcolor{keyword}{static}\ std::vector<int>\ scalars(\textcolor{keyword}{const}\ Solver\&);}
\DoxyCodeLine{00206\ \ \ \ \ \textcolor{comment}{//\ array\ containing\ all\ varying\ vectors\ (dependent\ on\ problem\ size)}}
\DoxyCodeLine{00207\ \ \ \ \ \textcolor{keyword}{static}\ std::vector<int>\ vectors(\textcolor{keyword}{const}\ Solver\&);}
\DoxyCodeLine{00208\ }
\DoxyCodeLine{00209\ \ \ \ \ \textcolor{comment}{//\ transposed\ input\ vector}}
\DoxyCodeLine{00210\ \ \ \ \ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ transposed\_b\ =\ 0;}
\DoxyCodeLine{00211\ \ \ \ \ \textcolor{comment}{//\ transposed\ output\ vector}}
\DoxyCodeLine{00212\ \ \ \ \ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ transposed\_x\ =\ 1;}
\DoxyCodeLine{00213\ \};}
\DoxyCodeLine{00214\ }
\DoxyCodeLine{00215\ }
\DoxyCodeLine{00233\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType\ =\ default\_precision,\ \textcolor{keyword}{typename}\ IndexType\ =\ \textcolor{keywordtype}{int}32>}
\DoxyCodeLine{00234\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}}\ :\ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<UpperTrs<ValueType,\ IndexType>>,}
\DoxyCodeLine{00235\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ EnableSolverBase<UpperTrs<ValueType,\ IndexType>,}
\DoxyCodeLine{00236\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ matrix::Csr<ValueType,\ IndexType>>,}
\DoxyCodeLine{00237\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1Transposable}{Transposable}}\ \{}
\DoxyCodeLine{00238\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}}>;}
\DoxyCodeLine{00239\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1EnablePolymorphicObject}{EnablePolymorphicObject}}<\doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}},\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}>;}
\DoxyCodeLine{00240\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs}{LowerTrs}}<ValueType,\ IndexType>;}
\DoxyCodeLine{00241\ \ \ \ \ GKO\_ASSERT\_SUPPORTED\_VALUE\_AND\_INDEX\_TYPE;}
\DoxyCodeLine{00242\ }
\DoxyCodeLine{00243\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00244\ \ \ \ \ \textcolor{keyword}{using\ }value\_type\ =\ ValueType;}
\DoxyCodeLine{00245\ \ \ \ \ \textcolor{keyword}{using\ }index\_type\ =\ IndexType;}
\DoxyCodeLine{00246\ \ \ \ \ \textcolor{keyword}{using\ }transposed\_type\ =\ \doxymbox{\hyperlink{classgko_1_1solver_1_1LowerTrs}{LowerTrs<ValueType,\ IndexType>}};}
\DoxyCodeLine{00247\ }
\DoxyCodeLine{00248\ \ \ \ \ std::unique\_ptr<LinOp>\ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_acdc6860bd2e29d900209d13ef5e512ca}{transpose}}()\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00249\ }
\DoxyCodeLine{00250\ \ \ \ \ std::unique\_ptr<LinOp>\ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_aaf05bef055786faa49c51f877cb00838}{conj\_transpose}}()\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00251\ }
\DoxyCodeLine{00252\ \ \ \ \ \doxymbox{\hyperlink{group__LinOp_ga1fc8e9d8be0c9ad2d72bc1ddfc6d8358}{GKO\_CREATE\_FACTORY\_PARAMETERS}}(parameters,\ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_1_1Factory}{Factory}})}
\DoxyCodeLine{00253\ \ \ \ \ \{}
\DoxyCodeLine{00260\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9579c98b1d85bf4ad02d7cb5b96fc771}{gko::size\_type}}\ \doxymbox{\hyperlink{group__LinOp_ga49d4c09c39f06b22bebbbfd1d8bfe450}{GKO\_FACTORY\_PARAMETER\_SCALAR}}(\doxymbox{\hyperlink{structgko_1_1solver_1_1UpperTrs_1_1parameters__type_a17d51d403340309c592e593020c3c007}{num\_rhs}},\ 1u);}
\DoxyCodeLine{00261\ }
\DoxyCodeLine{00266\ \ \ \ \ \ \ \ \ \textcolor{keywordtype}{bool}\ \doxymbox{\hyperlink{group__LinOp_ga49d4c09c39f06b22bebbbfd1d8bfe450}{GKO\_FACTORY\_PARAMETER\_SCALAR}}(\doxymbox{\hyperlink{structgko_1_1solver_1_1UpperTrs_1_1parameters__type_a94cbdba6732b08966b948a7bdb368b50}{unit\_diagonal}},\ \textcolor{keyword}{false});}
\DoxyCodeLine{00267\ }
\DoxyCodeLine{00274\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1solver_a68b5a3da69a6acb5f0bb656a96e4eb0a}{trisolve\_algorithm}}\ \doxymbox{\hyperlink{group__LinOp_ga49d4c09c39f06b22bebbbfd1d8bfe450}{GKO\_FACTORY\_PARAMETER\_SCALAR}}(}
\DoxyCodeLine{00275\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1solver_1_1UpperTrs_1_1parameters__type_ada5bbbcba5a02aa7eb0090b57e4ee5d2}{algorithm}},\ trisolve\_algorithm::sparselib);}
\DoxyCodeLine{00276\ \ \ \ \ \};}
\DoxyCodeLine{00277\ \ \ \ \ \doxymbox{\hyperlink{group__LinOp_ga8e0af90ec2414b768266f77cedffc309}{GKO\_ENABLE\_LIN\_OP\_FACTORY}}(\doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}},\ parameters,\ Factory);}
\DoxyCodeLine{00278\ \ \ \ \ \doxymbox{\hyperlink{group__LinOp_ga521f65604cc4cf427dcb2ecfa49b757c}{GKO\_ENABLE\_BUILD\_METHOD}}(Factory);}
\DoxyCodeLine{00279\ }
\DoxyCodeLine{00293\ \ \ \ \ \textcolor{keyword}{static}\ parameters\_type\ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_ae85f3117f3e43e0c17d30ed0b78e9176}{parse}}(}
\DoxyCodeLine{00294\ \ \ \ \ \ \ \ \ \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{00295\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1config_1_1type__descriptor}{config::type\_descriptor}}\&\ td\_for\_child\ =}
\DoxyCodeLine{00296\ \ \ \ \ \ \ \ \ \ \ \ \ config::make\_type\_descriptor<ValueType,\ IndexType>());}
\DoxyCodeLine{00297\ }
\DoxyCodeLine{00303\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}}\&);}
\DoxyCodeLine{00304\ }
\DoxyCodeLine{00311\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a97322e2b1e6bcce67f074f7fc5dd7cd1}{UpperTrs}}(\doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}}\&\&);}
\DoxyCodeLine{00312\ }
\DoxyCodeLine{00318\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}}\&\ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_ad11176eb8ed0bc9683db774a3bf35bbe}{operator=}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}}\&);}
\DoxyCodeLine{00319\ }
\DoxyCodeLine{00325\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}}\&\ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_ac850a6f0b9152fe5966dfc7b50fe96bf}{operator=}}(\doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}}\&\&);}
\DoxyCodeLine{00326\ }
\DoxyCodeLine{00327\ \textcolor{keyword}{protected}:}
\DoxyCodeLine{00328\ \ \ \ \ \textcolor{keyword}{using\ }CsrMatrix\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{matrix::Csr<ValueType,\ IndexType>}};}
\DoxyCodeLine{00329\ }
\DoxyCodeLine{00330\ \ \ \ \ \textcolor{keywordtype}{void}\ apply\_impl(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00331\ }
\DoxyCodeLine{00332\ \ \ \ \ \textcolor{keywordtype}{void}\ apply\_impl(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ alpha,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ b,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ beta,}
\DoxyCodeLine{00333\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00334\ }
\DoxyCodeLine{00339\ \ \ \ \ \textcolor{keywordtype}{void}\ generate();}
\DoxyCodeLine{00340\ }
\DoxyCodeLine{00341\ \ \ \ \ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}}(std::shared\_ptr<const\ Executor>\ exec)}
\DoxyCodeLine{00342\ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}}>(\doxymbox{\hyperlink{namespacestd}{std}}::move(exec))}
\DoxyCodeLine{00343\ \ \ \ \ \{\}}
\DoxyCodeLine{00344\ }
\DoxyCodeLine{00345\ \ \ \ \ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs_a9fc8a602b284e8923b6a30135c84c437}{UpperTrs}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1solver_1_1Factory}{Factory}}*\ factory,}
\DoxyCodeLine{00346\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ LinOp>\ system\_matrix)}
\DoxyCodeLine{00347\ \ \ \ \ \ \ \ \ :\ \doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs}{UpperTrs}}>(factory-\/>get\_executor(),}
\DoxyCodeLine{00348\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko}{gko}}::\doxymbox{\hyperlink{namespacegko_aacad7f87b38d3f26674ed034d442a1a0}{transpose}}(system\_matrix-\/>get\_size())),}
\DoxyCodeLine{00349\ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1solver_1_1EnableSolverBase}{EnableSolverBase}}<\doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs}{UpperTrs}}<ValueType,\ IndexType>,\ CsrMatrix>\{}
\DoxyCodeLine{00350\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_ae4916d7f4a38162b665935d0adfb3825}{copy\_and\_convert\_to<CsrMatrix>}}(factory-\/>get\_executor(),}
\DoxyCodeLine{00351\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ system\_matrix)\},}
\DoxyCodeLine{00352\ \ \ \ \ \ \ \ \ \ \ parameters\_\{factory-\/>get\_parameters()\}}
\DoxyCodeLine{00353\ \ \ \ \ \{}
\DoxyCodeLine{00354\ \ \ \ \ \ \ \ \ this-\/>generate();}
\DoxyCodeLine{00355\ \ \ \ \ \}}
\DoxyCodeLine{00356\ }
\DoxyCodeLine{00357\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00358\ \ \ \ \ std::shared\_ptr<solver::SolveStruct>\ solve\_struct\_;}
\DoxyCodeLine{00359\ \};}
\DoxyCodeLine{00360\ }
\DoxyCodeLine{00361\ }
\DoxyCodeLine{00362\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00363\ \textcolor{keyword}{struct\ }\doxymbox{\hyperlink{structgko_1_1solver_1_1workspace__traits}{workspace\_traits}}<\doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs}{UpperTrs}}<ValueType,\ IndexType>>\ \{}
\DoxyCodeLine{00364\ \ \ \ \ \textcolor{keyword}{using\ }Solver\ =\ \doxymbox{\hyperlink{classgko_1_1solver_1_1UpperTrs}{UpperTrs<ValueType,\ IndexType>}};}
\DoxyCodeLine{00365\ \ \ \ \ \textcolor{comment}{//\ number\ of\ vectors\ used\ by\ this\ workspace}}
\DoxyCodeLine{00366\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ num\_vectors(\textcolor{keyword}{const}\ Solver\&);}
\DoxyCodeLine{00367\ \ \ \ \ \textcolor{comment}{//\ number\ of\ arrays\ used\ by\ this\ workspace}}
\DoxyCodeLine{00368\ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ num\_arrays(\textcolor{keyword}{const}\ Solver\&);}
\DoxyCodeLine{00369\ \ \ \ \ \textcolor{comment}{//\ array\ containing\ the\ num\_vectors\ names\ for\ the\ workspace\ vectors}}
\DoxyCodeLine{00370\ \ \ \ \ \textcolor{keyword}{static}\ std::vector<std::string>\ op\_names(\textcolor{keyword}{const}\ Solver\&);}
\DoxyCodeLine{00371\ \ \ \ \ \textcolor{comment}{//\ array\ containing\ the\ num\_arrays\ names\ for\ the\ workspace\ vectors}}
\DoxyCodeLine{00372\ \ \ \ \ \textcolor{keyword}{static}\ std::vector<std::string>\ array\_names(\textcolor{keyword}{const}\ Solver\&);}
\DoxyCodeLine{00373\ \ \ \ \ \textcolor{comment}{//\ array\ containing\ all\ varying\ scalar\ vectors\ (independent\ of\ problem\ size)}}
\DoxyCodeLine{00374\ \ \ \ \ \textcolor{keyword}{static}\ std::vector<int>\ scalars(\textcolor{keyword}{const}\ Solver\&);}
\DoxyCodeLine{00375\ \ \ \ \ \textcolor{comment}{//\ array\ containing\ all\ varying\ vectors\ (dependent\ on\ problem\ size)}}
\DoxyCodeLine{00376\ \ \ \ \ \textcolor{keyword}{static}\ std::vector<int>\ vectors(\textcolor{keyword}{const}\ Solver\&);}
\DoxyCodeLine{00377\ }
\DoxyCodeLine{00378\ \ \ \ \ \textcolor{comment}{//\ transposed\ input\ vector}}
\DoxyCodeLine{00379\ \ \ \ \ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ transposed\_b\ =\ 0;}
\DoxyCodeLine{00380\ \ \ \ \ \textcolor{comment}{//\ transposed\ output\ vector}}
\DoxyCodeLine{00381\ \ \ \ \ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ transposed\_x\ =\ 1;}
\DoxyCodeLine{00382\ \};}
\DoxyCodeLine{00383\ }
\DoxyCodeLine{00384\ }
\DoxyCodeLine{00385\ \}\ \ \textcolor{comment}{//\ namespace\ solver}}
\DoxyCodeLine{00386\ \}\ \ \textcolor{comment}{//\ namespace\ gko}}
\DoxyCodeLine{00387\ }
\DoxyCodeLine{00388\ }
\DoxyCodeLine{00389\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_PUBLIC\_CORE\_SOLVER\_TRIANGULAR\_HPP\_}}

\end{DoxyCode}
