40 #ifndef EPETRA_TSQRADAPTOR_HPP
41 #define EPETRA_TSQRADAPTOR_HPP
55 #include "Tpetra_ConfigDefs.hpp"
57 #if defined(TPETRA_ENABLE_DEPRECATED_CODE)
58 #if defined(TPETRA_DEPRECATED_DECLARATIONS)
59 #warning This file is deprecated due to Epetra removal and will be removed
62 #error This file is deprecated due to Epetra removal and will be removed
65 #if defined(TPETRA_ENABLE_DEPRECATED_CODE) && defined(HAVE_TPETRA_EPETRA) && defined(HAVE_TPETRA_TSQR)
67 #include "Tsqr_NodeTsqrFactory.hpp"
69 #include "Tsqr_DistTsqr.hpp"
70 #include "Epetra_Comm.h"
74 #include "Epetra_MultiVector.h"
75 #include "Teuchos_ParameterListAcceptorDefaultBase.hpp"
104 TPETRA_DEPRECATED_MSG(
"epetra removal")
105 class TsqrAdaptor : public Teuchos::ParameterListAcceptorDefaultBase {
107 typedef Epetra_MultiVector MV;
115 typedef double scalar_type;
123 typedef int ordinal_type;
131 Kokkos::Device<Kokkos::DefaultHostExecutionSpace,
142 using dense_matrix_type =
143 Teuchos::SerialDenseMatrix<ordinal_type, scalar_type>;
150 using magnitude_type = double;
153 using matview_type = TSQR::MatView<ordinal_type, scalar_type>;
154 using node_tsqr_factory_type =
155 TSQR::NodeTsqrFactory<scalar_type, ordinal_type, device_type>;
158 using node_tsqr_type = TSQR::NodeTsqr<ordinal_type, scalar_type>;
159 using dist_tsqr_type = TSQR::DistTsqr<ordinal_type, scalar_type>;
160 using tsqr_type = TSQR::Tsqr<ordinal_type, scalar_type>;
169 TsqrAdaptor (
const Teuchos::RCP<Teuchos::ParameterList>& plist) :
170 nodeTsqr_ (node_tsqr_factory_type::getNodeTsqr ()),
171 distTsqr_ (new dist_tsqr_type),
172 tsqr_ (new tsqr_type (nodeTsqr_, distTsqr_)),
175 setParameterList (plist);
180 nodeTsqr_ (node_tsqr_factory_type::getNodeTsqr ()),
181 distTsqr_ (new dist_tsqr_type),
182 tsqr_ (new tsqr_type (nodeTsqr_, distTsqr_)),
185 setParameterList (Teuchos::null);
188 Teuchos::RCP<const Teuchos::ParameterList>
189 getValidParameters ()
const
193 using Teuchos::ParameterList;
194 using Teuchos::parameterList;
196 if (defaultParams_.is_null()) {
197 RCP<ParameterList> params = parameterList (
"TSQR implementation");
198 params->set (
"NodeTsqr", *(nodeTsqr_->getValidParameters ()));
199 params->set (
"DistTsqr", *(distTsqr_->getValidParameters ()));
200 defaultParams_ = params;
202 return defaultParams_;
206 setParameterList (
const Teuchos::RCP<Teuchos::ParameterList>& plist)
208 using Teuchos::ParameterList;
209 using Teuchos::parameterList;
211 using Teuchos::sublist;
213 RCP<ParameterList> params = plist.is_null() ?
214 parameterList (*getValidParameters ()) : plist;
215 nodeTsqr_->setParameterList (sublist (params,
"NodeTsqr"));
216 distTsqr_->setParameterList (sublist (params,
"DistTsqr"));
218 this->setMyParamList (params);
243 factorExplicit (MV& A,
245 dense_matrix_type& R,
246 const bool forceNonnegativeDiagonal=
false)
250 scalar_type*
const A_ptr = A.Values ();
251 scalar_type*
const Q_ptr = Q.Values ();
252 scalar_type*
const R_ptr = R.values ();
253 const ordinal_type numRows = A.MyLength ();
254 const ordinal_type numCols = A.NumVectors ();
255 const ordinal_type lda = A.Stride ();
256 const ordinal_type ldq = Q.Stride ();
257 const ordinal_type ldr = R.stride ();
259 const bool contiguousCacheBlocks =
false;
260 tsqr_->factorExplicitRaw (numRows, numCols, A_ptr, lda,
261 Q_ptr, ldq, R_ptr, ldr,
262 contiguousCacheBlocks,
263 forceNonnegativeDiagonal);
298 dense_matrix_type& R,
299 const magnitude_type& tol)
301 TEUCHOS_TEST_FOR_EXCEPTION
302 (! Q.ConstantStride (), std::invalid_argument,
"TsqrAdaptor::"
303 "revealRank: Input MultiVector Q must have constant stride.");
308 return tsqr_->revealRankRaw (Q.MyLength (), Q.NumVectors (),
309 Q.Values (), Q.Stride (),
310 R.values (), R.stride (), tol,
false);
315 Teuchos::RCP<node_tsqr_type> nodeTsqr_;
318 Teuchos::RCP<dist_tsqr_type> distTsqr_;
321 Teuchos::RCP<tsqr_type> tsqr_;
324 mutable Teuchos::RCP<const Teuchos::ParameterList> defaultParams_;
348 prepareTsqr (
const MV& mv)
351 prepareDistTsqr (mv);
363 prepareDistTsqr (
const MV& mv)
367 using TSQR::Epetra::makeTsqrMessenger;
368 typedef TSQR::MessengerBase<scalar_type> base_mess_type;
373 RCP<const Epetra_Comm> comm = rcp (mv.Comm().Clone());
374 RCP<base_mess_type> messBase = makeTsqrMessenger<scalar_type> (comm);
375 distTsqr_->init (messBase);
381 #endif // defined(TPETRA_ENABLE_DEPRECATED_CODE) && defined(HAVE_TPETRA_EPETRA) && defined(HAVE_TPETRA_TSQR)
383 #endif // EPETRA_TSQRADAPTOR_HPP
Function for wrapping Epetra_Comm in a communicator wrapper that TSQR can use.