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: #undef __FUNCT__
13: /*@C
14: PetscViewersDestroy - Destroys a set of PetscViewers created with PetscViewersCreate().
16: Collective on PetscViewers
18: Input Parameters:
19: . v - the PetscViewers to be destroyed.
21: Level: intermediate
23: .seealso: PetscViewerSocketOpen(), PetscViewerASCIIOpen(), PetscViewerCreate(), PetscViewerDrawOpen(), PetscViewersCreate()
25: @*/
26: int PetscViewersDestroy(PetscViewers v)
27: {
28: int i,ierr;
31: for (i=0; i<v->n; i++) {
32: if (v->viewer[i]) {PetscViewerDestroy(v->viewer[i]);}
33: }
34: PetscFree(v->viewer);
35: PetscFree(v);
36: return(0);
37: }
39: #undef __FUNCT__
41: /*@C
42: PetscViewersCreate - Creates a container to hold a set of PetscViewers.
44: Collective on MPI_Comm
46: Input Parameter:
47: . comm - the MPI communicator
49: Output Parameter:
50: . PetscViewers - the collection of PetscViewers
52: Level: intermediate
54: Concepts: PetscViewer^array of
56: .seealso: PetscViewerCreate(), PetscViewersDestroy()
58: @*/
59: int PetscViewersCreate(MPI_Comm comm,PetscViewers *v)
60: {
64: ierr = PetscNew(struct _p_PetscViewers,v);
65: (*v)->n = 64;
66: (*v)->comm = comm;
67: PetscMalloc(64*sizeof(PetscViewer),&(*v)->viewer);
68: PetscMemzero((*v)->viewer,64*sizeof(PetscViewer));
69: return(0);
70: }
72: #undef __FUNCT__
74: /*@C
75: PetscViewersGetViewer - Gets a PetscViewer from a PetscViewer collection
77: Not Collective, but PetscViewer will be collective object on PetscViewers
79: Input Parameter:
80: + viewers - object created with PetscViewersCreate()
81: - n - number of PetscViewer you want
83: Output Parameter:
84: . viewer - the PetscViewer
86: Level: intermediate
88: Concepts: PetscViewer^array of
90: .seealso: PetscViewersCreate(), PetscViewersDestroy()
92: @*/
93: int PetscViewersGetViewer(PetscViewers viewers,int n,PetscViewer *viewer)
94: {
98: if (n < 0) SETERRQ1(PETSC_ERR_ARG_OUTOFRANGE,"Cannot access using a negative index - %dn",n);
99: if (n >= viewers->n) {
100: PetscViewer *v;
101: int newn = n + 64; /* add 64 new ones at a time */
102:
103: PetscMalloc(newn*sizeof(PetscViewer),&v);
104: PetscMemzero(v,newn*sizeof(PetscViewer));
105: PetscMemcpy(v,viewers->viewer,viewers->n*sizeof(PetscViewer));
106: PetscFree(viewers->viewer);
107: viewers->viewer = v;
108: }
109: if (!viewers->viewer[n]) {
110: PetscViewerCreate(viewers->comm,&viewers->viewer[n]);
111: }
112: *viewer = viewers->viewer[n];
113: return(0);
114: }