dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #08218
Re: Reading back matrix from xml file
> 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
>
> --
> Anders
> _______________________________________________
> DOLFIN-dev mailing list
> DOLFIN-dev@xxxxxxxxxx
> http://www.fenics.org/mailman/listinfo/dolfin-dev
>
Follow ups
References