[petsc-users] Use of DMDAVecGetArrayF90 and DMDAVecRestoreArrayF90

Barry Smith bsmith at mcs.anl.gov
Sat Nov 21 21:10:16 CST 2015


> On Nov 21, 2015, at 8:01 PM, TAY wee-beng <zonexo at gmail.com> wrote:
> 
> 
> On 21/11/2015 9:58 PM, Matthew Knepley wrote:
>> On Sat, Nov 21, 2015 at 7:47 AM, TAY wee-beng <zonexo at gmail.com> wrote:
>> 
>> On 10/11/2015 8:47 PM, Matthew Knepley wrote:
>>> On Tue, Nov 10, 2015 at 6:30 AM, TAY wee-beng <zonexo at gmail.com> wrote:
>>> 
>>> On 10/11/2015 8:27 PM, Matthew Knepley wrote:
>>>> On Tue, Nov 10, 2015 at 3:27 AM, TAY wee-beng <zonexo at gmail.com> wrote:
>>>> Hi,
>>>> 
>>>> Inside my subroutine, I need to access the DA variable cu_types_array frequently.
>>>> 
>>>> So I need to call DMDAVecGetArrayF90 and DMDAVecRestoreArrayF90 before and after frequently.
>>>> 
>>>> Is this necessary? Can I call DMDAVecGetArrayF90 at the start and only call DMDAVecRestoreArrayF90 towards the end, where I don't need to modify the values of cu_types_array anymore?
>>>> 
>>>> Will this cause memory corruption?
>>>> 
>>>> You cannot use any other vector operations before you have called Restore.
>>> 
>>> Hi,
>>> 
>>> What do you mean by vector operations? I will just be doing some maths operation to change the values in cu_types_array. Is that fine?
>>> 
>>> While you have the array, no other operation can change the values.
>> Hi,
>> 
>> Let me clarify this. I declare in this way:
>> 
>> DM  da_cu_types
>> 
>> Vec cu_types_local,cu_types_global
>> 
>> PetscScalar,pointer :: cu_types_array(:,:,:)
>> 
>> call DMDACreate3d(MPI_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE,DMDA_STENCIL_STAR,(end_ijk_uniform(1) - sta_ijk_uniform(1) + 1),(end_ijk_uniform(2) - sta_ijk_uniform(2) + 1),&
>> 
>> (end_ijk_uniform(3) - sta_ijk_uniform(3) + 1),PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,1,stencil_width_IIB,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,da_cu_types,ierr)
>> 
>> call DMCreateGlobalVector(da_cu_types,cu_types_global,ierr)
>> 
>> call DMCreateLocalVector(da_cu_types,cu_types_local,ierr)
>> 
>> So when I need to change the values in DA variable cu_types, I call:
>> 
>> call DMDAVecGetArrayF90(da_cu_types,cu_types_local,cu_types_array,ierr)
>> 
>> .... math operations, changing the values of cu_types_array, such as:
>> 
>> cu_types_array = 0.d0
>> 
>> call DMDAVecRestoreArrayF90(da_cu_types,cu_types_local,cu_types_array,ierr)
>> 
>> 1st of all, does these DMDAVecGetArrayF90 and DMDAVecRestoreArrayF90 take a lot of time, especially if I call them many times.
>> 
>> No.
> Hi,
> 
> Another qn is supposed the sta_ijk_uniform and end_ijk_uniform change every time step. Hence I need to destroy the DM etc and re-create at each time step.
> 
> If that's the case, will this slow down my code?

  Well what choice do you have? If they change you need to create the DA again so just go ahead and do it. Worry about writing your simulation and getting good simulation results, worry less about optimizations that may or may not matter.

  Barry

> 
> Thanks.
>>  
>> Next qn is whether if I can call DMDAVecGetArrayF90 at the start, and DMDAVecRestoreArrayF90 after operations similar to the one above is finished.
>> 
>> You cannot do other Vec operations before you call Restore.
>> 
>>   Matt
>>  
>> Thanks.
>>> 
>>>    Matt
>>>  
>>>  
>>>> Also, must the array be restored using DMDAVecRestoreArrayF90 before calling DMLocalToLocalBegin,DMLocalToLocalEnd?
>>>> 
>>>> Yes.
>>>> 
>>>>   Matt
>>>>  
>>>> 
>>>> -- 
>>>> Thank you.
>>>> 
>>>> Yours sincerely,
>>>> 
>>>> TAY wee-beng
>>>> 
>>>> 
>>>> 
>>>> 
>>>> -- 
>>>> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
>>>> -- Norbert Wiener
>>> 
>>> 
>>> 
>>> 
>>> -- 
>>> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
>>> -- Norbert Wiener
>> 
>> 
>> 
>> 
>> -- 
>> What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.
>> -- Norbert Wiener
> 



More information about the petsc-users mailing list