1*95fce210SBarry Smith #include <petsc-private/sfimpl.h> /*I "petscsf.h" I*/ 2*95fce210SBarry Smith 3*95fce210SBarry Smith #if defined(PETSC_HAVE_MPI_WIN_CREATE) 4*95fce210SBarry Smith PETSC_EXTERN_C PetscErrorCode PetscSFCreate_Window(PetscSF); 5*95fce210SBarry Smith #endif 6*95fce210SBarry Smith PETSC_EXTERN_C PetscErrorCode PetscSFCreate_Basic(PetscSF); 7*95fce210SBarry Smith 8*95fce210SBarry Smith PetscFunctionList PetscSFunctionList; 9*95fce210SBarry Smith 10*95fce210SBarry Smith #undef __FUNCT__ 11*95fce210SBarry Smith #define __FUNCT__ "PetscSFRegisterAll" 12*95fce210SBarry Smith /*@C 13*95fce210SBarry Smith PetscSFRegisterAll - Registers all the PetscSF communication implementations 14*95fce210SBarry Smith 15*95fce210SBarry Smith Not Collective 16*95fce210SBarry Smith 17*95fce210SBarry Smith Level: advanced 18*95fce210SBarry Smith 19*95fce210SBarry Smith .keywords: PetscSF, register, all 20*95fce210SBarry Smith 21*95fce210SBarry Smith .seealso: PetscSFRegisterDestroy() 22*95fce210SBarry Smith @*/ 23*95fce210SBarry Smith PetscErrorCode PetscSFRegisterAll(const char path[]) 24*95fce210SBarry Smith { 25*95fce210SBarry Smith PetscErrorCode ierr; 26*95fce210SBarry Smith 27*95fce210SBarry Smith PetscFunctionBegin; 28*95fce210SBarry Smith PetscSFRegisterAllCalled = PETSC_TRUE; 29*95fce210SBarry Smith #if defined(PETSC_HAVE_MPI_WIN_CREATE) 30*95fce210SBarry Smith ierr = PetscSFRegisterDynamic(PETSCSFWINDOW, path,"PetscSFCreate_Window", PetscSFCreate_Window);CHKERRQ(ierr); 31*95fce210SBarry Smith #endif 32*95fce210SBarry Smith ierr = PetscSFRegisterDynamic(PETSCSFBASIC, path,"PetscSFCreate_Basic", PetscSFCreate_Basic);CHKERRQ(ierr); 33*95fce210SBarry Smith PetscFunctionReturn(0); 34*95fce210SBarry Smith } 35*95fce210SBarry Smith 36*95fce210SBarry Smith #undef __FUNCT__ 37*95fce210SBarry Smith #define __FUNCT__ "PetscSFRegister" 38*95fce210SBarry Smith /*@C 39*95fce210SBarry Smith PetscSFRegister - See PetscSFRegisterDynamic() 40*95fce210SBarry Smith 41*95fce210SBarry Smith Level: advanced 42*95fce210SBarry Smith @*/ 43*95fce210SBarry Smith PetscErrorCode PetscSFRegister(const char sname[],const char path[],const char name[],PetscErrorCode (*function)(PetscSF)) 44*95fce210SBarry Smith { 45*95fce210SBarry Smith char fullname[PETSC_MAX_PATH_LEN]; 46*95fce210SBarry Smith PetscErrorCode ierr; 47*95fce210SBarry Smith 48*95fce210SBarry Smith PetscFunctionBegin; 49*95fce210SBarry Smith ierr = PetscFunctionListConcat(path,name,fullname);CHKERRQ(ierr); 50*95fce210SBarry Smith ierr = PetscFunctionListAdd(PETSC_COMM_WORLD,&PetscSFunctionList,sname,fullname,(void (*)(void))function);CHKERRQ(ierr); 51*95fce210SBarry Smith PetscFunctionReturn(0); 52*95fce210SBarry Smith } 53*95fce210SBarry Smith 54*95fce210SBarry Smith #undef __FUNCT__ 55*95fce210SBarry Smith #define __FUNCT__ "PetscSFRegisterDestroy" 56*95fce210SBarry Smith /*@ 57*95fce210SBarry Smith PetscSFRegisterDestroy - Frees the list of communication implementations registered by PetscSFRegisterDynamic() 58*95fce210SBarry Smith 59*95fce210SBarry Smith Not Collective 60*95fce210SBarry Smith 61*95fce210SBarry Smith Level: advanced 62*95fce210SBarry Smith 63*95fce210SBarry Smith .keywords: PetscSF, register, destroy 64*95fce210SBarry Smith 65*95fce210SBarry Smith .seealso: PetscSFRegisterAll() 66*95fce210SBarry Smith @*/ 67*95fce210SBarry Smith PetscErrorCode PetscSFRegisterDestroy(void) 68*95fce210SBarry Smith { 69*95fce210SBarry Smith PetscErrorCode ierr; 70*95fce210SBarry Smith 71*95fce210SBarry Smith PetscFunctionBegin; 72*95fce210SBarry Smith ierr = PetscFunctionListDestroy(&PetscSFunctionList);CHKERRQ(ierr); 73*95fce210SBarry Smith 74*95fce210SBarry Smith PetscSFRegisterAllCalled = PETSC_FALSE; 75*95fce210SBarry Smith PetscFunctionReturn(0); 76*95fce210SBarry Smith } 77