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:   if (VecTaggerRegisterAllCalled) return 0;
 23:   VecTaggerRegisterAllCalled = PETSC_TRUE;
 24:   VecTaggerRegister(VECTAGGERABSOLUTE, VecTaggerCreate_Absolute);
 25:   VecTaggerRegister(VECTAGGERRELATIVE, VecTaggerCreate_Relative);
 26:   VecTaggerRegister(VECTAGGERCDF, VecTaggerCreate_CDF);
 27:   VecTaggerRegister(VECTAGGEROR, VecTaggerCreate_Or);
 28:   VecTaggerRegister(VECTAGGERAND, VecTaggerCreate_And);
 29:   return 0;
 30: }

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

 35:    Not collective

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

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

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

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

 54:    Level: advanced

 56: .seealso: `VecTaggerRegisterAll()`, `VecTaggerRegisterDestroy()`
 57: @*/
 58: PetscErrorCode VecTaggerRegister(const char sname[], PetscErrorCode (*function)(VecTagger))
 59: {
 60:   PetscFunctionListAdd(&VecTaggerList, sname, function);
 61:   return 0;
 62: }