1af0996ceSBarry Smith #include <petsc/private/sfimpl.h> /*I "petscsf.h" I*/ 295fce210SBarry Smith 3*29046d53SLisandro Dalcin PETSC_EXTERN PetscErrorCode PetscSFCreate_Basic(PetscSF); 4*29046d53SLisandro Dalcin #if defined(PETSC_HAVE_MPI_WIN_CREATE) && defined(PETSC_HAVE_MPI_TYPE_DUP) 58cc058d9SJed Brown PETSC_EXTERN PetscErrorCode PetscSFCreate_Window(PetscSF); 695fce210SBarry Smith #endif 795fce210SBarry Smith 8adc40e5bSBarry Smith PetscFunctionList PetscSFList; 9*29046d53SLisandro Dalcin PetscBool PetscSFRegisterAllCalled; 1095fce210SBarry Smith 1195fce210SBarry Smith /*@C 1295fce210SBarry Smith PetscSFRegisterAll - Registers all the PetscSF communication implementations 1395fce210SBarry Smith 1495fce210SBarry Smith Not Collective 1595fce210SBarry Smith 1695fce210SBarry Smith Level: advanced 1795fce210SBarry Smith 1895fce210SBarry Smith .keywords: PetscSF, register, all 1995fce210SBarry Smith 2095fce210SBarry Smith .seealso: PetscSFRegisterDestroy() 2195fce210SBarry Smith @*/ 22607a6623SBarry Smith PetscErrorCode PetscSFRegisterAll(void) 2395fce210SBarry Smith { 2495fce210SBarry Smith PetscErrorCode ierr; 2595fce210SBarry Smith 2695fce210SBarry Smith PetscFunctionBegin; 270f51fdf8SToby Isaac if (PetscSFRegisterAllCalled) PetscFunctionReturn(0); 2895fce210SBarry Smith PetscSFRegisterAllCalled = PETSC_TRUE; 29*29046d53SLisandro Dalcin ierr = PetscSFRegister(PETSCSFBASIC, PetscSFCreate_Basic);CHKERRQ(ierr); 30c01091c8SJed Brown #if defined(PETSC_HAVE_MPI_WIN_CREATE) && defined(PETSC_HAVE_MPI_TYPE_DUP) 31bdf89e91SBarry Smith ierr = PetscSFRegister(PETSCSFWINDOW, PetscSFCreate_Window);CHKERRQ(ierr); 3295fce210SBarry Smith #endif 3395fce210SBarry Smith PetscFunctionReturn(0); 3495fce210SBarry Smith } 3595fce210SBarry Smith 3695fce210SBarry Smith /*@C 371c84c290SBarry Smith PetscSFRegister - Adds an implementation of the PetscSF communication protocol. 381c84c290SBarry Smith 391c84c290SBarry Smith Not collective 401c84c290SBarry Smith 411c84c290SBarry Smith Input Parameters: 42*29046d53SLisandro Dalcin + name - name of a new user-defined implementation 43*29046d53SLisandro Dalcin - create - routine to create method context 441c84c290SBarry Smith 451c84c290SBarry Smith Notes: 461c84c290SBarry Smith PetscSFRegister() may be called multiple times to add several user-defined implementations. 471c84c290SBarry Smith 481c84c290SBarry Smith Sample usage: 491c84c290SBarry Smith .vb 50bdf89e91SBarry Smith PetscSFRegister("my_impl",MyImplCreate); 511c84c290SBarry Smith .ve 521c84c290SBarry Smith 531c84c290SBarry Smith Then, this implementation can be chosen with the procedural interface via 541c84c290SBarry Smith $ PetscSFSetType(sf,"my_impl") 551c84c290SBarry Smith or at runtime via the option 56*29046d53SLisandro Dalcin $ -sf_type my_impl 5795fce210SBarry Smith 5895fce210SBarry Smith Level: advanced 591c84c290SBarry Smith 601c84c290SBarry Smith .keywords: PetscSF, register 611c84c290SBarry Smith 62*29046d53SLisandro Dalcin .seealso: PetscSFRegisterAll(), PetscSFInitializePackage() 6395fce210SBarry Smith @*/ 64*29046d53SLisandro Dalcin PetscErrorCode PetscSFRegister(const char name[],PetscErrorCode (*create)(PetscSF)) 6595fce210SBarry Smith { 6695fce210SBarry Smith PetscErrorCode ierr; 6795fce210SBarry Smith 6895fce210SBarry Smith PetscFunctionBegin; 69*29046d53SLisandro Dalcin ierr = PetscFunctionListAdd(&PetscSFList,name,create);CHKERRQ(ierr); 7095fce210SBarry Smith PetscFunctionReturn(0); 7195fce210SBarry Smith } 72