xref: /petsc/src/vec/is/sf/interface/sfregi.c (revision e6e75211d226c622f451867f53ce5d558649ff4f)
1 #include <petsc/private/sfimpl.h>     /*I  "petscsf.h"  I*/
2 
3 #if defined(PETSC_HAVE_MPI_WIN_CREATE)
4 PETSC_EXTERN PetscErrorCode PetscSFCreate_Window(PetscSF);
5 #endif
6 PETSC_EXTERN PetscErrorCode PetscSFCreate_Basic(PetscSF);
7 
8 PetscFunctionList PetscSFList;
9 
10 #undef __FUNCT__
11 #define __FUNCT__ "PetscSFRegisterAll"
12 /*@C
13    PetscSFRegisterAll - Registers all the PetscSF communication implementations
14 
15    Not Collective
16 
17    Level: advanced
18 
19 .keywords: PetscSF, register, all
20 
21 .seealso:  PetscSFRegisterDestroy()
22 @*/
23 PetscErrorCode  PetscSFRegisterAll(void)
24 {
25   PetscErrorCode ierr;
26 
27   PetscFunctionBegin;
28   if (PetscSFRegisterAllCalled) PetscFunctionReturn(0);
29   PetscSFRegisterAllCalled = PETSC_TRUE;
30 #if defined(PETSC_HAVE_MPI_WIN_CREATE) && defined(PETSC_HAVE_MPI_TYPE_DUP)
31   ierr = PetscSFRegister(PETSCSFWINDOW, PetscSFCreate_Window);CHKERRQ(ierr);
32 #endif
33   ierr = PetscSFRegister(PETSCSFBASIC,  PetscSFCreate_Basic);CHKERRQ(ierr);
34   PetscFunctionReturn(0);
35 }
36 
37 #undef __FUNCT__
38 #define __FUNCT__ "PetscSFRegister"
39 /*@C
40   PetscSFRegister  - Adds an implementation of the PetscSF communication protocol.
41 
42    Not collective
43 
44    Input Parameters:
45 +  name_impl - name of a new user-defined implementation
46 -  routine_create - routine to create method context
47 
48    Notes:
49    PetscSFRegister() may be called multiple times to add several user-defined implementations.
50 
51    Sample usage:
52 .vb
53    PetscSFRegister("my_impl",MyImplCreate);
54 .ve
55 
56    Then, this implementation can be chosen with the procedural interface via
57 $     PetscSFSetType(sf,"my_impl")
58    or at runtime via the option
59 $     -snes_type my_solver
60 
61    Level: advanced
62 
63 .keywords: PetscSF, register
64 
65 .seealso: PetscSFRegisterAll(), PetscSFRegisterDestroy()
66 @*/
67 PetscErrorCode  PetscSFRegister(const char sname[],PetscErrorCode (*function)(PetscSF))
68 {
69   PetscErrorCode ierr;
70 
71   PetscFunctionBegin;
72   ierr = PetscFunctionListAdd(&PetscSFList,sname,function);CHKERRQ(ierr);
73   PetscFunctionReturn(0);
74 }
75 
76