195fce210SBarry Smith #include <petsc-private/sfimpl.h> /*I "petscsf.h" I*/ 295fce210SBarry Smith 395fce210SBarry Smith #if defined(PETSC_HAVE_MPI_WIN_CREATE) 4*8cc058d9SJed Brown PETSC_EXTERN PetscErrorCode PetscSFCreate_Window(PetscSF); 595fce210SBarry Smith #endif 6*8cc058d9SJed Brown PETSC_EXTERN PetscErrorCode PetscSFCreate_Basic(PetscSF); 795fce210SBarry Smith 895fce210SBarry Smith PetscFunctionList PetscSFunctionList; 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 @*/ 2395fce210SBarry Smith PetscErrorCode PetscSFRegisterAll(const char path[]) 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) 3095fce210SBarry Smith ierr = PetscSFRegisterDynamic(PETSCSFWINDOW, path,"PetscSFCreate_Window", PetscSFCreate_Window);CHKERRQ(ierr); 3195fce210SBarry Smith #endif 3295fce210SBarry Smith ierr = PetscSFRegisterDynamic(PETSCSFBASIC, path,"PetscSFCreate_Basic", PetscSFCreate_Basic);CHKERRQ(ierr); 3395fce210SBarry Smith PetscFunctionReturn(0); 3495fce210SBarry Smith } 3595fce210SBarry Smith 3695fce210SBarry Smith #undef __FUNCT__ 3795fce210SBarry Smith #define __FUNCT__ "PetscSFRegister" 3895fce210SBarry Smith /*@C 3995fce210SBarry Smith PetscSFRegister - See PetscSFRegisterDynamic() 4095fce210SBarry Smith 4195fce210SBarry Smith Level: advanced 4295fce210SBarry Smith @*/ 4395fce210SBarry Smith PetscErrorCode PetscSFRegister(const char sname[],const char path[],const char name[],PetscErrorCode (*function)(PetscSF)) 4495fce210SBarry Smith { 4595fce210SBarry Smith char fullname[PETSC_MAX_PATH_LEN]; 4695fce210SBarry Smith PetscErrorCode ierr; 4795fce210SBarry Smith 4895fce210SBarry Smith PetscFunctionBegin; 4995fce210SBarry Smith ierr = PetscFunctionListConcat(path,name,fullname);CHKERRQ(ierr); 5095fce210SBarry Smith ierr = PetscFunctionListAdd(PETSC_COMM_WORLD,&PetscSFunctionList,sname,fullname,(void (*)(void))function);CHKERRQ(ierr); 5195fce210SBarry Smith PetscFunctionReturn(0); 5295fce210SBarry Smith } 5395fce210SBarry Smith 5495fce210SBarry Smith #undef __FUNCT__ 5595fce210SBarry Smith #define __FUNCT__ "PetscSFRegisterDestroy" 5695fce210SBarry Smith /*@ 5795fce210SBarry Smith PetscSFRegisterDestroy - Frees the list of communication implementations registered by PetscSFRegisterDynamic() 5895fce210SBarry Smith 5995fce210SBarry Smith Not Collective 6095fce210SBarry Smith 6195fce210SBarry Smith Level: advanced 6295fce210SBarry Smith 6395fce210SBarry Smith .keywords: PetscSF, register, destroy 6495fce210SBarry Smith 6595fce210SBarry Smith .seealso: PetscSFRegisterAll() 6695fce210SBarry Smith @*/ 6795fce210SBarry Smith PetscErrorCode PetscSFRegisterDestroy(void) 6895fce210SBarry Smith { 6995fce210SBarry Smith PetscErrorCode ierr; 7095fce210SBarry Smith 7195fce210SBarry Smith PetscFunctionBegin; 7295fce210SBarry Smith ierr = PetscFunctionListDestroy(&PetscSFunctionList);CHKERRQ(ierr); 7395fce210SBarry Smith 7495fce210SBarry Smith PetscSFRegisterAllCalled = PETSC_FALSE; 7595fce210SBarry Smith PetscFunctionReturn(0); 7695fce210SBarry Smith } 77