metis_csr_graph.h
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2014 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either
7 // version 2.1 of the License, or (at your option) any later version.
8 
9 // This library is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // Lesser General Public License for more details.
13 
14 // You should have received a copy of the GNU Lesser General Public
15 // License along with this library; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 
18 
19 
20 #ifndef LIBMESH_METIS_CSR_GRAPH_H
21 #define LIBMESH_METIS_CSR_GRAPH_H
22 
23 // Local Includes -----------------------------------
24 #include "libmesh/libmesh_common.h"
25 
26 // C++ Includes -----------------------------------
27 #include <vector>
28 #include <numeric>
29 
30 
31 
32 namespace libMesh
33 {
34 
41  {
42  public:
43  std::vector<int> offsets, vals;
44 
46  {
47  libmesh_assert_less (row+1, offsets.size());
48  offsets[row+1] = n_nonzeros;
49  }
50 
51 
52 
54  {
55  libmesh_assert_less (row+1, offsets.size());
56  return (offsets[row+1] - offsets[row]);
57  }
58 
59 
61  {
62  std::partial_sum (offsets.begin(), offsets.end(), offsets.begin());
63  libmesh_assert (!offsets.empty());
64  vals.resize(offsets.back());
65 
66  if (vals.empty())
67  vals.push_back(0);
68  }
69 
70 
71 
72  int& operator()(const libMesh::dof_id_type row, const libMesh::dof_id_type nonzero)
73  {
74  libmesh_assert_greater (vals.size(), offsets[row]+nonzero);
75 
76  return vals[offsets[row]+nonzero];
77  }
78 
79 
80 
81  const int& operator()(const libMesh::dof_id_type row, const libMesh::dof_id_type nonzero) const
82  {
83  libmesh_assert_greater (vals.size(), offsets[row]+nonzero);
84 
85  return vals[offsets[row]+nonzero];
86  }
87 
88  };
89 
90 } // namespace libMesh
91 
92 
93 #endif // LIBMESH_METIS_CSR_GRAPH_H

Site Created By: libMesh Developers
Last modified: February 07 2014 16:57:06 UTC

Hosted By:
SourceForge.net Logo