xref: /petsc/src/vec/is/sf/interface/sfregi.c (revision af0996ce37bc06907c37d8d91773840993d61e62)
1*af0996ceSBarry Smith #include <petsc/private/sfimpl.h>     /*I  "petscsf.h"  I*/
295fce210SBarry Smith 
395fce210SBarry Smith #if defined(PETSC_HAVE_MPI_WIN_CREATE)
48cc058d9SJed Brown PETSC_EXTERN PetscErrorCode PetscSFCreate_Window(PetscSF);
595fce210SBarry Smith #endif
68cc058d9SJed Brown PETSC_EXTERN PetscErrorCode PetscSFCreate_Basic(PetscSF);
795fce210SBarry Smith 
8adc40e5bSBarry Smith PetscFunctionList PetscSFList;
995fce210SBarry Smith 
1095fce210SBarry Smith #undef __FUNCT__
1195fce210SBarry Smith #define __FUNCT__ "PetscSFRegisterAll"
1295fce210SBarry Smith /*@C
1395fce210SBarry Smith    PetscSFRegisterAll - Registers all the PetscSF communication implementations
1495fce210SBarry Smith 
1595fce210SBarry Smith    Not Collective
1695fce210SBarry Smith 
1795fce210SBarry Smith    Level: advanced
1895fce210SBarry Smith 
1995fce210SBarry Smith .keywords: PetscSF, register, all
2095fce210SBarry Smith 
2195fce210SBarry Smith .seealso:  PetscSFRegisterDestroy()
2295fce210SBarry Smith @*/
23607a6623SBarry Smith PetscErrorCode  PetscSFRegisterAll(void)
2495fce210SBarry Smith {
2595fce210SBarry Smith   PetscErrorCode ierr;
2695fce210SBarry Smith 
2795fce210SBarry Smith   PetscFunctionBegin;
280f51fdf8SToby Isaac   if (PetscSFRegisterAllCalled) PetscFunctionReturn(0);
2995fce210SBarry Smith   PetscSFRegisterAllCalled = PETSC_TRUE;
30c01091c8SJed Brown #if defined(PETSC_HAVE_MPI_WIN_CREATE) && defined(PETSC_HAVE_MPI_TYPE_DUP)
31bdf89e91SBarry Smith   ierr = PetscSFRegister(PETSCSFWINDOW, PetscSFCreate_Window);CHKERRQ(ierr);
3295fce210SBarry Smith #endif
33bdf89e91SBarry Smith   ierr = PetscSFRegister(PETSCSFBASIC,  PetscSFCreate_Basic);CHKERRQ(ierr);
3495fce210SBarry Smith   PetscFunctionReturn(0);
3595fce210SBarry Smith }
3695fce210SBarry Smith 
3795fce210SBarry Smith #undef __FUNCT__
3895fce210SBarry Smith #define __FUNCT__ "PetscSFRegister"
3995fce210SBarry Smith /*@C
401c84c290SBarry Smith   PetscSFRegister  - Adds an implementation of the PetscSF communication protocol.
411c84c290SBarry Smith 
421c84c290SBarry Smith    Not collective
431c84c290SBarry Smith 
441c84c290SBarry Smith    Input Parameters:
451c84c290SBarry Smith +  name_impl - name of a new user-defined implementation
461c84c290SBarry Smith -  routine_create - routine to create method context
471c84c290SBarry Smith 
481c84c290SBarry Smith    Notes:
491c84c290SBarry Smith    PetscSFRegister() may be called multiple times to add several user-defined implementations.
501c84c290SBarry Smith 
511c84c290SBarry Smith    Sample usage:
521c84c290SBarry Smith .vb
53bdf89e91SBarry Smith    PetscSFRegister("my_impl",MyImplCreate);
541c84c290SBarry Smith .ve
551c84c290SBarry Smith 
561c84c290SBarry Smith    Then, this implementation can be chosen with the procedural interface via
571c84c290SBarry Smith $     PetscSFSetType(sf,"my_impl")
581c84c290SBarry Smith    or at runtime via the option
591c84c290SBarry Smith $     -snes_type my_solver
6095fce210SBarry Smith 
6195fce210SBarry Smith    Level: advanced
621c84c290SBarry Smith 
631c84c290SBarry Smith .keywords: PetscSF, register
641c84c290SBarry Smith 
651c84c290SBarry Smith .seealso: PetscSFRegisterAll(), PetscSFRegisterDestroy()
6695fce210SBarry Smith @*/
67bdf89e91SBarry Smith PetscErrorCode  PetscSFRegister(const char sname[],PetscErrorCode (*function)(PetscSF))
6895fce210SBarry Smith {
6995fce210SBarry Smith   PetscErrorCode ierr;
7095fce210SBarry Smith 
7195fce210SBarry Smith   PetscFunctionBegin;
72adc40e5bSBarry Smith   ierr = PetscFunctionListAdd(&PetscSFList,sname,function);CHKERRQ(ierr);
7395fce210SBarry Smith   PetscFunctionReturn(0);
7495fce210SBarry Smith }
7595fce210SBarry Smith 
76