dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #08227
Re: Reading back matrix from xml file
On Sun, Jun 15, 2008 at 08:54:02PM +0200, Dag Lindbo wrote:
> > On Sun, Jun 15, 2008 at 05:26:01PM +0200, Dag Lindbo wrote:
> >> > On Sat, Jun 14, 2008 at 04:08:24PM +0200, Dag Lindbo wrote:
> >> >> Hello!
> >> >>
> >> >> This should work, right?
> >> >>
> >> >> #include <dolfin.h>
> >> >> using namespace dolfin;
> >> >>
> >> >> int main(void)
> >> >> {
> >> >> File file("matrix.xml");
> >> >> Matrix A;
> >> >> file >> A;
> >> >>
> >> >> cout << "size: " << A.size(0) << "-by-" << A.size(1) << endl;
> >> >> }
> >> >>
> >> >> This results in a zero-by-zero matrix A. Any ideas what's going on?
> >> Has
> >> >> this functionality been tested since the LA redesign? I would
> >> appreciate
> >> >> if someone could grab the matrix from
> >> >> http://www.csc.kth.se/~dag/dolfin/matrix.xml and confirm.
> >> >>
> >> >> /Dag
> >> >
> >> > Well, the following piece of code from XMLMatrix.cpp should give you a
> >> > hint:
> >> >
> >> > // FIXME: update to new format
> >> > error("This function needs to be updated to the new format.");
> >> >
> >> > /*
> >> > // Set default values
> >> > row = 0;
> >> > int size = 0;
> >> >
> >> > // Parse values
> >> > parseIntegerRequired(name, attrs, "row", row);
> >> > parseIntegerRequired(name, attrs, "size", size);
> >> >
> >> > // Set values
> >> > A.initrow(row, size);
> >> > */
> >> >
> >> > :-)
> >> >
> >> > Anyway, it should be fixed now so try again.
> >> >
> >>
> >> Yeah... the runtime error was never thrown which made me think it was
> >> getting lost in the Generic* abstraction.
> >
> > The runtime error did not show up since there was another bug in the
> > XML reader. It was looking for "sparsematrix" rather than "matrix" so
> > it simply ignored all data in your file.
> >
> >> Anyway, now the program aborts
> >> with a runtime error (which is better):
> >>
> >> at /usr/local/include/dolfin/la/uBlasMatrix.h:243
> >> 243 error("Not implemented.");
> >> (gdb) up
> >> #10 0xb7dc1afa in dolfin::XMLMatrix::setRow (this=0x805fec0)
> >> at dolfin/io/XMLMatrix.cpp:121
> >> 121 A.setrow(row, columns, values);
> >
> > I only tested it for PETSc so I missed this.
> >
> >> I can take a look at the uBlas interface and see if I can add this
> >> setrow() funcitonality. uBlas may (or not) provide a nice mechanism for
> >> this operation.
> >
> > There might be something you can use. Otherwise, just set the values
> > explicitly.
>
> It turned out pretty nicely (using the ublas matrix proxy
> matrix_row<Mat>). Bundle to be found at
> http://www.csc.kth.se/~dag/dolfin/dolfin-dag-080615.hg
>
> /Dag
ok!
--
Anders
Attachment:
signature.asc
Description: Digital signature
References