195fce210SBarry Smith #include <petsc-private/sfimpl.h> /*I "petscsf.h" I*/ 295fce210SBarry Smith 395fce210SBarry Smith #if defined(PETSC_HAVE_MPI_WIN_CREATE) 48cc058d9SJed Brown PETSC_EXTERN PetscErrorCode PetscSFCreate_Window(PetscSF); 595fce210SBarry Smith #endif 68cc058d9SJed Brown PETSC_EXTERN PetscErrorCode PetscSFCreate_Basic(PetscSF); 795fce210SBarry Smith 8*adc40e5bSBarry Smith PetscFunctionList PetscSFList; 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 @*/ 23607a6623SBarry Smith PetscErrorCode PetscSFRegisterAll(void) 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) 30bdf89e91SBarry Smith ierr = PetscSFRegister(PETSCSFWINDOW, PetscSFCreate_Window);CHKERRQ(ierr); 3195fce210SBarry Smith #endif 32bdf89e91SBarry Smith ierr = PetscSFRegister(PETSCSFBASIC, PetscSFCreate_Basic);CHKERRQ(ierr); 3395fce210SBarry Smith PetscFunctionReturn(0); 3495fce210SBarry Smith } 3595fce210SBarry Smith 3695fce210SBarry Smith #undef __FUNCT__ 3795fce210SBarry Smith #define __FUNCT__ "PetscSFRegister" 3895fce210SBarry Smith /*@C 391c84c290SBarry Smith PetscSFRegister - Adds an implementation of the PetscSF communication protocol. 401c84c290SBarry Smith 411c84c290SBarry Smith Not collective 421c84c290SBarry Smith 431c84c290SBarry Smith Input Parameters: 441c84c290SBarry Smith + name_impl - name of a new user-defined implementation 451c84c290SBarry Smith - routine_create - routine to create method context 461c84c290SBarry Smith 471c84c290SBarry Smith Notes: 481c84c290SBarry Smith PetscSFRegister() may be called multiple times to add several user-defined implementations. 491c84c290SBarry Smith 501c84c290SBarry Smith Sample usage: 511c84c290SBarry Smith .vb 52bdf89e91SBarry Smith PetscSFRegister("my_impl",MyImplCreate); 531c84c290SBarry Smith .ve 541c84c290SBarry Smith 551c84c290SBarry Smith Then, this implementation can be chosen with the procedural interface via 561c84c290SBarry Smith $ PetscSFSetType(sf,"my_impl") 571c84c290SBarry Smith or at runtime via the option 581c84c290SBarry Smith $ -snes_type my_solver 5995fce210SBarry Smith 6095fce210SBarry Smith Level: advanced 611c84c290SBarry Smith 621c84c290SBarry Smith .keywords: PetscSF, register 631c84c290SBarry Smith 641c84c290SBarry Smith .seealso: PetscSFRegisterAll(), PetscSFRegisterDestroy() 6595fce210SBarry Smith @*/ 66bdf89e91SBarry Smith PetscErrorCode PetscSFRegister(const char sname[],PetscErrorCode (*function)(PetscSF)) 6795fce210SBarry Smith { 6895fce210SBarry Smith PetscErrorCode ierr; 6995fce210SBarry Smith 7095fce210SBarry Smith PetscFunctionBegin; 71*adc40e5bSBarry Smith ierr = PetscFunctionListAdd(&PetscSFList,sname,function);CHKERRQ(ierr); 7295fce210SBarry Smith PetscFunctionReturn(0); 7395fce210SBarry Smith } 7495fce210SBarry Smith 7595fce210SBarry Smith #undef __FUNCT__ 7695fce210SBarry Smith #define __FUNCT__ "PetscSFRegisterDestroy" 7795fce210SBarry Smith /*@ 781c84c290SBarry Smith PetscSFRegisterDestroy - Frees the list of communication implementations registered by PetscSFRegister() 7995fce210SBarry Smith 8095fce210SBarry Smith Not Collective 8195fce210SBarry Smith 8295fce210SBarry Smith Level: advanced 8395fce210SBarry Smith 8495fce210SBarry Smith .keywords: PetscSF, register, destroy 8595fce210SBarry Smith 8695fce210SBarry Smith .seealso: PetscSFRegisterAll() 8795fce210SBarry Smith @*/ 8895fce210SBarry Smith PetscErrorCode PetscSFRegisterDestroy(void) 8995fce210SBarry Smith { 9095fce210SBarry Smith PetscErrorCode ierr; 9195fce210SBarry Smith 9295fce210SBarry Smith PetscFunctionBegin; 93*adc40e5bSBarry Smith ierr = PetscFunctionListDestroy(&PetscSFList);CHKERRQ(ierr); 9495fce210SBarry Smith 9595fce210SBarry Smith PetscSFRegisterAllCalled = PETSC_FALSE; 9695fce210SBarry Smith PetscFunctionReturn(0); 9795fce210SBarry Smith } 98