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