1af0996ceSBarry Smith #include <petsc/private/sfimpl.h> /*I "petscsf.h" I*/ 295fce210SBarry Smith 3*027eff8aSJunchao Zhang PETSC_INTERN PetscErrorCode PetscSFCreate_Basic(PetscSF); 429046d53SLisandro Dalcin #if defined(PETSC_HAVE_MPI_WIN_CREATE) && defined(PETSC_HAVE_MPI_TYPE_DUP) 5*027eff8aSJunchao Zhang PETSC_INTERN PetscErrorCode PetscSFCreate_Window(PetscSF); 6*027eff8aSJunchao Zhang #endif 7dd5b3ca6SJunchao Zhang PETSC_INTERN PetscErrorCode PetscSFCreate_Allgatherv(PetscSF); 8dd5b3ca6SJunchao Zhang PETSC_INTERN PetscErrorCode PetscSFCreate_Allgather(PetscSF); 9dd5b3ca6SJunchao Zhang PETSC_INTERN PetscErrorCode PetscSFCreate_Gatherv(PetscSF); 10dd5b3ca6SJunchao Zhang PETSC_INTERN PetscErrorCode PetscSFCreate_Gather(PetscSF); 11dd5b3ca6SJunchao Zhang PETSC_INTERN PetscErrorCode PetscSFCreate_Alltoall(PetscSF); 12*027eff8aSJunchao Zhang #if defined(PETSC_HAVE_MPI_NEIGHBORHOOD_COLLECTIVES) 13*027eff8aSJunchao Zhang PETSC_INTERN PetscErrorCode PetscSFCreate_Neighbor(PetscSF); 1495fce210SBarry Smith #endif 1595fce210SBarry Smith 16adc40e5bSBarry Smith PetscFunctionList PetscSFList; 1729046d53SLisandro Dalcin PetscBool PetscSFRegisterAllCalled; 1895fce210SBarry Smith 1995fce210SBarry Smith /*@C 2095fce210SBarry Smith PetscSFRegisterAll - Registers all the PetscSF communication implementations 2195fce210SBarry Smith 2295fce210SBarry Smith Not Collective 2395fce210SBarry Smith 2495fce210SBarry Smith Level: advanced 2595fce210SBarry Smith 2695fce210SBarry Smith .seealso: PetscSFRegisterDestroy() 2795fce210SBarry Smith @*/ 28607a6623SBarry Smith PetscErrorCode PetscSFRegisterAll(void) 2995fce210SBarry Smith { 3095fce210SBarry Smith PetscErrorCode ierr; 3195fce210SBarry Smith 3295fce210SBarry Smith PetscFunctionBegin; 330f51fdf8SToby Isaac if (PetscSFRegisterAllCalled) PetscFunctionReturn(0); 3495fce210SBarry Smith PetscSFRegisterAllCalled = PETSC_TRUE; 3529046d53SLisandro Dalcin ierr = PetscSFRegister(PETSCSFBASIC, PetscSFCreate_Basic);CHKERRQ(ierr); 36c01091c8SJed Brown #if defined(PETSC_HAVE_MPI_WIN_CREATE) && defined(PETSC_HAVE_MPI_TYPE_DUP) 37bdf89e91SBarry Smith ierr = PetscSFRegister(PETSCSFWINDOW, PetscSFCreate_Window);CHKERRQ(ierr); 3895fce210SBarry Smith #endif 39dd5b3ca6SJunchao Zhang ierr = PetscSFRegister(PETSCSFALLGATHERV,PetscSFCreate_Allgatherv);CHKERRQ(ierr); 40dd5b3ca6SJunchao Zhang ierr = PetscSFRegister(PETSCSFALLGATHER, PetscSFCreate_Allgather);CHKERRQ(ierr); 41dd5b3ca6SJunchao Zhang ierr = PetscSFRegister(PETSCSFGATHERV, PetscSFCreate_Gatherv);CHKERRQ(ierr); 42dd5b3ca6SJunchao Zhang ierr = PetscSFRegister(PETSCSFGATHER, PetscSFCreate_Gather);CHKERRQ(ierr); 43dd5b3ca6SJunchao Zhang ierr = PetscSFRegister(PETSCSFALLTOALL, PetscSFCreate_Alltoall);CHKERRQ(ierr); 44*027eff8aSJunchao Zhang #if defined(PETSC_HAVE_MPI_NEIGHBORHOOD_COLLECTIVES) 45*027eff8aSJunchao Zhang ierr = PetscSFRegister(PETSCSFNEIGHBOR, PetscSFCreate_Neighbor);CHKERRQ(ierr); 46*027eff8aSJunchao Zhang #endif 4795fce210SBarry Smith PetscFunctionReturn(0); 4895fce210SBarry Smith } 4995fce210SBarry Smith 5095fce210SBarry Smith /*@C 511c84c290SBarry Smith PetscSFRegister - Adds an implementation of the PetscSF communication protocol. 521c84c290SBarry Smith 531c84c290SBarry Smith Not collective 541c84c290SBarry Smith 551c84c290SBarry Smith Input Parameters: 5629046d53SLisandro Dalcin + name - name of a new user-defined implementation 5729046d53SLisandro Dalcin - create - routine to create method context 581c84c290SBarry Smith 591c84c290SBarry Smith Notes: 601c84c290SBarry Smith PetscSFRegister() may be called multiple times to add several user-defined implementations. 611c84c290SBarry Smith 621c84c290SBarry Smith Sample usage: 631c84c290SBarry Smith .vb 64bdf89e91SBarry Smith PetscSFRegister("my_impl",MyImplCreate); 651c84c290SBarry Smith .ve 661c84c290SBarry Smith 671c84c290SBarry Smith Then, this implementation can be chosen with the procedural interface via 681c84c290SBarry Smith $ PetscSFSetType(sf,"my_impl") 691c84c290SBarry Smith or at runtime via the option 7029046d53SLisandro Dalcin $ -sf_type my_impl 7195fce210SBarry Smith 7295fce210SBarry Smith Level: advanced 731c84c290SBarry Smith 7429046d53SLisandro Dalcin .seealso: PetscSFRegisterAll(), PetscSFInitializePackage() 7595fce210SBarry Smith @*/ 7629046d53SLisandro Dalcin PetscErrorCode PetscSFRegister(const char name[],PetscErrorCode (*create)(PetscSF)) 7795fce210SBarry Smith { 7895fce210SBarry Smith PetscErrorCode ierr; 7995fce210SBarry Smith 8095fce210SBarry Smith PetscFunctionBegin; 811d36bdfdSBarry Smith ierr = PetscSFInitializePackage();CHKERRQ(ierr); 8229046d53SLisandro Dalcin ierr = PetscFunctionListAdd(&PetscSFList,name,create);CHKERRQ(ierr); 8395fce210SBarry Smith PetscFunctionReturn(0); 8495fce210SBarry Smith } 85