Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F90439612
SparseVector.h
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Nov 1, 16:29
Size
3 KB
Mime Type
text/x-c++
Expires
Sun, Nov 3, 16:29 (1 d, 22 h)
Engine
blob
Format
Raw Data
Handle
22033168
Attached To
rLAMMPS lammps
SparseVector.h
View Options
#ifndef SPARSEVECTOR_H
#define SPARSEVECTOR_H
#include "MatrixLibrary.h"
namespace
ATC_matrix
{
// No C++ templated typedefs, so use a define, gets cleaned up at end,
// so don't use outside of this class
#define STORE typename std::map<INDEX, T>
template
<
class
T
>
class
SparseVector
;
template
<
class
T
>
T
dot
(
const
SparseVector
<
T
>
&
a
,
const
SparseVector
<
T
>
&
b
);
/**
* @class SparseVector
* @brief Class for vectors that contain a majority of zero elements and provides relevant operations
*/
template
<
class
T
>
class
SparseVector
:
public
Vector
<
T
>
{
//* Multiplies a Matrix by a SparseVector (M*v) and returns a DenseVector.
friend
DenseVector
<
T
>
operator
*<
T
>
(
const
Matrix
<
T
>
&
M
,
const
SparseVector
<
T
>
&
v
);
//* Multiplies a SparseVector by a Matrix (M'*v) and returns a DenseVector.
friend
DenseVector
<
T
>
operator
*<
T
>
(
const
SparseVector
<
T
>
&
v
,
const
Matrix
<
T
>
&
M
);
//* Computes the dot product between two SparseVectors of equal length.
#ifdef __INTEL_COMPILER
// for use on Intel compilers
template
<
class
T
>
friend
T
dot
(
const
SparseVector
<
T
>
&
a
,
const
SparseVector
<
T
>
&
b
);
#else
// for use with gcc
friend
T
dot
<
T
>
(
const
SparseVector
<
T
>
&
a
,
const
SparseVector
<
T
>
&
b
);
#endif
//* computes the product of a SparseMatrix tranpose with a SparseVector (M'*v).
friend
SparseVector
<
T
>
operator
*<
T
>
(
const
SparseMatrix
<
T
>
&
M
,
const
SparseVector
<
T
>
&
v
);
//* computes the product of a SparseMatrix tranpose with a SparseVector (M'*v).
friend
SparseVector
<
T
>
operator
*<
T
>
(
const
SparseVector
<
T
>
&
v
,
const
SparseMatrix
<
T
>
&
M
);
public:
//* Constructor - sets length of vector (NOT # of nonzeros).
SparseVector
(
INDEX
length
=
0
);
//* Copies another SparseVector
SparseVector
(
const
SparseVector
<
T
>
&
c
);
//* Copies a general Vector (avoid if possible, its going to be slow).
SparseVector
(
const
Vector
<
T
>
&
c
);
//* Overrides output to string function to list only nonzeros and indices.
std
::
string
to_string
()
const
;
//* Indexing operators (w/ const overloading).
//@{
T
operator
()(
INDEX
i
,
INDEX
j
=
0
)
const
;
T
&
operator
()(
INDEX
i
,
INDEX
j
=
0
);
T
operator
[](
INDEX
i
)
const
;
T
&
operator
[](
INDEX
i
);
//* Returns a pair (index, value) for a nonzero in the vector.
std
::
pair
<
INDEX
,
T
>
pair
(
INDEX
i
)
const
;
//@}
//* assignment operators
//@{
SparseVector
<
T
>&
operator
=
(
const
SparseVector
<
T
>
&
c
);
SparseVector
<
T
>&
operator
=
(
Vector
<
T
>
&
c
);
//@}
//* Return the number of rows in the Vector.
INDEX
nRows
()
const
;
//* Returns the number of columns - always 1.
INDEX
nCols
()
const
{
return
1
;
}
//* Change # of Vector rows Vector and optionally keeps nonzeros (ignores nCols).
void
resize
(
INDEX
nRows
,
INDEX
nCols
=
1
,
bool
copy
=
0
);
//* Return the number of nonzeros in the Vector.
INDEX
size
()
const
;
//* Changes size of Vector rows and optionally removes nonzeros.
void
reset
(
INDEX
nRows
,
INDEX
nCols
=
1
,
bool
zero
=
0
);
//* zeros out all elements while preserving sparcity pattern
void
zero
();
//* TODO impliment copy (or maybe not necessary)
void
copy
(
const
T
*
ptr
,
INDEX
nRows
,
INDEX
nCols
=
1
);
//* Writes a restart file (TODO impliment this if needed/wanted).
void
write_restart
(
FILE
*
F
)
const
;
//* Adds SparseVector x, scaled by s to this one. Can be different sparcity.
void
add_scaled
(
SparseVector
<
T
>&
x
,
const
T
&
s
);
// output to matlab (is this needed)
// using Matrix<T>::matlab;
//* Writes a matlab string to a stream that creates this object with a name.
void
matlab
(
std
::
ostream
&
o
,
const
std
::
string
&
s
=
"v"
)
const
;
protected:
//* Banned operators
//@{
SparseVector
(
const
Matrix
<
T
>
&
c
);
SparseVector
<
T
>&
operator
=
(
Matrix
<
T
>
&
c
);
T
*
ptr
()
const
{
return
NULL
;
}
//@}
STORE
data_
;
//*> sparse data structure
INDEX
length_
;
//*> number of rows
};
}
// end namespace
#include "SparseVector-inl.h"
#undef STORE
#endif
Event Timeline
Log In to Comment