xref: /petsc/src/vec/vec/utils/tagger/interface/taggerregi.c (revision 174dc0c8cee294b82b85e4dd3b331b29396264fc)
1 #include <petsc/private/vecimpl.h> /*I  "petscvec.h"  I*/
2 
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);
8 
9 PetscFunctionList VecTaggerList;
10 
11 /*@C
12   VecTaggerRegisterAll - Registers all the `VecTagger` communication implementations
13 
14   Not Collective
15 
16   Level: advanced
17 
18 .seealso: `VecTaggerRegisterDestroy()`
19 @*/
VecTaggerRegisterAll(void)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 }
32 
33 /*@C
34   VecTaggerRegister  - Adds an implementation of the `VecTagger` communication protocol.
35 
36   Not Collective, No Fortran Support
37 
38   Input Parameters:
39 + sname    - name of a new user-defined implementation
40 - function - routine to create method context
41 
42   Level: advanced
43 
44   Notes:
45   `VecTaggerRegister()` may be called multiple times to add several user-defined implementations.
46 
47   Example Usage:
48 .vb
49    VecTaggerRegister("my_impl", MyImplCreate);
50 .ve
51 
52   Then, this implementation can be chosen with the procedural interface via
53 .vb
54   VecTaggerSetType(tagger, "my_impl")
55 .ve
56   or at runtime via the option
57 .vb
58   -snes_type my_solver
59 .ve
60 
61 .seealso: `VecTaggerType`, `VecTaggerCreate()`, `VecTagger`, `VecTaggerRegisterAll()`, `VecTaggerRegisterDestroy()`
62 @*/
VecTaggerRegister(const char sname[],PetscErrorCode (* function)(VecTagger))63 PetscErrorCode VecTaggerRegister(const char sname[], PetscErrorCode (*function)(VecTagger))
64 {
65   PetscFunctionBegin;
66   PetscCall(PetscFunctionListAdd(&VecTaggerList, sname, function));
67   PetscFunctionReturn(PETSC_SUCCESS);
68 }
69