Garth N. Wells wrote:
> Anders Logg wrote:
>> I think there is a very simple solution. We just change the
>> constructor of Function to
>>
>> Function(Mesh& mesh, GenericVector& x, const Form& form, uint i = 1)
>>
>> and the vector member of DiscreteFunction to
>>
>> GenericVector* x;
>>
>> Then if one needs a Function that uses a particular linear algebra
>> backend, then just create the Function from a PETScVector, uBlasVector
>> or EpetraVector. Otherwise, create it from a Vector (tied to the
>> default backend) or let the Function itself decide (in which case it
>> will be a Vector).
>>
>
> I thought that this would be a simple solution, but there a "new Vector"
> in DiscreteFunction which requires that the vector type be known. If
> this is somehow re-written, the above approach could be used.
>
> Garth
This is used to create copies of the vector (when creating a sub
function or in the copy constructor). How about adding a factory
function to GenericVector? (And also to GenericFoo in general.)
virtual GenericVector* create() = 0;
Then we can call this instead of new Vector() in DiscreteFunction.cpp.
/Anders