Johan Hake wrote:
> On Wednesday 19 August 2009 19:11:42 Garth N. Wells wrote:
>> Johan Hake wrote:
>>> On Wednesday 19 August 2009 18:50:13 Garth N. Wells wrote:
>>>> Johan Hake wrote:
>>>>> On Wednesday 19 August 2009 17:29:52 Garth N. Wells wrote:
>>>>>> What's going on behind the scene when I copy one vector to another in
>>>>>> PyDOLFIN using
>>>>>>
>>>>>>      u0.vector()[:] = u.vector()[:]
>>>>> When I add:
>>>>>
>>>>> u2 = Function(V)
>>>>> u2.vector()[:] = u.vector()[:]
>>>>>
>>>>> # Plot solution
>>>>> plot(u2)
>>>>>
>>>>> In a the Poisson demo it works fine.
>>>> In parallel?
>>> Yupp!
>>>
>>>>> This type of slice only uses the assignment operator.
>>>> The GenericVector assignment operator?
>>> Yes. This is done in __setslice__/__getslice__ in the extended python
>>> class.
>> I don't see then why the we end up inside
>>
>>    _compare_vector_with_vector
>>
>> for the Cahn-Hilliard demo when running in parallel?
> 
> Are you sure it is in 
> 
>   _compare_vector_with_vector
> 
> this should only kick in if you used '==' or some other comparison operator. 
>

Yep, I put a print statement in there.

Garth


> When I run this demo in parallel, I get passed the assignment line but it 
> stops when calling the solve function with the following message:
> 
> Traceback (most recent call last):
>   File "demo.py", line 86, in <module>
>     Traceback (most recent call last):
> solver.solve(problem, u.vector())
> RuntimeError: *** Error: MUMPS is required for parallel symbolic LU.
>  
> 
>>>> I delved into the problem and the program ends up in the function
>>>> _compare_vector_with_vector from dolfin_la_get_set_items.i. It uses
>>>> GenericVector::get and GenericVector::set. These need to be used with
>>>> caution in parallel.
>>> Yes, when other type of slices are used we need to find a way to do that
>>> in parallel. I have just started digging in the parallel code, and need
>>> to look into all the changes to get familiar with it before I try to
>>> solve this.
>> This shouldn't be too hard.
>>
>>     set(const double* block, uint m, const uint* rows)
>>
>> works in parallel but
>>
>>     get(double* block, uint m, const uint* rows)
>>
>> doesn't yet (not too hard to fix though). The really evil functions are
>>
>>    set(const double*)
>>
>> and
>>
>>    get(double*)
> 
> I think I am only using
> 
>    set(const double* block, uint m, const uint* rows)
>    get(double* block, uint m, const uint* rows)
> 
> However GenericVector.array is using the get(double*) function, and returns 
> some fishy numbers in the numpy.array.
> 
> Johan
> 
>> Garth
>>
>>> The best solution would be to have a full fledge VectotView in place ;)
>>>
>>> Johan
>>>
>>>> Garth
>>>>
>>>> Other slices might not
>>>>
>>>>> work. Have not checked.
>>>>>
>>>>> Johan
>>>>>
>>>>>> ? The issue is that it doesn't work in parallel.
>>>>>>
>>>>>> Garth
>>>>>> _______________________________________________
>>>>>> DOLFIN-dev mailing list
>>>>>> [email protected]
>>>>>> http://www.fenics.org/mailman/listinfo/dolfin-dev
_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev

Reply via email to