Actual source code: viewers.c

  1: /*$Id: viewers.c,v 1.16 2001/04/10 19:34:10 bsmith Exp $*/

 3:  #include petscviewer.h

  5: struct _p_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: int PetscViewersDestroy(PetscViewers v)
 25: {
 26:   int         i,ierr;

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

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

 40:    Collective on MPI_Comm

 42:    Input Parameter:
 43: .   comm - the MPI communicator

 45:    Output Parameter:
 46: .  PetscViewers - the collection of PetscViewers

 48:    Level: intermediate

 50:    Concepts: PetscViewer^array of

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

 54: @*/
 55: int PetscViewersCreate(MPI_Comm comm,PetscViewers *v)
 56: {

 60:   ierr         = PetscNew(struct _p_PetscViewers,v);
 61:   (*v)->n      = 64;
 62:   (*v)->comm   = comm;
 63:   PetscMalloc(64*sizeof(PetscViewer),&(*v)->viewer);
 64:   PetscMemzero((*v)->viewer,64*sizeof(PetscViewer));
 65:   return(0);
 66: }

 68: /*@C
 69:    PetscViewersGetViewer - Gets a PetscViewer from a PetscViewer collection

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

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

 77:    Output Parameter:
 78: .  viewer - the PetscViewer

 80:    Level: intermediate

 82:    Concepts: PetscViewer^array of

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

 86: @*/
 87: int PetscViewersGetViewer(PetscViewers viewers,int n,PetscViewer *viewer)
 88: {

 92:   if (n < 0) SETERRQ1(PETSC_ERR_ARG_OUTOFRANGE,"Cannot access using a negative index - %dn",n);
 93:   if (n >= viewers->n) {
 94:     PetscViewer *v;
 95:     int    newn = n + 64; /* add 64 new ones at a time */
 96: 
 97:     PetscMalloc(newn*sizeof(PetscViewer),&v);
 98:     PetscMemzero(v,newn*sizeof(PetscViewer));
 99:     PetscMemcpy(v,viewers->viewer,viewers->n*sizeof(PetscViewer));
100:     PetscFree(viewers->viewer);
101:     viewers->viewer = v;
102:   }
103:   if (!viewers->viewer[n]) {
104:     PetscViewerCreate(viewers->comm,&viewers->viewer[n]);
105:   }
106:   *viewer = viewers->viewer[n];
107:   return(0);
108: }