#define PetscHeaderDestroy(h) (PetscHeaderDestroy_Private((PetscObject)(*(h))) || PetscFree(*(h))) PETSC_EXTERN PetscErrorCode PetscHeaderDestroy_Private(PetscObject); PETSC_EXTERN PetscErrorCode PetscObjectCopyFortranFunctionPointers(PetscObject,PetscObject); PETSC_EXTERN PetscErrorCode PetscObjectSetFortranCallback(PetscObject,PetscFortranCallbackType,PetscFortranCallbackId*,void(*)(void),void *ctx); PETSC_EXTERN PetscErrorCode PetscObjectGetFortranCallback(PetscObject,PetscFortranCallbackType,PetscFortranCallbackId,void(**)(void),void **ctx); PETSC_INTERN PetscErrorCode PetscCitationsInitialize(void); PETSC_INTERN PetscErrorCode PetscFreeMPIResources(void); PETSC_EXTERN PetscBool PetscCheckPointer(const void*,PetscDataType); #if defined(PETSC_HAVE_CUDA) PETSC_EXTERN PetscBool PetscCheckMpiGpuAwareness(void); #endif /* Macros to test if a PETSc object is valid and if pointers are valid */ #if !defined(PETSC_USE_DEBUG) #define PetscValidHeaderSpecific(h,ck,arg) do