Actual source code: sfregi.c

petsc-3.6.1 2015-08-06
Report Typos and Errors
  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:   if (PetscSFRegisterAllCalled) return(0);
 29:   PetscSFRegisterAllCalled = PETSC_TRUE;
 30: #if defined(PETSC_HAVE_MPI_WIN_CREATE) && defined(PETSC_HAVE_MPI_TYPE_DUP)
 31:   PetscSFRegister(PETSCSFWINDOW, PetscSFCreate_Window);
 32: #endif
 33:   PetscSFRegister(PETSCSFBASIC,  PetscSFCreate_Basic);
 34:   return(0);
 35: }

 39: /*@C
 40:   PetscSFRegister  - Adds an implementation of the PetscSF communication protocol.

 42:    Not collective

 44:    Input Parameters:
 45: +  name_impl - name of a new user-defined implementation
 46: -  routine_create - routine to create method context

 48:    Notes:
 49:    PetscSFRegister() may be called multiple times to add several user-defined implementations.

 51:    Sample usage:
 52: .vb
 53:    PetscSFRegister("my_impl",MyImplCreate);
 54: .ve

 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

 61:    Level: advanced

 63: .keywords: PetscSF, register

 65: .seealso: PetscSFRegisterAll(), PetscSFRegisterDestroy()
 66: @*/
 67: PetscErrorCode  PetscSFRegister(const char sname[],PetscErrorCode (*function)(PetscSF))
 68: {

 72:   PetscFunctionListAdd(&PetscSFList,sname,function);
 73:   return(0);
 74: }