32 #ifndef _SPARSE_MATRIX_H 33 #define _SPARSE_MATRIX_H 39 #include "libvpsc/assertions.h" 43 SparseMap(
unsigned n = 0) : n(n) {};
45 typedef std::pair<unsigned, unsigned> SparseIndex;
46 typedef std::map<SparseIndex,double> SparseLookup;
47 typedef SparseLookup::const_iterator ConstIt;
49 double& operator[](
const SparseIndex& k) {
52 double& operator()(
const unsigned i,
const unsigned j) {
53 return lookup[std::make_pair(i,j)];
55 double getIJ(
const unsigned i,
const unsigned j)
const {
58 ConstIt v=lookup.find(std::make_pair(i,j));
64 size_t nonZeroCount()
const {
67 void resize(
unsigned n) {
86 SparseMatrix(SparseMap
const & m)
87 : n(m.n), NZ((unsigned)m.nonZeroCount()), sparseMap(m),
88 A(
std::valarray<double>(NZ)), IA(
std::valarray<unsigned>(n+1)), JA(
std::valarray<unsigned>(NZ)) {
91 for(SparseMap::ConstIt i=m.lookup.begin(); i!=m.lookup.end(); i++) {
92 SparseMap::SparseIndex p = i->first;
93 COLA_ASSERT(p.first<n);
94 COLA_ASSERT(p.second<n);
96 if((
int)p.first!=lastrow) {
97 for(
unsigned r=lastrow+1;r<=p.first;r++) {
105 for(
unsigned r=lastrow+1;r<=n;r++) {
109 void rightMultiply(std::valarray<double>
const & v, std::valarray<double> & r)
const {
110 COLA_ASSERT(v.size()>=n);
111 COLA_ASSERT(r.size()>=n);
112 for(
unsigned i=0;i<n;i++) {
114 for(
unsigned j=IA[i];j<IA[i+1];j++) {
119 double getIJ(
const unsigned i,
const unsigned j)
const {
120 return sparseMap.getIJ(i,j);
123 for(
unsigned i=0;i<n;i++) {
124 for(
unsigned j=0;j<n;j++) {
125 printf(
"%f ",getIJ(i,j));
130 unsigned rowSize()
const {
135 SparseMap
const & sparseMap;
136 std::valarray<double> A;
137 std::valarray<unsigned> IA, JA;
libcola: Force-directed network layout subject to separation constraints library. ...
Definition: box.cpp:25