[petsc-dev] VecScatter problem

Mark Adams mfadams at lbl.gov
Thu Aug 25 16:04:08 CDT 2016


Matt is getting confused with Fortran, I just talked with him and he gets
it now,

On Thu, Aug 25, 2016 at 4:58 PM, Robert Hager <rhager at pppl.gov> wrote:

> Now I am confused.  n1, which is a local variable in this subroutine, is
> not declared as a pointer or as allocatable here, so there is memory
> connected to n1. And in my understanding whatever values we get out of XX
> with the VecScatter are written to this memory. After the scatter has
> finished, we want those values to go into a_n1, which is an in/output of
> this subroutine. That’s what the assignment a_n1=n1 does.
>
> Robert
>
>
>
> On Aug 25, 2016, at 3:56 PM, Matthew Knepley <knepley at gmail.com> wrote:
>
> On Thu, Aug 25, 2016 at 2:38 PM, Robert Hager <rhager at pppl.gov> wrote:
>
>> Isn’t xxvec(0) basically a pointer to n1 after the call to
>> VecCreateSeqWithArray? If so, the VecScatter should update the values in n1
>> and setting a_n1=n1 in the end makes sense.
>>
>
> xxvec(0) holds a pointer (n1) to the data. That pointer does not change
> when the scatter writes in to the Vec, so
> at the end the pointer n1 is still the same, namely a_n1.
>
>    Matt
>
>
>> Robert
>>
>>
>>
>> On Aug 25, 2016, at 3:16 PM, Matthew Knepley <knepley at gmail.com> wrote:
>>
>> On Thu, Aug 25, 2016 at 1:59 PM, Mark Adams <mfadams at lbl.gov> wrote:
>>
>>> We have the subroutine below that scatters three vectors.  We have used
>>> this code on many machines and it works fine but on one machine data does
>>> not get scattered correctly. The first scatter looks OK, but it looks like
>>> the other two are missing data.
>>>
>>> Am I using this correctly?  Should we use VecGetArray in here instead of
>>> just using the pointer used for construction? Is there a race condition
>>> here that I'm missing?
>>>
>>> Thanks,
>>> Mark
>>>
>>> subroutine scatter_to_xgc(a_ts,a_XX,a_n1,a_apar,a_phi,ierr)
>>>   use petscts
>>>   use sml_module,only:sml_mype
>>>   use xgc_ts_module
>>>   implicit none
>>>   type(xgc_ts),intent(in)::a_ts
>>>   Vec,intent(in)::a_XX
>>>   real (kind=8),dimension(a_ts%nnode)::a_n1,a_apar,a_phi
>>>   PetscErrorCode,intent(out)::ierr
>>>   ! locals
>>>   PetscInt,parameter::ione=1
>>>   PetscScalar,dimension(a_ts%nnode)::n1,apar,phi
>>>   Vec::xxvec(0:2)
>>>
>>>   ! scatter solution back - n1
>>>   n1 = a_n1
>>>
>>
>> Let me be clearer. Here n1 is equal to a_n1, and used to back xxvec(0).
>> It does not change
>> in the course of the function, so why would you have
>>
>>   a_n1 = n
>>
>> later on? What am I missing?
>>
>>    Matt
>>
>>
>>>   call VecCreateSeqWithArray(PETSC_COMM_SELF,ione,a_ts%nnode,n1,xxv
>>> ec(0),ierr);CHKERRQ(ierr)
>>>   call VecScatterBegin(a_ts%from_petsc(0),a_XX,xxvec(0),INSERT_VALU
>>> ES,SCATTER_FORWARD,ierr)
>>>
>>>   ! scatter solution back - apar
>>>   apar = a_apar
>>>   call VecCreateSeqWithArray(PETSC_COMM_SELF,ione,a_ts%nnode,apar,x
>>> xvec(1),ierr);CHKERRQ(ierr)
>>>   call VecScatterBegin(a_ts%from_petsc(1),a_XX,xxvec(1),INSERT_VALU
>>> ES,SCATTER_FORWARD,ierr)
>>>
>>>   ! scatter solution back - phi
>>>   phi = a_phi
>>>   call VecCreateSeqWithArray(PETSC_COMM_SELF,ione,a_ts%nnode,phi,xx
>>> vec(2),ierr);CHKERRQ(ierr)
>>>   call VecScatterBegin(a_ts%from_petsc(2),a_XX,xxvec(2),INSERT_VALU
>>> ES,SCATTER_FORWARD,ierr)
>>>
>>>   ! end
>>>   call VecScatterEnd(  a_ts%from_petsc(0),a_XX,xxvec
>>> (0),INSERT_VALUES,SCATTER_FORWARD,ierr)
>>>   a_n1 = n1
>>>   call VecDestroy(xxvec(0),ierr)
>>>
>>>   call VecScatterEnd(  a_ts%from_petsc(1),a_XX,xxvec
>>> (1),INSERT_VALUES,SCATTER_FORWARD,ierr)
>>>   a_apar = apar
>>>   call VecDestroy(xxvec(1),ierr)
>>>
>>>   call VecScatterEnd(  a_ts%from_petsc(2),a_XX,xxvec
>>> (2),INSERT_VALUES,SCATTER_FORWARD,ierr)
>>>   a_phi = phi
>>>   call VecDestroy(xxvec(2),ierr)
>>>
>>>   return
>>> end subroutine scatter_to_xgc
>>>
>>
>>
>>
>> --
>> 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
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20160825/e7e25c24/attachment.html>


More information about the petsc-dev mailing list