← Back to team overview

dolfin team mailing list archive

Re: Vector and uBlasVector

 

Ok thanks! It works as:

PlasticityUpdatedSolver::PlasticityUpdatedSolver(Mesh& mesh) :

    mesh(mesh),
    astress(),
    { Function S(mesh, s, astress); }

but not as:

PlasticityUpdatedSolver::PlasticityUpdatedSolver(Mesh& mesh) :

    mesh(mesh),
    astress(),
    S(mesh, s, astress), { }

having declared:

Function S;
Mesh& mesh;
Vector s;
FooBilinearForm astress;

I don't see which could be the difference. Thanks.

Regards,
Alessio


> 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