10 #ifndef EPETRA_TSQRADAPTOR_HPP
11 #define EPETRA_TSQRADAPTOR_HPP
25 #include "Tpetra_ConfigDefs.hpp"
27 #if defined(TPETRA_ENABLE_DEPRECATED_CODE)
28 #if defined(TPETRA_DEPRECATED_DECLARATIONS)
29 #warning This file is deprecated due to Epetra removal and will be removed
32 #error This file is deprecated due to Epetra removal and will be removed
35 #if defined(TPETRA_ENABLE_DEPRECATED_CODE) && defined(HAVE_TPETRA_EPETRA) && defined(HAVE_TPETRA_TSQR)
37 #include "Tsqr_NodeTsqrFactory.hpp"
39 #include "Tsqr_DistTsqr.hpp"
40 #include "Epetra_Comm.h"
44 #include "Epetra_MultiVector.h"
45 #include "Teuchos_ParameterListAcceptorDefaultBase.hpp"
74 TPETRA_DEPRECATED_MSG(
"epetra removal")
75 class TsqrAdaptor : public Teuchos::ParameterListAcceptorDefaultBase {
77 typedef Epetra_MultiVector MV;
85 typedef double scalar_type;
93 typedef int ordinal_type;
101 Kokkos::Device<Kokkos::DefaultHostExecutionSpace,
112 using dense_matrix_type =
113 Teuchos::SerialDenseMatrix<ordinal_type, scalar_type>;
120 using magnitude_type = double;
123 using matview_type = TSQR::MatView<ordinal_type, scalar_type>;
124 using node_tsqr_factory_type =
125 TSQR::NodeTsqrFactory<scalar_type, ordinal_type, device_type>;
128 using node_tsqr_type = TSQR::NodeTsqr<ordinal_type, scalar_type>;
129 using dist_tsqr_type = TSQR::DistTsqr<ordinal_type, scalar_type>;
130 using tsqr_type = TSQR::Tsqr<ordinal_type, scalar_type>;
139 TsqrAdaptor(
const Teuchos::RCP<Teuchos::ParameterList>& plist)
140 : nodeTsqr_(node_tsqr_factory_type::getNodeTsqr())
141 , distTsqr_(new dist_tsqr_type)
142 , tsqr_(new tsqr_type(nodeTsqr_, distTsqr_))
144 setParameterList(plist);
149 : nodeTsqr_(node_tsqr_factory_type::getNodeTsqr())
150 , distTsqr_(new dist_tsqr_type)
151 , tsqr_(new tsqr_type(nodeTsqr_, distTsqr_))
153 setParameterList(Teuchos::null);
156 Teuchos::RCP<const Teuchos::ParameterList>
157 getValidParameters()
const {
158 using Teuchos::ParameterList;
159 using Teuchos::parameterList;
163 if (defaultParams_.is_null()) {
164 RCP<ParameterList> params = parameterList(
"TSQR implementation");
165 params->set(
"NodeTsqr", *(nodeTsqr_->getValidParameters()));
166 params->set(
"DistTsqr", *(distTsqr_->getValidParameters()));
167 defaultParams_ = params;
169 return defaultParams_;
173 setParameterList(
const Teuchos::RCP<Teuchos::ParameterList>& plist) {
174 using Teuchos::ParameterList;
175 using Teuchos::parameterList;
177 using Teuchos::sublist;
179 RCP<ParameterList> params = plist.is_null() ? parameterList(*getValidParameters()) : plist;
180 nodeTsqr_->setParameterList(sublist(params,
"NodeTsqr"));
181 distTsqr_->setParameterList(sublist(params,
"DistTsqr"));
183 this->setMyParamList(params);
208 factorExplicit(MV& A,
210 dense_matrix_type& R,
211 const bool forceNonnegativeDiagonal =
false) {
214 scalar_type*
const A_ptr = A.Values();
215 scalar_type*
const Q_ptr = Q.Values();
216 scalar_type*
const R_ptr = R.values();
217 const ordinal_type numRows = A.MyLength();
218 const ordinal_type numCols = A.NumVectors();
219 const ordinal_type lda = A.Stride();
220 const ordinal_type ldq = Q.Stride();
221 const ordinal_type ldr = R.stride();
223 const bool contiguousCacheBlocks =
false;
224 tsqr_->factorExplicitRaw(numRows, numCols, A_ptr, lda,
225 Q_ptr, ldq, R_ptr, ldr,
226 contiguousCacheBlocks,
227 forceNonnegativeDiagonal);
260 int revealRank(MV& Q,
261 dense_matrix_type& R,
262 const magnitude_type& tol) {
263 TEUCHOS_TEST_FOR_EXCEPTION(!Q.ConstantStride(), std::invalid_argument,
265 "revealRank: Input MultiVector Q must have constant stride.");
270 return tsqr_->revealRankRaw(Q.MyLength(), Q.NumVectors(),
271 Q.Values(), Q.Stride(),
272 R.values(), R.stride(), tol,
false);
277 Teuchos::RCP<node_tsqr_type> nodeTsqr_;
280 Teuchos::RCP<dist_tsqr_type> distTsqr_;
283 Teuchos::RCP<tsqr_type> tsqr_;
286 mutable Teuchos::RCP<const Teuchos::ParameterList> defaultParams_;
310 prepareTsqr(
const MV& mv) {
324 prepareDistTsqr(
const MV& mv) {
327 using TSQR::Epetra::makeTsqrMessenger;
328 typedef TSQR::MessengerBase<scalar_type> base_mess_type;
333 RCP<const Epetra_Comm> comm = rcp(mv.Comm().Clone());
334 RCP<base_mess_type> messBase = makeTsqrMessenger<scalar_type>(comm);
335 distTsqr_->init(messBase);
341 #endif // defined(TPETRA_ENABLE_DEPRECATED_CODE) && defined(HAVE_TPETRA_EPETRA) && defined(HAVE_TPETRA_TSQR)
343 #endif // EPETRA_TSQRADAPTOR_HPP
Function for wrapping Epetra_Comm in a communicator wrapper that TSQR can use.