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