Actual source code: ex1.c
petsc-3.13.4 2020-08-01
1: /*
2: Formatted test for ISGeneral routines.
3: */
5: static char help[] = "Tests IS general routines.\n\n";
7: #include <petscis.h>
8: #include <petscviewer.h>
10: int main(int argc,char **argv)
11: {
12: PetscMPIInt rank,size;
13: PetscInt i,n,*indices;
14: const PetscInt *ii;
15: IS is,newis;
16: PetscBool flg;
17: PetscBool permanent = PETSC_FALSE;
18: PetscBool compute = PETSC_TRUE;
21: PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr;
22: MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
23: MPI_Comm_size(PETSC_COMM_WORLD,&size);
25: /*
26: Test IS of size 0
27: */
28: ISCreateGeneral(PETSC_COMM_SELF,0,&n,PETSC_COPY_VALUES,&is);
29: ISGetSize(is,&n);
30: if (n != 0) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISGetSize");
31: ISDestroy(&is);
33: /*
34: Create large IS and test ISGetIndices()
35: */
36: n = 10000 + rank;
37: PetscMalloc1(n,&indices);
38: for (i=0; i<n; i++) indices[i] = rank + i;
39: ISCreateGeneral(PETSC_COMM_SELF,n,indices,PETSC_COPY_VALUES,&is);
40: ISGetIndices(is,&ii);
41: for (i=0; i<n; i++) {
42: if (ii[i] != indices[i]) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISGetIndices");
43: }
44: ISRestoreIndices(is,&ii);
46: /*
47: Check identity and permutation
48: */
49: /* ISPermutation doesn't check if not set */
50: ISPermutation(is,&flg);
51: if (flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISPermutation");
52: ISGetInfo(is,IS_PERMUTATION,IS_LOCAL,compute,&flg);
53: if (!rank && !flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISGetInfo(IS_PERMUTATION,IS_LOCAL)");
54: if (rank && flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISGetInfo(IS_PERMUTATION,IS_LOCAL)");
55: ISIdentity(is,&flg);
56: if (!rank && !flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISIdentity");
57: if (rank && flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISIdentity");
58: ISGetInfo(is,IS_IDENTITY,IS_LOCAL,compute,&flg);
59: if (!rank && !flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISGetInfo(IS_IDENTITY,IS_LOCAL)");
60: if (rank && flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISGetInfo(IS_IDENTITY,IS_LOCAL)");
61: /* we can override the computed values with ISSetInfo() */
62: ISSetInfo(is,IS_PERMUTATION,IS_LOCAL,permanent,PETSC_TRUE);
63: ISSetInfo(is,IS_IDENTITY,IS_LOCAL,permanent,PETSC_TRUE);
64: ISGetInfo(is,IS_PERMUTATION,IS_LOCAL,compute,&flg);
65: if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISGetInfo(IS_PERMUTATION,IS_LOCAL)");
66: ISGetInfo(is,IS_IDENTITY,IS_LOCAL,compute,&flg);
67: if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISGetInfo(IS_IDENTITY,IS_LOCAL)");
69: ISClearInfoCache(is,PETSC_TRUE);
71: /*
72: Check equality of index sets
73: */
74: ISEqual(is,is,&flg);
75: if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISEqual");
77: /*
78: Sorting
79: */
80: ISSort(is);
81: ISSorted(is,&flg);
82: if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISSort");
83: ISGetInfo(is,IS_SORTED,IS_LOCAL,compute,&flg);
84: if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISGetInfo(IS_SORTED,IS_LOCAL)");
85: ISSorted(is,&flg);
86: if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISSort");
87: ISGetInfo(is,IS_SORTED,IS_LOCAL,compute,&flg);
88: if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISGetInfo(IS_SORTED,IS_LOCAL)");
90: /*
91: Thinks it is a different type?
92: */
93: PetscObjectTypeCompare((PetscObject)is,ISSTRIDE,&flg);
94: if (flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISStride");
95: PetscObjectTypeCompare((PetscObject)is,ISBLOCK,&flg);
96: if (flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISBlock");
98: ISDestroy(&is);
100: /*
101: Inverting permutation
102: */
103: for (i=0; i<n; i++) indices[i] = n - i - 1;
104: ISCreateGeneral(PETSC_COMM_SELF,n,indices,PETSC_COPY_VALUES,&is);
105: PetscFree(indices);
106: ISSetPermutation(is);
107: ISInvertPermutation(is,PETSC_DECIDE,&newis);
108: ISGetIndices(newis,&ii);
109: for (i=0; i<n; i++) {
110: if (ii[i] != n - i - 1) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"ISInvertPermutation");
111: }
112: ISRestoreIndices(newis,&ii);
113: ISDestroy(&newis);
114: ISDestroy(&is);
115: PetscFinalize();
116: return ierr;
117: }
119: /*TEST
121: test:
122: nsize: {{1 2 3 4 5}}
125: TEST*/