xref: /petsc/src/vec/is/sf/interface/sfregi.c (revision 29046d5344efe75540424556535089496c551ef5)
1af0996ceSBarry Smith #include <petsc/private/sfimpl.h>     /*I  "petscsf.h"  I*/
295fce210SBarry Smith 
3*29046d53SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscSFCreate_Basic(PetscSF);
4*29046d53SLisandro Dalcin #if defined(PETSC_HAVE_MPI_WIN_CREATE) && defined(PETSC_HAVE_MPI_TYPE_DUP)
58cc058d9SJed Brown PETSC_EXTERN PetscErrorCode PetscSFCreate_Window(PetscSF);
695fce210SBarry Smith #endif
795fce210SBarry Smith 
8adc40e5bSBarry Smith PetscFunctionList PetscSFList;
9*29046d53SLisandro Dalcin PetscBool         PetscSFRegisterAllCalled;
1095fce210SBarry Smith 
1195fce210SBarry Smith /*@C
1295fce210SBarry Smith    PetscSFRegisterAll - Registers all the PetscSF communication implementations
1395fce210SBarry Smith 
1495fce210SBarry Smith    Not Collective
1595fce210SBarry Smith 
1695fce210SBarry Smith    Level: advanced
1795fce210SBarry Smith 
1895fce210SBarry Smith .keywords: PetscSF, register, all
1995fce210SBarry Smith 
2095fce210SBarry Smith .seealso:  PetscSFRegisterDestroy()
2195fce210SBarry Smith @*/
22607a6623SBarry Smith PetscErrorCode  PetscSFRegisterAll(void)
2395fce210SBarry Smith {
2495fce210SBarry Smith   PetscErrorCode ierr;
2595fce210SBarry Smith 
2695fce210SBarry Smith   PetscFunctionBegin;
270f51fdf8SToby Isaac   if (PetscSFRegisterAllCalled) PetscFunctionReturn(0);
2895fce210SBarry Smith   PetscSFRegisterAllCalled = PETSC_TRUE;
29*29046d53SLisandro Dalcin   ierr = PetscSFRegister(PETSCSFBASIC,  PetscSFCreate_Basic);CHKERRQ(ierr);
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
3395fce210SBarry Smith   PetscFunctionReturn(0);
3495fce210SBarry Smith }
3595fce210SBarry Smith 
3695fce210SBarry Smith /*@C
371c84c290SBarry Smith   PetscSFRegister  - Adds an implementation of the PetscSF communication protocol.
381c84c290SBarry Smith 
391c84c290SBarry Smith    Not collective
401c84c290SBarry Smith 
411c84c290SBarry Smith    Input Parameters:
42*29046d53SLisandro Dalcin +  name - name of a new user-defined implementation
43*29046d53SLisandro Dalcin -  create - routine to create method context
441c84c290SBarry Smith 
451c84c290SBarry Smith    Notes:
461c84c290SBarry Smith    PetscSFRegister() may be called multiple times to add several user-defined implementations.
471c84c290SBarry Smith 
481c84c290SBarry Smith    Sample usage:
491c84c290SBarry Smith .vb
50bdf89e91SBarry Smith    PetscSFRegister("my_impl",MyImplCreate);
511c84c290SBarry Smith .ve
521c84c290SBarry Smith 
531c84c290SBarry Smith    Then, this implementation can be chosen with the procedural interface via
541c84c290SBarry Smith $     PetscSFSetType(sf,"my_impl")
551c84c290SBarry Smith    or at runtime via the option
56*29046d53SLisandro Dalcin $     -sf_type my_impl
5795fce210SBarry Smith 
5895fce210SBarry Smith    Level: advanced
591c84c290SBarry Smith 
601c84c290SBarry Smith .keywords: PetscSF, register
611c84c290SBarry Smith 
62*29046d53SLisandro Dalcin .seealso: PetscSFRegisterAll(), PetscSFInitializePackage()
6395fce210SBarry Smith @*/
64*29046d53SLisandro Dalcin PetscErrorCode  PetscSFRegister(const char name[],PetscErrorCode (*create)(PetscSF))
6595fce210SBarry Smith {
6695fce210SBarry Smith   PetscErrorCode ierr;
6795fce210SBarry Smith 
6895fce210SBarry Smith   PetscFunctionBegin;
69*29046d53SLisandro Dalcin   ierr = PetscFunctionListAdd(&PetscSFList,name,create);CHKERRQ(ierr);
7095fce210SBarry Smith   PetscFunctionReturn(0);
7195fce210SBarry Smith }
72