xref: /petsc/src/vec/is/sf/interface/sfregi.c (revision adc40e5b25f0fa6b1e5761662f92c58850a98222)
195fce210SBarry 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 
8*adc40e5bSBarry 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;
2895fce210SBarry Smith   PetscSFRegisterAllCalled = PETSC_TRUE;
29c01091c8SJed Brown #if defined(PETSC_HAVE_MPI_WIN_CREATE) && defined(PETSC_HAVE_MPI_TYPE_DUP)
30bdf89e91SBarry Smith   ierr = PetscSFRegister(PETSCSFWINDOW, PetscSFCreate_Window);CHKERRQ(ierr);
3195fce210SBarry Smith #endif
32bdf89e91SBarry Smith   ierr = PetscSFRegister(PETSCSFBASIC,  PetscSFCreate_Basic);CHKERRQ(ierr);
3395fce210SBarry Smith   PetscFunctionReturn(0);
3495fce210SBarry Smith }
3595fce210SBarry Smith 
3695fce210SBarry Smith #undef __FUNCT__
3795fce210SBarry Smith #define __FUNCT__ "PetscSFRegister"
3895fce210SBarry Smith /*@C
391c84c290SBarry Smith   PetscSFRegister  - Adds an implementation of the PetscSF communication protocol.
401c84c290SBarry Smith 
411c84c290SBarry Smith    Not collective
421c84c290SBarry Smith 
431c84c290SBarry Smith    Input Parameters:
441c84c290SBarry Smith +  name_impl - name of a new user-defined implementation
451c84c290SBarry Smith -  routine_create - routine to create method context
461c84c290SBarry Smith 
471c84c290SBarry Smith    Notes:
481c84c290SBarry Smith    PetscSFRegister() may be called multiple times to add several user-defined implementations.
491c84c290SBarry Smith 
501c84c290SBarry Smith    Sample usage:
511c84c290SBarry Smith .vb
52bdf89e91SBarry Smith    PetscSFRegister("my_impl",MyImplCreate);
531c84c290SBarry Smith .ve
541c84c290SBarry Smith 
551c84c290SBarry Smith    Then, this implementation can be chosen with the procedural interface via
561c84c290SBarry Smith $     PetscSFSetType(sf,"my_impl")
571c84c290SBarry Smith    or at runtime via the option
581c84c290SBarry Smith $     -snes_type my_solver
5995fce210SBarry Smith 
6095fce210SBarry Smith    Level: advanced
611c84c290SBarry Smith 
621c84c290SBarry Smith .keywords: PetscSF, register
631c84c290SBarry Smith 
641c84c290SBarry Smith .seealso: PetscSFRegisterAll(), PetscSFRegisterDestroy()
6595fce210SBarry Smith @*/
66bdf89e91SBarry Smith PetscErrorCode  PetscSFRegister(const char sname[],PetscErrorCode (*function)(PetscSF))
6795fce210SBarry Smith {
6895fce210SBarry Smith   PetscErrorCode ierr;
6995fce210SBarry Smith 
7095fce210SBarry Smith   PetscFunctionBegin;
71*adc40e5bSBarry Smith   ierr = PetscFunctionListAdd(&PetscSFList,sname,function);CHKERRQ(ierr);
7295fce210SBarry Smith   PetscFunctionReturn(0);
7395fce210SBarry Smith }
7495fce210SBarry Smith 
7595fce210SBarry Smith #undef __FUNCT__
7695fce210SBarry Smith #define __FUNCT__ "PetscSFRegisterDestroy"
7795fce210SBarry Smith /*@
781c84c290SBarry Smith    PetscSFRegisterDestroy - Frees the list of communication implementations registered by PetscSFRegister()
7995fce210SBarry Smith 
8095fce210SBarry Smith    Not Collective
8195fce210SBarry Smith 
8295fce210SBarry Smith    Level: advanced
8395fce210SBarry Smith 
8495fce210SBarry Smith .keywords: PetscSF, register, destroy
8595fce210SBarry Smith 
8695fce210SBarry Smith .seealso: PetscSFRegisterAll()
8795fce210SBarry Smith @*/
8895fce210SBarry Smith PetscErrorCode  PetscSFRegisterDestroy(void)
8995fce210SBarry Smith {
9095fce210SBarry Smith   PetscErrorCode ierr;
9195fce210SBarry Smith 
9295fce210SBarry Smith   PetscFunctionBegin;
93*adc40e5bSBarry Smith   ierr = PetscFunctionListDestroy(&PetscSFList);CHKERRQ(ierr);
9495fce210SBarry Smith 
9595fce210SBarry Smith   PetscSFRegisterAllCalled = PETSC_FALSE;
9695fce210SBarry Smith   PetscFunctionReturn(0);
9795fce210SBarry Smith }
98