2 #include <libmesh/diagonal_matrix.h> 
    3 #include <libmesh/parallel.h> 
    4 #include <libmesh/auto_ptr.h> 
    5 #include <libmesh/dense_matrix.h> 
    6 #include <libmesh/id_types.h> 
    7 #include <libmesh/numeric_vector.h> 
   25   return n * (n + 1) / 2;
 
   34   CPPUNIT_TEST(testSizes);
 
   35   CPPUNIT_TEST(testNumerics);
 
   37   CPPUNIT_TEST_SUITE_END();
 
   43     _matrix = libmesh_make_unique<DiagonalMatrix<Number>>(*_comm);
 
   46     _local_size = root_block_size + static_cast<numeric_index_type>(_comm->rank());
 
   53       _global_size += block_size;
 
   54       _i.push_back(_global_size);
 
   57     _matrix->init(_global_size, UNUSED, _local_size, UNUSED);
 
   64     CPPUNIT_ASSERT_EQUAL(_global_size, _matrix->m());
 
   65     CPPUNIT_ASSERT_EQUAL(_global_size, _matrix->n());
 
   66     CPPUNIT_ASSERT_EQUAL(_i[_comm->rank()], _matrix->row_start());
 
   67     CPPUNIT_ASSERT_EQUAL(_i[_comm->rank() + 1], _matrix->row_stop());
 
   75     CPPUNIT_ASSERT_EQUAL(_local_size, 
numeric_index_type(_matrix->row_stop() - _matrix->row_start()));
 
   81     _matrix->add(beginning_index, beginning_index + 1, 1);
 
   82     _matrix->set(beginning_index + 1, beginning_index, 1);
 
   85     LIBMESH_ASSERT_FP_EQUAL(
libmesh_real((*_matrix)(beginning_index, beginning_index + 1)), 0, _tolerance);
 
   86     LIBMESH_ASSERT_FP_EQUAL(
libmesh_real((*_matrix)(beginning_index + 1, beginning_index)), 0, _tolerance);
 
   91         _matrix->add(i, i, i);
 
   94       _matrix->add(0, 0, 1);
 
   96       CPPUNIT_ASSERT(!_matrix->closed());
 
   99       CPPUNIT_ASSERT(_matrix->closed());
 
  104           LIBMESH_ASSERT_FP_EQUAL(
libmesh_real((*_matrix)(i, i)), i, _tolerance);
 
  106           LIBMESH_ASSERT_FP_EQUAL(
libmesh_real((*_matrix)(i, i)), _comm->size(), _tolerance);
 
  113         if (i != _global_size - 1)
 
  114           _matrix->set(i, i, i);
 
  116       if (_comm->rank() == 0)
 
  117         _matrix->set(_global_size - 1, _global_size - 1, 0);
 
  119       CPPUNIT_ASSERT(!_matrix->closed());
 
  122       CPPUNIT_ASSERT(_matrix->closed());
 
  126         if (i != _global_size - 1)
 
  127           LIBMESH_ASSERT_FP_EQUAL(
libmesh_real((*_matrix)(i, i)), i, _tolerance);
 
  129           LIBMESH_ASSERT_FP_EQUAL(
libmesh_real((*_matrix)(i, i)), 0, _tolerance);
 
  133     std::vector<numeric_index_type> rows(_local_size);
 
  134     std::iota(rows.begin(), rows.end(), beginning_index);
 
  141            local_index < _local_size;
 
  142            ++local_index, ++global_index)
 
  143         dense(local_index, local_index) = global_index;
 
  148       _matrix->add_matrix(dense, rows, rows);
 
  155         LIBMESH_ASSERT_FP_EQUAL(
libmesh_real((*_matrix)(i, i)), i, _tolerance);
 
  160       diagonal->init(_matrix->diagonal());
 
  162       _matrix->get_diagonal(*diagonal);
 
  169       copy = std::move(*diagonal);
 
  172       _matrix->add_matrix(dense, rows);
 
  176         LIBMESH_ASSERT_FP_EQUAL(
libmesh_real((*_matrix)(i, i)), 2 * i, _tolerance);
 
  179       _matrix->add(-1, copy);
 
  182         LIBMESH_ASSERT_FP_EQUAL(
libmesh_real((*_matrix)(i, i)), i, _tolerance);
 
  184       _matrix->get_transpose(copy);
 
  187         LIBMESH_ASSERT_FP_EQUAL(
libmesh_real(copy(i, i)), i, _tolerance);
 
  192       LIBMESH_ASSERT_FP_EQUAL(termial(_global_size - 1), _matrix->l1_norm(), _tolerance);
 
  193       LIBMESH_ASSERT_FP_EQUAL(_global_size - 1, _matrix->linfty_norm(), _tolerance);
 
  198       _matrix->zero_rows(rows, 1);
 
  203             LIBMESH_ASSERT_FP_EQUAL(
libmesh_real((*_matrix)(i, j)), 1, _tolerance);
 
  205             LIBMESH_ASSERT_FP_EQUAL(
libmesh_real((*_matrix)(i, j)), 0, _tolerance);
 
  213   std::unique_ptr<DiagonalMatrix<Number>> 
_matrix;
 
  215   std::vector<numeric_index_type> 
_i;