dune-istl
2.10
Loading...
Searching...
No Matches
dune
istl
bccsmatrix.hh
Go to the documentation of this file.
1
// SPDX-FileCopyrightText: Copyright © DUNE Project contributors, see file LICENSE.md in module root
2
// SPDX-License-Identifier: LicenseRef-GPL-2.0-only-with-DUNE-exception
3
// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
4
// vi: set et ts=4 sw=2 sts=2:
5
#ifndef DUNE_ISTL_BCCSMATRIX_HH
6
#define DUNE_ISTL_BCCSMATRIX_HH
7
8
#include <dune/common/fmatrix.hh>
9
#include <dune/common/fvector.hh>
10
#include <dune/common/typetraits.hh>
11
12
namespace
Dune::ISTL::Impl
13
{
27
template<class B, class I = typename std::allocator<B>::size_type>
28
class
BCCSMatrix
29
{
30
public
:
31
using
Index = I;
32
using
size_type
= std::size_t;
33
36
BCCSMatrix()
37
: N_(0), M_(0), Nnz_(0), values(0), rowindex(0), colstart(0)
38
{}
39
41
~BCCSMatrix()
42
{
43
if
(N_+M_+Nnz_!=0)
44
free();
45
}
46
48
void
setSize(
size_type
rows,
size_type
columns)
49
{
50
N_ = rows;
51
M_ = columns;
52
}
53
58
size_type
N()
const
59
{
60
return
N_;
61
}
62
64
size_type
nonzeroes()
const
65
{
66
return
Nnz_;
67
}
68
73
size_type
M()
const
74
{
75
return
M_;
76
}
77
84
B* getValues()
const
85
{
86
return
values;
87
}
88
95
Index* getRowIndex()
const
96
{
97
return
rowindex;
98
}
99
106
Index* getColStart()
const
107
{
108
return
colstart;
109
}
110
112
BCCSMatrix& operator=(
const
BCCSMatrix& mat)
113
{
114
if
(N_+M_+Nnz_!=0)
115
free();
116
N_=mat.N_;
117
M_=mat.M_;
118
Nnz_= mat.Nnz_;
119
if
(M_>0) {
120
colstart=
new
size_type
[M_+1];
121
for
(
size_type
i=0; i<=M_; ++i)
122
colstart[i]=mat.colstart[i];
123
}
124
125
if
(Nnz_>0) {
126
values =
new
B[Nnz_];
127
rowindex =
new
size_type
[Nnz_];
128
129
for
(
size_type
i=0; i<Nnz_; ++i)
130
values[i]=mat.values[i];
131
132
for
(
size_type
i=0; i<Nnz_; ++i)
133
rowindex[i]=mat.rowindex[i];
134
}
135
return
*
this
;
136
}
137
139
virtual
void
free()
140
{
141
delete
[] values;
142
delete
[] rowindex;
143
delete
[] colstart;
144
N_ = 0;
145
M_ = 0;
146
Nnz_ = 0;
147
}
148
149
public
:
150
size_type
N_, M_, Nnz_;
151
B* values;
152
Index* rowindex;
153
Index* colstart;
154
};
155
156
}
157
#endif
Dune::size_type
*The type for the index access and the size typedef A::size_type size_type
Definition
bcrsmatrix.hh:497
Generated by
1.15.0