13#ifndef TLAPACK_UNMQ_LV2_HH
14#define TLAPACK_UNMQ_LV2_HH
81 const idx_t m = nrows(
C);
82 const idx_t n = ncols(
C);
122 const idx_t m = nrows(
C);
123 const idx_t n = ncols(
C);
124 const idx_t
k = size(
tau);
135 ? ((ncols(
V) ==
k) && (nrows(
V) ==
nQ))
136 : ((nrows(
V) ==
k) && (ncols(
V) ==
nQ)));
139 if (m <= 0 || n <= 0 ||
k <= 0)
return 0;
156 for (idx_t i =
i0; i !=
iN; i += inc) {
168 for (idx_t i =
i0; i !=
iN; i += inc) {
182 for (idx_t i =
i0; i !=
iN; i += inc) {
194 for (idx_t i =
i0; i !=
iN; i += inc) {
324 const idx_t m = nrows(
C);
325 const idx_t n = ncols(
C);
326 const idx_t
k = size(
tau);
329 if ((m <= 0) || (n <= 0) || (
k <= 0))
return 0;
334 std::vector<T>
work_;
#define TLAPACK_STOREV
Macro for tlapack::concepts::StoreV compatible with C++17.
Definition concepts.hpp:936
#define TLAPACK_SIDE
Macro for tlapack::concepts::Side compatible with C++17.
Definition concepts.hpp:927
#define TLAPACK_SMATRIX
Macro for tlapack::concepts::SliceableMatrix compatible with C++17.
Definition concepts.hpp:899
#define TLAPACK_DIRECTION
Macro for tlapack::concepts::Direction compatible with C++17.
Definition concepts.hpp:930
#define TLAPACK_OP
Macro for tlapack::concepts::Op compatible with C++17.
Definition concepts.hpp:933
#define TLAPACK_WORKSPACE
Macro for tlapack::concepts::Workspace compatible with C++17.
Definition concepts.hpp:912
#define TLAPACK_VECTOR
Macro for tlapack::concepts::Vector compatible with C++17.
Definition concepts.hpp:906
int unmq_level2(side_t side, trans_t trans, direction_t direction, storage_t storeMode, const matrixV_t &V, const vector_t &tau, matrixC_t &C)
Applies unitary matrix Q to a matrix C.
Definition unmq_level2.hpp:308
void larf_work(side_t side, storage_t storeMode, vector_t const &x, const tau_t &tau, vectorC0_t &C0, matrixC1_t &C1, work_t &work)
Applies an elementary reflector defined by tau and v to a m-by-n matrix C decomposed into C0 and C1....
Definition larf.hpp:48
int unmq_level2_work(side_t side, trans_t trans, direction_t direction, storage_t storeMode, const matrixV_t &V, const vector_t &tau, matrixC_t &C, work_t &work)
Applies unitary matrix Q to a matrix C. Workspace is provided as an argument.
Definition unmq_level2.hpp:109
#define tlapack_check(cond)
Throw an error if cond is false.
Definition exceptionHandling.hpp:98
#define tlapack_check_false(cond)
Throw an error if cond is true.
Definition exceptionHandling.hpp:113
constexpr WorkInfo unmq_level2_worksize(side_t side, trans_t trans, direction_t direction, storage_t storeMode, const matrixV_t &V, const vector_t &tau, const matrixC_t &C)
Worspace query of unmq_level2()
Definition unmq_level2.hpp:69
Sort the numbers in D in increasing order (if ID = 'I') or in decreasing order (if ID = 'D' ).
Definition arrayTraits.hpp:15
typename traits::real_type_traits< Types..., int >::type real_type
The common real type of the list of types.
Definition scalar_type_traits.hpp:113
constexpr T conj(const T &x) noexcept
Extends std::conj() to real datatypes.
Definition utils.hpp:100
constexpr internal::RightSide RIGHT_SIDE
right side
Definition types.hpp:296
constexpr internal::RowwiseStorage ROWWISE_STORAGE
Rowwise storage.
Definition types.hpp:416
@ Forward
Forward direction.
@ Backward
Backward direction.
@ ConjTrans
conjugate transpose
constexpr internal::ColumnwiseStorage COLUMNWISE_STORAGE
Columnwise storage.
Definition types.hpp:414
@ Columnwise
Columnwise storage.
constexpr bool is_complex
True if T is a complex scalar type.
Definition scalar_type_traits.hpp:192
constexpr internal::LeftSide LEFT_SIDE
left side
Definition types.hpp:294
Output information in the workspace query.
Definition workspace.hpp:16