Actual source code: viewers.c
petsc-3.10.5 2019-03-28
Report Typos and Errors

      2:  #include <petscsys.h>
      3:  #include <petsc/private/viewerimpl.h>

      5: struct _n_PetscViewers {
      6:   MPI_Comm    comm;
      7:   PetscViewer *viewer;
      8:   int         n;
      9: };

     11: /*@C
     12:    PetscViewersDestroy - Destroys a set of PetscViewers created with PetscViewersCreate().

     14:    Collective on PetscViewers

     16:    Input Parameters:
     17: .  v - the PetscViewers to be destroyed.

     19:    Level: intermediate

     21: .seealso: PetscViewerSocketOpen(), PetscViewerASCIIOpen(), PetscViewerCreate(), PetscViewerDrawOpen(), PetscViewersCreate()

     23: @*/
     24: PetscErrorCode  PetscViewersDestroy(PetscViewers *v)
     25: {
     26:   int            i;

     30:   if (!*v) return(0);
     31:   for (i=0; i<(*v)->n; i++) {
     32:     PetscViewerDestroy(&(*v)->viewer[i]);
     33:   }
     34:   PetscFree((*v)->viewer);
     35:   PetscFree(*v);
     36:   return(0);
     37: }

     39: /*@C
     40:    PetscViewersCreate - Creates a container to hold a set of PetscViewers.

     42:    Collective on MPI_Comm

     44:    Input Parameter:
     45: .   comm - the MPI communicator

     47:    Output Parameter:
     48: .  v - the collection of PetscViewers

     50:    Level: intermediate

     52:    Concepts: PetscViewer^array of

     54: .seealso: PetscViewerCreate(), PetscViewersDestroy()

     56: @*/
     57: PetscErrorCode  PetscViewersCreate(MPI_Comm comm,PetscViewers *v)
     58: {

     62:   PetscNew(v);
     63:   (*v)->n    = 64;
     64:   (*v)->comm = comm;

     66:   PetscCalloc1(64,&(*v)->viewer);
     67:   return(0);
     68: }

     70: /*@C
     71:    PetscViewersGetViewer - Gets a PetscViewer from a PetscViewer collection

     73:    Not Collective, but PetscViewer will be collective object on PetscViewers

     75:    Input Parameter:
     76: +   viewers - object created with PetscViewersCreate()
     77: -   n - number of PetscViewer you want

     79:    Output Parameter:
     80: .  viewer - the PetscViewer

     82:    Level: intermediate

     84:    Concepts: PetscViewer^array of

     86: .seealso: PetscViewersCreate(), PetscViewersDestroy()

     88: @*/
     89: PetscErrorCode  PetscViewersGetViewer(PetscViewers viewers,PetscInt n,PetscViewer *viewer)
     90: {

     94:   if (n < 0) SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Cannot access using a negative index - %d\n",n);
     95:   if (n >= viewers->n) {
     96:     PetscViewer *v;
     97:     int         newn = n + 64; /* add 64 new ones at a time */

     99:     PetscCalloc1(newn,&v);
    100:     PetscMemcpy(v,viewers->viewer,viewers->n*sizeof(PetscViewer));
    101:     PetscFree(viewers->viewer);

    103:     viewers->viewer = v;
    104:   }
    105:   if (!viewers->viewer[n]) {
    106:     PetscViewerCreate(viewers->comm,&viewers->viewer[n]);
    107:   }
    108:   *viewer = viewers->viewer[n];
    109:   return(0);
    110: }