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
main(int argc,char ** argv)7d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv)
8d71ae5a4SJacob Faibussowitsch {
9d4afb720SToby Isaac PetscInt d, n, maxdim = 4;
10d4afb720SToby Isaac PetscInt *btupprev, *btup;
11fbdc3dfeSToby Isaac PetscInt *gtup;
12d4afb720SToby Isaac
13327415f7SBarry Smith PetscFunctionBeginUser;
149566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help));
159566063dSJacob Faibussowitsch PetscCall(PetscMalloc3(maxdim + 1, &btup, maxdim + 1, &btupprev, maxdim, >up));
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
209566063dSJacob Faibussowitsch PetscCall(PetscDTBinomialInt(d + n, d, &Nk));
21d4afb720SToby Isaac for (k = 0; k < Nk; k++) {
22d4afb720SToby Isaac PetscInt sum;
23d4afb720SToby Isaac
249566063dSJacob Faibussowitsch PetscCall(PetscDTIndexToBary(d + 1, n, k, btup));
25d4afb720SToby Isaac for (j = 0, sum = 0; j < d + 1; j++) {
2663a3b9bcSJacob Faibussowitsch PetscCheck(btup[j] >= 0, PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToBary, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " negative entry", d, n, k);
27d4afb720SToby Isaac sum += btup[j];
28d4afb720SToby Isaac }
2963a3b9bcSJacob Faibussowitsch PetscCheck(sum == n, PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToBary, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " incorrect sum", d, n, k);
309566063dSJacob Faibussowitsch PetscCall(PetscDTBaryToIndex(d + 1, n, btup, &kchk));
3163a3b9bcSJacob Faibussowitsch PetscCheck(kchk == k, PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTBaryToIndex, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " mismatch", d, n, k);
32d4afb720SToby Isaac if (k) {
33d4afb720SToby Isaac j = d;
34d4afb720SToby Isaac while (j >= 0 && btup[j] == btupprev[j]) j--;
3563a3b9bcSJacob Faibussowitsch PetscCheck(j >= 0, PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToBary, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " equal to previous", d, n, k);
3663a3b9bcSJacob Faibussowitsch PetscCheck(btup[j] >= btupprev[j], PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToBary, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " less to previous", d, n, k);
371baa6e33SBarry Smith } else PetscCall(PetscArraycpy(btupprev, btup, d + 1));
389566063dSJacob Faibussowitsch PetscCall(PetscDTIndexToGradedOrder(d, Nk - 1 - k, gtup));
399566063dSJacob Faibussowitsch PetscCall(PetscDTGradedOrderToIndex(d, gtup, &kchk));
401dca8a05SBarry Smith PetscCheck(kchk == Nk - 1 - k, PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTGradedOrderToIndex, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " mismatch", d, n, Nk - 1 - k);
41ad540459SPierre Jolivet for (j = 0; j < d; j++) PetscCheck(gtup[j] == btup[d - 1 - j], PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDTIndexToGradedOrder, d = %" PetscInt_FMT ", n = %" PetscInt_FMT ", k = %" PetscInt_FMT " incorrect", d, n, Nk - 1 - k);
42d4afb720SToby Isaac }
43d4afb720SToby Isaac }
44fbdc3dfeSToby Isaac }
459566063dSJacob Faibussowitsch PetscCall(PetscFree3(btup, btupprev, gtup));
469566063dSJacob Faibussowitsch PetscCall(PetscFinalize());
47b122ec5aSJacob Faibussowitsch return 0;
48d4afb720SToby Isaac }
49d4afb720SToby Isaac
50d4afb720SToby Isaac /*TEST
51d4afb720SToby Isaac
52d4afb720SToby Isaac test:
53*3886731fSPierre Jolivet output_file: output/empty.out
54d4afb720SToby Isaac
55d4afb720SToby Isaac TEST*/
56