cart-elc

Source code for CART-ELC
git clone git://git.laack.co/cart-elc.git
Log | Files | Refs | README | LICENSE

solverbase.h (1716B)


      1 #ifndef TEST_SOLVERBASE_H
      2 #define TEST_SOLVERBASE_H
      3 
      4 template<typename DstType, typename RhsType, typename MatrixType, typename SolverType>
      5 void check_solverbase(const MatrixType& matrix, const SolverType& solver, Index rows, Index cols, Index cols2)
      6 {
      7   // solve
      8   DstType m2               = DstType::Random(cols,cols2);
      9   RhsType m3               = matrix*m2;
     10   DstType solver_solution  = DstType::Random(cols,cols2);
     11   solver._solve_impl(m3, solver_solution);
     12   VERIFY_IS_APPROX(m3, matrix*solver_solution);
     13   solver_solution          = DstType::Random(cols,cols2);
     14   solver_solution          = solver.solve(m3);
     15   VERIFY_IS_APPROX(m3, matrix*solver_solution);
     16   // test solve with transposed
     17   m3                       = RhsType::Random(rows,cols2);
     18   m2                       = matrix.transpose()*m3;
     19   RhsType solver_solution2 = RhsType::Random(rows,cols2);
     20   solver.template _solve_impl_transposed<false>(m2, solver_solution2);
     21   VERIFY_IS_APPROX(m2, matrix.transpose()*solver_solution2);
     22   solver_solution2         = RhsType::Random(rows,cols2);
     23   solver_solution2         = solver.transpose().solve(m2);
     24   VERIFY_IS_APPROX(m2, matrix.transpose()*solver_solution2);
     25   // test solve with conjugate transposed
     26   m3                       = RhsType::Random(rows,cols2);
     27   m2                       = matrix.adjoint()*m3;
     28   solver_solution2         = RhsType::Random(rows,cols2);
     29   solver.template _solve_impl_transposed<true>(m2, solver_solution2);
     30   VERIFY_IS_APPROX(m2, matrix.adjoint()*solver_solution2);
     31   solver_solution2         = RhsType::Random(rows,cols2);
     32   solver_solution2         = solver.adjoint().solve(m2);
     33   VERIFY_IS_APPROX(m2, matrix.adjoint()*solver_solution2);
     34 }
     35 
     36 #endif // TEST_SOLVERBASE_H