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