xref: /petsc/src/vec/is/sf/interface/sfregi.c (revision 95fce210c9a5323d60d47a8c3b992a28141ecb57)
1*95fce210SBarry Smith #include <petsc-private/sfimpl.h>     /*I  "petscsf.h"  I*/
2*95fce210SBarry Smith 
3*95fce210SBarry Smith #if defined(PETSC_HAVE_MPI_WIN_CREATE)
4*95fce210SBarry Smith PETSC_EXTERN_C PetscErrorCode PetscSFCreate_Window(PetscSF);
5*95fce210SBarry Smith #endif
6*95fce210SBarry Smith PETSC_EXTERN_C PetscErrorCode PetscSFCreate_Basic(PetscSF);
7*95fce210SBarry Smith 
8*95fce210SBarry Smith PetscFunctionList PetscSFunctionList;
9*95fce210SBarry Smith 
10*95fce210SBarry Smith #undef __FUNCT__
11*95fce210SBarry Smith #define __FUNCT__ "PetscSFRegisterAll"
12*95fce210SBarry Smith /*@C
13*95fce210SBarry Smith    PetscSFRegisterAll - Registers all the PetscSF communication implementations
14*95fce210SBarry Smith 
15*95fce210SBarry Smith    Not Collective
16*95fce210SBarry Smith 
17*95fce210SBarry Smith    Level: advanced
18*95fce210SBarry Smith 
19*95fce210SBarry Smith .keywords: PetscSF, register, all
20*95fce210SBarry Smith 
21*95fce210SBarry Smith .seealso:  PetscSFRegisterDestroy()
22*95fce210SBarry Smith @*/
23*95fce210SBarry Smith PetscErrorCode  PetscSFRegisterAll(const char path[])
24*95fce210SBarry Smith {
25*95fce210SBarry Smith   PetscErrorCode ierr;
26*95fce210SBarry Smith 
27*95fce210SBarry Smith   PetscFunctionBegin;
28*95fce210SBarry Smith   PetscSFRegisterAllCalled = PETSC_TRUE;
29*95fce210SBarry Smith #if defined(PETSC_HAVE_MPI_WIN_CREATE)
30*95fce210SBarry Smith   ierr = PetscSFRegisterDynamic(PETSCSFWINDOW,       path,"PetscSFCreate_Window",       PetscSFCreate_Window);CHKERRQ(ierr);
31*95fce210SBarry Smith #endif
32*95fce210SBarry Smith   ierr = PetscSFRegisterDynamic(PETSCSFBASIC,        path,"PetscSFCreate_Basic",        PetscSFCreate_Basic);CHKERRQ(ierr);
33*95fce210SBarry Smith   PetscFunctionReturn(0);
34*95fce210SBarry Smith }
35*95fce210SBarry Smith 
36*95fce210SBarry Smith #undef __FUNCT__
37*95fce210SBarry Smith #define __FUNCT__ "PetscSFRegister"
38*95fce210SBarry Smith /*@C
39*95fce210SBarry Smith   PetscSFRegister - See PetscSFRegisterDynamic()
40*95fce210SBarry Smith 
41*95fce210SBarry Smith   Level: advanced
42*95fce210SBarry Smith @*/
43*95fce210SBarry Smith PetscErrorCode  PetscSFRegister(const char sname[],const char path[],const char name[],PetscErrorCode (*function)(PetscSF))
44*95fce210SBarry Smith {
45*95fce210SBarry Smith   char           fullname[PETSC_MAX_PATH_LEN];
46*95fce210SBarry Smith   PetscErrorCode ierr;
47*95fce210SBarry Smith 
48*95fce210SBarry Smith   PetscFunctionBegin;
49*95fce210SBarry Smith   ierr = PetscFunctionListConcat(path,name,fullname);CHKERRQ(ierr);
50*95fce210SBarry Smith   ierr = PetscFunctionListAdd(PETSC_COMM_WORLD,&PetscSFunctionList,sname,fullname,(void (*)(void))function);CHKERRQ(ierr);
51*95fce210SBarry Smith   PetscFunctionReturn(0);
52*95fce210SBarry Smith }
53*95fce210SBarry Smith 
54*95fce210SBarry Smith #undef __FUNCT__
55*95fce210SBarry Smith #define __FUNCT__ "PetscSFRegisterDestroy"
56*95fce210SBarry Smith /*@
57*95fce210SBarry Smith    PetscSFRegisterDestroy - Frees the list of communication implementations registered by PetscSFRegisterDynamic()
58*95fce210SBarry Smith 
59*95fce210SBarry Smith    Not Collective
60*95fce210SBarry Smith 
61*95fce210SBarry Smith    Level: advanced
62*95fce210SBarry Smith 
63*95fce210SBarry Smith .keywords: PetscSF, register, destroy
64*95fce210SBarry Smith 
65*95fce210SBarry Smith .seealso: PetscSFRegisterAll()
66*95fce210SBarry Smith @*/
67*95fce210SBarry Smith PetscErrorCode  PetscSFRegisterDestroy(void)
68*95fce210SBarry Smith {
69*95fce210SBarry Smith   PetscErrorCode ierr;
70*95fce210SBarry Smith 
71*95fce210SBarry Smith   PetscFunctionBegin;
72*95fce210SBarry Smith   ierr = PetscFunctionListDestroy(&PetscSFunctionList);CHKERRQ(ierr);
73*95fce210SBarry Smith 
74*95fce210SBarry Smith   PetscSFRegisterAllCalled = PETSC_FALSE;
75*95fce210SBarry Smith   PetscFunctionReturn(0);
76*95fce210SBarry Smith }
77