← Back to team overview

dolfin team mailing list archive

Re: Matrix aritmetic operators

 

On Sunday 28 September 2008 02:39:41 walker@xxxxxxxxxxxx wrote:
> Do any of the FENICS people sleep?  Man, it is Saturday!  it must have
> been 10pm your time zone when this was written.  

Well, more like, 23.46, and yes, I slept well that night! ;)

Johan

> :)   not that I disagree 
> with this...
>
> > Hello!
> >
> > Occasionally we have had some discussion about implementing a basic
> > aritmetic
> > operators for matrices in DOLFIN. I have been able to add -=, +=, +, -,
> > operators, for the PETScMatrix interface, using the petsc function
> > MatAXPY. I
> > also implemented both assignment operators.
> >
> > I added a public function add(A,a), which add a GenericMatrix, A, scaled
> > by a,
> > to the present matrix. This is a usefull funtion when combining matrices
> > in a
> > linear algebra setting. The function is also used to implement the +=,
> > and -=, which then are used to implement +, - together with the
> > assignment operator.
> >
> > Is this something we want? I would at least like it to happen :)
> >
> > Do I miss any important aspects? What about two distributed matrices?
> > Will PETSc AXPY take care of this, (supposing of course that the matrices
> > have the
> > same number of nonzeros)?
> >
> > If we add the "add" function in the GenericMatrix interface we could
> > implement
> > the +=, -= operators directly in the GenericMatrix interface, together
> > with
> > both + and - using +=, -=. This is a good solution for at least PETSc and
> > Epetra Matrix that do not implement its own += and -=, which uBLAS and
> > MTL4
> > do.
> >
> > I have it going for PETScMatrix. Should I implement this interface to
> > GenericMatrix, and update the other dolfin Matrix classes too? The
> > changes in
> > GenericMatrix would be:
> >
> >   1) remove explicit from the copy constructor, to allow "return by
> > value" 2) add virtual add(const GenericMatrix, real a) = 0
> >   3) implement +=, -= using the add function.
> >   4) implement +, - using the +=, -=
> >
> > The changes in the other Matrix classes would be:
> >
> > For PETSc, and Epetra Matrices.
> >
> >   1) Implement add(A,a)
> >   2) Implement operator=(A)
> >
> > I can make the changes in GenericMatrix, and implement the interface for
> > PETSc, Epetra, and I could update GenericMatrix too. If we want to use
> > uBLAS's += -=, and I suppose we want, we need to overload these functions
> > in
> > the uBLAS interface, with the proposed implementation. Are there any
> > similare
> > functionality to PETSc's AXPY in uBLAS, for implementing an "add"
> > function?
> >
> > I suppose uBLAS and MTL4 are similare with respect to implementation.
> >
> > Johan
> > _______________________________________________
> > DOLFIN-dev mailing list
> > DOLFIN-dev@xxxxxxxxxx
> > http://www.fenics.org/mailman/listinfo/dolfin-dev




References