← Back to team overview

dolfin team mailing list archive

Re: Vector and uBlasVector

 

I would suggest the following

  FooBilinearForm a;
  Mesh mesh;
  Vector x;

  Function u(mesh, x, a);

Then when you need to do some uBlas stuff, do

  uBlasVector& xx = x.vec();

and operate on xx.

/Anders


Alessio Quaglino wrote:
Ok then my constructor should look like:

Function U(mesh);
uBlasVector& xun(U.vector().vec());
U.init(mesh, U.vector(), *amass, 1);

in this way when I update xun using the uBlas functionalities the vector
inside U is directly updated, is this the way vectors and functions are
intended to be used in dolfin? Thanks for your help.

Alessio


Create a Vector, and then you can then access the underlying uBlasVector
to perform specific operations,

   Vector x;
   uBlasVector& xx = x.vec();

Garth

Alessio Quaglino wrote:
Ok I understand the second group of errors then. But the Function.h
interface is made using the Vector and not uBlasVector, so how can I use
both the constructor dolfin::Function::Function(dolfin::Mesh&,
dolfin::Vector&, const dolfin::Form&, dolfin::uint) and not lose the
functionalities of uBlas? Thanks.

Alessio


This is a result of a (small but important) interface change in the
DOLFIN linear algebra library.
Before (until 0.7.0-1) Vector was a typedef for either a PETScMatrix or
a uBlasMatrix. As a result, the things you could do with a Vector
depended on how you had configured DOLFIN.
Now, Vector is a (very lightweight) wrapper for either a PETScMatrix or
a uBlasMatrix that only supports the functionality of the GenericVector
interface. So, no matter how you configure DOLFIN (with PETSc or uBlas),
the code will always compile.
Your problem is that you have used Vector, but have used uBlas-specific
functions that are not available in the common Vector interface.
So, you need to either just use the functions in Vector or change from
Vector to uBlasVector if you need to use functionality that is
uBlas-specific.

/Anders


Alessio Quaglino wrote:
I've cloned the latest repository of dolfin. I'm compiling my code
against
it but I'm not able to solve the following errors:

ElasticityUpdatedSolver.cpp:41: error: no matching function for call
to
'dolfin::Function::Function(dolfin::Mesh&, dolfin::uBlasVector&,
dolfin::Form&, int)'
../../../src/kernel/function/dolfin/Function.h:63: note: candidates
are: dolfin::Function::Function(const dolfin::Function&)
../../../src/kernel/function/dolfin/Function.h:60: note:
dolfin::Function::Function(std::string)
../../../src/kernel/function/dolfin/Function.h:57: note:
dolfin::Function::Function(dolfin::SubFunction)
../../../src/kernel/function/dolfin/Function.h:54: note:
dolfin::Function::Function(dolfin::Mesh&, dolfin::Vector&, const
dolfin::Form&, dolfin::uint)
../../../src/kernel/function/dolfin/Function.h:51: note:
dolfin::Function::Function(dolfin::Mesh&, dolfin::real)
../../../src/kernel/function/dolfin/Function.h:48: note:
dolfin::Function::Function(dolfin::Mesh&)
../../../src/kernel/function/dolfin/Function.h:45: note:
dolfin::Function::Function()

ElasticityUpdatedSolver.cpp:203: error: 'class dolfin::Vector' has no
member named 'copy'
ElasticityUpdatedSolver.cpp:204: error: 'class dolfin::Vector' has no
member named 'copy'
ElasticityUpdatedSolver.cpp:207: error: 'class dolfin::Vector' has no
member named 'axpy'
It seems that dolfin sees the class Vector as incompatible with
uBlasVector. What can I do to fix this in my code? Thanks.
Regards,
Alessio Quaglino

_______________________________________________
DOLFIN-dev mailing list
DOLFIN-dev@xxxxxxxxxx
http://www.fenics.org/mailman/listinfo/dolfin-dev



_______________________________________________
DOLFIN-dev mailing list
DOLFIN-dev@xxxxxxxxxx
http://www.fenics.org/mailman/listinfo/dolfin-dev





_______________________________________________
DOLFIN-dev mailing list
DOLFIN-dev@xxxxxxxxxx
http://www.fenics.org/mailman/listinfo/dolfin-dev


Follow ups

References