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

  7: /*@C
  8:    PetscObjectDestroy - Destroys any PetscObject, regardless of the type. 

 10:    Collective on PetscObject

 12:    Input Parameter:
 13: .  obj - any PETSc object, for example a Vec, Mat or KSP.
 14:          This must be cast with a (PetscObject), for example, 
 15:          PetscObjectDestroy((PetscObject)mat);

 17:    Level: intermediate

 19:     Concepts: destroying object
 20:     Concepts: freeing object
 21:     Concepts: deleting object

 23: @*/
 24: int PetscObjectDestroy(PetscObject obj)
 25: {


 31:   if (obj->bops->destroy) {
 32:     (*obj->bops->destroy)(obj);
 33:   } else {
 34:     SETERRQ(PETSC_ERR_SUP,"This PETSc object does not have a generic destroy routine");
 35:   }
 36:   return(0);
 37: }

 39: /*@C
 40:    PetscObjectView - Views any PetscObject, regardless of the type. 

 42:    Collective on PetscObject

 44:    Input Parameters:
 45: +  obj - any PETSc object, for example a Vec, Mat or KSP.
 46:          This must be cast with a (PetscObject), for example, 
 47:          PetscObjectView((PetscObject)mat,viewer);
 48: -  viewer - any PETSc viewer

 50:    Level: intermediate

 52: @*/
 53: int PetscObjectView(PetscObject obj,PetscViewer viewer)
 54: {

 59:   if (!viewer) viewer = PETSC_VIEWER_STDOUT_(obj->comm);

 62:   if (obj->bops->view) {
 63:     (*obj->bops->view)(obj,viewer);
 64:   } else {
 65:     SETERRQ(PETSC_ERR_SUP,"This PETSc object does not have a generic viewer routine");
 66:   }
 67:   return(0);
 68: }

 70: /*@C
 71:    PetscTypeCompare - Determines whether a PETSc object is of a particular type.

 73:    Not Collective

 75:    Input Parameters:
 76: +  obj - any PETSc object, for example a Vec, Mat or KSP.
 77:          This must be cast with a (PetscObject), for example, 
 78:          PetscObjectDestroy((PetscObject)mat);
 79: -  type_name - string containing a type name

 81:    Output Parameter:
 82: .  same - PETSC_TRUE if they are the same, else PETSC_FALSE
 83:   
 84:    Level: intermediate

 86: .seealso: VecGetType(), KSPGetType(), PCGetType(), SNESGetType()

 88:    Concepts: comparing^object types
 89:    Concepts: types^comparing
 90:    Concepts: object type^comparing

 92: @*/
 93: int PetscTypeCompare(PetscObject obj,char *type_name,PetscTruth *same)
 94: {

 98:   if (!obj) {
 99:     *same = PETSC_FALSE;
100:   } else if (type_name == PETSC_NULL && obj->type_name == PETSC_NULL) {
101:     *same = PETSC_TRUE;
102:   } else if (type_name == PETSC_NULL || obj->type_name == PETSC_NULL) {
103:     *same = PETSC_FALSE;
104:   } else {
105:     PetscStrcmp((char*)(obj->type_name),type_name,same);
106:   }
107:   return(0);
108: }

110: static int         PetscObjectRegisterDestroy_Count = 0;
111: static PetscObject PetscObjectRegisterDestroy_Objects[128];

113: /*@C
114:    PetscObjectRegisterDestroy - Registers a PETSc object to be destroyed when
115:      PetscFinalize() is called.

117:    Collective on PetscObject

119:    Input Parameter:
120: .  obj - any PETSc object, for example a Vec, Mat or KSP.
121:          This must be cast with a (PetscObject), for example, 
122:          PetscObjectRegisterDestroy((PetscObject)mat);

124:    Level: developer

126:    Notes:
127:       This is used by, for example, PETSC_VIEWER_XXX_() routines to free the viewer
128:     when PETSc ends.

130: .seealso: PetscObjectRegisterDestroyAll()
131: @*/
132: int PetscObjectRegisterDestroy(PetscObject obj)
133: {
136:   PetscObjectRegisterDestroy_Objects[PetscObjectRegisterDestroy_Count++] = obj;
137:   return(0);
138: }

140: /*@C
141:    PetscObjectRegisterDestroyAll - Frees all the PETSc objects that have been registered
142:      with PetscObjectRegisterDestroy(). Called by PetscFinalize()
143:      PetscFinalize() is called.

145:    Collective on individual PetscObjects

147:    Level: developer

149: .seealso: PetscObjectRegisterDestroy()
150: @*/
151: int PetscObjectRegisterDestroyAll(void)
152: {
153:   int ierr,i;

156:   for (i=0; i<PetscObjectRegisterDestroy_Count; i++) {
157:     PetscObjectDestroy(PetscObjectRegisterDestroy_Objects[i]);
158:   }
159:   return(0);
160: }