1 #include <petsc/private/vecimpl.h>     /*I  "petscvec.h"  I*/
2 
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);
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   PetscErrorCode ierr;
23 
24   PetscFunctionBegin;
25   if (VecTaggerRegisterAllCalled) PetscFunctionReturn(0);
26   VecTaggerRegisterAllCalled = PETSC_TRUE;
27   ierr = VecTaggerRegister(VECTAGGERABSOLUTE, VecTaggerCreate_Absolute);CHKERRQ(ierr);
28   ierr = VecTaggerRegister(VECTAGGERRELATIVE, VecTaggerCreate_Relative);CHKERRQ(ierr);
29   ierr = VecTaggerRegister(VECTAGGERCDF,      VecTaggerCreate_CDF);CHKERRQ(ierr);
30   ierr = VecTaggerRegister(VECTAGGEROR,       VecTaggerCreate_Or);CHKERRQ(ierr);
31   ierr = VecTaggerRegister(VECTAGGERAND,      VecTaggerCreate_And);CHKERRQ(ierr);
32   PetscFunctionReturn(0);
33 }
34 
35 /*@C
36   VecTaggerRegister  - Adds an implementation of the VecTagger communication protocol.
37 
38    Not collective
39 
40    Input Parameters:
41 +  name_impl - name of a new user-defined implementation
42 -  routine_create - routine to create method context
43 
44    Notes:
45    VecTaggerRegister() may be called multiple times to add several user-defined implementations.
46 
47    Sample usage:
48 .vb
49    VecTaggerRegister("my_impl",MyImplCreate);
50 .ve
51 
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
56 
57    Level: advanced
58 
59 .seealso: VecTaggerRegisterAll(), VecTaggerRegisterDestroy()
60 @*/
VecTaggerRegister(const char sname[],PetscErrorCode (* function)(VecTagger))61 PetscErrorCode  VecTaggerRegister(const char sname[],PetscErrorCode (*function)(VecTagger))
62 {
63   PetscErrorCode ierr;
64 
65   PetscFunctionBegin;
66   ierr = PetscFunctionListAdd(&VecTaggerList,sname,function);CHKERRQ(ierr);
67   PetscFunctionReturn(0);
68 }
69 
70