A simple question.

Barry Smith bsmith at mcs.anl.gov
Mon Apr 2 21:37:56 CDT 2007


  The double printing of 
> > Number of processors : 2
is do to the
> >     printf("Number of processors : %d\n",size);
since each of the two processes is running the code they both print it,
hence you get the message twice. You can user
PetscPrintf(PETSC_COMM_WORLD,"Number of processors : %d\n",size);
and the message will only be printed once.

   Barry

On Mon, 2 Apr 2007, Hong Zhang wrote:

> 
> The problem is at VecSetValues().
> 
> >     Vec x;
> >     PetscInt n =10;
> >     PetscErrorCode ierr;
> >     PetscMPIInt size;
> >     PetscScalar one=1.0;
> >     double vd[3]={2.,2.,2.};
> >     int indices[3]={0,5,7};
> >     PetscScalar* v=&vd[0];
> >
> >     ierr = PetscInitialize(&argc,&args,(char *)0,help);  CHKERRQ(ierr);
> >     ierr = MPI_Comm_size(PETSC_COMM_WORLD,&size);        CHKERRQ(ierr);
> >     printf("Number of processors : %d\n",size);
> >     ierr = VecCreate(PETSC_COMM_WORLD,&x);               CHKERRQ(ierr);
> >     ierr = VecSetSizes(x,PETSC_DECIDE,n);                CHKERRQ(ierr);
> >     ierr = VecSetType(x,"mpi");                          CHKERRQ(ierr);
> >     ierr = VecSetFromOptions(x);                         CHKERRQ(ierr);
> >     ierr = VecSet(x,one);                                CHKERRQ(ierr);
> >     VecSetValues(x,3,indices,v,ADD_VALUES);
>       ^^^^^^^^^^
> Here, when np = 2, both processors add v=2.0 into the vector at 0,5
> 7th component, resulting different output than np=1.
> You should call VecGetOwnershipRange(Vec x,PetscInt *low,PetscInt *high),
> then have each processor set values into its own part.
> 
> Hong
> 
> >     VecAssemblyBegin(x);
> >     VecAssemblyEnd(x);
> >
> >     ierr = VecView(x,PETSC_VIEWER_STDOUT_WORLD);         CHKERRQ(ierr);
> >     VecDestroy(x);                                       CHKERRQ(ierr);
> >     ierr = PetscFinalize();                              CHKERRQ(ierr);
> >     return 0;
> > }
> > ***************************************************************************
> >
> > 3. And now I'm running it on a dual core processor for -n 1 & 2. These are
> > the results.
> > ***************************************************************************
> > Number of processors : 1
> > Process [0]
> > 3
> > 1
> > 1
> > 1
> > 1
> > 3
> > 1
> > 3
> > 1
> > 1
> > ***************************************************************************
> > Number of processors : 2
> > Process [0]
> > 5
> > 1
> > 1
> > 1
> > 1
> > Process [1]
> > 5
> > 1
> > 5
> > 1
> > 1
> > Number of processors : 2
> > ***************************************************************************
> >
> > This is not I was really looking for. I intended to have the same output
> > (concerning the vector entries) and no double-printings (like "Number of
> > processors : 2").
> >
> > Do you think this is an MPI setup problem, or have I not really understood
> > what the above code does?
> >
> > Kind regards,
> >
> > Fotios Karaoulanis._
> >
> > ps. Congratulations on your excellent work!
> >
> >
> >
> > --
> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > Fotios E. Karaoulanis
> > Dipl. Civil Engineer, MSc TUM
> > tel     +30 2310 458913
> > fax     +30 2310 458913
> > mob     +30 6948 179452
> > e-mail  fkar at nemesis-project.org
> > --------------------------------------------
> > Consider visiting www.nemesis-project.org.
> > Home of an experimental finite element code.
> > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >
> >
> 
> 




More information about the petsc-users mailing list