File: BlockDiagonal.h

package info (click to toggle)
dynare 4.3.0-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 40,640 kB
  • sloc: fortran: 82,231; cpp: 72,734; ansic: 28,874; pascal: 13,241; sh: 4,300; objc: 3,281; yacc: 2,833; makefile: 1,288; lex: 1,162; python: 162; lisp: 54; xml: 8
file content (53 lines) | stat: -rw-r--r-- 1,679 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/* $Header: /var/lib/cvs/dynare_cpp/sylv/cc/BlockDiagonal.h,v 1.1.1.1 2004/06/04 13:00:20 kamenik Exp $ */

/* Tag $Name:  $ */

#ifndef BLOCK_DIAGONAL_H
#define BLOCK_DIAGONAL_H

#include "QuasiTriangular.h"


class BlockDiagonal : public QuasiTriangular {
	int* const row_len;
	int* const col_len;
public:
	BlockDiagonal(const double* d, int d_size);
	BlockDiagonal(int p, const BlockDiagonal& b);
	BlockDiagonal(const BlockDiagonal& b);
	BlockDiagonal(const QuasiTriangular& t);
	const BlockDiagonal& operator=(const QuasiTriangular& t)
		{GeneralMatrix::operator=(t); return *this;}
	const BlockDiagonal& operator=(const BlockDiagonal& b);
	~BlockDiagonal() {delete [] row_len; delete [] col_len;}
	void setZeroBlockEdge(diag_iter edge);
	int getNumZeros() const;
	int getNumBlocks() const;
	int getLargestBlock() const;
	void printInfo() const;

	void multKron(KronVector& x) const;
	void multKronTrans(KronVector& x) const;

	const_col_iter col_begin(const DiagonalBlock& b) const;
	col_iter col_begin(const DiagonalBlock& b);
	const_row_iter row_end(const DiagonalBlock& b) const;
	row_iter row_end(const DiagonalBlock& b);
	QuasiTriangular* clone() const
		{return new BlockDiagonal(*this);}
private:
	void setZerosToRU(diag_iter edge);
	const_diag_iter findBlockStart(const_diag_iter from) const;
	static void savePartOfX(int si, int ei, const KronVector& x, Vector& work);
	void multKronBlock(const_diag_iter start, const_diag_iter end,
					   KronVector& x, Vector& work) const;
	void multKronBlockTrans(const_diag_iter start, const_diag_iter end,
							KronVector& x, Vector& work) const;
};

#endif /* BLOCK_DIAGONAL_H */


// Local Variables:
// mode:C++
// End: