Actual source code: taggerregi.c
1: #include <petsc/private/vecimpl.h>
3: PETSC_INTERN PetscErrorCode VecTaggerCreate_Absolute(VecTagger);
4: PETSC_INTERN PetscErrorCode VecTaggerCreate_Relative(VecTagger);
5: PETSC_INTERN PetscErrorCode VecTaggerCreate_CDF(VecTagger);
6: PETSC_INTERN PetscErrorCode VecTaggerCreate_Or(VecTagger);
7: PETSC_INTERN 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: + sname - name of a new user-defined implementation
40: - function - routine to create method context
42: Level: advanced
44: Notes:
45: `VecTaggerRegister()` may be called multiple times to add several user-defined implementations.
47: Example Usage:
48: .vb
49: VecTaggerRegister("my_impl", MyImplCreate);
50: .ve
52: Then, this implementation can be chosen with the procedural interface via
53: $ VecTaggerSetType(tagger, "my_impl")
54: or at runtime via the option
55: $ -snes_type my_solver
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: }