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