Good morning,

I'm Mari and I'm beginner PETSc user and I'd like to ask about tough problem, especially for me. I solve problem of data-set distribution, which are saved only on zero-rank process, to DMDA global vector. It means that every process stores a appropriate subset of data-set. I used DMDAGlobalToNaturalAllCreate and DMDANaturalAllToGlobalCreate function, and then VecScatterBegin and VecScatterEnd functions ... see please code below

    ...

ierr = DMDAGlobalToNaturalAllCreate( da, &tolocalall ); CHKERRQ(ierr); ierr = DMDANaturalAllToGlobalCreate( da, &fromlocalall ); CHKERRQ(ierr);

    if( rank == 0  )
    {

        ierr = VecCreateSeq( PETSC_COMM_SELF, SIZE, &localall );

ierr = VecScatterBegin( tolocalall, x, localall, ADD_VALUES, SCATTER_FORWARD_LOCAL ); CHKERRQ(ierr); ierr = VecScatterEnd( tolocalall, x, localall, ADD_VALUES, SCATTER_FORWARD_LOCAL ); CHKERRQ(ierr);

        ierr = VecGetArray( x, &vlocal ); CHKERRQ(ierr);

        PetscInt s;
        VecGetSize( localall, &s );

ierr = VecView( localall, PETSC_VIEWER_STDOUT_SELF ); CHKERRQ( ierr );

        //create data on zero rank process
        for ( int i = 0; i < s; i++) *vlocal++ = i;

        ierr = VecRestoreArray( localall, &vlocal ); CHKERRQ(ierr);

ierr = VecScatterBegin(fromlocalall, localall, x, ADD_VALUES, SCATTER_FORWARD_LOCAL ); CHKERRQ(ierr); ierr = VecScatterEnd( fromlocalall, localall, x, ADD_VALUES, SCATTER_FORWARD_LOCAL ); CHKERRQ(ierr);
    }

    ....

But the piece of code gets and distributes only vector-values belong to zero-rank process. So, I haven't any idea how can I solve my problem only with PETSc functions. I'd like to get all values from global vector to zero-rank process and put back all data-set only from zero-rank to global vector. Can you help me, please?

Thanks for your response
Mari

Reply via email to