108 #ifdef LIBMESH_USE_REAL_NUMBERS 119 const unsigned N = A.
m();
126 for (
unsigned eigenval=0; eigenval<N; ++eigenval)
129 if (std::abs(lambda_imag(eigenval)) < tol*tol)
133 for (
unsigned i=0; i<N; ++i)
135 rhs(i) = lambda_real(eigenval) * VL(i, eigenval);
136 for (
unsigned j=0; j<N; ++j)
137 lhs(i) += A(j, i) * VL(j, eigenval);
143 LIBMESH_ASSERT_FP_EQUAL(0., lhs.l2_norm(), std::sqrt(tol)*tol);
160 for (
unsigned i=0; i<N; ++i)
162 rhs(i) = lambda_real(eigenval) * VL(i, eigenval) + lambda_imag(eigenval) * VL(i, eigenval+1);
163 for (
unsigned j=0; j<N; ++j)
164 lhs(i) += A(j, i) * VL(j, eigenval);
168 LIBMESH_ASSERT_FP_EQUAL(0., lhs.l2_norm(), std::sqrt(tol)*tol);
179 for (
unsigned i=0; i<N; ++i)
181 rhs(i) = -lambda_imag(eigenval) * VL(i, eigenval) + lambda_real(eigenval) * VL(i, eigenval+1);
182 for (
unsigned j=0; j<N; ++j)
183 lhs(i) += A(j, i) * VL(j, eigenval+1);
187 LIBMESH_ASSERT_FP_EQUAL(0., lhs.l2_norm(), std::sqrt(tol)*tol);
207 for (
unsigned eigenval=0; eigenval<N; ++eigenval)
210 if (std::abs(lambda_imag(eigenval)) < tol*tol)
214 for (
unsigned i=0; i<N; ++i)
216 rhs(i) = lambda_real(eigenval) * VR(i, eigenval);
217 for (
unsigned j=0; j<N; ++j)
218 lhs(i) += A(i, j) * VR(j, eigenval);
222 LIBMESH_ASSERT_FP_EQUAL(0., lhs.l2_norm(), std::sqrt(tol)*tol);
239 for (
unsigned i=0; i<N; ++i)
241 rhs(i) = lambda_real(eigenval) * VR(i, eigenval) - lambda_imag(eigenval) * VR(i, eigenval+1);
242 for (
unsigned j=0; j<N; ++j)
243 lhs(i) += A(i, j) * VR(j, eigenval);
247 LIBMESH_ASSERT_FP_EQUAL(0., lhs.l2_norm(), std::sqrt(tol)*tol);
252 for (
unsigned i=0; i<N; ++i)
254 rhs(i) = lambda_imag(eigenval) * VR(i, eigenval) + lambda_real(eigenval) * VR(i, eigenval+1);
255 for (
unsigned j=0; j<N; ++j)
256 lhs(i) += A(i, j) * VR(j, eigenval+1);
260 LIBMESH_ASSERT_FP_EQUAL(0., lhs.l2_norm(), std::sqrt(tol)*tol);
274 std::sort(true_lambda_real.begin(), true_lambda_real.end());
275 std::sort(true_lambda_imag.begin(), true_lambda_imag.end());
278 for (
unsigned i=0; i<lambda_real.
size(); ++i)
285 LIBMESH_ASSERT_FP_EQUAL(true_lambda_real[i], lambda_real(i), std::sqrt(tol)*tol);
286 LIBMESH_ASSERT_FP_EQUAL(true_lambda_imag[i], lambda_imag(i), std::sqrt(tol)*tol);
std::vector< T > & get_values()
void evd_left_and_right(DenseVector< T > &lambda_real, DenseVector< T > &lambda_imag, DenseMatrix< T > &VL, DenseMatrix< T > &VR)
Compute the eigenvalues (both real and imaginary parts) as well as the left and right eigenvectors of...
virtual unsigned int size() const override final
Defines a dense vector for use in Finite Element-type computations.