xref: /petsc/src/vec/is/sf/interface/sfregi.c (revision 8cc058d9cd56c1ccb3be12a47760ddfc446aaffc)
195fce210SBarry Smith #include <petsc-private/sfimpl.h>     /*I  "petscsf.h"  I*/
295fce210SBarry Smith 
395fce210SBarry Smith #if defined(PETSC_HAVE_MPI_WIN_CREATE)
4*8cc058d9SJed Brown PETSC_EXTERN PetscErrorCode PetscSFCreate_Window(PetscSF);
595fce210SBarry Smith #endif
6*8cc058d9SJed Brown PETSC_EXTERN PetscErrorCode PetscSFCreate_Basic(PetscSF);
795fce210SBarry Smith 
895fce210SBarry Smith PetscFunctionList PetscSFunctionList;
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 @*/
2395fce210SBarry Smith PetscErrorCode  PetscSFRegisterAll(const char path[])
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)
3095fce210SBarry Smith   ierr = PetscSFRegisterDynamic(PETSCSFWINDOW,       path,"PetscSFCreate_Window",       PetscSFCreate_Window);CHKERRQ(ierr);
3195fce210SBarry Smith #endif
3295fce210SBarry Smith   ierr = PetscSFRegisterDynamic(PETSCSFBASIC,        path,"PetscSFCreate_Basic",        PetscSFCreate_Basic);CHKERRQ(ierr);
3395fce210SBarry Smith   PetscFunctionReturn(0);
3495fce210SBarry Smith }
3595fce210SBarry Smith 
3695fce210SBarry Smith #undef __FUNCT__
3795fce210SBarry Smith #define __FUNCT__ "PetscSFRegister"
3895fce210SBarry Smith /*@C
3995fce210SBarry Smith   PetscSFRegister - See PetscSFRegisterDynamic()
4095fce210SBarry Smith 
4195fce210SBarry Smith   Level: advanced
4295fce210SBarry Smith @*/
4395fce210SBarry Smith PetscErrorCode  PetscSFRegister(const char sname[],const char path[],const char name[],PetscErrorCode (*function)(PetscSF))
4495fce210SBarry Smith {
4595fce210SBarry Smith   char           fullname[PETSC_MAX_PATH_LEN];
4695fce210SBarry Smith   PetscErrorCode ierr;
4795fce210SBarry Smith 
4895fce210SBarry Smith   PetscFunctionBegin;
4995fce210SBarry Smith   ierr = PetscFunctionListConcat(path,name,fullname);CHKERRQ(ierr);
5095fce210SBarry Smith   ierr = PetscFunctionListAdd(PETSC_COMM_WORLD,&PetscSFunctionList,sname,fullname,(void (*)(void))function);CHKERRQ(ierr);
5195fce210SBarry Smith   PetscFunctionReturn(0);
5295fce210SBarry Smith }
5395fce210SBarry Smith 
5495fce210SBarry Smith #undef __FUNCT__
5595fce210SBarry Smith #define __FUNCT__ "PetscSFRegisterDestroy"
5695fce210SBarry Smith /*@
5795fce210SBarry Smith    PetscSFRegisterDestroy - Frees the list of communication implementations registered by PetscSFRegisterDynamic()
5895fce210SBarry Smith 
5995fce210SBarry Smith    Not Collective
6095fce210SBarry Smith 
6195fce210SBarry Smith    Level: advanced
6295fce210SBarry Smith 
6395fce210SBarry Smith .keywords: PetscSF, register, destroy
6495fce210SBarry Smith 
6595fce210SBarry Smith .seealso: PetscSFRegisterAll()
6695fce210SBarry Smith @*/
6795fce210SBarry Smith PetscErrorCode  PetscSFRegisterDestroy(void)
6895fce210SBarry Smith {
6995fce210SBarry Smith   PetscErrorCode ierr;
7095fce210SBarry Smith 
7195fce210SBarry Smith   PetscFunctionBegin;
7295fce210SBarry Smith   ierr = PetscFunctionListDestroy(&PetscSFunctionList);CHKERRQ(ierr);
7395fce210SBarry Smith 
7495fce210SBarry Smith   PetscSFRegisterAllCalled = PETSC_FALSE;
7595fce210SBarry Smith   PetscFunctionReturn(0);
7695fce210SBarry Smith }
77