File: BlockDiagonal.h

package info (click to toggle)
dynare 4.4.3-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 41,356 kB
  • ctags: 15,842
  • sloc: cpp: 77,029; ansic: 29,056; pascal: 13,241; sh: 4,811; objc: 3,061; yacc: 3,013; makefile: 1,479; lex: 1,258; 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: