\doxysection{matrix.\+hpp}
\hypertarget{matrix_8hpp_source}{}\label{matrix_8hpp_source}\index{ginkgo/core/distributed/matrix.hpp@{ginkgo/core/distributed/matrix.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\_DISTRIBUTED\_MATRIX\_HPP\_}}
\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#define\ GKO\_PUBLIC\_CORE\_DISTRIBUTED\_MATRIX\_HPP\_}}
\DoxyCodeLine{00007\ }
\DoxyCodeLine{00008\ }
\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ <ginkgo/config.hpp>}}
\DoxyCodeLine{00010\ }
\DoxyCodeLine{00011\ }
\DoxyCodeLine{00012\ \textcolor{preprocessor}{\#if\ GINKGO\_BUILD\_MPI}}
\DoxyCodeLine{00013\ }
\DoxyCodeLine{00014\ }
\DoxyCodeLine{00015\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/dense\_cache.hpp>}}
\DoxyCodeLine{00016\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/lin\_op.hpp>}}
\DoxyCodeLine{00017\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/mpi.hpp>}}
\DoxyCodeLine{00018\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/std\_extensions.hpp>}}
\DoxyCodeLine{00019\ \textcolor{preprocessor}{\#include\ <ginkgo/core/distributed/base.hpp>}}
\DoxyCodeLine{00020\ \textcolor{preprocessor}{\#include\ <ginkgo/core/distributed/index\_map.hpp>}}
\DoxyCodeLine{00021\ \textcolor{preprocessor}{\#include\ <ginkgo/core/distributed/row\_gatherer.hpp>}}
\DoxyCodeLine{00022\ \textcolor{preprocessor}{\#include\ <ginkgo/core/distributed/vector\_cache.hpp>}}
\DoxyCodeLine{00023\ }
\DoxyCodeLine{00024\ }
\DoxyCodeLine{00025\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko}{gko}}\ \{}
\DoxyCodeLine{00026\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1matrix}{matrix}}\ \{}
\DoxyCodeLine{00027\ }
\DoxyCodeLine{00028\ }
\DoxyCodeLine{00029\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00030\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1matrix_1_1Csr}{Csr}};}
\DoxyCodeLine{00031\ }
\DoxyCodeLine{00032\ }
\DoxyCodeLine{00033\ \}}
\DoxyCodeLine{00034\ }
\DoxyCodeLine{00035\ }
\DoxyCodeLine{00036\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1multigrid}{multigrid}}\ \{}
\DoxyCodeLine{00037\ }
\DoxyCodeLine{00038\ }
\DoxyCodeLine{00039\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00040\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1multigrid_1_1Pgm}{Pgm}};}
\DoxyCodeLine{00041\ }
\DoxyCodeLine{00042\ }
\DoxyCodeLine{00043\ \}}
\DoxyCodeLine{00044\ }
\DoxyCodeLine{00045\ }
\DoxyCodeLine{00046\ \textcolor{keyword}{namespace\ }detail\ \{}
\DoxyCodeLine{00047\ }
\DoxyCodeLine{00048\ }
\DoxyCodeLine{00053\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ Builder,\ \textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType,}
\DoxyCodeLine{00054\ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}\ =\ \textcolor{keywordtype}{void}>}
\DoxyCodeLine{00055\ \textcolor{keyword}{struct\ }is\_matrix\_type\_builder\ :\ std::false\_type\ \{\};}
\DoxyCodeLine{00056\ }
\DoxyCodeLine{00057\ }
\DoxyCodeLine{00058\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ Builder,\ \textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00059\ \textcolor{keyword}{struct\ }is\_matrix\_type\_builder<}
\DoxyCodeLine{00060\ \ \ \ \ Builder,\ ValueType,\ IndexType,}
\DoxyCodeLine{00061\ \ \ \ \ xstd::void\_t<}
\DoxyCodeLine{00062\ \ \ \ \ \ \ \ \ decltype(std::declval<Builder>().template\ create<ValueType,\ IndexType>(}
\DoxyCodeLine{00063\ \ \ \ \ \ \ \ \ \ \ \ \ std::declval<std::shared\_ptr<const\ Executor>>()))>>}
\DoxyCodeLine{00064\ \ \ \ \ :\ std::true\_type\ \{\};}
\DoxyCodeLine{00065\ }
\DoxyCodeLine{00066\ }
\DoxyCodeLine{00067\ \textcolor{keyword}{template}\ <\textcolor{keyword}{template}\ <\textcolor{keyword}{typename},\ \textcolor{keyword}{typename}>\ \textcolor{keyword}{class\ }MatrixType,}
\DoxyCodeLine{00068\ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}...\ CreateArgs>}
\DoxyCodeLine{00069\ \textcolor{keyword}{struct\ }MatrixTypeBuilderFromValueAndIndex\ \{}
\DoxyCodeLine{00070\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType,\ std::size\_t...\ I>}
\DoxyCodeLine{00071\ \ \ \ \ \textcolor{keyword}{auto}\ create\_impl(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00072\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::index\_sequence<I...>)}
\DoxyCodeLine{00073\ \ \ \ \ \{}
\DoxyCodeLine{00074\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ MatrixType<ValueType,\ IndexType>::create(}
\DoxyCodeLine{00075\ \ \ \ \ \ \ \ \ \ \ \ \ exec,\ std::get<I>(create\_args)...);}
\DoxyCodeLine{00076\ \ \ \ \ \}}
\DoxyCodeLine{00077\ }
\DoxyCodeLine{00078\ }
\DoxyCodeLine{00079\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ IndexType>}
\DoxyCodeLine{00080\ \ \ \ \ \textcolor{keyword}{auto}\ create(std::shared\_ptr<const\ Executor>\ exec)}
\DoxyCodeLine{00081\ \ \ \ \ \{}
\DoxyCodeLine{00082\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ with\ c++17\ we\ could\ use\ std::apply}}
\DoxyCodeLine{00083\ \ \ \ \ \ \ \ \ \textcolor{keyword}{static}\ \textcolor{keyword}{constexpr}\ \textcolor{keyword}{auto}\ size\ =\ \textcolor{keyword}{sizeof}...(CreateArgs);}
\DoxyCodeLine{00084\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ create\_impl<ValueType,\ IndexType>(}
\DoxyCodeLine{00085\ \ \ \ \ \ \ \ \ \ \ \ \ std::move(exec),\ std::make\_index\_sequence<size>\{\});}
\DoxyCodeLine{00086\ \ \ \ \ \}}
\DoxyCodeLine{00087\ }
\DoxyCodeLine{00088\ \ \ \ \ std::tuple<CreateArgs...>\ create\_args;}
\DoxyCodeLine{00089\ \};}
\DoxyCodeLine{00090\ }
\DoxyCodeLine{00091\ }
\DoxyCodeLine{00092\ \}\ \ \textcolor{comment}{//\ namespace\ detail}}
\DoxyCodeLine{00093\ }
\DoxyCodeLine{00094\ }
\DoxyCodeLine{00126\ \textcolor{keyword}{template}\ <\textcolor{keyword}{template}\ <\textcolor{keyword}{typename},\ \textcolor{keyword}{typename}>\ \textcolor{keyword}{class\ }MatrixType,\ \textcolor{keyword}{typename}...\ Args>}
\DoxyCodeLine{00127\ \textcolor{keyword}{auto}\ \doxymbox{\hyperlink{namespacegko_a537803d962d07cf43e1e0cbc9f6a3f8b}{with\_matrix\_type}}(Args\&\&...\ create\_args)}
\DoxyCodeLine{00128\ \{}
\DoxyCodeLine{00129\ \ \ \ \ \textcolor{keywordflow}{return}\ detail::MatrixTypeBuilderFromValueAndIndex<MatrixType,\ Args...>\{}
\DoxyCodeLine{00130\ \ \ \ \ \ \ \ \ std::forward\_as\_tuple(create\_args...)\};}
\DoxyCodeLine{00131\ \}}
\DoxyCodeLine{00132\ }
\DoxyCodeLine{00133\ }
\DoxyCodeLine{00134\ \textcolor{keyword}{namespace\ }experimental\ \{}
\DoxyCodeLine{00135\ \textcolor{keyword}{namespace\ }distributed\ \{}
\DoxyCodeLine{00136\ }
\DoxyCodeLine{00137\ }
\DoxyCodeLine{00147\ \textcolor{keyword}{enum\ class}\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a4b66bc2bbe95fe0a818a5f4423acbb4e}{assembly\_mode}}\ \{\ communicate,\ local\_only\ \};}
\DoxyCodeLine{00148\ }
\DoxyCodeLine{00149\ }
\DoxyCodeLine{00150\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ LocalIndexType,\ \textcolor{keyword}{typename}\ GlobalIndexType>}
\DoxyCodeLine{00151\ \textcolor{keyword}{class\ }Partition;}
\DoxyCodeLine{00152\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType>}
\DoxyCodeLine{00153\ \textcolor{keyword}{class\ }Vector;}
\DoxyCodeLine{00154\ }
\DoxyCodeLine{00155\ }
\DoxyCodeLine{00260\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType\ =\ \doxymbox{\hyperlink{namespacegko_a89637c833af7ae805802226d97cebebf}{default\_precision}},}
\DoxyCodeLine{00261\ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}\ LocalIndexType\ =\ \doxymbox{\hyperlink{namespacegko_a16bd14c10900eb804d784908d8aab5ab}{int32}},\ \textcolor{keyword}{typename}\ GlobalIndexType\ =\ \doxymbox{\hyperlink{namespacegko_a913ec044df518649fa5a891f8dffae34}{int64}}>}
\DoxyCodeLine{00262\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}}
\DoxyCodeLine{00263\ \ \ \ \ :\ \textcolor{keyword}{public}\ \doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<Matrix<ValueType,\ LocalIndexType,\ GlobalIndexType>>,}
\DoxyCodeLine{00264\ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<}
\DoxyCodeLine{00265\ \ \ \ \ \ \ \ \ \ \ Matrix<next\_precision<ValueType>,\ LocalIndexType,\ GlobalIndexType>>,}
\DoxyCodeLine{00266\ \textcolor{preprocessor}{\#if\ GINKGO\_ENABLE\_HALF\ ||\ GINKGO\_ENABLE\_BFLOAT16}}
\DoxyCodeLine{00267\ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<Matrix<next\_precision<ValueType,\ 2>,\ LocalIndexType,}
\DoxyCodeLine{00268\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ GlobalIndexType>>,}
\DoxyCodeLine{00269\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00270\ \textcolor{preprocessor}{\#if\ GINKGO\_ENABLE\_HALF\ \&\&\ GINKGO\_ENABLE\_BFLOAT16}}
\DoxyCodeLine{00271\ \ \ \ \ \ \ \textcolor{keyword}{public}\ ConvertibleTo<Matrix<next\_precision<ValueType,\ 3>,\ LocalIndexType,}
\DoxyCodeLine{00272\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ GlobalIndexType>>,}
\DoxyCodeLine{00273\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00274\ \ \ \ \ \ \ \textcolor{keyword}{public}\ DistributedBase\ \{}
\DoxyCodeLine{00275\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1EnablePolymorphicObject}{EnablePolymorphicObject}}<\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}},\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}>;}
\DoxyCodeLine{00276\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}<\doxymbox{\hyperlink{namespacegko_ada2119004771922e8f7fcb6910a0363c}{previous\_precision}}<ValueType>,\ LocalIndexType,}
\DoxyCodeLine{00277\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ GlobalIndexType>;}
\DoxyCodeLine{00278\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1multigrid_1_1Pgm}{multigrid::Pgm}}<ValueType,\ LocalIndexType>;}
\DoxyCodeLine{00279\ \ \ \ \ GKO\_ASSERT\_SUPPORTED\_VALUE\_AND\_DIST\_INDEX\_TYPE;}
\DoxyCodeLine{00280\ }
\DoxyCodeLine{00281\ \textcolor{keyword}{public}:}
\DoxyCodeLine{00282\ \ \ \ \ \textcolor{keyword}{using\ }value\_type\ =\ ValueType;}
\DoxyCodeLine{00283\ \ \ \ \ \textcolor{keyword}{using\ }index\_type\ =\ GlobalIndexType;}
\DoxyCodeLine{00284\ \ \ \ \ \textcolor{keyword}{using\ }local\_index\_type\ =\ LocalIndexType;}
\DoxyCodeLine{00285\ \ \ \ \ \textcolor{keyword}{using\ }global\_index\_type\ =\ GlobalIndexType;}
\DoxyCodeLine{00286\ \ \ \ \ \textcolor{keyword}{using\ }global\_vector\_type\ =}
\DoxyCodeLine{00287\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{gko::experimental::distributed::Vector<ValueType>}};}
\DoxyCodeLine{00288\ \ \ \ \ \textcolor{keyword}{using\ }local\_vector\_type\ =\ \textcolor{keyword}{typename}\ global\_vector\_type::local\_vector\_type;}
\DoxyCodeLine{00289\ }
\DoxyCodeLine{00290\ \ \ \ \ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}>::convert\_to;}
\DoxyCodeLine{00291\ \ \ \ \ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{classgko_1_1EnableLinOp}{EnableLinOp}}<\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}>::move\_to;}
\DoxyCodeLine{00292\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix<next\_precision<ValueType>}},\ LocalIndexType,}
\DoxyCodeLine{00293\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ GlobalIndexType>>::convert\_to;}
\DoxyCodeLine{00294\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix<next\_precision<ValueType>}},\ LocalIndexType,}
\DoxyCodeLine{00295\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ GlobalIndexType>>::move\_to;}
\DoxyCodeLine{00296\ }
\DoxyCodeLine{00297\ \ \ \ \ \textcolor{keywordtype}{void}\ convert\_to(\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}<\doxymbox{\hyperlink{namespacegko_aee37f85b217e5e26fe64207d41fa4bac}{next\_precision<value\_type>}},\ local\_index\_type,}
\DoxyCodeLine{00298\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ global\_index\_type>*\ result)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00299\ }
\DoxyCodeLine{00300\ \ \ \ \ \textcolor{keywordtype}{void}\ move\_to(\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}<\doxymbox{\hyperlink{namespacegko_aee37f85b217e5e26fe64207d41fa4bac}{next\_precision<value\_type>}},\ local\_index\_type,}
\DoxyCodeLine{00301\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ global\_index\_type>*\ result)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00302\ }
\DoxyCodeLine{00303\ \textcolor{preprocessor}{\#if\ GINKGO\_ENABLE\_HALF\ ||\ GINKGO\_ENABLE\_BFLOAT16}}
\DoxyCodeLine{00304\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}<\doxymbox{\hyperlink{namespacegko_ada2119004771922e8f7fcb6910a0363c}{previous\_precision}}<ValueType,\ 2>,\ LocalIndexType,}
\DoxyCodeLine{00305\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ GlobalIndexType>;}
\DoxyCodeLine{00306\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix<next\_precision<value\_type,\ 2>}},\ local\_index\_type,}
\DoxyCodeLine{00307\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ global\_index\_type>>::convert\_to;}
\DoxyCodeLine{00308\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix<next\_precision<value\_type,\ 2>}},\ local\_index\_type,}
\DoxyCodeLine{00309\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ global\_index\_type>>::move\_to;}
\DoxyCodeLine{00310\ }
\DoxyCodeLine{00311\ \ \ \ \ \textcolor{keywordtype}{void}\ convert\_to(\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}<\doxymbox{\hyperlink{namespacegko_aee37f85b217e5e26fe64207d41fa4bac}{next\_precision<value\_type,\ 2>}},\ local\_index\_type,}
\DoxyCodeLine{00312\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ global\_index\_type>*\ result)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00313\ }
\DoxyCodeLine{00314\ \ \ \ \ \textcolor{keywordtype}{void}\ move\_to(\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}<\doxymbox{\hyperlink{namespacegko_aee37f85b217e5e26fe64207d41fa4bac}{next\_precision<value\_type,\ 2>}},\ local\_index\_type,}
\DoxyCodeLine{00315\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ global\_index\_type>*\ result)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00316\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00317\ }
\DoxyCodeLine{00318\ \textcolor{preprocessor}{\#if\ GINKGO\_ENABLE\_HALF\ \&\&\ GINKGO\_ENABLE\_BFLOAT16}}
\DoxyCodeLine{00319\ \ \ \ \ \textcolor{keyword}{friend}\ \textcolor{keyword}{class\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}<\doxymbox{\hyperlink{namespacegko_ada2119004771922e8f7fcb6910a0363c}{previous\_precision}}<ValueType,\ 3>,\ LocalIndexType,}
\DoxyCodeLine{00320\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ GlobalIndexType>;}
\DoxyCodeLine{00321\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix<next\_precision<value\_type,\ 3>}},\ local\_index\_type,}
\DoxyCodeLine{00322\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ global\_index\_type>>::convert\_to;}
\DoxyCodeLine{00323\ \ \ \ \ \textcolor{keyword}{using\ }ConvertibleTo<\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix<next\_precision<value\_type,\ 3>}},\ local\_index\_type,}
\DoxyCodeLine{00324\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ global\_index\_type>>::move\_to;}
\DoxyCodeLine{00325\ }
\DoxyCodeLine{00326\ \ \ \ \ \textcolor{keywordtype}{void}\ convert\_to(\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}<\doxymbox{\hyperlink{namespacegko_aee37f85b217e5e26fe64207d41fa4bac}{next\_precision<value\_type,\ 3>}},\ local\_index\_type,}
\DoxyCodeLine{00327\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ global\_index\_type>*\ result)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00328\ }
\DoxyCodeLine{00329\ \ \ \ \ \textcolor{keywordtype}{void}\ move\_to(\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}<\doxymbox{\hyperlink{namespacegko_aee37f85b217e5e26fe64207d41fa4bac}{next\_precision<value\_type,\ 3>}},\ local\_index\_type,}
\DoxyCodeLine{00330\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ global\_index\_type>*\ result)\ \textcolor{keyword}{override};}
\DoxyCodeLine{00331\ \textcolor{preprocessor}{\#endif}\textcolor{preprocessor}{}}
\DoxyCodeLine{00349\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_aac99e854ec33cee5947041acdf0f1a19}{read\_distributed}}(}
\DoxyCodeLine{00350\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1device__matrix__data}{device\_matrix\_data<value\_type,\ global\_index\_type>}}\&\ data,}
\DoxyCodeLine{00351\ \ \ \ \ \ \ \ \ std::shared\_ptr<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Partition}{Partition<local\_index\_type,\ global\_index\_type>}}>}
\DoxyCodeLine{00352\ \ \ \ \ \ \ \ \ \ \ \ \ partition,}
\DoxyCodeLine{00353\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a4b66bc2bbe95fe0a818a5f4423acbb4e}{assembly\_mode}}\ assembly\_type\ =\ assembly\_mode::local\_only);}
\DoxyCodeLine{00354\ }
\DoxyCodeLine{00364\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a6d923b0ccaebc489c5a52342c70f2724}{read\_distributed}}(}
\DoxyCodeLine{00365\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1matrix__data}{matrix\_data<value\_type,\ global\_index\_type>}}\&\ data,}
\DoxyCodeLine{00366\ \ \ \ \ \ \ \ \ std::shared\_ptr<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Partition}{Partition<local\_index\_type,\ global\_index\_type>}}>}
\DoxyCodeLine{00367\ \ \ \ \ \ \ \ \ \ \ \ \ partition,}
\DoxyCodeLine{00368\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a4b66bc2bbe95fe0a818a5f4423acbb4e}{assembly\_mode}}\ assembly\_type\ =\ assembly\_mode::local\_only);}
\DoxyCodeLine{00369\ }
\DoxyCodeLine{00388\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a562825d88245f1a31b27d92e1c763399}{read\_distributed}}(}
\DoxyCodeLine{00389\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1device__matrix__data}{device\_matrix\_data<value\_type,\ global\_index\_type>}}\&\ data,}
\DoxyCodeLine{00390\ \ \ \ \ \ \ \ \ std::shared\_ptr<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Partition}{Partition<local\_index\_type,\ global\_index\_type>}}>}
\DoxyCodeLine{00391\ \ \ \ \ \ \ \ \ \ \ \ \ row\_partition,}
\DoxyCodeLine{00392\ \ \ \ \ \ \ \ \ std::shared\_ptr<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Partition}{Partition<local\_index\_type,\ global\_index\_type>}}>}
\DoxyCodeLine{00393\ \ \ \ \ \ \ \ \ \ \ \ \ col\_partition,}
\DoxyCodeLine{00394\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a4b66bc2bbe95fe0a818a5f4423acbb4e}{assembly\_mode}}\ assembly\_type\ =\ assembly\_mode::local\_only);}
\DoxyCodeLine{00395\ }
\DoxyCodeLine{00405\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a37b00941e52ca19c3bbaa6c9f8f7bf3d}{read\_distributed}}(}
\DoxyCodeLine{00406\ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{structgko_1_1matrix__data}{matrix\_data<value\_type,\ global\_index\_type>}}\&\ data,}
\DoxyCodeLine{00407\ \ \ \ \ \ \ \ \ std::shared\_ptr<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Partition}{Partition<local\_index\_type,\ global\_index\_type>}}>}
\DoxyCodeLine{00408\ \ \ \ \ \ \ \ \ \ \ \ \ row\_partition,}
\DoxyCodeLine{00409\ \ \ \ \ \ \ \ \ std::shared\_ptr<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Partition}{Partition<local\_index\_type,\ global\_index\_type>}}>}
\DoxyCodeLine{00410\ \ \ \ \ \ \ \ \ \ \ \ \ col\_partition,}
\DoxyCodeLine{00411\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a4b66bc2bbe95fe0a818a5f4423acbb4e}{assembly\_mode}}\ assembly\_type\ =\ assembly\_mode::local\_only);}
\DoxyCodeLine{00412\ }
\DoxyCodeLine{00418\ \ \ \ \ std::shared\_ptr<const\ LinOp>\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a4374c5ac0f79f3a3ba4fb33381036e6a}{get\_local\_matrix}}()\textcolor{keyword}{\ const\ }\{\ \textcolor{keywordflow}{return}\ local\_mtx\_;\ \}}
\DoxyCodeLine{00419\ }
\DoxyCodeLine{00425\ \ \ \ \ std::shared\_ptr<const\ LinOp>\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a01b3972a66f0f0b3139a9473e39ff8a7}{get\_non\_local\_matrix}}()\textcolor{keyword}{\ const}}
\DoxyCodeLine{00426\ \textcolor{keyword}{\ \ \ \ }\{}
\DoxyCodeLine{00427\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ non\_local\_mtx\_;}
\DoxyCodeLine{00428\ \ \ \ \ \}}
\DoxyCodeLine{00429\ }
\DoxyCodeLine{00435\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}\&\ other);}
\DoxyCodeLine{00436\ }
\DoxyCodeLine{00442\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a0d91aaf63e48ced333e4d63f26a91f71}{Matrix}}(\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}\&\&\ other)\ \textcolor{keyword}{noexcept};}
\DoxyCodeLine{00443\ }
\DoxyCodeLine{00452\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}\&\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ae885f80364ed6cc2997915691f0a5d74}{operator=}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}\&\ other);}
\DoxyCodeLine{00453\ }
\DoxyCodeLine{00462\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}\&\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ae1c34aa1a2e26a83bbdb01a0b53ec5f4}{operator=}}(\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}\&\&\ other);}
\DoxyCodeLine{00463\ }
\DoxyCodeLine{00473\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<Matrix>\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a566c407ff14952d75e25c4b4e86cb870}{create}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00474\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::communicator}}\ comm);}
\DoxyCodeLine{00475\ }
\DoxyCodeLine{00489\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<Matrix>\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a93b168355a1b148c87fdbcdfd195e4ff}{create}}(}
\DoxyCodeLine{00490\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00491\ \ \ \ \ \ \ \ \ std::shared\_ptr<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer<LocalIndexType>}}>}
\DoxyCodeLine{00492\ \ \ \ \ \ \ \ \ \ \ \ \ row\_gatherer\_template);}
\DoxyCodeLine{00493\ }
\DoxyCodeLine{00514\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ MatrixType,}
\DoxyCodeLine{00515\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}\ =\ std::enable\_if\_t<gko::detail::is\_matrix\_type\_builder<}
\DoxyCodeLine{00516\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ MatrixType,\ ValueType,\ LocalIndexType>::value>>}
\DoxyCodeLine{00517\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<Matrix>\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ad9b7db16f5fa43b2a5d1e2a0e8e24c16}{create}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00518\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::communicator}}\ comm,}
\DoxyCodeLine{00519\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ MatrixType\ matrix\_template)}
\DoxyCodeLine{00520\ \ \ \ \ \{}
\DoxyCodeLine{00521\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a566c407ff14952d75e25c4b4e86cb870}{create}}(}
\DoxyCodeLine{00522\ \ \ \ \ \ \ \ \ \ \ \ \ exec,\ comm,}
\DoxyCodeLine{00523\ \ \ \ \ \ \ \ \ \ \ \ \ matrix\_template.template\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a566c407ff14952d75e25c4b4e86cb870}{create<ValueType,\ LocalIndexType>}}(exec));}
\DoxyCodeLine{00524\ \ \ \ \ \}}
\DoxyCodeLine{00525\ }
\DoxyCodeLine{00554\ \ \ \ \ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ LocalMatrixType,\ \textcolor{keyword}{typename}\ NonLocalMatrixType,}
\DoxyCodeLine{00555\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{typename}\ =\ std::enable\_if\_t<}
\DoxyCodeLine{00556\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ gko::detail::is\_matrix\_type\_builder<}
\DoxyCodeLine{00557\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ LocalMatrixType,\ ValueType,\ LocalIndexType>::value\ \&\&}
\DoxyCodeLine{00558\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ gko::detail::is\_matrix\_type\_builder<}
\DoxyCodeLine{00559\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ NonLocalMatrixType,\ ValueType,\ LocalIndexType>::value>>}
\DoxyCodeLine{00560\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<Matrix>\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ac721453a13127fcc78371de2215ac1d4}{create}}(}
\DoxyCodeLine{00561\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ Executor>\ exec,\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::communicator}}\ comm,}
\DoxyCodeLine{00562\ \ \ \ \ \ \ \ \ LocalMatrixType\ local\_matrix\_template,}
\DoxyCodeLine{00563\ \ \ \ \ \ \ \ \ NonLocalMatrixType\ non\_local\_matrix\_template)}
\DoxyCodeLine{00564\ \ \ \ \ \{}
\DoxyCodeLine{00565\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a566c407ff14952d75e25c4b4e86cb870}{create}}(}
\DoxyCodeLine{00566\ \ \ \ \ \ \ \ \ \ \ \ \ exec,\ comm,}
\DoxyCodeLine{00567\ \ \ \ \ \ \ \ \ \ \ \ \ local\_matrix\_template.template\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a566c407ff14952d75e25c4b4e86cb870}{create<ValueType,\ LocalIndexType>}}(}
\DoxyCodeLine{00568\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ exec),}
\DoxyCodeLine{00569\ \ \ \ \ \ \ \ \ \ \ \ \ non\_local\_matrix\_template}
\DoxyCodeLine{00570\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ .template\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a566c407ff14952d75e25c4b4e86cb870}{create<ValueType,\ LocalIndexType>}}(exec));}
\DoxyCodeLine{00571\ \ \ \ \ \}}
\DoxyCodeLine{00572\ }
\DoxyCodeLine{00587\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<Matrix>\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ae9a7a61467f6a08964880323ef216434}{create}}(}
\DoxyCodeLine{00588\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ Executor>\ exec,\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::communicator}}\ comm,}
\DoxyCodeLine{00589\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ matrix\_template);}
\DoxyCodeLine{00590\ }
\DoxyCodeLine{00607\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<Matrix>\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a39176cd542182e7cda0ef21cb1b21deb}{create}}(}
\DoxyCodeLine{00608\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ Executor>\ exec,\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::communicator}}\ comm,}
\DoxyCodeLine{00609\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ local\_matrix\_template,}
\DoxyCodeLine{00610\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ non\_local\_matrix\_template);}
\DoxyCodeLine{00611\ }
\DoxyCodeLine{00624\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<Matrix>\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a9b6f26916e92b780d54859f2284b48fd}{create}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00625\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::communicator}}\ comm,\ \doxymbox{\hyperlink{structgko_1_1dim}{dim<2>}}\ size,}
\DoxyCodeLine{00626\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<LinOp>\ local\_linop);}
\DoxyCodeLine{00627\ }
\DoxyCodeLine{00646\ \ \ \ \ [[deprecated(}
\DoxyCodeLine{00647\ \ \ \ \ \ \ \ \ \textcolor{stringliteral}{"{}Please\ use\ the\ overload\ with\ an\ index\_map\ instead."{}})]]\ \textcolor{keyword}{static}\ std::}
\DoxyCodeLine{00648\ \ \ \ \ \ \ \ \ unique\_ptr<Matrix>}
\DoxyCodeLine{00649\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_aa0128c0f0bfded6660279d217c70cbd5}{create}}(std::shared\_ptr<const\ Executor>\ exec,\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::communicator}}\ comm,}
\DoxyCodeLine{00650\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{structgko_1_1dim}{dim<2>}}\ size,\ std::shared\_ptr<LinOp>\ local\_linop,}
\DoxyCodeLine{00651\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<LinOp>\ non\_local\_linop,}
\DoxyCodeLine{00652\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::vector<comm\_index\_type>\ recv\_sizes,}
\DoxyCodeLine{00653\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::vector<comm\_index\_type>\ recv\_offsets,}
\DoxyCodeLine{00654\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1array}{array<local\_index\_type>}}\ recv\_gather\_idxs);}
\DoxyCodeLine{00655\ }
\DoxyCodeLine{00669\ \ \ \ \ \textcolor{keyword}{static}\ std::unique\_ptr<Matrix>\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a14efe7ed214c9be7fa957bcdfe37f2b3}{create}}(}
\DoxyCodeLine{00670\ \ \ \ \ \ \ \ \ std::shared\_ptr<const\ Executor>\ exec,\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::communicator}}\ comm,}
\DoxyCodeLine{00671\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1index__map}{index\_map<local\_index\_type,\ global\_index\_type>}}\ imap,}
\DoxyCodeLine{00672\ \ \ \ \ \ \ \ \ std::shared\_ptr<LinOp>\ local\_linop,}
\DoxyCodeLine{00673\ \ \ \ \ \ \ \ \ std::shared\_ptr<LinOp>\ non\_local\_linop);}
\DoxyCodeLine{00674\ }
\DoxyCodeLine{00682\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a4054a842c6914472f6ec8af1ea2e44be}{col\_scale}}(\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ global\_vector\_type>}}\ scaling\_factors);}
\DoxyCodeLine{00683\ }
\DoxyCodeLine{00691\ \ \ \ \ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_a7f9d815d3c67029267e3cb4b2b7da327}{row\_scale}}(\doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ global\_vector\_type>}}\ scaling\_factors);}
\DoxyCodeLine{00692\ }
\DoxyCodeLine{00693\ \textcolor{keyword}{protected}:}
\DoxyCodeLine{00694\ \ \ \ \ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00695\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::communicator}}\ comm);}
\DoxyCodeLine{00696\ }
\DoxyCodeLine{00697\ \ \ \ \ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00698\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1RowGatherer}{RowGatherer<LocalIndexType>}}>}
\DoxyCodeLine{00699\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ row\_gatherer\_template,}
\DoxyCodeLine{00700\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ local\_matrix\_template,}
\DoxyCodeLine{00701\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1ptr__param}{ptr\_param<const\ LinOp>}}\ non\_local\_matrix\_template);}
\DoxyCodeLine{00702\ }
\DoxyCodeLine{00703\ \ \ \ \ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00704\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::communicator}}\ comm,\ \doxymbox{\hyperlink{structgko_1_1dim}{dim<2>}}\ size,}
\DoxyCodeLine{00705\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<LinOp>\ local\_linop);}
\DoxyCodeLine{00706\ }
\DoxyCodeLine{00707\ \ \ \ \ \textcolor{keyword}{explicit}\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Matrix_ab6c64195b6d62cab3ac641668884e037}{Matrix}}(std::shared\_ptr<const\ Executor>\ exec,}
\DoxyCodeLine{00708\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1mpi_1_1communicator}{mpi::communicator}}\ comm,}
\DoxyCodeLine{00709\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1index__map}{index\_map<local\_index\_type,\ global\_index\_type>}}\ imap,}
\DoxyCodeLine{00710\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<LinOp>\ local\_linop,}
\DoxyCodeLine{00711\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ std::shared\_ptr<LinOp>\ non\_local\_linop);}
\DoxyCodeLine{00712\ }
\DoxyCodeLine{00713\ \ \ \ \ \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{00714\ }
\DoxyCodeLine{00715\ \ \ \ \ \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{00716\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ x)\ \textcolor{keyword}{const\ override};}
\DoxyCodeLine{00717\ }
\DoxyCodeLine{00718\ \textcolor{keyword}{private}:}
\DoxyCodeLine{00719\ \ \ \ \ std::shared\_ptr<RowGatherer<LocalIndexType>>\ row\_gatherer\_;}
\DoxyCodeLine{00720\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1index__map}{index\_map<local\_index\_type,\ global\_index\_type>}}\ imap\_;}
\DoxyCodeLine{00721\ \ \ \ \ gko::detail::ScalarCache\ one\_scalar\_;}
\DoxyCodeLine{00722\ \ \ \ \ detail::GenericVectorCache\ recv\_buffer\_;}
\DoxyCodeLine{00723\ \ \ \ \ detail::GenericVectorCache\ host\_recv\_buffer\_;}
\DoxyCodeLine{00724\ \ \ \ \ std::shared\_ptr<LinOp>\ local\_mtx\_;}
\DoxyCodeLine{00725\ \ \ \ \ std::shared\_ptr<LinOp>\ non\_local\_mtx\_;}
\DoxyCodeLine{00726\ \};}
\DoxyCodeLine{00727\ }
\DoxyCodeLine{00728\ }
\DoxyCodeLine{00729\ \}\ \ \textcolor{comment}{//\ namespace\ distributed}}
\DoxyCodeLine{00730\ \}\ \ \textcolor{comment}{//\ namespace\ experimental}}
\DoxyCodeLine{00731\ \}\ \ \textcolor{comment}{//\ namespace\ gko}}
\DoxyCodeLine{00732\ }
\DoxyCodeLine{00733\ }
\DoxyCodeLine{00734\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00735\ }
\DoxyCodeLine{00736\ }
\DoxyCodeLine{00737\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_PUBLIC\_CORE\_DISTRIBUTED\_MATRIX\_HPP\_}}

\end{DoxyCode}
