[petsc-users] what kind of stuffs I forget to free?
Jed Brown
jed at jedbrown.org
Thu Mar 20 23:39:09 CDT 2014
Fande Kong <fd.kong at siat.ac.cn> writes:
> /*
> * commproblem.cpp
> *
> * Created on: Mar 20, 2014
> * Author: fdkong
> */
>
> #include <petscsnes.h>
> #include <petscdm.h>
> #include <petsc-private/snesimpl.h>
>
> static char help[] = "Need helps.\n\n";
>
> #undef __FUNCT__
> #define __FUNCT__ "main"
> int main(int argc,char **argv)
> {
> Vec vec;
> MPI_Request request;
> MPI_Status status;
> PetscMPIInt tag =123;
> MPI_Comm comm;
> PetscMPIInt rank, size;
> PetscInt recv =10;
> PetscInt send = 0;
> DM dm;
> PetscErrorCode ierr;
>
> PetscInitialize(&argc,&argv,(char *)0,help);
> comm = PETSC_COMM_WORLD;
> ierr = MPI_Comm_rank(comm, &rank);CHKERRQ(ierr);
> ierr = MPI_Comm_size(comm, &size);CHKERRQ(ierr);
> // create an object
> ierr = VecCreate(comm, &vec);CHKERRQ(ierr);
> // take a comm from that object
> comm = ((PetscObject) vec)->comm;
> // if we set comm back to PETSC_COMM_WORLD, the code should work fine
> //comm = PETSC_COMM_WORLD;
> // receive messages from rank 0
> if( rank!=0)
> {
> ierr = MPI_Irecv(&recv, 1, MPIU_INT, 0,tag, comm, &request);CHKERRQ(ierr);
> }
You have to wait on this request. MPI_Requests are not automatically
collected at some point where you can prove that the operation has
finished. The Wait should return immediately, but you have to call it.
Otherwise MPI holds a reference to the communicator and will not call
the destructors.
> if(!rank)
> {
> //send messages to all others
> for(PetscMPIInt i =1; i<size;i++)
> {
> ierr = MPI_Isend(&send, 1, MPIU_INT, i, tag, comm, &request);CHKERRQ(ierr);
> }
> }
> // rank 0 doest not need to wait, it could continue to do other things.
It *does* need to wait eventually.
> if(rank !=0)
> {
> ierr = MPI_Waitall(1,&request, &status);CHKERRQ(ierr);
> }
> ierr = VecDestroy(&vec);CHKERRQ(ierr);
> ierr = PetscFinalize();CHKERRQ(ierr);
> }
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: not available
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20140320/9cd8c348/attachment-0001.pgp>
More information about the petsc-users
mailing list