~ubuntu-branches/ubuntu/saucy/rheolef/saucy

« back to all changes in this revision

Viewing changes to skit/plib/asr_seq.cc

  • Committer: Bazaar Package Importer
  • Author(s): Pierre Saramito
  • Date: 2011-02-08 10:00:06 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20110208100006-jg8rarizvhdm8e82
Tags: 5.92-1
* New upstream release:
  - "rheolef" suffix added to all unix manuals (Closes: #607117)
  - minor source code fixes for g++-4.5 (Closes: #607184)
  - minor reference manual fix (Closes: #607038)
* debian/control: libboost-iostreams-dev dependency added, as required
  by the new upstream version.
 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# include "rheolef/asr.h"
2
 
# include "rheolef/csr.h"
3
 
using namespace rheolef;
4
 
using namespace std;
5
 
// ----------------------------------------------------------------------------
6
 
// class member functions
7
 
// ----------------------------------------------------------------------------
8
 
template <class T>
9
 
asr_seq_rep<T>::asr_seq_rep(
10
 
            size_type nrow,
11
 
            size_type ncol,
12
 
            size_type loc_nrow,
13
 
            size_type loc_ncol)
14
 
  : vector<row_type>(nrow),
15
 
    _ncol(ncol),
16
 
    _nnz(0) 
17
 
{
18
 
}
19
 
template <class T>
20
 
asr_seq_rep<T>::asr_seq_rep(const asr_seq_rep<T>& a) 
21
 
  : vector<row_type>(a),
22
 
    _ncol(a._ncol),
23
 
    _nnz(a._nnz)
24
 
{
25
 
    fatal_macro ("physical copy of asr");
26
 
}
27
 
template <class T>
28
 
asr_seq_rep<T>::asr_seq_rep(const csr_seq_rep<T>& a)
29
 
  : vector<row_type>(a.nrow()),
30
 
    _ncol(a.ncol()),
31
 
    _nnz(a.nnz())
32
 
{
33
 
    a.to_asr(*this);
34
 
}
35
 
template <class T>
36
 
void
37
 
asr_seq_rep<T>::resize (
38
 
    size_type nrow1,
39
 
    size_type ncol1,
40
 
    size_type,
41
 
    size_type)
42
 
{
43
 
    vector<row_type>::resize(nrow1);
44
 
    _ncol = ncol1;
45
 
}
46
 
template <class T>
47
 
iparstream&
48
 
asr_seq_rep<T>::get (iparstream& ps) 
49
 
{
50
 
    // matrix market format:
51
 
    //   nrow ncol nnz
52
 
    //   {i, j, aij}*
53
 
    // we suppose nrow ncol already readed
54
 
    // and the matrix has good dimensions
55
 
    //  size_type nrow;
56
 
    //  s >> nrow >> _ncol;
57
 
    //  vector<row_type>::resize(nrow,numeric_limits<T>::max());
58
 
    istream& s = ps.is();
59
 
    size_type i, j;
60
 
    T aij;
61
 
    size_type n_entries;
62
 
    s >> n_entries;
63
 
    for (size_type p = 0; p < n_entries; p++) {
64
 
        s >> i >> j >> aij;
65
 
        // 1..N convention:
66
 
        i--; j--;
67
 
        add(i,j,aij);
68
 
    }
69
 
    return ps;
70
 
}
71
 
template <class T>
72
 
oparstream&
73
 
asr_seq_rep<T>::put (oparstream& ps, size_type istart) const
74
 
{
75
 
    ostream& s = ps.os();
76
 
    // we suppose nrow ncol nnz already writen
77
 
    for (size_type i = 0; i < nrow(); i++) {
78
 
        typename row_type::const_iterator iter = operator[](i).begin();
79
 
        typename row_type::const_iterator last = operator[](i).end();
80
 
        while (iter != last) {
81
 
            s << i+istart+1 << " " 
82
 
              << (*iter).first+1 << " " 
83
 
              << (*iter).second << endl;
84
 
            iter++;
85
 
        }
86
 
    }
87
 
    return ps;
88
 
}
89
 
template <class T>
90
 
void
91
 
asr_seq_rep<T>::dump (const string& name, size_type istart) const
92
 
93
 
        char iname [256];
94
 
        sprintf (iname, "%s-%d.mtx", name.c_str(), int(parallel::process()));
95
 
        cerr << "! file \"" << iname << "\" created." << endl << flush;
96
 
        ofstream s(iname);
97
 
        s << nrow() << " " << ncol() << " " << nnz() << endl;
98
 
        oparstream ps(s);
99
 
        put(ps, istart);
100
 
}
101
 
// ----------------------------------------------------------------------------
102
 
// instanciation in library
103
 
// ----------------------------------------------------------------------------
104
 
#ifdef _RHEOLEF_HAVE_DOUBLEDOUBLE
105
 
template class asr_seq_rep<doubledouble>;
106
 
#else
107
 
template class asr_seq_rep<double>;
108
 
#endif // _RHEOLEF_HAVE_DOUBLEDOUBLE
109