Actual source code: destroy.c
1: /*$Id: destroy.c,v 1.59 2001/03/23 23:20:38 balay Exp $*/
2: /*
3: Provides utility routines for manulating any type of PETSc object.
4: */
5: #include petsc.h
9: /*@C
10: PetscObjectDestroy - Destroys any PetscObject, regardless of the type.
12: Collective on PetscObject
14: Input Parameter:
15: . obj - any PETSc object, for example a Vec, Mat or KSP.
16: This must be cast with a (PetscObject), for example,
17: PetscObjectDestroy((PetscObject)mat);
19: Level: intermediate
21: Concepts: destroying object
22: Concepts: freeing object
23: Concepts: deleting object
25: @*/
26: int PetscObjectDestroy(PetscObject obj)
27: {
33: if (obj->bops->destroy) {
34: (*obj->bops->destroy)(obj);
35: } else {
36: SETERRQ(PETSC_ERR_SUP,"This PETSc object does not have a generic destroy routine");
37: }
38: return(0);
39: }
43: /*@C
44: PetscObjectView - Views any PetscObject, regardless of the type.
46: Collective on PetscObject
48: Input Parameters:
49: + obj - any PETSc object, for example a Vec, Mat or KSP.
50: This must be cast with a (PetscObject), for example,
51: PetscObjectView((PetscObject)mat,viewer);
52: - viewer - any PETSc viewer
54: Level: intermediate
56: @*/
57: int PetscObjectView(PetscObject obj,PetscViewer viewer)
58: {
63: if (!viewer) viewer = PETSC_VIEWER_STDOUT_(obj->comm);
66: if (obj->bops->view) {
67: (*obj->bops->view)(obj,viewer);
68: } else {
69: SETERRQ(PETSC_ERR_SUP,"This PETSc object does not have a generic viewer routine");
70: }
71: return(0);
72: }
76: /*@C
77: PetscTypeCompare - Determines whether a PETSc object is of a particular type.
79: Not Collective
81: Input Parameters:
82: + obj - any PETSc object, for example a Vec, Mat or KSP.
83: This must be cast with a (PetscObject), for example,
84: PetscObjectDestroy((PetscObject)mat);
85: - type_name - string containing a type name
87: Output Parameter:
88: . same - PETSC_TRUE if they are the same, else PETSC_FALSE
89:
90: Level: intermediate
92: .seealso: VecGetType(), KSPGetType(), PCGetType(), SNESGetType()
94: Concepts: comparing^object types
95: Concepts: types^comparing
96: Concepts: object type^comparing
98: @*/
99: int PetscTypeCompare(PetscObject obj,const char type_name[],PetscTruth *same)
100: {
104: if (!obj) {
105: *same = PETSC_FALSE;
106: } else if (type_name == PETSC_NULL && obj->type_name == PETSC_NULL) {
107: *same = PETSC_TRUE;
108: } else if (type_name == PETSC_NULL || obj->type_name == PETSC_NULL) {
109: *same = PETSC_FALSE;
110: } else {
114: PetscStrcmp((char*)(obj->type_name),type_name,same);
115: }
116: return(0);
117: }
119: static int PetscObjectRegisterDestroy_Count = 0;
120: static PetscObject PetscObjectRegisterDestroy_Objects[128];
124: /*@C
125: PetscObjectRegisterDestroy - Registers a PETSc object to be destroyed when
126: PetscFinalize() is called.
128: Collective on PetscObject
130: Input Parameter:
131: . obj - any PETSc object, for example a Vec, Mat or KSP.
132: This must be cast with a (PetscObject), for example,
133: PetscObjectRegisterDestroy((PetscObject)mat);
135: Level: developer
137: Notes:
138: This is used by, for example, PETSC_VIEWER_XXX_() routines to free the viewer
139: when PETSc ends.
141: .seealso: PetscObjectRegisterDestroyAll()
142: @*/
143: int PetscObjectRegisterDestroy(PetscObject obj)
144: {
147: PetscObjectRegisterDestroy_Objects[PetscObjectRegisterDestroy_Count++] = obj;
148: return(0);
149: }
153: /*@C
154: PetscObjectRegisterDestroyAll - Frees all the PETSc objects that have been registered
155: with PetscObjectRegisterDestroy(). Called by PetscFinalize()
156: PetscFinalize() is called.
158: Collective on individual PetscObjects
160: Level: developer
162: .seealso: PetscObjectRegisterDestroy()
163: @*/
164: int PetscObjectRegisterDestroyAll(void)
165: {
166: int ierr,i;
169: for (i=0; i<PetscObjectRegisterDestroy_Count; i++) {
170: PetscObjectDestroy(PetscObjectRegisterDestroy_Objects[i]);
171: }
172: return(0);
173: }