1c4762a1bSJed Brown static const char help[] = "Test star forest communication (PetscSF)\n\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown /*T 4c4762a1bSJed Brown Description: This example creates empty star forests to test the API. 5c4762a1bSJed Brown T*/ 6c4762a1bSJed Brown 7c4762a1bSJed Brown #include <petscsf.h> 8c4762a1bSJed Brown #include <petsc/private/sfimpl.h> 9c4762a1bSJed Brown 10c4762a1bSJed Brown static PetscErrorCode CheckGraphNotSet(PetscSF sf) 11c4762a1bSJed Brown { 12c4762a1bSJed Brown PetscInt nroots,nleaves; 13c4762a1bSJed Brown const PetscInt *ilocal; 14c4762a1bSJed Brown const PetscSFNode *iremote; 15c4762a1bSJed Brown PetscErrorCode ierr; 16c4762a1bSJed Brown 17c4762a1bSJed Brown PetscFunctionBegin; 18c4762a1bSJed Brown if (sf->graphset) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF graph is set"); 19c4762a1bSJed Brown ierr = PetscSFGetGraph(sf,&nroots,&nleaves,&ilocal,&iremote);CHKERRQ(ierr); 20c4762a1bSJed Brown if (nroots >= 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF graph is set"); 21c4762a1bSJed Brown if (nleaves >= 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF graph is set"); 22c4762a1bSJed Brown if (ilocal) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF graph is set"); 23c4762a1bSJed Brown if (iremote) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF graph is set"); 24c4762a1bSJed Brown if (sf->minleaf != PETSC_MAX_INT) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF minimum leaf is not PETSC_MAX_INT"); 25c4762a1bSJed Brown if (sf->maxleaf != PETSC_MIN_INT) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF minimum leaf is not PETSC_MIN_INT"); 26c4762a1bSJed Brown PetscFunctionReturn(0); 27c4762a1bSJed Brown } 28c4762a1bSJed Brown 29c4762a1bSJed Brown static PetscErrorCode CheckGraphEmpty(PetscSF sf) 30c4762a1bSJed Brown { 31c4762a1bSJed Brown PetscInt nroots,nleaves; 32c4762a1bSJed Brown const PetscInt *ilocal; 33c4762a1bSJed Brown const PetscSFNode *iremote; 34c4762a1bSJed Brown PetscInt minleaf,maxleaf; 35c4762a1bSJed Brown PetscErrorCode ierr; 36c4762a1bSJed Brown 37c4762a1bSJed Brown PetscFunctionBegin; 38c4762a1bSJed Brown ierr = PetscSFGetGraph(sf,&nroots,&nleaves,&ilocal,&iremote);CHKERRQ(ierr); 39c4762a1bSJed Brown if (nroots) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF graph is not empty"); 40c4762a1bSJed Brown if (nleaves) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF graph is not empty"); 41c4762a1bSJed Brown if (ilocal) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF graph is not empty"); 42c4762a1bSJed Brown if (iremote) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF graph is not empty"); 43c4762a1bSJed Brown ierr = PetscSFGetLeafRange(sf,&minleaf,&maxleaf);CHKERRQ(ierr); 44c4762a1bSJed Brown if (minleaf != 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF minimum leaf is not 0"); 45c4762a1bSJed Brown if (maxleaf != -1) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF maximum leaf is not -1"); 46c4762a1bSJed Brown PetscFunctionReturn(0); 47c4762a1bSJed Brown } 48c4762a1bSJed Brown 49c4762a1bSJed Brown static PetscErrorCode CheckRanksNotSet(PetscSF sf) 50c4762a1bSJed Brown { 51c4762a1bSJed Brown PetscFunctionBegin; 52c4762a1bSJed Brown if (sf->nranks != -1) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF ranks are set"); 53c4762a1bSJed Brown if (sf->ranks != NULL) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF ranks are set"); 54c4762a1bSJed Brown PetscFunctionReturn(0); 55c4762a1bSJed Brown } 56c4762a1bSJed Brown 57c4762a1bSJed Brown static PetscErrorCode CheckRanksEmpty(PetscSF sf) 58c4762a1bSJed Brown { 59c4762a1bSJed Brown PetscFunctionBegin; 60c4762a1bSJed Brown if (sf->nranks != 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"SF ranks not empty"); 61c4762a1bSJed Brown PetscFunctionReturn(0); 62c4762a1bSJed Brown } 63c4762a1bSJed Brown 64c4762a1bSJed Brown int main(int argc,char **argv) 65c4762a1bSJed Brown { 66c4762a1bSJed Brown PetscSF sf,sfDup,sfInv,sfEmbed,sfA,sfB,sfBA; 67c4762a1bSJed Brown const PetscInt *degree; 68c4762a1bSJed Brown PetscErrorCode ierr; 69c4762a1bSJed Brown char sftype[64] = PETSCSFBASIC; 70c4762a1bSJed Brown 71c4762a1bSJed Brown ierr = PetscInitialize(&argc,&argv,NULL,help);if (ierr) return ierr; 72c4762a1bSJed Brown ierr = PetscOptionsGetString(NULL,NULL,"-user_sf_type",sftype,sizeof(sftype),NULL);CHKERRQ(ierr); 73c4762a1bSJed Brown 74c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 75c4762a1bSJed Brown ierr = CheckGraphNotSet(sf);CHKERRQ(ierr); 76c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 77c4762a1bSJed Brown 78c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 79c4762a1bSJed Brown ierr = CheckGraphNotSet(sf);CHKERRQ(ierr); 80c4762a1bSJed Brown ierr = PetscSFReset(sf);CHKERRQ(ierr); 81c4762a1bSJed Brown ierr = CheckGraphNotSet(sf);CHKERRQ(ierr); 82c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 83c4762a1bSJed Brown 84c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 85c4762a1bSJed Brown ierr = CheckGraphNotSet(sf);CHKERRQ(ierr); 86c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 87c4762a1bSJed Brown ierr = CheckGraphNotSet(sf);CHKERRQ(ierr); 88c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 89c4762a1bSJed Brown 90c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 91c4762a1bSJed Brown ierr = CheckGraphNotSet(sf);CHKERRQ(ierr); 92c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 93c4762a1bSJed Brown ierr = CheckGraphNotSet(sf);CHKERRQ(ierr); 94c4762a1bSJed Brown ierr = PetscSFReset(sf);CHKERRQ(ierr); 95c4762a1bSJed Brown ierr = CheckGraphNotSet(sf);CHKERRQ(ierr); 96c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 97c4762a1bSJed Brown 98c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 99c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_COPY_VALUES,NULL,PETSC_COPY_VALUES);CHKERRQ(ierr); 100c4762a1bSJed Brown ierr = CheckGraphEmpty(sf);CHKERRQ(ierr); 101c4762a1bSJed Brown ierr = PetscSFReset(sf);CHKERRQ(ierr); 102c4762a1bSJed Brown ierr = CheckGraphNotSet(sf);CHKERRQ(ierr); 103c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 104c4762a1bSJed Brown 105c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 106c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 107c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_COPY_VALUES,NULL,PETSC_COPY_VALUES);CHKERRQ(ierr); 108c4762a1bSJed Brown ierr = CheckGraphEmpty(sf);CHKERRQ(ierr); 109c4762a1bSJed Brown ierr = PetscSFReset(sf);CHKERRQ(ierr); 110c4762a1bSJed Brown ierr = CheckGraphNotSet(sf);CHKERRQ(ierr); 111c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 112c4762a1bSJed Brown 113c4762a1bSJed Brown /* Test setup */ 114c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 115c4762a1bSJed Brown ierr = CheckRanksNotSet(sf);CHKERRQ(ierr); 116c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_COPY_VALUES,NULL,PETSC_COPY_VALUES);CHKERRQ(ierr); 117c4762a1bSJed Brown ierr = CheckRanksNotSet(sf);CHKERRQ(ierr); 118c4762a1bSJed Brown ierr = PetscSFSetUp(sf);CHKERRQ(ierr); 119c4762a1bSJed Brown ierr = CheckRanksEmpty(sf);CHKERRQ(ierr); 120c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 121c4762a1bSJed Brown 122c4762a1bSJed Brown /* Test setup then reset */ 123c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 124c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_COPY_VALUES,NULL,PETSC_COPY_VALUES);CHKERRQ(ierr); 125c4762a1bSJed Brown ierr = PetscSFSetUp(sf);CHKERRQ(ierr); 126c4762a1bSJed Brown ierr = PetscSFReset(sf);CHKERRQ(ierr); 127c4762a1bSJed Brown ierr = CheckRanksNotSet(sf);CHKERRQ(ierr); 128c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 129c4762a1bSJed Brown 130c4762a1bSJed Brown /* Test view (no graph set, no type set) */ 131c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 132c4762a1bSJed Brown ierr = PetscSFView(sf,NULL);CHKERRQ(ierr); 133c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 134c4762a1bSJed Brown 135c4762a1bSJed Brown /* Test set graph then view (no type set) */ 136c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 137c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_COPY_VALUES,NULL,PETSC_COPY_VALUES);CHKERRQ(ierr); 138c4762a1bSJed Brown ierr = PetscSFView(sf,NULL);CHKERRQ(ierr); 139c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 140c4762a1bSJed Brown 141c4762a1bSJed Brown /* Test set type then view (no graph set) */ 142c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 143c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 144c4762a1bSJed Brown ierr = PetscSFView(sf,NULL);CHKERRQ(ierr); 145c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 146c4762a1bSJed Brown 147c4762a1bSJed Brown /* Test set type then graph then view */ 148c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 149c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 150c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_COPY_VALUES,NULL,PETSC_COPY_VALUES);CHKERRQ(ierr); 151c4762a1bSJed Brown ierr = PetscSFView(sf,NULL);CHKERRQ(ierr); 152c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 153c4762a1bSJed Brown 154c4762a1bSJed Brown /* Test set graph then type */ 155c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 156c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_COPY_VALUES,NULL,PETSC_COPY_VALUES);CHKERRQ(ierr); 157c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 158c4762a1bSJed Brown ierr = CheckGraphEmpty(sf);CHKERRQ(ierr); 159c4762a1bSJed Brown ierr = PetscSFReset(sf);CHKERRQ(ierr); 160c4762a1bSJed Brown ierr = CheckGraphNotSet(sf);CHKERRQ(ierr); 161c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 162c4762a1bSJed Brown 163c4762a1bSJed Brown /* Test Bcast (we call setfromoptions) */ 164c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 165c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 166c4762a1bSJed Brown ierr = PetscSFSetFromOptions(sf);CHKERRQ(ierr); 167c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_COPY_VALUES,NULL,PETSC_COPY_VALUES);CHKERRQ(ierr); 168ad227feaSJunchao Zhang ierr = PetscSFBcastBegin(sf,MPI_INT,NULL,NULL,MPI_REPLACE);CHKERRQ(ierr); 169ad227feaSJunchao Zhang ierr = PetscSFBcastEnd (sf,MPI_INT,NULL,NULL,MPI_REPLACE);CHKERRQ(ierr); 170c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 171c4762a1bSJed Brown 172c4762a1bSJed Brown /* From now on we also call SetFromOptions */ 173c4762a1bSJed Brown 174c4762a1bSJed Brown /* Test Reduce */ 175c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 176c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 177c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_COPY_VALUES,NULL,PETSC_COPY_VALUES);CHKERRQ(ierr); 178c4762a1bSJed Brown ierr = PetscSFSetFromOptions(sf);CHKERRQ(ierr); 17983df288dSJunchao Zhang ierr = PetscSFReduceBegin(sf,MPI_INT,NULL,NULL,MPI_REPLACE);CHKERRQ(ierr); 18083df288dSJunchao Zhang ierr = PetscSFReduceEnd (sf,MPI_INT,NULL,NULL,MPI_REPLACE);CHKERRQ(ierr); 181c4762a1bSJed Brown ierr = PetscSFReduceBegin(sf,MPI_INT,NULL,NULL,MPI_SUM);CHKERRQ(ierr); 182c4762a1bSJed Brown ierr = PetscSFReduceEnd (sf,MPI_INT,NULL,NULL,MPI_SUM);CHKERRQ(ierr); 183c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 184c4762a1bSJed Brown 185c4762a1bSJed Brown /* Test FetchAndOp */ 186c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 187c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 188c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_COPY_VALUES,NULL,PETSC_COPY_VALUES);CHKERRQ(ierr); 189c4762a1bSJed Brown ierr = PetscSFSetFromOptions(sf);CHKERRQ(ierr); 190c4762a1bSJed Brown ierr = PetscSFFetchAndOpBegin(sf,MPI_INT,NULL,NULL,NULL,MPI_SUM);CHKERRQ(ierr); 191c4762a1bSJed Brown ierr = PetscSFFetchAndOpEnd (sf,MPI_INT,NULL,NULL,NULL,MPI_SUM);CHKERRQ(ierr); 192c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 193c4762a1bSJed Brown 194c4762a1bSJed Brown /* Test ComputeDegree */ 195c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 196c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 197c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_COPY_VALUES,NULL,PETSC_COPY_VALUES);CHKERRQ(ierr); 198c4762a1bSJed Brown ierr = PetscSFSetFromOptions(sf);CHKERRQ(ierr); 199c4762a1bSJed Brown ierr = PetscSFComputeDegreeBegin(sf,°ree);CHKERRQ(ierr); 200c4762a1bSJed Brown ierr = PetscSFComputeDegreeEnd(sf,°ree);CHKERRQ(ierr); 201c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 202c4762a1bSJed Brown 203c4762a1bSJed Brown /* Test PetscSFDuplicate() */ 204c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 205c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 206c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_USE_POINTER,NULL,PETSC_USE_POINTER);CHKERRQ(ierr); 207c4762a1bSJed Brown ierr = PetscSFSetFromOptions(sf);CHKERRQ(ierr); 208c4762a1bSJed Brown ierr = PetscSFDuplicate(sf,PETSCSF_DUPLICATE_GRAPH,&sfDup);CHKERRQ(ierr); 209c4762a1bSJed Brown ierr = CheckGraphEmpty(sfDup);CHKERRQ(ierr); 210c4762a1bSJed Brown ierr = PetscSFDestroy(&sfDup);CHKERRQ(ierr); 211c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 212c4762a1bSJed Brown 213c4762a1bSJed Brown /* Test PetscSFCreateInverseSF() */ 214c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 215c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 216c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_USE_POINTER,NULL,PETSC_USE_POINTER);CHKERRQ(ierr); 217c4762a1bSJed Brown ierr = PetscSFSetFromOptions(sf);CHKERRQ(ierr); 218c4762a1bSJed Brown ierr = PetscSFCreateInverseSF(sf,&sfInv);CHKERRQ(ierr); 219c4762a1bSJed Brown ierr = CheckGraphEmpty(sfInv);CHKERRQ(ierr); 220c4762a1bSJed Brown ierr = PetscSFDestroy(&sfInv);CHKERRQ(ierr); 221c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 222c4762a1bSJed Brown 22372502a1fSJunchao Zhang /* Test PetscSFCreateEmbeddedRootSF() */ 224c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 225c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 226c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_USE_POINTER,NULL,PETSC_USE_POINTER);CHKERRQ(ierr); 227c4762a1bSJed Brown ierr = PetscSFSetFromOptions(sf);CHKERRQ(ierr); 22872502a1fSJunchao Zhang ierr = PetscSFCreateEmbeddedRootSF(sf,0,NULL,&sfEmbed);CHKERRQ(ierr); 229c4762a1bSJed Brown ierr = CheckGraphEmpty(sfEmbed);CHKERRQ(ierr); 230c4762a1bSJed Brown ierr = PetscSFDestroy(&sfEmbed);CHKERRQ(ierr); 231c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 232c4762a1bSJed Brown 233c4762a1bSJed Brown /* Test PetscSFCreateEmbeddedLeafSF() */ 234c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sf);CHKERRQ(ierr); 235c4762a1bSJed Brown ierr = PetscSFSetType(sf,sftype);CHKERRQ(ierr); 236c4762a1bSJed Brown ierr = PetscSFSetGraph(sf,0,0,NULL,PETSC_USE_POINTER,NULL,PETSC_USE_POINTER);CHKERRQ(ierr); 237c4762a1bSJed Brown ierr = PetscSFSetFromOptions(sf);CHKERRQ(ierr); 238c4762a1bSJed Brown ierr = PetscSFCreateEmbeddedLeafSF(sf,0,NULL,&sfEmbed);CHKERRQ(ierr); 239c4762a1bSJed Brown ierr = CheckGraphEmpty(sfEmbed);CHKERRQ(ierr); 240c4762a1bSJed Brown ierr = PetscSFDestroy(&sfEmbed);CHKERRQ(ierr); 241c4762a1bSJed Brown ierr = PetscSFDestroy(&sf);CHKERRQ(ierr); 242c4762a1bSJed Brown 243c4762a1bSJed Brown /* Test PetscSFCompose() */ 244c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sfA);CHKERRQ(ierr); 245c4762a1bSJed Brown ierr = PetscSFSetType(sfA,sftype);CHKERRQ(ierr); 246c4762a1bSJed Brown ierr = PetscSFSetGraph(sfA,0,0,NULL,PETSC_USE_POINTER,NULL,PETSC_USE_POINTER);CHKERRQ(ierr); 247c4762a1bSJed Brown ierr = PetscSFCreate(PETSC_COMM_WORLD,&sfB);CHKERRQ(ierr); 248c4762a1bSJed Brown ierr = PetscSFSetType(sfB,sftype);CHKERRQ(ierr); 249c4762a1bSJed Brown ierr = PetscSFSetGraph(sfB,0,0,NULL,PETSC_USE_POINTER,NULL,PETSC_USE_POINTER);CHKERRQ(ierr); 250c4762a1bSJed Brown ierr = PetscSFCompose(sfA,sfB,&sfBA);CHKERRQ(ierr); 251c4762a1bSJed Brown ierr = CheckGraphEmpty(sfBA);CHKERRQ(ierr); 252c4762a1bSJed Brown ierr = PetscSFDestroy(&sfBA);CHKERRQ(ierr); 253c4762a1bSJed Brown ierr = PetscSFDestroy(&sfA);CHKERRQ(ierr); 254c4762a1bSJed Brown ierr = PetscSFDestroy(&sfB);CHKERRQ(ierr); 255c4762a1bSJed Brown 256c4762a1bSJed Brown ierr = PetscFinalize(); 257c4762a1bSJed Brown return ierr; 258c4762a1bSJed Brown } 259c4762a1bSJed Brown 260c4762a1bSJed Brown /*TEST 261c4762a1bSJed Brown 262c4762a1bSJed Brown test: 263c4762a1bSJed Brown suffix: basic_1 264c4762a1bSJed Brown nsize: 1 265c4762a1bSJed Brown 266c4762a1bSJed Brown test: 267c4762a1bSJed Brown suffix: basic_2 268c4762a1bSJed Brown nsize: 2 269c4762a1bSJed Brown 270c4762a1bSJed Brown test: 271c4762a1bSJed Brown suffix: basic_3 272c4762a1bSJed Brown nsize: 3 273c4762a1bSJed Brown 274c4762a1bSJed Brown test: 275c4762a1bSJed Brown suffix: window 276c4762a1bSJed Brown args: -user_sf_type window -sf_type window -sf_window_flavor {{create dynamic allocate}} -sf_window_sync {{fence active lock}} 277c4762a1bSJed Brown nsize: {{1 2 3}separate output} 278*dfd57a17SPierre Jolivet requires: defined(PETSC_HAVE_MPI_ONE_SIDED) defined(PETSC_HAVE_MPI_FEATURE_DYNAMIC_WINDOW) 279c4762a1bSJed Brown 280c4762a1bSJed Brown # The nightly test suite with MPICH uses ch3:sock, which is broken when winsize == 0 in some of the processes 281c4762a1bSJed Brown test: 282c4762a1bSJed Brown suffix: window_shared 283c4762a1bSJed Brown args: -user_sf_type window -sf_type window -sf_window_flavor shared -sf_window_sync {{fence active lock}} 284c4762a1bSJed Brown nsize: {{1 2 3}separate output} 285*dfd57a17SPierre Jolivet requires: defined(PETSC_HAVE_MPI_PROCESS_SHARED_MEMORY) !defined(PETSC_HAVE_MPICH_NUMVERSION) defined(PETSC_HAVE_MPI_ONE_SIDED) defined(PETSC_HAVE_MPI_FEATURE_DYNAMIC_WINDOW) 286c4762a1bSJed Brown 287c4762a1bSJed Brown TEST*/ 288