Actual source code: ex1.c
1: /*$Id: ex1.c,v 1.41 2001/04/10 19:34:49 bsmith Exp $*/
2: /*
3: Formatted test for ISGeneral routines.
4: */
6: static char help[] = "Tests IS general routines.nn";
8: #include petscis.h
10: int main(int argc,char **argv)
11: {
12: int i,n,ierr,*indices,rank,size,*ii;
13: IS is,newis;
14: PetscTruth flg;
16: PetscInitialize(&argc,&argv,(char*)0,help);
17: MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
18: MPI_Comm_size(PETSC_COMM_WORLD,&size);
20: /*
21: Test IS of size 0
22: */
23: ISCreateGeneral(PETSC_COMM_SELF,0,&n,&is);
24: ISGetSize(is,&n);
25: if (n != 0) SETERRQ(1,"ISGetSize");
26: ISDestroy(is);
28: /*
29: Create large IS and test ISGetIndices()
30: */
31: n = 10000 + rank;
32: PetscMalloc(n*sizeof(int),&indices);
33: for (i=0; i<n; i++) {
34: indices[i] = rank + i;
35: }
36: ISCreateGeneral(PETSC_COMM_SELF,n,indices,&is);
37: ISGetIndices(is,&ii);
38: for (i=0; i<n; i++) {
39: if (ii[i] != indices[i]) SETERRQ(1,"ISGetIndices");
40: }
41: ISRestoreIndices(is,&ii);
43: /*
44: Check identity and permutation
45: */
46: ISPermutation(is,&flg);
47: if (flg == PETSC_TRUE) SETERRQ(1,"ISPermutation");
48: ISIdentity(is,&flg);
49: if (flg != PETSC_TRUE) SETERRQ(1,"ISIdentity");
50: ISSetPermutation(is);
51: ISSetIdentity(is);
52: ISPermutation(is,&flg);
53: if (flg != PETSC_TRUE) SETERRQ(1,"ISPermutation");
54: ISIdentity(is,&flg);
55: if (flg != PETSC_TRUE) SETERRQ(1,"ISIdentity");
57: /*
58: Check equality of index sets
59: */
60: ISEqual(is,is,&flg);
61: if (flg != PETSC_TRUE) SETERRQ(1,"ISEqual");
63: /*
64: Sorting
65: */
66: ISSort(is);
67: ISSorted(is,&flg);
68: if (flg != PETSC_TRUE) SETERRQ(1,"ISSort");
70: /*
71: Thinks it is a different type?
72: */
73: ISStride(is,&flg);
74: if (flg == PETSC_TRUE) SETERRQ(1,"ISStride");
75: ISBlock(is,&flg);
76: if (flg == PETSC_TRUE) SETERRQ(1,"ISBlock");
78: ISDestroy(is);
80: /*
81: Inverting permutation
82: */
83: for (i=0; i<n; i++) {
84: indices[i] = n - i - 1;
85: }
86: ISCreateGeneral(PETSC_COMM_SELF,n,indices,&is);
87: PetscFree(indices);
88: ISSetPermutation(is);
89: ISInvertPermutation(is,PETSC_DECIDE,&newis);
90: ISGetIndices(newis,&ii);
91: for (i=0; i<n; i++) {
92: if (ii[i] != n - i - 1) SETERRQ(1,"ISInvertPermutation");
93: }
94: ISRestoreIndices(newis,&ii);
95: ISDestroy(newis);
96: ISDestroy(is);
97: PetscFinalize();
98: return 0;
99: }
100: