File: twod_matrix.cweb

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 (137 lines) | stat: -rw-r--r-- 3,632 bytes parent folder | download | duplicates (2)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
@q $Id: twod_matrix.cweb 148 2005-04-19 15:12:26Z kamenik $ @>
@q Copyright 2004, Ondra Kamenik @>

@ Start of {\tt twod\_matrix.cpp} file.
@c
#include "twod_matrix.h"
#include "tl_exception.h"


@<|ConstTwoDMatrix| constructors@>;
@<|ConstTwoDMatrix::writeMat4| code@>;
@<|TwoDMatrix| row methods code@>;
@<|TwoDMatrix| column methods code@>;
@<|TwoDMatrix::save| code@>;
@<|Mat4Header| constructor 1 code@>;
@<|Mat4Header| constructor 2 code@>;
@<|Mat4Header::write| code@>;

@ 
@<|ConstTwoDMatrix| constructors@>=
ConstTwoDMatrix::ConstTwoDMatrix(const TwoDMatrix& m)
	: ConstGeneralMatrix(m)@+ {}

ConstTwoDMatrix::ConstTwoDMatrix(const TwoDMatrix& m, int first_col, int num)
	: ConstGeneralMatrix(m, 0, first_col, m.nrows(), num)@+ {}

ConstTwoDMatrix::ConstTwoDMatrix(const ConstTwoDMatrix& m, int first_col, int num)
	: ConstGeneralMatrix(m, 0, first_col, m.nrows(), num)@+ {}

ConstTwoDMatrix::ConstTwoDMatrix(int first_row, int num, const TwoDMatrix& m)
	: ConstGeneralMatrix(m, first_row, 0, num, m.ncols())@+ {}

ConstTwoDMatrix::ConstTwoDMatrix(int first_row, int num, const ConstTwoDMatrix& m)
	: ConstGeneralMatrix(m, first_row, 0, num, m.ncols())@+ {}

@ 
@<|ConstTwoDMatrix::writeMat4| code@>=
void ConstTwoDMatrix::writeMat4(FILE* fd, const char* vname) const
{
	Mat4Header header(*this, vname);
	header.write(fd);
	for (int j = 0; j < ncols(); j++)
		for (int i = 0; i < nrows(); i++)
			fwrite(&(get(i,j)), sizeof(double), 1, fd);
}

@ 
@<|TwoDMatrix| row methods code@>=
void TwoDMatrix::copyRow(int from, int to)
{
	if (from != to)
		copyRow(ConstTwoDMatrix(*this), from, to);
}

void TwoDMatrix::copyRow(const ConstTwoDMatrix& m, int from, int to)
{
	ConstVector fr_row(from, m);
	Vector to_row(to, *this);
	to_row = fr_row;
}

void TwoDMatrix::addRow(double d, const ConstTwoDMatrix& m, int from, int to)
{
	ConstVector fr_row(from, m);
	Vector to_row(to, *this);
	to_row.add(d, fr_row);
}


@ 
@<|TwoDMatrix| column methods code@>=
void TwoDMatrix::copyColumn(int from, int to)
{
	if (from != to)
		copyColumn(ConstTwoDMatrix(*this), from, to);
}

void TwoDMatrix::copyColumn(const ConstTwoDMatrix& m, int from, int to)
{
	ConstVector fr_col(m, from);
	Vector to_col(*this, to);
	to_col = fr_col;
}

void TwoDMatrix::addColumn(double d, const ConstTwoDMatrix& m, int from, int to)
{
	ConstVector fr_col(m, from);
	Vector to_col(*this, to);
	to_col.add(d, fr_col);
}

@ 
@<|TwoDMatrix::save| code@>=
void TwoDMatrix::save(const char* fname) const
{
	FILE* fd;
	if (NULL==(fd = fopen(fname,"w"))) {
		TL_RAISE("Cannot open file for writing in TwoDMatrix::save");
	}
	for (int row = 0; row < nrows(); row++) {
		for (int col = 0; col < ncols(); col++)
			fprintf(fd, " %20.10g", get(row, col));
		fprintf(fd, "\n");
	}
	fclose(fd);	
}

@ This constructs a MAT-4 header for Little Endian dense real double matrix.
@<|Mat4Header| constructor 1 code@>=
Mat4Header::Mat4Header(const ConstTwoDMatrix& m, const char* vn)
	: type(0), rows(m.nrows()), cols(m.ncols()), imagf(0), namelen(strlen(vn)+1),
	  vname(vn)
{}


@ This constructs a MAT-4 header for text matrix.
@<|Mat4Header| constructor 2 code@>=
Mat4Header::Mat4Header(const ConstTwoDMatrix& m, const char* vn, const char* dummy)
	: type(1), rows(m.nrows()), cols(m.ncols()), imagf(0), namelen(strlen(vn)+1),
	  vname(vn)
{}


@ 
@<|Mat4Header::write| code@>=
void Mat4Header::write(FILE* fd) const
{
	fwrite(&type, sizeof(int), 1, fd);
	fwrite(&rows, sizeof(int), 1, fd);
	fwrite(&cols, sizeof(int), 1, fd);
	fwrite(&imagf, sizeof(int), 1, fd);
	fwrite(&namelen, sizeof(int), 1, fd);
	fwrite(vname, 1, namelen, fd);
}


@ End of {\tt twod\_matrix.cpp} file.