I created a for cycle where I call TSTrajectoryGetVecs, but only the 0 rank 
seems to enter in this cycle and I do not know why.
I thought the following might be a solution, but it is not working as I would 
like to, i.e. the final vector has the same local parts, a copy of the values 
obtained with the 0-rank. How should I change this, please?

Vec            U, partial, Uloc;
PetscScalar    *Ui, *partlocal;
PetscInt       i;
ierr = VecCreateMPI(PETSC_COMM_WORLD,PETSC_DECIDE,14,&partial);CHKERRQ(ierr);
      for(i=0; i<40; i++) {
      PetscReal ttime = i+1;
      ierr = 
TSTrajectoryGetVecs(appctx.tj,appctx.ts,PETSC_DECIDE,&ttime,U,NULL);CHKERRQ(ierr);
      ierr = DMGetLocalVector(appctx.da,&Uloc);CHKERRQ(ierr);
      ierr = DMGlobalToLocalBegin(appctx.da,U,INSERT_VALUES,Uloc);CHKERRQ(ierr);
      ierr = DMGlobalToLocalEnd(appctx.da,U,INSERT_VALUES,Uloc);CHKERRQ(ierr);
      ierr = DMDAVecGetArray(appctx.da,Uloc,&Ui);CHKERRQ(ierr);
      ierr = VecGetArray(partial,&partlocal);CHKERRQ(ierr);
      partlocal[i] = Ui[1];
      ierr = DMDAVecRestoreArray(appctx.da,U,&Ui);CHKERRQ(ierr);
      ierr = VecRestoreArray(partial,&partlocal);CHKERRQ(ierr);
      ierr = DMRestoreLocalVector(appctx.da,&Uloc);CHKERRQ(ierr); 
}


> Il giorno 27 mag 2021, alle ore 01:15, Barry Smith <[email protected]> ha 
> scritto:
> 
> 
> 
>> On May 26, 2021, at 10:39 AM, Francesco Brarda <[email protected]> 
>> wrote:
>> 
>> Thank you very much.
>>>  Based on the error message it appears that your code is requesting 
>>> different times on different MPI ranks. Is that what you intend to do?
>> Yes. I want to save different times across a vector built with multiple MPI 
>> ranks (PETSC_DECIDE for the local length).
>> The function is called only by the first proc (rank=0) and not from the 
>> others. Is there a way to force also other ranks to call that routine?
> 
>    Yes, just have all ranks call it and ignore the result on the other ranks. 
> 
>> Should I build everything into an external function outside the main?
> 
>    It can be called in main, does not need to be in a different function.
> 
>> 
>> Francesco
>> 
>> 
>>> Il giorno 26 mag 2021, alle ore 16:20, Barry Smith <[email protected]> ha 
>>> scritto:
>>> 
>>> 
>>>  
>>> 
>>>   TSTrajectoryGetVecs() is listed as Collective on TS. This means all ranks 
>>> must call it with the same times in the same order of operations on all 
>>> ranks that share the TS. 
>>> 
>>>   You do not need to use VecScatter. Each process must call 
>>> TSTrajectoryGetVecs with the same time but then you can have only the rank 
>>> you care about select the entries from the resulting vectors you care about 
>>> while the other ranks for that time just ignore the vectors since they do 
>>> not need to values from it. 
>>> 
>>>   Barry
>>> 
>>>   
>>> 
>>>> On May 26, 2021, at 5:20 AM, Francesco Brarda <[email protected]> 
>>>> wrote:
>>>> 
>>>> Hi!
>>>> 
>>>> I solved an ODE system with TS. Now I would like to save one of the 
>>>> trajectories in specific times. To do so, I used TSTrajectoryGetVecs. 
>>>> The values of the variable I am interested in is on one processor. I want 
>>>> to collect these values in a parallel vector, but I had the error:
>>>> 
>>>> [0]PETSC ERROR: Invalid argument
>>>> [0]PETSC ERROR: Real value must be same on all processes, argument # 2
>>>> [0]PETSC ERROR: See https://www.mcs.anl.gov/petsc/documentation/faq.html 
>>>> for trouble shooting.
>>>> [0]PETSC ERROR: Petsc Release Version 3.14.4, unknown 
>>>> [0]PETSC ERROR: ./petsc_sir on a arch-debug named srvulx13 by fbrarda Wed 
>>>> May 26 12:00:42 2021
>>>> [0]PETSC ERROR: Configure options --with-cc=gcc --with-cxx=g++ 
>>>> --with-fc=gfortran --with-openblas-dir=/opt/packages/openblas/0.2.13-gcc 
>>>> --download-mpich PETSC_ARCH=arch-debug
>>>> [0]PETSC ERROR: #1 TSHistoryGetLocFromTime() line 134 in 
>>>> /home/fbrarda/petsc/src/ts/interface/tshistory.c
>>>> [0]PETSC ERROR: #2 TSTrajectoryReconstruct_Private() line 55 in 
>>>> /home/fbrarda/petsc/src/ts/trajectory/utils/reconstruct.c
>>>> [0]PETSC ERROR: #3 TSTrajectoryGetVecs() line 239 in 
>>>> /home/fbrarda/petsc/src/ts/trajectory/interface/traj.c
>>>> 
>>>> Is there any specific routine I can use to overcome this issue? Should I 
>>>> use VecScatter?
>>>> 
>>>> I hope I made myself clear.
>>>> Best,
>>>> Francesco
>>> 
>> 
> 

Reply via email to