30 vec(std::ifstream &in) {
31 in.read(
reinterpret_cast<char*
>(&
N),
sizeof(
size_t));
33 in.read(
reinterpret_cast<char*
>(
data.data()),
N *
sizeof(
double));
36 void write(std::ofstream &out) {
37 out.write(
reinterpret_cast<char*
>(&
N),
sizeof(
size_t));
38 out.write(
reinterpret_cast<char*
>(
data.data()),
N *
sizeof(
double));
52 in.read(
reinterpret_cast<char*
>(&
N),
sizeof(
size_t));
53 in.read(
reinterpret_cast<char*
>(&
nnz),
sizeof(
size_t));
57 in.read(
reinterpret_cast<char*
>(
row_ptrs.data()), (
N + 1) *
sizeof(
size_t));
58 in.read(
reinterpret_cast<char*
>(
col_idxs.data()),
nnz *
sizeof(
size_t));
59 in.read(
reinterpret_cast<char*
>(
values.data()),
nnz *
sizeof(
double));
62 void write(std::ofstream &out) {
63 out.write(
reinterpret_cast<char*
>(&
N),
sizeof(
size_t));
64 out.write(
reinterpret_cast<char*
>(&
nnz),
sizeof(
size_t));
65 out.write(
reinterpret_cast<char*
>(
row_ptrs.data()), (
N + 1) *
sizeof(
size_t));
66 out.write(
reinterpret_cast<char*
>(
col_idxs.data()),
nnz *
sizeof(
size_t));
67 out.write(
reinterpret_cast<char*
>(
values.data()),
nnz *
sizeof(
double));
75 template <
class Entry,
class Index,
class VEntry>
79 for (
size_t i = 0; i < b.N(); i++) {
80 b_binary.
data[i] = b[i];
88 for (
auto row = A.
begin(); row!=A.
end(); ++row)
90 for (
int i=0; i<n; ++i)
92 auto ridx = row.index()*n + i;
93 for (
auto col=row.begin(); col!=row.end(); ++col)
95 for (
int j=0; j<m; ++j)
97 auto val = (*col)[i][j];
99 auto cidx = col.index()*m + j;
100 A_binary.
col_idxs.emplace_back(cidx);
101 A_binary.
values.emplace_back(val);
112 std::string fname_vec = path+
"/"+basename+
"_vec.bin";
113 std::string fname_A = path+
"/"+basename+
"_A.bin";
114 std::ofstream out(fname_vec.c_str(), std::ios::binary);
118 out.open(fname_A.c_str(), std::ios::binary);
127 template <
class Entry,
class Index>
130 std::string fname = outPath + basename +
".m";
131 std::ofstream f(fname.c_str());
132 f.precision(precision);
135 f <<
"function A = " << basename <<
'\n';
142 for (
auto row = A.
begin(); row!=A.
end(); ++row)
144 for (
int i=0; i<n; ++i)
146 auto ridx = row.index()*n + i;
147 for (
auto col=row.begin(); col!=row.end(); ++col)
149 for (
int j=0; j<m; ++j)
151 auto cidx = col.index()*m + j;
152 f << ridx+1 <<
' ' << cidx+1 <<
' ' << (*col)[i][j] << std::endl;
157 f <<
"];\nA = sparse(data(:,1),data(:,2),data(:,3)," << n*A.
N() <<
"," << m*A.
M() <<
");\n";
164 template <
class Entry,
class Index,
class VEntry>
167 std::string fname = basename +
".m";
168 std::ofstream f(fname.c_str());
169 f.precision(precision);
172 f <<
"function [A,b] = " << basename <<
'\n'
174 for (
size_t i=0; i<b.N(); ++i)
175 f << b[i] << std::endl;
183 for (
auto row = A.
begin(); row!=A.
end(); ++row)
185 for (
int i=0; i<n; ++i)
187 auto ridx = row.index()*n + i;
188 for (
auto col=row.begin(); col!=row.end(); ++col)
190 for (
int j=0; j<m; ++j)
192 auto cidx = col.index()*m + j;
193 f << ridx+1 <<
' ' << cidx+1 <<
' ' << (*col)[i][j] << std::endl;
198 f <<
"];\nA = sparse(data(:,1),data(:,2),data(:,3)," << n*A.
N() <<
"," << m*A.
M() <<
");\n";
213 template <
class Assembler>
214 void writeToMatlab(Assembler
const& assembler, std::string
const& basename,
int precision=16)
216 std::string fname = basename +
".m";
217 std::ofstream f(fname.c_str());
218 f.precision(precision);
220 f <<
"function [A,b] = " << basename <<
'\n'
223 assembler.toSequence(0,Assembler::TestVariableSetDescription::noOfVariables,
224 std::ostream_iterator<typename Assembler::Scalar>(f,
"\n"));
225 f <<
"\n];\ndata = [\n";
229 Matrix A = assembler.template get<Matrix>(
false);
231 for (
size_t i=0; i<A.ridx.size(); ++i)
232 f << A.ridx[i]+1 <<
' ' << A.cidx[i]+1 <<
' ' << A.data[i] <<
'\n';
233 f <<
"];\nA = sparse(data(:,1),data(:,2),data(:,3)," << A.N() <<
"," << A.M() <<
");\n";
236 template <
class Assembler>
237 void writeToMatlab(Assembler
const& assembler, std::string
const& path, std::string
const& basename,
int precision=16)
239 std::string fname = path +
".m";
240 std::ofstream f(fname.c_str());
241 f.precision(precision);
243 f <<
"function [A,b] = " << basename <<
'\n'
246 assembler.toSequence(0,Assembler::TestVariableSetDescription::noOfVariables,
247 std::ostream_iterator<typename Assembler::Scalar>(f,
"\n"));
248 f <<
"\n];\ndata = [\n";
252 Matrix A = assembler.template get<Matrix>(
false);
254 for (
size_t i=0; i<A.ridx.size(); ++i)
255 f << A.ridx[i]+1 <<
' ' << A.cidx[i]+1 <<
' ' << A.data[i] <<
'\n';
256 f <<
"];\nA = sparse(data(:,1),data(:,2),data(:,3)," << A.N() <<
"," << A.M() <<
");\n";
iterator end()
returns an iterator to the first row
iterator begin()
returns an iterator to the first row
Index M() const
The number of columns.
Index N() const
The number of rows.
int count(Cell const &cell, int codim)
Computes the number of subentities of codimension c of a given entity.
void writeToMatlab(NumaBCRSMatrix< Entry, Index > const &A, std::string const &basename, std::string const &outPath, int precision=16)
Writes the given matrix to an executable matlab file.
void writeToMatlabBinary(NumaBCRSMatrix< Entry, Index > const &A, Dune::BlockVector< VEntry > const &b, std::string const &basename, std::string const &path, int precision=16)
Writes the given matrix and vector to an binary file based zero.
std::vector< size_t > row_ptrs
void write(std::ofstream &out)
csr_matrix(std::ifstream &in)
std::vector< size_t > col_idxs
std::vector< double > values
csr_matrix(size_t N, size_t nnz)
void write(std::ofstream &out)
std::vector< double > data