[petsc-dev] PETSC_FORTRAN_CALLBACK_CLASS vs PETSC_FORTRAN_CALLBACK_SUBTYPE ?
Jed Brown
jed at jedbrown.org
Tue Jan 20 19:47:41 CST 2026
Some callbacks are meant to persist beyond an XSetType() while others must be cleared when that is done. See the last line here.
PetscErrorCode PetscObjectChangeTypeName(PetscObject obj, const char type_name[])
{
PetscFunctionBegin;
PetscValidHeader(obj, 1);
PetscCall(PetscFree(obj->type_name));
PetscCall(PetscStrallocpy(type_name, &obj->type_name));
/* Clear all the old subtype callbacks so they can't accidentally be called (shouldn't happen anyway) */
PetscCall(PetscArrayzero(obj->fortrancallback[PETSC_FORTRAN_CALLBACK_SUBTYPE], obj->num_fortrancallback[PETSC_FORTRAN_CALLBACK_SUBTYPE]));
PetscFunctionReturn(PETSC_SUCCESS);
}
The implementation would be more complicated if they went in the same list because you'd have to distinguish class-scope reserved slots from subtype-scope free slots.
Barry Smith <bsmith at petsc.dev> writes:
> Jed,
>
> How come you introduced this construct?
>
> typedef enum {
> PETSC_FORTRAN_CALLBACK_CLASS,
> PETSC_FORTRAN_CALLBACK_SUBTYPE,
> PETSC_FORTRAN_CALLBACK_MAXTYPE
> } PetscFortranCallbackType;
>
> That is why are there two types of callbacks, they seem to be managed the same way but go into two different lists in the object. I don't see why there cannot just be one list they all go in?
>
> Thanks
>
> Barry
More information about the petsc-dev
mailing list