xref: /petsc/src/dm/dt/tests/ex8.c (revision d4afb7202e2a84f4aed53e5b2470b60516492222)
1*d4afb720SToby Isaac const char help[] = "Tests PetscDTBaryToIndex() and PetscDTIndexToBary()";
2*d4afb720SToby Isaac 
3*d4afb720SToby Isaac #include <petsc/private/petscimpl.h>
4*d4afb720SToby Isaac #include <petsc/private/dtimpl.h>
5*d4afb720SToby Isaac #include <petsc/private/petscfeimpl.h>
6*d4afb720SToby Isaac 
7*d4afb720SToby Isaac int main(int argc, char **argv)
8*d4afb720SToby Isaac {
9*d4afb720SToby Isaac   PetscInt       d, n, maxdim = 4;
10*d4afb720SToby Isaac   PetscInt       *btupprev, *btup;
11*d4afb720SToby Isaac   PetscErrorCode ierr;
12*d4afb720SToby Isaac 
13*d4afb720SToby Isaac   ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr;
14*d4afb720SToby Isaac   ierr = PetscMalloc2(maxdim + 1, &btup, maxdim + 1, &btupprev);CHKERRQ(ierr);
15*d4afb720SToby Isaac   for (d = 0; d <= maxdim; d++) {
16*d4afb720SToby Isaac     for (n = 0; n <= d + 2; n++) {
17*d4afb720SToby Isaac       PetscInt j, k, Nk, kchk;
18*d4afb720SToby Isaac 
19*d4afb720SToby Isaac       ierr = PetscDTBinomialInt(d + n, d, &Nk);CHKERRQ(ierr);
20*d4afb720SToby Isaac       for (k = 0; k < Nk; k++) {
21*d4afb720SToby Isaac         PetscInt sum;
22*d4afb720SToby Isaac 
23*d4afb720SToby Isaac         ierr = PetscDTIndexToBary(d + 1, n, k, btup);CHKERRQ(ierr);
24*d4afb720SToby Isaac         for (j = 0, sum = 0; j < d + 1; j++) {
25*d4afb720SToby Isaac           if (btup[j] < 0) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToBary, d = %d, n = %d, k = %d negative entry\n", d, n, k);
26*d4afb720SToby Isaac           sum += btup[j];
27*d4afb720SToby Isaac         }
28*d4afb720SToby Isaac         if (sum != n) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToBary, d = %d, n = %d, k = %d incorrect sum\n", d, n, k);
29*d4afb720SToby Isaac         ierr = PetscDTBaryToIndex(d + 1, n, btup, &kchk);CHKERRQ(ierr);
30*d4afb720SToby Isaac         if (kchk != k) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTBaryToIndex, d = %d, n = %d, k = %d mismatch\n", d, n, k);
31*d4afb720SToby Isaac         if (k) {
32*d4afb720SToby Isaac           j = d;
33*d4afb720SToby Isaac           while (j >= 0 && btup[j] == btupprev[j]) j--;
34*d4afb720SToby Isaac           if (j < 0) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToBary, d = %d, n = %d, k = %d equal to previous\n", d, n, k);
35*d4afb720SToby Isaac           if (btup[j] < btupprev[j]) SETERRQ3(PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToBary, d = %d, n = %d, k = %d less to previous\n", d, n, k);
36*d4afb720SToby Isaac         } else {
37*d4afb720SToby Isaac           ierr = PetscArraycpy(btupprev, btup, d + 1);CHKERRQ(ierr);
38*d4afb720SToby Isaac         }
39*d4afb720SToby Isaac       }
40*d4afb720SToby Isaac     }
41*d4afb720SToby Isaac   }
42*d4afb720SToby Isaac   ierr = PetscFree2(btup, btupprev);CHKERRQ(ierr);
43*d4afb720SToby Isaac   ierr = PetscFinalize();
44*d4afb720SToby Isaac   return ierr;
45*d4afb720SToby Isaac }
46*d4afb720SToby Isaac 
47*d4afb720SToby Isaac /*TEST
48*d4afb720SToby Isaac 
49*d4afb720SToby Isaac   test:
50*d4afb720SToby Isaac 
51*d4afb720SToby Isaac TEST*/
52