xref: /petsc/src/vec/is/sf/interface/sfregi.c (revision dd5b3ca66ca4de5e00e985c205d0f80060c552e8)
1af0996ceSBarry Smith #include <petsc/private/sfimpl.h>     /*I  "petscsf.h"  I*/
295fce210SBarry Smith 
329046d53SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscSFCreate_Basic(PetscSF);
429046d53SLisandro Dalcin #if defined(PETSC_HAVE_MPI_WIN_CREATE) && defined(PETSC_HAVE_MPI_TYPE_DUP)
58cc058d9SJed Brown PETSC_EXTERN PetscErrorCode PetscSFCreate_Window(PetscSF);
6*dd5b3ca6SJunchao Zhang PETSC_INTERN PetscErrorCode PetscSFCreate_Allgatherv(PetscSF);
7*dd5b3ca6SJunchao Zhang PETSC_INTERN PetscErrorCode PetscSFCreate_Allgather(PetscSF);
8*dd5b3ca6SJunchao Zhang PETSC_INTERN PetscErrorCode PetscSFCreate_Gatherv(PetscSF);
9*dd5b3ca6SJunchao Zhang PETSC_INTERN PetscErrorCode PetscSFCreate_Gather(PetscSF);
10*dd5b3ca6SJunchao Zhang PETSC_INTERN PetscErrorCode PetscSFCreate_Alltoall(PetscSF);
1195fce210SBarry Smith #endif
1295fce210SBarry Smith 
13adc40e5bSBarry Smith PetscFunctionList PetscSFList;
1429046d53SLisandro Dalcin PetscBool         PetscSFRegisterAllCalled;
1595fce210SBarry Smith 
1695fce210SBarry Smith /*@C
1795fce210SBarry Smith    PetscSFRegisterAll - Registers all the PetscSF communication implementations
1895fce210SBarry Smith 
1995fce210SBarry Smith    Not Collective
2095fce210SBarry Smith 
2195fce210SBarry Smith    Level: advanced
2295fce210SBarry Smith 
2395fce210SBarry Smith .seealso:  PetscSFRegisterDestroy()
2495fce210SBarry Smith @*/
25607a6623SBarry Smith PetscErrorCode  PetscSFRegisterAll(void)
2695fce210SBarry Smith {
2795fce210SBarry Smith   PetscErrorCode ierr;
2895fce210SBarry Smith 
2995fce210SBarry Smith   PetscFunctionBegin;
300f51fdf8SToby Isaac   if (PetscSFRegisterAllCalled) PetscFunctionReturn(0);
3195fce210SBarry Smith   PetscSFRegisterAllCalled = PETSC_TRUE;
3229046d53SLisandro Dalcin   ierr = PetscSFRegister(PETSCSFBASIC,  PetscSFCreate_Basic);CHKERRQ(ierr);
33c01091c8SJed Brown #if defined(PETSC_HAVE_MPI_WIN_CREATE) && defined(PETSC_HAVE_MPI_TYPE_DUP)
34bdf89e91SBarry Smith   ierr = PetscSFRegister(PETSCSFWINDOW, PetscSFCreate_Window);CHKERRQ(ierr);
3595fce210SBarry Smith #endif
36*dd5b3ca6SJunchao Zhang   ierr = PetscSFRegister(PETSCSFALLGATHERV,PetscSFCreate_Allgatherv);CHKERRQ(ierr);
37*dd5b3ca6SJunchao Zhang   ierr = PetscSFRegister(PETSCSFALLGATHER, PetscSFCreate_Allgather);CHKERRQ(ierr);
38*dd5b3ca6SJunchao Zhang   ierr = PetscSFRegister(PETSCSFGATHERV,   PetscSFCreate_Gatherv);CHKERRQ(ierr);
39*dd5b3ca6SJunchao Zhang   ierr = PetscSFRegister(PETSCSFGATHER,    PetscSFCreate_Gather);CHKERRQ(ierr);
40*dd5b3ca6SJunchao Zhang   ierr = PetscSFRegister(PETSCSFALLTOALL,  PetscSFCreate_Alltoall);CHKERRQ(ierr);
4195fce210SBarry Smith   PetscFunctionReturn(0);
4295fce210SBarry Smith }
4395fce210SBarry Smith 
4495fce210SBarry Smith /*@C
451c84c290SBarry Smith   PetscSFRegister  - Adds an implementation of the PetscSF communication protocol.
461c84c290SBarry Smith 
471c84c290SBarry Smith    Not collective
481c84c290SBarry Smith 
491c84c290SBarry Smith    Input Parameters:
5029046d53SLisandro Dalcin +  name - name of a new user-defined implementation
5129046d53SLisandro Dalcin -  create - routine to create method context
521c84c290SBarry Smith 
531c84c290SBarry Smith    Notes:
541c84c290SBarry Smith    PetscSFRegister() may be called multiple times to add several user-defined implementations.
551c84c290SBarry Smith 
561c84c290SBarry Smith    Sample usage:
571c84c290SBarry Smith .vb
58bdf89e91SBarry Smith    PetscSFRegister("my_impl",MyImplCreate);
591c84c290SBarry Smith .ve
601c84c290SBarry Smith 
611c84c290SBarry Smith    Then, this implementation can be chosen with the procedural interface via
621c84c290SBarry Smith $     PetscSFSetType(sf,"my_impl")
631c84c290SBarry Smith    or at runtime via the option
6429046d53SLisandro Dalcin $     -sf_type my_impl
6595fce210SBarry Smith 
6695fce210SBarry Smith    Level: advanced
671c84c290SBarry Smith 
6829046d53SLisandro Dalcin .seealso: PetscSFRegisterAll(), PetscSFInitializePackage()
6995fce210SBarry Smith @*/
7029046d53SLisandro Dalcin PetscErrorCode  PetscSFRegister(const char name[],PetscErrorCode (*create)(PetscSF))
7195fce210SBarry Smith {
7295fce210SBarry Smith   PetscErrorCode ierr;
7395fce210SBarry Smith 
7495fce210SBarry Smith   PetscFunctionBegin;
751d36bdfdSBarry Smith   ierr = PetscSFInitializePackage();CHKERRQ(ierr);
7629046d53SLisandro Dalcin   ierr = PetscFunctionListAdd(&PetscSFList,name,create);CHKERRQ(ierr);
7795fce210SBarry Smith   PetscFunctionReturn(0);
7895fce210SBarry Smith }
79