MueLu  Version of the Day
MueLu_QR_InterfaceEx_decl.hpp
Go to the documentation of this file.
1 /*
2  * MueLu_QR_InterfaceEx_decl.hpp
3  *
4  * Created on: Jan 31, 2013
5  * Author: tobias
6  */
7 
8 #ifndef MUELU_QR_INTERFACEEX_DECL_HPP_
9 #define MUELU_QR_INTERFACEEX_DECL_HPP_
10 
11 #include <Teuchos_LAPACK.hpp>
12 #include <Teuchos_ArrayRCP.hpp>
13 #include "MueLu_ConfigDefs.hpp"
14 
15 namespace MueLu {
16 
24  template <class Scalar, class LocalOrdinal>
26 
27  public:
29 
30 
33  QR_InterfaceEx(const size_t nullSpaceDimension);
34 
36  virtual ~QR_InterfaceEx() {};
38 
40 
41  void Compute(LocalOrdinal const &myAggSize, ArrayRCP<Scalar> &localQR);
43 
50  void ExtractQ(LocalOrdinal const &myAggSize, ArrayRCP<Scalar> &localQR);
52 
53  private:
54  bool isZeroNspColumn(LocalOrdinal const &myAggSize, ArrayRCP<Scalar> &localQR, LocalOrdinal nspCol);
55 
57  Teuchos::LAPACK<LocalOrdinal,Scalar> lapack_;
59  LocalOrdinal workSize_;
61  LocalOrdinal NSDim_; // null space dimension of original input
62 
63  LocalOrdinal internalNSDim_; // internal null space dimension (after removing zero columns of input)
65  LocalOrdinal info_;
67  ArrayRCP<Scalar> tau_;
69  ArrayRCP<Scalar> work_;
70 
72  ArrayRCP<Scalar> internalLocalQR_;
73 
74  std::vector<LocalOrdinal> nonZeroCols_;
75  }; //class QR_Interface
76 
78  template <class Scalar, class LocalOrdinal>
79  void LapackQR(Teuchos::LAPACK<LocalOrdinal,Scalar> &lapack, LocalOrdinal myAggSize,
80  int intFineNSDim, ArrayRCP<Scalar> &localQR, ArrayRCP<Scalar> &tau,
81  ArrayRCP<Scalar> &work, LocalOrdinal &workSize, LocalOrdinal &info);
82 
84  template <class LocalOrdinal>
85  void LapackQR(Teuchos::LAPACK<LocalOrdinal, std::complex<double> > &lapack,
86  LocalOrdinal myAggSize, int intFineNSDim, ArrayRCP<std::complex<double> > &localQR,
87  ArrayRCP<std::complex<double> > &tau, ArrayRCP<std::complex<double> > &work,
88  LocalOrdinal &workSize, LocalOrdinal &info);
89 
90 } //namespace MueLu
91 
92 #define MUELU_QR_INTERFACEEX_SHORT
93 
94 
95 #endif /* MUELU_QR_INTERFACEEX_DECL_HPP_ */
QR_InterfaceEx(const size_t nullSpaceDimension)
Constructor.
Interface to the Teuchos wrappers for LAPACK&#39;s QR.
LocalOrdinal info_
(out) =0: success; =i, i<0: i-th argument has illegal value
Teuchos::LAPACK< LocalOrdinal, Scalar > lapack_
Teuchos LAPACK wrapper.
Namespace for MueLu classes and methods.
ArrayRCP< Scalar > tau_
Internal LAPACK variables.
void ExtractQ(LocalOrdinal const &myAggSize, ArrayRCP< Scalar > &localQR)
Calculate the Q factor.
ArrayRCP< Scalar > work_
Temporary work space.
void Compute(LocalOrdinal const &myAggSize, ArrayRCP< Scalar > &localQR)
Compute the QR factorization.
std::vector< LocalOrdinal > nonZeroCols_
virtual ~QR_InterfaceEx()
Destructor.
void LapackQR(Teuchos::LAPACK< LocalOrdinal, Scalar > &lapack, LocalOrdinal myAggSize, int intFineNSDim, ArrayRCP< Scalar > &localQR, ArrayRCP< Scalar > &tau, ArrayRCP< Scalar > &work, LocalOrdinal &workSize, LocalOrdinal &info)
Non-member templated function to handle extracting Q from QR factorization.
LocalOrdinal NSDim_
Dimension of nullspace.
bool isZeroNspColumn(LocalOrdinal const &myAggSize, ArrayRCP< Scalar > &localQR, LocalOrdinal nspCol)
LocalOrdinal workSize_
Length of work vectors. Must be at least dimension of nullspace.
ArrayRCP< Scalar > internalLocalQR_
internal local QR (without zero columns)