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