[petsc-users] Expecting Explanation
Smith, Barry F.
bsmith at mcs.anl.gov
Sat Nov 17 13:22:16 CST 2018
Note the code in the example
/* Open viewer for binary output */
ierr = PetscViewerBinaryOpen(PETSC_COMM_SELF,"input.dat",FILE_MODE_WRITE,&view_out);CHKERRQ(ierr);
ierr = PetscViewerBinaryGetDescriptor(view_out,&fd);CHKERRQ(ierr);
/* Write binary output */
ierr = PetscBinaryWrite(fd,&m,1,PETSC_INT,PETSC_FALSE);CHKERRQ(ierr);
ierr = PetscBinaryWrite(fd,array,m,PETSC_SCALAR,PETSC_FALSE);CHKERRQ(ierr);
this means each process is opening the same file for writing (because the argument to PetscViewerBinaryOpen() is PETSC_COMM_SELF) and then all of the processes are writing to this same file (completely uncoordinated). In general this won't work, it will just make a mess of things. This is why this example has the line
> if (size != 1) SETERRQ(PETSC_COMM_SELF,1,"This is a uniprocessor example only!");
Barry
> On Nov 17, 2018, at 1:12 PM, Fazlul Huq via petsc-users <petsc-users at mcs.anl.gov> wrote:
>
> Hello PETSc developers,
>
> In example 6 or vec section I don't understand this line:
> if (size != 1) SETERRQ(PETSC_COMM_SELF,1,"This is a uniprocessor example only!");
>
> I tried to run the code with "mpiexec -n 2 ./ex6" or "mpiexec -n 4 ./ex6" or even "mpiexec -n 1 ./ex6" it the code runs properly.
>
> Thanks.
>
> Sincerely,
> Huq
>
> --
>
> Fazlul Huq
> Graduate Research Assistant
> Department of Nuclear, Plasma & Radiological Engineering (NPRE)
> University of Illinois at Urbana-Champaign (UIUC)
> E-mail: huq2090 at gmail.com
More information about the petsc-users
mailing list