15c6c1daeSBarry Smith 25c6c1daeSBarry Smith #include <petscsys.h> 35c6c1daeSBarry Smith 45c6c1daeSBarry Smith struct _n_PetscViewers { 55c6c1daeSBarry Smith MPI_Comm comm; 65c6c1daeSBarry Smith PetscViewer *viewer; 75c6c1daeSBarry Smith int n; 85c6c1daeSBarry Smith }; 95c6c1daeSBarry Smith 105c6c1daeSBarry Smith #undef __FUNCT__ 115c6c1daeSBarry Smith #define __FUNCT__ "PetscViewersDestroy" 125c6c1daeSBarry Smith /*@C 135c6c1daeSBarry Smith PetscViewersDestroy - Destroys a set of PetscViewers created with PetscViewersCreate(). 145c6c1daeSBarry Smith 155c6c1daeSBarry Smith Collective on PetscViewers 165c6c1daeSBarry Smith 175c6c1daeSBarry Smith Input Parameters: 185c6c1daeSBarry Smith . v - the PetscViewers to be destroyed. 195c6c1daeSBarry Smith 205c6c1daeSBarry Smith Level: intermediate 215c6c1daeSBarry Smith 225c6c1daeSBarry Smith .seealso: PetscViewerSocketOpen(), PetscViewerASCIIOpen(), PetscViewerCreate(), PetscViewerDrawOpen(), PetscViewersCreate() 235c6c1daeSBarry Smith 245c6c1daeSBarry Smith @*/ 255c6c1daeSBarry Smith PetscErrorCode PetscViewersDestroy(PetscViewers *v) 265c6c1daeSBarry Smith { 275c6c1daeSBarry Smith int i; 285c6c1daeSBarry Smith PetscErrorCode ierr; 295c6c1daeSBarry Smith 305c6c1daeSBarry Smith PetscFunctionBegin; 315c6c1daeSBarry Smith if (!*v) PetscFunctionReturn(0); 325c6c1daeSBarry Smith for (i=0; i<(*v)->n; i++) { 335c6c1daeSBarry Smith ierr = PetscViewerDestroy(&(*v)->viewer[i]);CHKERRQ(ierr); 345c6c1daeSBarry Smith } 355c6c1daeSBarry Smith ierr = PetscFree((*v)->viewer);CHKERRQ(ierr); 365c6c1daeSBarry Smith ierr = PetscFree(*v);CHKERRQ(ierr); 375c6c1daeSBarry Smith PetscFunctionReturn(0); 385c6c1daeSBarry Smith } 395c6c1daeSBarry Smith 405c6c1daeSBarry Smith #undef __FUNCT__ 415c6c1daeSBarry Smith #define __FUNCT__ "PetscViewersCreate" 425c6c1daeSBarry Smith /*@C 435c6c1daeSBarry Smith PetscViewersCreate - Creates a container to hold a set of PetscViewers. 445c6c1daeSBarry Smith 455c6c1daeSBarry Smith Collective on MPI_Comm 465c6c1daeSBarry Smith 475c6c1daeSBarry Smith Input Parameter: 485c6c1daeSBarry Smith . comm - the MPI communicator 495c6c1daeSBarry Smith 505c6c1daeSBarry Smith Output Parameter: 515c6c1daeSBarry Smith . v - the collection of PetscViewers 525c6c1daeSBarry Smith 535c6c1daeSBarry Smith Level: intermediate 545c6c1daeSBarry Smith 555c6c1daeSBarry Smith Concepts: PetscViewer^array of 565c6c1daeSBarry Smith 575c6c1daeSBarry Smith .seealso: PetscViewerCreate(), PetscViewersDestroy() 585c6c1daeSBarry Smith 595c6c1daeSBarry Smith @*/ 605c6c1daeSBarry Smith PetscErrorCode PetscViewersCreate(MPI_Comm comm,PetscViewers *v) 615c6c1daeSBarry Smith { 625c6c1daeSBarry Smith PetscErrorCode ierr; 635c6c1daeSBarry Smith 645c6c1daeSBarry Smith PetscFunctionBegin; 655c6c1daeSBarry Smith ierr = PetscNew(struct _n_PetscViewers,v);CHKERRQ(ierr); 665c6c1daeSBarry Smith (*v)->n = 64; 675c6c1daeSBarry Smith (*v)->comm = comm; 68*a297a907SKarl Rupp 695c6c1daeSBarry Smith ierr = PetscMalloc(64*sizeof(PetscViewer),&(*v)->viewer);CHKERRQ(ierr); 705c6c1daeSBarry Smith ierr = PetscMemzero((*v)->viewer,64*sizeof(PetscViewer));CHKERRQ(ierr); 715c6c1daeSBarry Smith PetscFunctionReturn(0); 725c6c1daeSBarry Smith } 735c6c1daeSBarry Smith 745c6c1daeSBarry Smith #undef __FUNCT__ 755c6c1daeSBarry Smith #define __FUNCT__ "PetscViewersGetViewer" 765c6c1daeSBarry Smith /*@C 775c6c1daeSBarry Smith PetscViewersGetViewer - Gets a PetscViewer from a PetscViewer collection 785c6c1daeSBarry Smith 795c6c1daeSBarry Smith Not Collective, but PetscViewer will be collective object on PetscViewers 805c6c1daeSBarry Smith 815c6c1daeSBarry Smith Input Parameter: 825c6c1daeSBarry Smith + viewers - object created with PetscViewersCreate() 835c6c1daeSBarry Smith - n - number of PetscViewer you want 845c6c1daeSBarry Smith 855c6c1daeSBarry Smith Output Parameter: 865c6c1daeSBarry Smith . viewer - the PetscViewer 875c6c1daeSBarry Smith 885c6c1daeSBarry Smith Level: intermediate 895c6c1daeSBarry Smith 905c6c1daeSBarry Smith Concepts: PetscViewer^array of 915c6c1daeSBarry Smith 925c6c1daeSBarry Smith .seealso: PetscViewersCreate(), PetscViewersDestroy() 935c6c1daeSBarry Smith 945c6c1daeSBarry Smith @*/ 955c6c1daeSBarry Smith PetscErrorCode PetscViewersGetViewer(PetscViewers viewers,PetscInt n,PetscViewer *viewer) 965c6c1daeSBarry Smith { 975c6c1daeSBarry Smith PetscErrorCode ierr; 985c6c1daeSBarry Smith 995c6c1daeSBarry Smith PetscFunctionBegin; 1005c6c1daeSBarry Smith if (n < 0) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Cannot access using a negative index - %d\n",n); 1015c6c1daeSBarry Smith if (n >= viewers->n) { 1025c6c1daeSBarry Smith PetscViewer *v; 1035c6c1daeSBarry Smith int newn = n + 64; /* add 64 new ones at a time */ 1045c6c1daeSBarry Smith 1055c6c1daeSBarry Smith ierr = PetscMalloc(newn*sizeof(PetscViewer),&v);CHKERRQ(ierr); 1065c6c1daeSBarry Smith ierr = PetscMemzero(v,newn*sizeof(PetscViewer));CHKERRQ(ierr); 1075c6c1daeSBarry Smith ierr = PetscMemcpy(v,viewers->viewer,viewers->n*sizeof(PetscViewer));CHKERRQ(ierr); 1085c6c1daeSBarry Smith ierr = PetscFree(viewers->viewer);CHKERRQ(ierr); 109*a297a907SKarl Rupp 1105c6c1daeSBarry Smith viewers->viewer = v; 1115c6c1daeSBarry Smith } 1125c6c1daeSBarry Smith if (!viewers->viewer[n]) { 1135c6c1daeSBarry Smith ierr = PetscViewerCreate(viewers->comm,&viewers->viewer[n]);CHKERRQ(ierr); 1145c6c1daeSBarry Smith } 1155c6c1daeSBarry Smith *viewer = viewers->viewer[n]; 1165c6c1daeSBarry Smith PetscFunctionReturn(0); 1175c6c1daeSBarry Smith } 1185c6c1daeSBarry Smith 1195c6c1daeSBarry Smith 1205c6c1daeSBarry Smith 1215c6c1daeSBarry Smith 1225c6c1daeSBarry Smith 1235c6c1daeSBarry Smith 124