Actual source code: ex43.c
1: static char help[] = "Tests VecMDot(),VecDot(),VecMTDot(), and VecTDot()\n";
3: #include <petscvec.h>
5: int main(int argc, char **argv)
6: {
7: Vec *V, t;
8: PetscInt i, j, reps, n = 15, k = 6;
9: PetscRandom rctx;
10: PetscScalar *val_dot, *val_mdot, *tval_dot, *tval_mdot;
13: PetscInitialize(&argc, &argv, (char *)0, help);
14: PetscOptionsGetInt(NULL, NULL, "-n", &n, NULL);
15: PetscOptionsGetInt(NULL, NULL, "-k", &k, NULL);
16: PetscPrintf(PETSC_COMM_WORLD, "Test with %" PetscInt_FMT " random vectors of length %" PetscInt_FMT "\n", k, n);
17: PetscRandomCreate(PETSC_COMM_WORLD, &rctx);
18: PetscRandomSetFromOptions(rctx);
19: #if defined(PETSC_USE_COMPLEX)
20: PetscRandomSetInterval(rctx, -1. + 4. * PETSC_i, 1. + 5. * PETSC_i);
21: #else
22: PetscRandomSetInterval(rctx, -1., 1.);
23: #endif
24: VecCreate(PETSC_COMM_WORLD, &t);
25: VecSetSizes(t, n, PETSC_DECIDE);
26: VecSetFromOptions(t);
27: VecDuplicateVecs(t, k, &V);
28: VecSetRandom(t, rctx);
29: VecViewFromOptions(t, NULL, "-t_view");
30: PetscMalloc1(k, &val_dot);
31: PetscMalloc1(k, &val_mdot);
32: PetscMalloc1(k, &tval_dot);
33: PetscMalloc1(k, &tval_mdot);
34: for (i = 0; i < k; i++) VecSetRandom(V[i], rctx);
35: for (reps = 0; reps < 20; reps++) {
36: for (i = 1; i < k; i++) {
37: VecMDot(t, i, V, val_mdot);
38: VecMTDot(t, i, V, tval_mdot);
39: for (j = 0; j < i; j++) {
40: VecDot(t, V[j], &val_dot[j]);
41: VecTDot(t, V[j], &tval_dot[j]);
42: }
43: /* Check result */
44: for (j = 0; j < i; j++) {
45: if (PetscAbsScalar(val_mdot[j] - val_dot[j]) / PetscAbsScalar(val_dot[j]) > 1e-5) {
46: PetscPrintf(PETSC_COMM_WORLD, "[TEST FAILED] i=%" PetscInt_FMT ", j=%" PetscInt_FMT ", val_mdot[j]=%g, val_dot[j]=%g\n", i, j, (double)PetscAbsScalar(val_mdot[j]), (double)PetscAbsScalar(val_dot[j]));
47: break;
48: }
49: if (PetscAbsScalar(tval_mdot[j] - tval_dot[j]) / PetscAbsScalar(tval_dot[j]) > 1e-5) {
50: PetscPrintf(PETSC_COMM_WORLD, "[TEST FAILED] i=%" PetscInt_FMT ", j=%" PetscInt_FMT ", tval_mdot[j]=%g, tval_dot[j]=%g\n", i, j, (double)PetscAbsScalar(tval_mdot[j]), (double)PetscAbsScalar(tval_dot[j]));
51: break;
52: }
53: }
54: }
55: }
56: PetscPrintf(PETSC_COMM_WORLD, "Test completed successfully!\n");
57: PetscFree(val_dot);
58: PetscFree(val_mdot);
59: PetscFree(tval_dot);
60: PetscFree(tval_mdot);
61: VecDestroyVecs(k, &V);
62: VecDestroy(&t);
63: PetscRandomDestroy(&rctx);
64: PetscFinalize();
65: return 0;
66: }
68: /*TEST
70: test:
72: testset:
73: output_file: output/ex43_1.out
75: test:
76: suffix: cuda
77: args: -vec_type cuda -random_type curand
78: requires: cuda
80: test:
81: suffix: kokkos
82: args: -vec_type kokkos
83: requires: kokkos_kernels
85: test:
86: suffix: hip
87: args: -vec_type hip
88: requires: hip
89: TEST*/