1*af0996ceSBarry 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 8adc40e5bSBarry 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; 280f51fdf8SToby Isaac if (PetscSFRegisterAllCalled) PetscFunctionReturn(0); 2995fce210SBarry Smith PetscSFRegisterAllCalled = PETSC_TRUE; 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 33bdf89e91SBarry Smith ierr = PetscSFRegister(PETSCSFBASIC, PetscSFCreate_Basic);CHKERRQ(ierr); 3495fce210SBarry Smith PetscFunctionReturn(0); 3595fce210SBarry Smith } 3695fce210SBarry Smith 3795fce210SBarry Smith #undef __FUNCT__ 3895fce210SBarry Smith #define __FUNCT__ "PetscSFRegister" 3995fce210SBarry Smith /*@C 401c84c290SBarry Smith PetscSFRegister - Adds an implementation of the PetscSF communication protocol. 411c84c290SBarry Smith 421c84c290SBarry Smith Not collective 431c84c290SBarry Smith 441c84c290SBarry Smith Input Parameters: 451c84c290SBarry Smith + name_impl - name of a new user-defined implementation 461c84c290SBarry Smith - routine_create - routine to create method context 471c84c290SBarry Smith 481c84c290SBarry Smith Notes: 491c84c290SBarry Smith PetscSFRegister() may be called multiple times to add several user-defined implementations. 501c84c290SBarry Smith 511c84c290SBarry Smith Sample usage: 521c84c290SBarry Smith .vb 53bdf89e91SBarry Smith PetscSFRegister("my_impl",MyImplCreate); 541c84c290SBarry Smith .ve 551c84c290SBarry Smith 561c84c290SBarry Smith Then, this implementation can be chosen with the procedural interface via 571c84c290SBarry Smith $ PetscSFSetType(sf,"my_impl") 581c84c290SBarry Smith or at runtime via the option 591c84c290SBarry Smith $ -snes_type my_solver 6095fce210SBarry Smith 6195fce210SBarry Smith Level: advanced 621c84c290SBarry Smith 631c84c290SBarry Smith .keywords: PetscSF, register 641c84c290SBarry Smith 651c84c290SBarry Smith .seealso: PetscSFRegisterAll(), PetscSFRegisterDestroy() 6695fce210SBarry Smith @*/ 67bdf89e91SBarry Smith PetscErrorCode PetscSFRegister(const char sname[],PetscErrorCode (*function)(PetscSF)) 6895fce210SBarry Smith { 6995fce210SBarry Smith PetscErrorCode ierr; 7095fce210SBarry Smith 7195fce210SBarry Smith PetscFunctionBegin; 72adc40e5bSBarry Smith ierr = PetscFunctionListAdd(&PetscSFList,sname,function);CHKERRQ(ierr); 7395fce210SBarry Smith PetscFunctionReturn(0); 7495fce210SBarry Smith } 7595fce210SBarry Smith 76