Actual source code: taggerregi.c

  1: #include <petsc/private/vecimpl.h>

  3: PETSC_EXTERN PetscErrorCode VecTaggerCreate_Absolute(VecTagger);
  4: PETSC_EXTERN PetscErrorCode VecTaggerCreate_Relative(VecTagger);
  5: PETSC_EXTERN PetscErrorCode VecTaggerCreate_CDF(VecTagger);
  6: PETSC_EXTERN PetscErrorCode VecTaggerCreate_Or(VecTagger);
  7: PETSC_EXTERN PetscErrorCode VecTaggerCreate_And(VecTagger);

  9: PetscFunctionList VecTaggerList;

 11: /*@C
 12:    VecTaggerRegisterAll - Registers all the VecTagger communication implementations

 14:    Not Collective

 16:    Level: advanced

 18: .seealso: `VecTaggerRegisterDestroy()`
 19: @*/
 20: PetscErrorCode VecTaggerRegisterAll(void)
 21: {
 22:   PetscFunctionBegin;
 23:   if (VecTaggerRegisterAllCalled) PetscFunctionReturn(PETSC_SUCCESS);
 24:   VecTaggerRegisterAllCalled = PETSC_TRUE;
 25:   PetscCall(VecTaggerRegister(VECTAGGERABSOLUTE, VecTaggerCreate_Absolute));
 26:   PetscCall(VecTaggerRegister(VECTAGGERRELATIVE, VecTaggerCreate_Relative));
 27:   PetscCall(VecTaggerRegister(VECTAGGERCDF, VecTaggerCreate_CDF));
 28:   PetscCall(VecTaggerRegister(VECTAGGEROR, VecTaggerCreate_Or));
 29:   PetscCall(VecTaggerRegister(VECTAGGERAND, VecTaggerCreate_And));
 30:   PetscFunctionReturn(PETSC_SUCCESS);
 31: }

 33: /*@C
 34:   VecTaggerRegister  - Adds an implementation of the VecTagger communication protocol.

 36:    Not collective

 38:    Input Parameters:
 39: +  name_impl - name of a new user-defined implementation
 40: -  routine_create - routine to create method context

 42:    Notes:
 43:    VecTaggerRegister() may be called multiple times to add several user-defined implementations.

 45:    Sample usage:
 46: .vb
 47:    VecTaggerRegister("my_impl",MyImplCreate);
 48: .ve

 50:    Then, this implementation can be chosen with the procedural interface via
 51: $     VecTaggerSetType(tagger,"my_impl")
 52:    or at runtime via the option
 53: $     -snes_type my_solver

 55:    Level: advanced

 57: .seealso: `VecTaggerRegisterAll()`, `VecTaggerRegisterDestroy()`
 58: @*/
 59: PetscErrorCode VecTaggerRegister(const char sname[], PetscErrorCode (*function)(VecTagger))
 60: {
 61:   PetscFunctionBegin;
 62:   PetscCall(PetscFunctionListAdd(&VecTaggerList, sname, function));
 63:   PetscFunctionReturn(PETSC_SUCCESS);
 64: }