\doxysection{precision\+\_\+dispatch.\+hpp}
\hypertarget{precision__dispatch_8hpp_source}{}\label{precision__dispatch_8hpp_source}\index{ginkgo/core/base/precision\_dispatch.hpp@{ginkgo/core/base/precision\_dispatch.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\_BASE\_PRECISION\_DISPATCH\_HPP\_}}
\DoxyCodeLine{00006\ \textcolor{preprocessor}{\#define\ GKO\_PUBLIC\_CORE\_BASE\_PRECISION\_DISPATCH\_HPP\_}}
\DoxyCodeLine{00007\ }
\DoxyCodeLine{00008\ }
\DoxyCodeLine{00009\ \textcolor{preprocessor}{\#include\ <ginkgo/config.hpp>}}
\DoxyCodeLine{00010\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/math.hpp>}}
\DoxyCodeLine{00011\ \textcolor{preprocessor}{\#include\ <ginkgo/core/base/temporary\_conversion.hpp>}}
\DoxyCodeLine{00012\ \textcolor{preprocessor}{\#include\ <ginkgo/core/distributed/vector.hpp>}}
\DoxyCodeLine{00013\ \textcolor{preprocessor}{\#include\ <ginkgo/core/matrix/dense.hpp>}}
\DoxyCodeLine{00014\ }
\DoxyCodeLine{00015\ }
\DoxyCodeLine{00016\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko}{gko}}\ \{}
\DoxyCodeLine{00017\ }
\DoxyCodeLine{00018\ }
\DoxyCodeLine{00043\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Ptr>}
\DoxyCodeLine{00044\ detail::temporary\_conversion<std::conditional\_t<}
\DoxyCodeLine{00045\ \ \ \ \ std::is\_const<detail::pointee<Ptr>>::value,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<ValueType>}},}
\DoxyCodeLine{00046\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<ValueType>}}>>}
\DoxyCodeLine{00047\ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{make\_temporary\_conversion}}(Ptr\&\&\ \doxymbox{\hyperlink{namespacegko_1_1matrix}{matrix}})}
\DoxyCodeLine{00048\ \{}
\DoxyCodeLine{00049\ \ \ \ \ \textcolor{keyword}{using\ }Pointee\ =\ detail::pointee<Ptr>;}
\DoxyCodeLine{00050\ \ \ \ \ \textcolor{keyword}{using\ }Dense\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<ValueType>}};}
\DoxyCodeLine{00051\ \ \ \ \ \textcolor{keyword}{using\ }NextDense\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<next\_precision<ValueType>}}>;}
\DoxyCodeLine{00052\ \ \ \ \ \textcolor{keyword}{using\ }Next2Dense\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<next\_precision<ValueType,\ 2>}}>;}
\DoxyCodeLine{00053\ \ \ \ \ \textcolor{keyword}{using\ }Next3Dense\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<next\_precision<ValueType,\ 3>}}>;}
\DoxyCodeLine{00054\ \ \ \ \ \textcolor{keyword}{using\ }MaybeConstDense\ =}
\DoxyCodeLine{00055\ \ \ \ \ \ \ \ \ std::conditional\_t<std::is\_const<Pointee>::value,\ \textcolor{keyword}{const}\ Dense,\ Dense>;}
\DoxyCodeLine{00056\ \ \ \ \ \textcolor{keyword}{auto}\ result\ =}
\DoxyCodeLine{00057\ \ \ \ \ \ \ \ \ detail::temporary\_conversion<MaybeConstDense>::template\ create<}
\DoxyCodeLine{00058\ \ \ \ \ \ \ \ \ \ \ \ \ NextDense,\ Next2Dense,\ Next3Dense>(\doxymbox{\hyperlink{namespacegko_1_1matrix}{matrix}});}
\DoxyCodeLine{00059\ \ \ \ \ \textcolor{keywordflow}{if}\ (!result)\ \{}
\DoxyCodeLine{00060\ \ \ \ \ \ \ \ \ GKO\_NOT\_SUPPORTED(\doxymbox{\hyperlink{namespacegko_1_1matrix}{matrix}});}
\DoxyCodeLine{00061\ \ \ \ \ \}}
\DoxyCodeLine{00062\ \ \ \ \ \textcolor{keywordflow}{return}\ result;}
\DoxyCodeLine{00063\ \}}
\DoxyCodeLine{00064\ }
\DoxyCodeLine{00065\ }
\DoxyCodeLine{00080\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function,\ \textcolor{keyword}{typename}...\ Args>}
\DoxyCodeLine{00081\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a3c46f1caf8135f7492aa83d9ac3bc83e}{precision\_dispatch}}(Function\ fn,\ Args*...\ linops)}
\DoxyCodeLine{00082\ \{}
\DoxyCodeLine{00083\ \ \ \ \ fn(\doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{make\_temporary\_conversion<ValueType>}}(linops).get()...);}
\DoxyCodeLine{00084\ \}}
\DoxyCodeLine{00085\ }
\DoxyCodeLine{00086\ }
\DoxyCodeLine{00096\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function>}
\DoxyCodeLine{00097\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a98c5a37c89e32c0f2b567f8e73870e3a}{precision\_dispatch\_real\_complex}}(Function\ fn,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ in,\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ out)}
\DoxyCodeLine{00098\ \{}
\DoxyCodeLine{00099\ \ \ \ \ \textcolor{comment}{//\ do\ we\ need\ to\ convert\ complex\ Dense\ to\ real\ Dense?}}
\DoxyCodeLine{00100\ \ \ \ \ \textcolor{comment}{//\ all\ real\ dense\ vectors\ are\ intra-\/convertible,\ thus\ by\ casting\ to}}
\DoxyCodeLine{00101\ \ \ \ \ \textcolor{comment}{//\ ConvertibleTo<matrix::Dense<>>,\ we\ can\ check\ whether\ a\ LinOp\ is\ a\ real}}
\DoxyCodeLine{00102\ \ \ \ \ \textcolor{comment}{//\ dense\ matrix:}}
\DoxyCodeLine{00103\ \ \ \ \ \textcolor{keyword}{auto}\ complex\_to\_real\ =}
\DoxyCodeLine{00104\ \ \ \ \ \ \ \ \ !(\doxymbox{\hyperlink{namespacegko_a9b3e79911bb6145d7ba865dbe436b915}{is\_complex<ValueType>}}()\ ||}
\DoxyCodeLine{00105\ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }ConvertibleTo<matrix::Dense<>\textcolor{keyword}{>}*>(in));}
\DoxyCodeLine{00106\ \ \ \ \ \textcolor{keywordflow}{if}\ (complex\_to\_real)\ \{}
\DoxyCodeLine{00107\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_in\ =\ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{make\_temporary\_conversion<to\_complex<ValueType>}}>(in);}
\DoxyCodeLine{00108\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_out\ =\ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{make\_temporary\_conversion<to\_complex<ValueType>}}>(out);}
\DoxyCodeLine{00109\ \ \ \ \ \ \ \ \ \textcolor{keyword}{using\ }Dense\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<ValueType>}};}
\DoxyCodeLine{00110\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ These\ dynamic\_casts\ are\ only\ needed\ to\ make\ the\ code\ compile}}
\DoxyCodeLine{00111\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ If\ ValueType\ is\ complex,\ this\ branch\ will\ never\ be\ taken}}
\DoxyCodeLine{00112\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ If\ ValueType\ is\ real,\ the\ cast\ is\ a\ no-\/op}}
\DoxyCodeLine{00113\ \ \ \ \ \ \ \ \ fn(\textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }Dense*\textcolor{keyword}{>}(dense\_in-\/>create\_real\_view().get()),}
\DoxyCodeLine{00114\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}Dense*\textcolor{keyword}{>}(dense\_out-\/>create\_real\_view().get()));}
\DoxyCodeLine{00115\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00116\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a3c46f1caf8135f7492aa83d9ac3bc83e}{precision\_dispatch<ValueType>}}(fn,\ in,\ out);}
\DoxyCodeLine{00117\ \ \ \ \ \}}
\DoxyCodeLine{00118\ \}}
\DoxyCodeLine{00119\ }
\DoxyCodeLine{00120\ }
\DoxyCodeLine{00130\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function>}
\DoxyCodeLine{00131\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a98c5a37c89e32c0f2b567f8e73870e3a}{precision\_dispatch\_real\_complex}}(Function\ fn,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ alpha,}
\DoxyCodeLine{00132\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ in,\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ out)}
\DoxyCodeLine{00133\ \{}
\DoxyCodeLine{00134\ \ \ \ \ \textcolor{comment}{//\ do\ we\ need\ to\ convert\ complex\ Dense\ to\ real\ Dense?}}
\DoxyCodeLine{00135\ \ \ \ \ \textcolor{comment}{//\ all\ real\ dense\ vectors\ are\ intra-\/convertible,\ thus\ by\ casting\ to}}
\DoxyCodeLine{00136\ \ \ \ \ \textcolor{comment}{//\ ConvertibleTo<matrix::Dense<>>,\ we\ can\ check\ whether\ a\ LinOp\ is\ a\ real}}
\DoxyCodeLine{00137\ \ \ \ \ \textcolor{comment}{//\ dense\ matrix:}}
\DoxyCodeLine{00138\ \ \ \ \ \textcolor{keyword}{auto}\ complex\_to\_real\ =}
\DoxyCodeLine{00139\ \ \ \ \ \ \ \ \ !(\doxymbox{\hyperlink{namespacegko_a9b3e79911bb6145d7ba865dbe436b915}{is\_complex<ValueType>}}()\ ||}
\DoxyCodeLine{00140\ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }ConvertibleTo<matrix::Dense<>\textcolor{keyword}{>}*>(in));}
\DoxyCodeLine{00141\ \ \ \ \ \textcolor{keywordflow}{if}\ (complex\_to\_real)\ \{}
\DoxyCodeLine{00142\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_in\ =\ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{make\_temporary\_conversion<to\_complex<ValueType>}}>(in);}
\DoxyCodeLine{00143\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_out\ =\ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{make\_temporary\_conversion<to\_complex<ValueType>}}>(out);}
\DoxyCodeLine{00144\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_alpha\ =\ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{make\_temporary\_conversion<ValueType>}}(alpha);}
\DoxyCodeLine{00145\ \ \ \ \ \ \ \ \ \textcolor{keyword}{using\ }Dense\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<ValueType>}};}
\DoxyCodeLine{00146\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ These\ dynamic\_casts\ are\ only\ needed\ to\ make\ the\ code\ compile}}
\DoxyCodeLine{00147\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ If\ ValueType\ is\ complex,\ this\ branch\ will\ never\ be\ taken}}
\DoxyCodeLine{00148\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ If\ ValueType\ is\ real,\ the\ cast\ is\ a\ no-\/op}}
\DoxyCodeLine{00149\ \ \ \ \ \ \ \ \ fn(dense\_alpha.get(),}
\DoxyCodeLine{00150\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }Dense*\textcolor{keyword}{>}(dense\_in-\/>create\_real\_view().get()),}
\DoxyCodeLine{00151\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}Dense*\textcolor{keyword}{>}(dense\_out-\/>create\_real\_view().get()));}
\DoxyCodeLine{00152\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00153\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a3c46f1caf8135f7492aa83d9ac3bc83e}{precision\_dispatch<ValueType>}}(fn,\ alpha,\ in,\ out);}
\DoxyCodeLine{00154\ \ \ \ \ \}}
\DoxyCodeLine{00155\ \}}
\DoxyCodeLine{00156\ }
\DoxyCodeLine{00157\ }
\DoxyCodeLine{00167\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function>}
\DoxyCodeLine{00168\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a98c5a37c89e32c0f2b567f8e73870e3a}{precision\_dispatch\_real\_complex}}(Function\ fn,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ alpha,}
\DoxyCodeLine{00169\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ in,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ beta,}
\DoxyCodeLine{00170\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ out)}
\DoxyCodeLine{00171\ \{}
\DoxyCodeLine{00172\ \ \ \ \ \textcolor{comment}{//\ do\ we\ need\ to\ convert\ complex\ Dense\ to\ real\ Dense?}}
\DoxyCodeLine{00173\ \ \ \ \ \textcolor{comment}{//\ all\ real\ dense\ vectors\ are\ intra-\/convertible,\ thus\ by\ casting\ to}}
\DoxyCodeLine{00174\ \ \ \ \ \textcolor{comment}{//\ ConvertibleTo<matrix::Dense<>>,\ we\ can\ check\ whether\ a\ LinOp\ is\ a\ real}}
\DoxyCodeLine{00175\ \ \ \ \ \textcolor{comment}{//\ dense\ matrix:}}
\DoxyCodeLine{00176\ \ \ \ \ \textcolor{keyword}{auto}\ complex\_to\_real\ =}
\DoxyCodeLine{00177\ \ \ \ \ \ \ \ \ !(\doxymbox{\hyperlink{namespacegko_a9b3e79911bb6145d7ba865dbe436b915}{is\_complex<ValueType>}}()\ ||}
\DoxyCodeLine{00178\ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }ConvertibleTo<matrix::Dense<>\textcolor{keyword}{>}*>(in));}
\DoxyCodeLine{00179\ \ \ \ \ \textcolor{keywordflow}{if}\ (complex\_to\_real)\ \{}
\DoxyCodeLine{00180\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_in\ =\ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{make\_temporary\_conversion<to\_complex<ValueType>}}>(in);}
\DoxyCodeLine{00181\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_out\ =\ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{make\_temporary\_conversion<to\_complex<ValueType>}}>(out);}
\DoxyCodeLine{00182\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_alpha\ =\ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{make\_temporary\_conversion<ValueType>}}(alpha);}
\DoxyCodeLine{00183\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_beta\ =\ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{make\_temporary\_conversion<ValueType>}}(beta);}
\DoxyCodeLine{00184\ \ \ \ \ \ \ \ \ \textcolor{keyword}{using\ }Dense\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<ValueType>}};}
\DoxyCodeLine{00185\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ These\ dynamic\_casts\ are\ only\ needed\ to\ make\ the\ code\ compile}}
\DoxyCodeLine{00186\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ If\ ValueType\ is\ complex,\ this\ branch\ will\ never\ be\ taken}}
\DoxyCodeLine{00187\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ If\ ValueType\ is\ real,\ the\ cast\ is\ a\ no-\/op}}
\DoxyCodeLine{00188\ \ \ \ \ \ \ \ \ fn(dense\_alpha.get(),}
\DoxyCodeLine{00189\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }Dense*\textcolor{keyword}{>}(dense\_in-\/>create\_real\_view().get()),}
\DoxyCodeLine{00190\ \ \ \ \ \ \ \ \ \ \ \ dense\_beta.get(),}
\DoxyCodeLine{00191\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}Dense*\textcolor{keyword}{>}(dense\_out-\/>create\_real\_view().get()));}
\DoxyCodeLine{00192\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00193\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a3c46f1caf8135f7492aa83d9ac3bc83e}{precision\_dispatch<ValueType>}}(fn,\ alpha,\ in,\ beta,\ out);}
\DoxyCodeLine{00194\ \ \ \ \ \}}
\DoxyCodeLine{00195\ \}}
\DoxyCodeLine{00196\ }
\DoxyCodeLine{00197\ }
\DoxyCodeLine{00227\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function>}
\DoxyCodeLine{00228\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a205901dcce27e1df970c569d46d87551}{mixed\_precision\_dispatch}}(Function\ fn,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ in,\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ out)}
\DoxyCodeLine{00229\ \{}
\DoxyCodeLine{00230\ \textcolor{preprocessor}{\#ifdef\ GINKGO\_MIXED\_PRECISION}}
\DoxyCodeLine{00231\ \ \ \ \ \textcolor{keyword}{using\ }fst\_type\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<ValueType>}};}
\DoxyCodeLine{00232\ \ \ \ \ \textcolor{keyword}{using\ }snd\_type\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<next\_precision<ValueType>}}>;}
\DoxyCodeLine{00233\ \ \ \ \ \textcolor{keyword}{using\ }trd\_type\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<next\_precision<ValueType,\ 2>}}>;}
\DoxyCodeLine{00234\ \ \ \ \ \textcolor{keyword}{using\ }fth\_type\ =\ \doxymbox{\hyperlink{classgko_1_1matrix_1_1Dense}{matrix::Dense<next\_precision<ValueType,\ 3>}}>;}
\DoxyCodeLine{00235\ \ \ \ \ \textcolor{keyword}{auto}\ dispatch\_out\_vector\ =\ [\&](\textcolor{keyword}{auto}\ dense\_in)\ \{}
\DoxyCodeLine{00236\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ dense\_out\ =\ \textcolor{keyword}{dynamic\_cast<}fst\_type*\textcolor{keyword}{>}(out))\ \{}
\DoxyCodeLine{00237\ \ \ \ \ \ \ \ \ \ \ \ \ fn(dense\_in,\ dense\_out);}
\DoxyCodeLine{00238\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ dense\_out\ =\ \textcolor{keyword}{dynamic\_cast<}snd\_type*\textcolor{keyword}{>}(out))\ \{}
\DoxyCodeLine{00239\ \ \ \ \ \ \ \ \ \ \ \ \ fn(dense\_in,\ dense\_out);}
\DoxyCodeLine{00240\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ dense\_out\ =\ \textcolor{keyword}{dynamic\_cast<}trd\_type*\textcolor{keyword}{>}(out))\ \{}
\DoxyCodeLine{00241\ \ \ \ \ \ \ \ \ \ \ \ \ fn(dense\_in,\ dense\_out);}
\DoxyCodeLine{00242\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ dense\_out\ =\ \textcolor{keyword}{dynamic\_cast<}fth\_type*\textcolor{keyword}{>}(out))\ \{}
\DoxyCodeLine{00243\ \ \ \ \ \ \ \ \ \ \ \ \ fn(dense\_in,\ dense\_out);}
\DoxyCodeLine{00244\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00245\ \ \ \ \ \ \ \ \ \ \ \ \ GKO\_NOT\_SUPPORTED(out);}
\DoxyCodeLine{00246\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00247\ \ \ \ \ \};}
\DoxyCodeLine{00248\ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ dense\_in\ =\ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }fst\_type*\textcolor{keyword}{>}(in))\ \{}
\DoxyCodeLine{00249\ \ \ \ \ \ \ \ \ dispatch\_out\_vector(dense\_in);}
\DoxyCodeLine{00250\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ dense\_in\ =\ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }snd\_type*\textcolor{keyword}{>}(in))\ \{}
\DoxyCodeLine{00251\ \ \ \ \ \ \ \ \ dispatch\_out\_vector(dense\_in);}
\DoxyCodeLine{00252\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ dense\_in\ =\ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }trd\_type*\textcolor{keyword}{>}(in))\ \{}
\DoxyCodeLine{00253\ \ \ \ \ \ \ \ \ dispatch\_out\_vector(dense\_in);}
\DoxyCodeLine{00254\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ dense\_in\ =\ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }fth\_type*\textcolor{keyword}{>}(in))\ \{}
\DoxyCodeLine{00255\ \ \ \ \ \ \ \ \ dispatch\_out\_vector(dense\_in);}
\DoxyCodeLine{00256\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00257\ \ \ \ \ \ \ \ \ GKO\_NOT\_SUPPORTED(in);}
\DoxyCodeLine{00258\ \ \ \ \ \}}
\DoxyCodeLine{00259\ \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{00260\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a3c46f1caf8135f7492aa83d9ac3bc83e}{precision\_dispatch<ValueType>}}(fn,\ in,\ out);}
\DoxyCodeLine{00261\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00262\ \}}
\DoxyCodeLine{00263\ }
\DoxyCodeLine{00264\ }
\DoxyCodeLine{00274\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function,}
\DoxyCodeLine{00275\ \ \ \ \ \ \ \ \ \ \ std::enable\_if\_t<is\_complex<ValueType>()>*\ =\ \textcolor{keyword}{nullptr}>}
\DoxyCodeLine{00276\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a3b9785eed86179e15b8fb4e74f7e9f89}{mixed\_precision\_dispatch\_real\_complex}}(Function\ fn,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ in,}
\DoxyCodeLine{00277\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ out)}
\DoxyCodeLine{00278\ \{}
\DoxyCodeLine{00279\ \textcolor{preprocessor}{\#ifdef\ GINKGO\_MIXED\_PRECISION}}
\DoxyCodeLine{00280\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a205901dcce27e1df970c569d46d87551}{mixed\_precision\_dispatch<ValueType>}}(fn,\ in,\ out);}
\DoxyCodeLine{00281\ \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{00282\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a3c46f1caf8135f7492aa83d9ac3bc83e}{precision\_dispatch<ValueType>}}(fn,\ in,\ out);}
\DoxyCodeLine{00283\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00284\ \}}
\DoxyCodeLine{00285\ }
\DoxyCodeLine{00286\ }
\DoxyCodeLine{00287\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function,}
\DoxyCodeLine{00288\ \ \ \ \ \ \ \ \ \ \ std::enable\_if\_t<!is\_complex<ValueType>()>*\ =\ \textcolor{keyword}{nullptr}>}
\DoxyCodeLine{00289\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a3b9785eed86179e15b8fb4e74f7e9f89}{mixed\_precision\_dispatch\_real\_complex}}(Function\ fn,\ \textcolor{keyword}{const}\ LinOp*\ in,}
\DoxyCodeLine{00290\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ LinOp*\ out)}
\DoxyCodeLine{00291\ \{}
\DoxyCodeLine{00292\ \textcolor{preprocessor}{\#ifdef\ GINKGO\_MIXED\_PRECISION}}
\DoxyCodeLine{00293\ \ \ \ \ \textcolor{keywordflow}{if}\ (!\textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }ConvertibleTo<matrix::Dense<>\textcolor{keyword}{>}*>(in))\ \{}
\DoxyCodeLine{00294\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a205901dcce27e1df970c569d46d87551}{mixed\_precision\_dispatch<to\_complex<ValueType>}}>(}
\DoxyCodeLine{00295\ \ \ \ \ \ \ \ \ \ \ \ \ [\&fn](\textcolor{keyword}{auto}\ dense\_in,\ \textcolor{keyword}{auto}\ dense\_out)\ \{}
\DoxyCodeLine{00296\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ fn(dense\_in-\/>create\_real\_view().get(),}
\DoxyCodeLine{00297\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ dense\_out-\/>create\_real\_view().get());}
\DoxyCodeLine{00298\ \ \ \ \ \ \ \ \ \ \ \ \ \},}
\DoxyCodeLine{00299\ \ \ \ \ \ \ \ \ \ \ \ \ in,\ out);}
\DoxyCodeLine{00300\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00301\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a205901dcce27e1df970c569d46d87551}{mixed\_precision\_dispatch<ValueType>}}(fn,\ in,\ out);}
\DoxyCodeLine{00302\ \ \ \ \ \}}
\DoxyCodeLine{00303\ \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{00304\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a98c5a37c89e32c0f2b567f8e73870e3a}{precision\_dispatch\_real\_complex<ValueType>}}(fn,\ in,\ out);}
\DoxyCodeLine{00305\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00306\ \}}
\DoxyCodeLine{00307\ }
\DoxyCodeLine{00308\ }
\DoxyCodeLine{00309\ \textcolor{keyword}{namespace\ }experimental\ \{}
\DoxyCodeLine{00310\ }
\DoxyCodeLine{00311\ }
\DoxyCodeLine{00312\ \textcolor{preprocessor}{\#if\ GINKGO\_BUILD\_MPI}}
\DoxyCodeLine{00313\ }
\DoxyCodeLine{00314\ }
\DoxyCodeLine{00315\ \textcolor{keyword}{namespace\ }\doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed}{distributed}}\ \{}
\DoxyCodeLine{00316\ }
\DoxyCodeLine{00317\ }
\DoxyCodeLine{00343\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType>}
\DoxyCodeLine{00344\ gko::detail::temporary\_conversion<Vector<ValueType>>\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a1090c398cde41fae9f7b215f20e21bf1}{make\_temporary\_conversion}}(}
\DoxyCodeLine{00345\ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ \doxymbox{\hyperlink{namespacegko_1_1matrix}{matrix}})}
\DoxyCodeLine{00346\ \{}
\DoxyCodeLine{00347\ \ \ \ \ \textcolor{keyword}{auto}\ result\ =}
\DoxyCodeLine{00348\ \ \ \ \ \ \ \ \ gko::detail::temporary\_conversion<Vector<ValueType>>::template\ create<}
\DoxyCodeLine{00349\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector<next\_precision<ValueType>}}>,}
\DoxyCodeLine{00350\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector<next\_precision<ValueType,\ 2>}}>,}
\DoxyCodeLine{00351\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector<next\_precision<ValueType,\ 3>}}>>(\doxymbox{\hyperlink{namespacegko_1_1matrix}{matrix}});}
\DoxyCodeLine{00352\ \ \ \ \ \textcolor{keywordflow}{if}\ (!result)\ \{}
\DoxyCodeLine{00353\ \ \ \ \ \ \ \ \ GKO\_NOT\_SUPPORTED(\doxymbox{\hyperlink{namespacegko_1_1matrix}{matrix}});}
\DoxyCodeLine{00354\ \ \ \ \ \}}
\DoxyCodeLine{00355\ \ \ \ \ \textcolor{keywordflow}{return}\ result;}
\DoxyCodeLine{00356\ \}}
\DoxyCodeLine{00357\ }
\DoxyCodeLine{00358\ }
\DoxyCodeLine{00362\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType>}
\DoxyCodeLine{00363\ gko::detail::temporary\_conversion<const\ Vector<ValueType>>}
\DoxyCodeLine{00364\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a1090c398cde41fae9f7b215f20e21bf1}{make\_temporary\_conversion}}(\textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ \doxymbox{\hyperlink{namespacegko_1_1matrix}{matrix}})}
\DoxyCodeLine{00365\ \{}
\DoxyCodeLine{00366\ \ \ \ \ \textcolor{keyword}{auto}\ result\ =\ gko::detail::temporary\_conversion<const\ Vector<ValueType>>::}
\DoxyCodeLine{00367\ \ \ \ \ \ \ \ \ template\ create<Vector<next\_precision<ValueType>>,}
\DoxyCodeLine{00368\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector<next\_precision<ValueType,\ 2>}}>,}
\DoxyCodeLine{00369\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector<next\_precision<ValueType,\ 3>}}>>(\doxymbox{\hyperlink{namespacegko_1_1matrix}{matrix}});}
\DoxyCodeLine{00370\ \ \ \ \ \textcolor{keywordflow}{if}\ (!result)\ \{}
\DoxyCodeLine{00371\ \ \ \ \ \ \ \ \ GKO\_NOT\_SUPPORTED(\doxymbox{\hyperlink{namespacegko_1_1matrix}{matrix}});}
\DoxyCodeLine{00372\ \ \ \ \ \}}
\DoxyCodeLine{00373\ \ \ \ \ \textcolor{keywordflow}{return}\ result;}
\DoxyCodeLine{00374\ \}}
\DoxyCodeLine{00375\ }
\DoxyCodeLine{00376\ }
\DoxyCodeLine{00391\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function,\ \textcolor{keyword}{typename}...\ Args>}
\DoxyCodeLine{00392\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_ae834447464baacc73ee8d2bc6a0d61a0}{precision\_dispatch}}(Function\ fn,\ Args*...\ linops)}
\DoxyCodeLine{00393\ \{}
\DoxyCodeLine{00394\ \ \ \ \ fn(\doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a1090c398cde41fae9f7b215f20e21bf1}{distributed::make\_temporary\_conversion<ValueType>}}(linops).get()...);}
\DoxyCodeLine{00395\ \}}
\DoxyCodeLine{00396\ }
\DoxyCodeLine{00397\ }
\DoxyCodeLine{00398\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function>}
\DoxyCodeLine{00399\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a205901dcce27e1df970c569d46d87551}{mixed\_precision\_dispatch}}(Function\ fn,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ in,\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ out)}
\DoxyCodeLine{00400\ \{}
\DoxyCodeLine{00401\ \textcolor{preprocessor}{\#ifdef\ GINKGO\_MIXED\_PRECISION}}
\DoxyCodeLine{00402\ \ \ \ \ \textcolor{keyword}{using\ }fst\_type\ =\ Vector<ValueType>;}
\DoxyCodeLine{00403\ \ \ \ \ \textcolor{keyword}{using\ }snd\_type\ =\ Vector<next\_precision<ValueType,\ 2>>;}
\DoxyCodeLine{00404\ \ \ \ \ \textcolor{keyword}{using\ }trd\_type\ =\ Vector<next\_precision<ValueType,\ 3>>;}
\DoxyCodeLine{00405\ \ \ \ \ \textcolor{keyword}{auto}\ dispatch\_out\_vector\ =\ [\&](\textcolor{keyword}{auto}\ vector\_in)\ \{}
\DoxyCodeLine{00406\ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ vector\_out\ =\ \textcolor{keyword}{dynamic\_cast<}fst\_type*\textcolor{keyword}{>}(out))\ \{}
\DoxyCodeLine{00407\ \ \ \ \ \ \ \ \ \ \ \ \ fn(vector\_in,\ vector\_out);}
\DoxyCodeLine{00408\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ vector\_out\ =\ \textcolor{keyword}{dynamic\_cast<}snd\_type*\textcolor{keyword}{>}(out))\ \{}
\DoxyCodeLine{00409\ \ \ \ \ \ \ \ \ \ \ \ \ fn(vector\_in,\ vector\_out);}
\DoxyCodeLine{00410\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ vector\_out\ =\ \textcolor{keyword}{dynamic\_cast<}trd\_type*\textcolor{keyword}{>}(out))\ \{}
\DoxyCodeLine{00411\ \ \ \ \ \ \ \ \ \ \ \ \ fn(vector\_in,\ vector\_out);}
\DoxyCodeLine{00412\ \ \ \ \ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00413\ \ \ \ \ \ \ \ \ \ \ \ \ GKO\_NOT\_SUPPORTED(out);}
\DoxyCodeLine{00414\ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{00415\ \ \ \ \ \};}
\DoxyCodeLine{00416\ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ vector\_in\ =\ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }fst\_type*\textcolor{keyword}{>}(in))\ \{}
\DoxyCodeLine{00417\ \ \ \ \ \ \ \ \ dispatch\_out\_vector(vector\_in);}
\DoxyCodeLine{00418\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ vector\_in\ =\ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }snd\_type*\textcolor{keyword}{>}(in))\ \{}
\DoxyCodeLine{00419\ \ \ \ \ \ \ \ \ dispatch\_out\_vector(vector\_in);}
\DoxyCodeLine{00420\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{auto}\ vector\_in\ =\ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }trd\_type*\textcolor{keyword}{>}(in))\ \{}
\DoxyCodeLine{00421\ \ \ \ \ \ \ \ \ dispatch\_out\_vector(vector\_in);}
\DoxyCodeLine{00422\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00423\ \ \ \ \ \ \ \ \ GKO\_NOT\_SUPPORTED(in);}
\DoxyCodeLine{00424\ \ \ \ \ \}}
\DoxyCodeLine{00425\ \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{00426\ \ \ \ \ \textcolor{comment}{//\ avoid\ ambiguous}}
\DoxyCodeLine{00427\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_ae834447464baacc73ee8d2bc6a0d61a0}{distributed::precision\_dispatch<ValueType>}}(fn,\ in,\ out);}
\DoxyCodeLine{00428\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00429\ \}}
\DoxyCodeLine{00430\ }
\DoxyCodeLine{00431\ }
\DoxyCodeLine{00441\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function>}
\DoxyCodeLine{00442\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a6348d5cfc6451aa9f12509e5658de943}{precision\_dispatch\_real\_complex}}(Function\ fn,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ in,\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ out)}
\DoxyCodeLine{00443\ \{}
\DoxyCodeLine{00444\ \ \ \ \ \textcolor{keyword}{auto}\ complex\_to\_real\ =\ !(}
\DoxyCodeLine{00445\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9b3e79911bb6145d7ba865dbe436b915}{is\_complex<ValueType>}}()\ ||}
\DoxyCodeLine{00446\ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }ConvertibleTo<experimental::distributed::Vector<>\textcolor{keyword}{>}*>(}
\DoxyCodeLine{00447\ \ \ \ \ \ \ \ \ \ \ \ \ in));}
\DoxyCodeLine{00448\ \ \ \ \ \textcolor{keywordflow}{if}\ (complex\_to\_real)\ \{}
\DoxyCodeLine{00449\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_in\ =}
\DoxyCodeLine{00450\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a1090c398cde41fae9f7b215f20e21bf1}{distributed::make\_temporary\_conversion<to\_complex<ValueType>}}>(in);}
\DoxyCodeLine{00451\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_out\ =}
\DoxyCodeLine{00452\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a1090c398cde41fae9f7b215f20e21bf1}{distributed::make\_temporary\_conversion<to\_complex<ValueType>}}>(out);}
\DoxyCodeLine{00453\ \ \ \ \ \ \ \ \ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector}}\ =\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{experimental::distributed::Vector<ValueType>}};}
\DoxyCodeLine{00454\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ These\ dynamic\_casts\ are\ only\ needed\ to\ make\ the\ code\ compile}}
\DoxyCodeLine{00455\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ If\ ValueType\ is\ complex,\ this\ branch\ will\ never\ be\ taken}}
\DoxyCodeLine{00456\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ If\ ValueType\ is\ real,\ the\ cast\ is\ a\ no-\/op}}
\DoxyCodeLine{00457\ \ \ \ \ \ \ \ \ fn(\textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector}}*\textcolor{keyword}{>}(dense\_in-\/>create\_real\_view().get()),}
\DoxyCodeLine{00458\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector}}*\textcolor{keyword}{>}(dense\_out-\/>create\_real\_view().get()));}
\DoxyCodeLine{00459\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00460\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_ae834447464baacc73ee8d2bc6a0d61a0}{distributed::precision\_dispatch<ValueType>}}(fn,\ in,\ out);}
\DoxyCodeLine{00461\ \ \ \ \ \}}
\DoxyCodeLine{00462\ \}}
\DoxyCodeLine{00463\ }
\DoxyCodeLine{00464\ }
\DoxyCodeLine{00465\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function>}
\DoxyCodeLine{00466\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_a3b9785eed86179e15b8fb4e74f7e9f89}{mixed\_precision\_dispatch\_real\_complex}}(Function\ fn,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ in,}
\DoxyCodeLine{00467\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ out)}
\DoxyCodeLine{00468\ \{}
\DoxyCodeLine{00469\ \ \ \ \ \textcolor{keyword}{auto}\ complex\_to\_real\ =\ !(}
\DoxyCodeLine{00470\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9b3e79911bb6145d7ba865dbe436b915}{is\_complex<ValueType>}}()\ ||}
\DoxyCodeLine{00471\ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }ConvertibleTo<experimental::distributed::Vector<>\textcolor{keyword}{>}*>(}
\DoxyCodeLine{00472\ \ \ \ \ \ \ \ \ \ \ \ \ in));}
\DoxyCodeLine{00473\ \ \ \ \ \textcolor{keywordflow}{if}\ (complex\_to\_real)\ \{}
\DoxyCodeLine{00474\ \ \ \ \ \ \ \ \ distributed::mixed\_precision\_dispatch<to\_complex<ValueType>>(}
\DoxyCodeLine{00475\ \ \ \ \ \ \ \ \ \ \ \ \ [\&fn](\textcolor{keyword}{auto}\ vector\_in,\ \textcolor{keyword}{auto}\ vector\_out)\ \{}
\DoxyCodeLine{00476\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ fn(vector\_in-\/>create\_real\_view().get(),}
\DoxyCodeLine{00477\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ vector\_out-\/>create\_real\_view().get());}
\DoxyCodeLine{00478\ \ \ \ \ \ \ \ \ \ \ \ \ \},}
\DoxyCodeLine{00479\ \ \ \ \ \ \ \ \ \ \ \ \ in,\ out);}
\DoxyCodeLine{00480\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00481\ \ \ \ \ \ \ \ \ distributed::mixed\_precision\_dispatch<ValueType>(fn,\ in,\ out);}
\DoxyCodeLine{00482\ \ \ \ \ \}}
\DoxyCodeLine{00483\ \}}
\DoxyCodeLine{00484\ }
\DoxyCodeLine{00485\ }
\DoxyCodeLine{00489\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function>}
\DoxyCodeLine{00490\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a6348d5cfc6451aa9f12509e5658de943}{precision\_dispatch\_real\_complex}}(Function\ fn,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ alpha,}
\DoxyCodeLine{00491\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ in,\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ out)}
\DoxyCodeLine{00492\ \{}
\DoxyCodeLine{00493\ \ \ \ \ \textcolor{keyword}{auto}\ complex\_to\_real\ =\ !(}
\DoxyCodeLine{00494\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9b3e79911bb6145d7ba865dbe436b915}{is\_complex<ValueType>}}()\ ||}
\DoxyCodeLine{00495\ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }ConvertibleTo<experimental::distributed::Vector<>\textcolor{keyword}{>}*>(}
\DoxyCodeLine{00496\ \ \ \ \ \ \ \ \ \ \ \ \ in));}
\DoxyCodeLine{00497\ \ \ \ \ \textcolor{keywordflow}{if}\ (complex\_to\_real)\ \{}
\DoxyCodeLine{00498\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_in\ =}
\DoxyCodeLine{00499\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a1090c398cde41fae9f7b215f20e21bf1}{distributed::make\_temporary\_conversion<to\_complex<ValueType>}}>(in);}
\DoxyCodeLine{00500\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_out\ =}
\DoxyCodeLine{00501\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a1090c398cde41fae9f7b215f20e21bf1}{distributed::make\_temporary\_conversion<to\_complex<ValueType>}}>(out);}
\DoxyCodeLine{00502\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_alpha\ =\ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{gko::make\_temporary\_conversion<ValueType>}}(alpha);}
\DoxyCodeLine{00503\ \ \ \ \ \ \ \ \ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector}}\ =\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{experimental::distributed::Vector<ValueType>}};}
\DoxyCodeLine{00504\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ These\ dynamic\_casts\ are\ only\ needed\ to\ make\ the\ code\ compile}}
\DoxyCodeLine{00505\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ If\ ValueType\ is\ complex,\ this\ branch\ will\ never\ be\ taken}}
\DoxyCodeLine{00506\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ If\ ValueType\ is\ real,\ the\ cast\ is\ a\ no-\/op}}
\DoxyCodeLine{00507\ \ \ \ \ \ \ \ \ fn(dense\_alpha.get(),}
\DoxyCodeLine{00508\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector}}*\textcolor{keyword}{>}(dense\_in-\/>create\_real\_view().get()),}
\DoxyCodeLine{00509\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector}}*\textcolor{keyword}{>}(dense\_out-\/>create\_real\_view().get()));}
\DoxyCodeLine{00510\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00511\ \ \ \ \ \ \ \ \ fn(\doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{gko::make\_temporary\_conversion<ValueType>}}(alpha).get(),}
\DoxyCodeLine{00512\ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a1090c398cde41fae9f7b215f20e21bf1}{distributed::make\_temporary\_conversion<ValueType>}}(in).get(),}
\DoxyCodeLine{00513\ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a1090c398cde41fae9f7b215f20e21bf1}{distributed::make\_temporary\_conversion<ValueType>}}(out).get());}
\DoxyCodeLine{00514\ \ \ \ \ \}}
\DoxyCodeLine{00515\ \}}
\DoxyCodeLine{00516\ }
\DoxyCodeLine{00517\ }
\DoxyCodeLine{00521\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function>}
\DoxyCodeLine{00522\ \textcolor{keywordtype}{void}\ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a6348d5cfc6451aa9f12509e5658de943}{precision\_dispatch\_real\_complex}}(Function\ fn,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ alpha,}
\DoxyCodeLine{00523\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ in,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ beta,}
\DoxyCodeLine{00524\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ out)}
\DoxyCodeLine{00525\ \{}
\DoxyCodeLine{00526\ \ \ \ \ \textcolor{keyword}{auto}\ complex\_to\_real\ =\ !(}
\DoxyCodeLine{00527\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a9b3e79911bb6145d7ba865dbe436b915}{is\_complex<ValueType>}}()\ ||}
\DoxyCodeLine{00528\ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }ConvertibleTo<experimental::distributed::Vector<>\textcolor{keyword}{>}*>(}
\DoxyCodeLine{00529\ \ \ \ \ \ \ \ \ \ \ \ \ in));}
\DoxyCodeLine{00530\ \ \ \ \ \textcolor{keywordflow}{if}\ (complex\_to\_real)\ \{}
\DoxyCodeLine{00531\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_in\ =}
\DoxyCodeLine{00532\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a1090c398cde41fae9f7b215f20e21bf1}{distributed::make\_temporary\_conversion<to\_complex<ValueType>}}>(in);}
\DoxyCodeLine{00533\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_out\ =}
\DoxyCodeLine{00534\ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a1090c398cde41fae9f7b215f20e21bf1}{distributed::make\_temporary\_conversion<to\_complex<ValueType>}}>(out);}
\DoxyCodeLine{00535\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_alpha\ =\ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{gko::make\_temporary\_conversion<ValueType>}}(alpha);}
\DoxyCodeLine{00536\ \ \ \ \ \ \ \ \ \textcolor{keyword}{auto}\ dense\_beta\ =\ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{gko::make\_temporary\_conversion<ValueType>}}(beta);}
\DoxyCodeLine{00537\ \ \ \ \ \ \ \ \ \textcolor{keyword}{using\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector}}\ =\ \doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{experimental::distributed::Vector<ValueType>}};}
\DoxyCodeLine{00538\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ These\ dynamic\_casts\ are\ only\ needed\ to\ make\ the\ code\ compile}}
\DoxyCodeLine{00539\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ If\ ValueType\ is\ complex,\ this\ branch\ will\ never\ be\ taken}}
\DoxyCodeLine{00540\ \ \ \ \ \ \ \ \ \textcolor{comment}{//\ If\ ValueType\ is\ real,\ the\ cast\ is\ a\ no-\/op}}
\DoxyCodeLine{00541\ \ \ \ \ \ \ \ \ fn(dense\_alpha.get(),}
\DoxyCodeLine{00542\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector}}*\textcolor{keyword}{>}(dense\_in-\/>create\_real\_view().get()),}
\DoxyCodeLine{00543\ \ \ \ \ \ \ \ \ \ \ \ dense\_beta.get(),}
\DoxyCodeLine{00544\ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{dynamic\_cast<}\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1Vector}{Vector}}*\textcolor{keyword}{>}(dense\_out-\/>create\_real\_view().get()));}
\DoxyCodeLine{00545\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00546\ \ \ \ \ \ \ \ \ fn(\doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{gko::make\_temporary\_conversion<ValueType>}}(alpha).get(),}
\DoxyCodeLine{00547\ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a1090c398cde41fae9f7b215f20e21bf1}{distributed::make\_temporary\_conversion<ValueType>}}(in).get(),}
\DoxyCodeLine{00548\ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a53160e02553fceb89af3e58435de2aca}{gko::make\_temporary\_conversion<ValueType>}}(beta).get(),}
\DoxyCodeLine{00549\ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a1090c398cde41fae9f7b215f20e21bf1}{distributed::make\_temporary\_conversion<ValueType>}}(out).get());}
\DoxyCodeLine{00550\ \ \ \ \ \}}
\DoxyCodeLine{00551\ \}}
\DoxyCodeLine{00552\ }
\DoxyCodeLine{00553\ }
\DoxyCodeLine{00554\ \}\ \ \textcolor{comment}{//\ namespace\ distributed}}
\DoxyCodeLine{00555\ }
\DoxyCodeLine{00556\ }
\DoxyCodeLine{00570\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function>}
\DoxyCodeLine{00571\ \textcolor{keywordtype}{void}\ precision\_dispatch\_real\_complex\_distributed(Function\ fn,\ \textcolor{keyword}{const}\ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ in,}
\DoxyCodeLine{00572\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{classgko_1_1LinOp}{LinOp}}*\ out)}
\DoxyCodeLine{00573\ \{}
\DoxyCodeLine{00574\ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }\doxymbox{\hyperlink{classgko_1_1experimental_1_1distributed_1_1DistributedBase}{experimental::distributed::DistributedBase}}*\textcolor{keyword}{>}(in))\ \{}
\DoxyCodeLine{00575\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a6348d5cfc6451aa9f12509e5658de943}{experimental::distributed::precision\_dispatch\_real\_complex<ValueType>}}(}
\DoxyCodeLine{00576\ \ \ \ \ \ \ \ \ \ \ \ \ fn,\ in,\ out);}
\DoxyCodeLine{00577\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00578\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a98c5a37c89e32c0f2b567f8e73870e3a}{gko::precision\_dispatch\_real\_complex<ValueType>}}(fn,\ in,\ out);}
\DoxyCodeLine{00579\ \ \ \ \ \}}
\DoxyCodeLine{00580\ \}}
\DoxyCodeLine{00581\ }
\DoxyCodeLine{00582\ }
\DoxyCodeLine{00587\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function>}
\DoxyCodeLine{00588\ \textcolor{keywordtype}{void}\ precision\_dispatch\_real\_complex\_distributed(Function\ fn,}
\DoxyCodeLine{00589\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ LinOp*\ alpha,}
\DoxyCodeLine{00590\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ LinOp*\ in,\ LinOp*\ out)}
\DoxyCodeLine{00591\ \{}
\DoxyCodeLine{00592\ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }experimental::distributed::DistributedBase*\textcolor{keyword}{>}(in))\ \{}
\DoxyCodeLine{00593\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a6348d5cfc6451aa9f12509e5658de943}{experimental::distributed::precision\_dispatch\_real\_complex<ValueType>}}(}
\DoxyCodeLine{00594\ \ \ \ \ \ \ \ \ \ \ \ \ fn,\ alpha,\ in,\ out);}
\DoxyCodeLine{00595\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00596\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a98c5a37c89e32c0f2b567f8e73870e3a}{gko::precision\_dispatch\_real\_complex<ValueType>}}(fn,\ alpha,\ in,\ out);}
\DoxyCodeLine{00597\ \ \ \ \ \}}
\DoxyCodeLine{00598\ \}}
\DoxyCodeLine{00599\ }
\DoxyCodeLine{00600\ }
\DoxyCodeLine{00605\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function>}
\DoxyCodeLine{00606\ \textcolor{keywordtype}{void}\ precision\_dispatch\_real\_complex\_distributed(Function\ fn,}
\DoxyCodeLine{00607\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ LinOp*\ alpha,}
\DoxyCodeLine{00608\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ LinOp*\ in,}
\DoxyCodeLine{00609\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keyword}{const}\ LinOp*\ beta,\ LinOp*\ out)}
\DoxyCodeLine{00610\ \{}
\DoxyCodeLine{00611\ \ \ \ \ \textcolor{keywordflow}{if}\ (\textcolor{keyword}{dynamic\_cast<}\textcolor{keyword}{const\ }experimental::distributed::DistributedBase*\textcolor{keyword}{>}(in))\ \{}
\DoxyCodeLine{00612\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_1_1experimental_1_1distributed_a6348d5cfc6451aa9f12509e5658de943}{experimental::distributed::precision\_dispatch\_real\_complex<ValueType>}}(}
\DoxyCodeLine{00613\ \ \ \ \ \ \ \ \ \ \ \ \ fn,\ alpha,\ in,\ beta,\ out);}
\DoxyCodeLine{00614\ }
\DoxyCodeLine{00615\ \ \ \ \ \}\ \textcolor{keywordflow}{else}\ \{}
\DoxyCodeLine{00616\ \ \ \ \ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a98c5a37c89e32c0f2b567f8e73870e3a}{gko::precision\_dispatch\_real\_complex<ValueType>}}(fn,\ alpha,\ in,\ beta,}
\DoxyCodeLine{00617\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ out);}
\DoxyCodeLine{00618\ \ \ \ \ \}}
\DoxyCodeLine{00619\ \}}
\DoxyCodeLine{00620\ }
\DoxyCodeLine{00621\ }
\DoxyCodeLine{00622\ \textcolor{preprocessor}{\#else}}
\DoxyCodeLine{00623\ }
\DoxyCodeLine{00624\ }
\DoxyCodeLine{00635\ \textcolor{keyword}{template}\ <\textcolor{keyword}{typename}\ ValueType,\ \textcolor{keyword}{typename}\ Function,\ \textcolor{keyword}{typename}...\ Args>}
\DoxyCodeLine{00636\ \textcolor{keywordtype}{void}\ precision\_dispatch\_real\_complex\_distributed(Function\ fn,\ Args*...\ args)}
\DoxyCodeLine{00637\ \{}
\DoxyCodeLine{00638\ \ \ \ \ \doxymbox{\hyperlink{namespacegko_a98c5a37c89e32c0f2b567f8e73870e3a}{precision\_dispatch\_real\_complex<ValueType>}}(fn,\ args...);}
\DoxyCodeLine{00639\ \}}
\DoxyCodeLine{00640\ }
\DoxyCodeLine{00641\ }
\DoxyCodeLine{00642\ \textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{00643\ }
\DoxyCodeLine{00644\ }
\DoxyCodeLine{00645\ \}\ \ \textcolor{comment}{//\ namespace\ experimental}}
\DoxyCodeLine{00646\ \}\ \ \textcolor{comment}{//\ namespace\ gko}}
\DoxyCodeLine{00647\ }
\DoxyCodeLine{00648\ }
\DoxyCodeLine{00649\ \textcolor{preprocessor}{\#endif\ \ }\textcolor{comment}{//\ GKO\_PUBLIC\_CORE\_BASE\_PRECISION\_DISPATCH\_HPP\_}}

\end{DoxyCode}
