Actual source code: sfregi.c
petsc-3.4.5 2014-06-29
1: #include <petsc-private/sfimpl.h> /*I "petscsf.h" I*/
3: #if defined(PETSC_HAVE_MPI_WIN_CREATE)
4: PETSC_EXTERN PetscErrorCode PetscSFCreate_Window(PetscSF);
5: #endif
6: PETSC_EXTERN PetscErrorCode PetscSFCreate_Basic(PetscSF);
8: PetscFunctionList PetscSFList;
12: /*@C
13: PetscSFRegisterAll - Registers all the PetscSF communication implementations
15: Not Collective
17: Level: advanced
19: .keywords: PetscSF, register, all
21: .seealso: PetscSFRegisterDestroy()
22: @*/
23: PetscErrorCode PetscSFRegisterAll(void)
24: {
28: PetscSFRegisterAllCalled = PETSC_TRUE;
29: #if defined(PETSC_HAVE_MPI_WIN_CREATE) && defined(PETSC_HAVE_MPI_TYPE_DUP)
30: PetscSFRegister(PETSCSFWINDOW, PetscSFCreate_Window);
31: #endif
32: PetscSFRegister(PETSCSFBASIC, PetscSFCreate_Basic);
33: return(0);
34: }
38: /*@C
39: PetscSFRegister - Adds an implementation of the PetscSF communication protocol.
41: Not collective
43: Input Parameters:
44: + name_impl - name of a new user-defined implementation
45: - routine_create - routine to create method context
47: Notes:
48: PetscSFRegister() may be called multiple times to add several user-defined implementations.
50: Sample usage:
51: .vb
52: PetscSFRegister("my_impl",MyImplCreate);
53: .ve
55: Then, this implementation can be chosen with the procedural interface via
56: $ PetscSFSetType(sf,"my_impl")
57: or at runtime via the option
58: $ -snes_type my_solver
60: Level: advanced
62: .keywords: PetscSF, register
64: .seealso: PetscSFRegisterAll(), PetscSFRegisterDestroy()
65: @*/
66: PetscErrorCode PetscSFRegister(const char sname[],PetscErrorCode (*function)(PetscSF))
67: {
71: PetscFunctionListAdd(&PetscSFList,sname,function);
72: return(0);
73: }