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: }