← Back to team overview

dolfin team mailing list archive

Re: Invalid conversion from dolfin::GenericVector to dolfin::Vector

 



Anders Logg wrote:
On Wed, Apr 09, 2008 at 06:14:35PM +0200, Ola Skavhaug wrote:
Dag Lindbo skrev den 09/04-2008 følgende:
Hello again!

Why is it not possible any longer to get the Vector associated with a Function? E.g:

#include <dolfin.h>
using namespace dolfin;

int main()
{
   Function u;
   Vector& v = u.vector();
}
int main()
{
     Function u;
     Vector v;
     v = u.vector();
     return 0;
}

Should work. A Function returns a GenericVector reference, and the Vector
reference needs to be a Vector. Then the operator= in Vector is applied in the
assignment.

Ola

I don't think one should need to make a copy of the vector. It should
work to either use the vector you get by calling vector() directly,
for example

  solve(A, u.vector(), b); // Doesn't work currently but it should!

You may also do

  GenericVector& x = u.vector();


This works. Can someone remind me how to convert a GenericVector into the underlying vector type( e.g. a uBlasVector or a PETScVector)?

Garth

The thing that's changed is that a Function saves its data in a
GenericVector which can be anything, a PETScVector, a uBlasVector,
an EpetraVector, or even your own implementation of a vector class.

The class Vector is a particular implementation of a Vector, decided
at compile-time depending on how you have configured DOLFIN. If you
compile with PETSc, then it's a wrapper for a PETScVector, otherwise
it's a wrapper for a uBlasVector.

Some work needs to be done to get all the linear algebra behave well
in both Python and C++. This will likely take some weeks so we might
not be able to fix everything before the release.

(I will add the solve() problem above to the TODO list.)





Follow ups

References