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: }