← Back to team overview

dolfin team mailing list archive

Re: Matrix assignment

 

>
>
> On Sun, 2008-06-22 at 23:51 +0200, Anders Logg wrote:
>> On Sat, Jun 21, 2008 at 05:29:14AM -0400, Hatef Monajemi wrote:
>> >
>> > Hi
>> > Isn't this code supposed to work? It gives me "invalid lvalue in
>> > assignment" error while compiling. How should I assign the elements of
>> > a Matrix???
>> >
>> > //-------------------------------
>> > int main()
>> > {
>> >
>> >
>> > for(i=0; i<nens; i++)
>> > .
>> > .
>> > .
>> > real* values = new real[nstat];
>> > u1.interpolate(values);
>> >
>> > Matrix S(nstat,nens);
>> >
>> > for(int j=0;j<nstat;j++)
>> >   {
>> >     S(j,i)=values[j];
>> >   }
>> >
>> > }
>>
>> Sorry, this doesn't work yet.
>>
>> We can easily fix this in the GenericMatrix interface by adding an
>> auxiliary class MatrixEntry (which just holds (i, j) and a reference
>> to the matrix) and have operator() return that, then overload
>> operator= in MatrixEntry to assign to the matrix.
>>
>> We had this in DOLFIN 2-3 years back but the linear algebra has gone
>> through several reimplementations since then...
>>
>> Until this has been implemented, you can use the setitem() function.
>
> Well, I am trying setitem() and as I can get from the GenericMatrix.h it
> should have a form like :
> -----------------------
> Matrix S(nstat, nens);
> S.zero();
> for(i=0; i<nens; i++)
> for(int j=0;j<nstat;j++)
> {
> S.setitem(ji, values[j]);
> }
> -------------------------
> But it is not working either. am I doing a stupid mistake using
> setitem() function? it gives me "ji was not declared in this scope".
> sorry for bothering you.

Can you provide the full source code ?

Most of the matrices in Dolfin are sparse and static. The sparsity pattern
is always create before setting values. Have you done this or do you need
a dynamical matrix ?

Kent





References