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