86 class TsqrAdaptor :
public Teuchos::ParameterListAcceptorDefaultBase {
88 typedef Thyra::MultiVectorBase<Scalar> MV;
89 typedef Scalar scalar_type;
90 typedef int ordinal_type;
91 typedef Teuchos::SerialDenseMatrix<ordinal_type, scalar_type> dense_matrix_type;
92 typedef typename Teuchos::ScalarTraits<scalar_type>::magnitudeType magnitude_type;
102 throw std::logic_error (
"Thyra adaptor for TSQR not implemented");
108 throw std::logic_error (
"Thyra adaptor for TSQR not implemented");
111 Teuchos::RCP<const Teuchos::ParameterList>
112 getValidParameters ()
const
114 throw std::logic_error (
"Thyra adaptor for TSQR not implemented");
118 setParameterList (
const Teuchos::RCP<Teuchos::ParameterList>& )
120 throw std::logic_error (
"Thyra adaptor for TSQR not implemented");
150 throw std::logic_error (
"Thyra adaptor for TSQR not implemented");
186 const magnitude_type& )
188 throw std::logic_error (
"Thyra adaptor for TSQR not implemented");
202 static Teuchos::RCP<const Teuchos::Comm<int> >
203 getComm (
const MV& X)
207 using Teuchos::rcp_dynamic_cast;
208 using Teuchos::rcp_implicit_cast;
209 typedef Thyra::VectorSpaceBase<Scalar> space_base_type;
210 typedef Thyra::SpmdVectorSpaceBase<Scalar> space_type;
214 RCP<const space_base_type> rangeBase = X.range ();
215 TEUCHOS_TEST_FOR_EXCEPTION(rangeBase.is_null (), std::runtime_error,
"X.range() is null.");
216 RCP<const space_type> range = rcp_dynamic_cast<const space_type> (rangeBase);
217 TEUCHOS_TEST_FOR_EXCEPTION(range.is_null (), std::runtime_error,
"X.range() is not an SpmdVectorSpaceBase.");
228 RCP<const Teuchos::Comm<Thyra::Ordinal> > thyraComm = range->getComm ();
230 RCP<const Teuchos::MpiComm<Thyra::Ordinal> > thyraMpiComm =
231 rcp_dynamic_cast<const Teuchos::MpiComm<Thyra::Ordinal> > (thyraComm);
232 if (thyraMpiComm.is_null ()) {
233 RCP<const Teuchos::SerialComm<Thyra::Ordinal> > thyraSerialComm =
234 rcp_dynamic_cast<const Teuchos::SerialComm<Thyra::Ordinal> > (thyraComm);
235 TEUCHOS_TEST_FOR_EXCEPTION(
236 thyraSerialComm.is_null (), std::runtime_error,
237 "Thyra's communicator is neither an MpiComm nor a SerialComm. "
238 "Sorry, I have no idea what to do with it in that case.");
242 return rcp_implicit_cast<const Teuchos::Comm<int> > (rcp (
new Teuchos::SerialComm<int>));
245 RCP<const Teuchos::OpaqueWrapper<MPI_Comm> > rawMpiComm = thyraMpiComm->getRawMpiComm ();
249 return rcp_implicit_cast<const Teuchos::Comm<int> > (rcp (
new Teuchos::MpiComm<int> (rawMpiComm)));
253 RCP<const Teuchos::SerialComm<Thyra::Ordinal> > thyraSerialComm =
254 rcp_dynamic_cast<const Teuchos::SerialComm<Thyra::Ordinal> > (thyraComm);
255 TEUCHOS_TEST_FOR_EXCEPTION(
256 thyraSerialComm.is_null (), std::runtime_error,
257 "Thyra's communicator is not a SerialComm, and MPI is not enabled, so "
258 "it can't be an MpiComm either. That means it must be some other "
259 "subclass of Comm, about which I don't know. "
260 "Sorry, I have no idea what to do with it in that case.");
264 return rcp_implicit_cast<const Teuchos::Comm<int> > (rcp (
new Teuchos::SerialComm<int>));
281 prepareDistTsqr (
const MV& ) {}
303 prepareTsqr (
const MV& ) {}