GCC Code Coverage Report


Directory: ./
File: src/sys/classes/bv/tests/test8.c
Date: 2025-10-04 04:19:13
Exec Total Coverage
Lines: 58 58 100.0%
Functions: 1 1 100.0%
Branches: 162 266 60.9%

Line Branch Exec Source
1 /*
2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3 SLEPc - Scalable Library for Eigenvalue Problem Computations
4 Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain
5
6 This file is part of SLEPc.
7 SLEPc is distributed under a 2-clause BSD license (see LICENSE).
8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9 */
10
11 static char help[] = "Test BV orthogonalization with selected columns.\n\n";
12
13 #include <slepcbv.h>
14
15 128 int main(int argc,char **argv)
16 {
17 128 BV X;
18 128 Vec v,t,z;
19 128 PetscInt i,j,n=20,k=8;
20 128 PetscViewer view;
21 128 PetscBool verbose,*which;
22 128 PetscReal norm;
23 128 PetscScalar alpha,*pz;
24
25
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
128 PetscFunctionBeginUser;
26
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(SlepcInitialize(&argc,&argv,NULL,help));
27
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL));
28
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(PetscOptionsGetInt(NULL,NULL,"-k",&k,NULL));
29
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(PetscOptionsHasName(NULL,NULL,"-verbose",&verbose));
30
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Test BV orthogonalization with selected columns of length %" PetscInt_FMT ".\n",n));
31
32 /* Create template vector */
33
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(VecCreate(PETSC_COMM_WORLD,&t));
34
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(VecSetSizes(t,PETSC_DECIDE,n));
35
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(VecSetFromOptions(t));
36
37 /* Create BV object X */
38
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(BVCreate(PETSC_COMM_WORLD,&X));
39
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(PetscObjectSetName((PetscObject)X,"X"));
40
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(BVSetSizesFromVec(X,t,k));
41
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(BVSetOrthogonalization(X,BV_ORTHOG_MGS,BV_ORTHOG_REFINE_IFNEEDED,PETSC_CURRENT,BV_ORTHOG_BLOCK_GS));
42
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(BVSetFromOptions(X));
43
44 /* Set up viewer */
45
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(PetscViewerASCIIGetStdout(PETSC_COMM_WORLD,&view));
46
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
128 if (verbose) PetscCall(PetscViewerPushFormat(view,PETSC_VIEWER_ASCII_MATLAB));
47
48 /* Fill X entries */
49
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1152 for (j=0;j<k;j++) {
50
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1024 PetscCall(BVGetColumn(X,j,&v));
51
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1024 PetscCall(VecSet(v,0.0));
52
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
12288 for (i=0;i<=n/2;i++) {
53
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
11264 if (i+j<n) {
54 11264 alpha = (3.0*i+j-2)/(2*(i+j+1));
55
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
11264 PetscCall(VecSetValue(v,i+j,alpha,INSERT_VALUES));
56 }
57 }
58
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1024 PetscCall(VecAssemblyBegin(v));
59
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1024 PetscCall(VecAssemblyEnd(v));
60
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1024 PetscCall(BVRestoreColumn(X,j,&v));
61 }
62
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
128 if (verbose) PetscCall(BVView(X,view));
63
64 /* Orthonormalize first k-1 columns */
65
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1024 for (j=0;j<k-1;j++) {
66
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
896 PetscCall(BVOrthogonalizeColumn(X,j,NULL,&norm,NULL));
67 896 alpha = 1.0/norm;
68
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
896 PetscCall(BVScaleColumn(X,j,alpha));
69 }
70
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
128 if (verbose) PetscCall(BVView(X,view));
71
72 /* Select odd columns and orthogonalize last column against those only */
73
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(PetscMalloc1(k,&which));
74
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1152 for (i=0;i<k;i++) which[i] = (i%2)? PETSC_TRUE: PETSC_FALSE;
75
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(BVOrthogonalizeSomeColumn(X,k-1,which,NULL,NULL,NULL));
76
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
128 PetscCall(PetscFree(which));
77
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
128 if (verbose) PetscCall(BVView(X,view));
78
79 /* Check orthogonality */
80
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Orthogonalization coefficients:\n"));
81
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(VecCreateSeq(PETSC_COMM_SELF,k-1,&z));
82
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(PetscObjectSetName((PetscObject)z,"z"));
83
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(VecGetArray(z,&pz));
84
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(BVDotColumn(X,k-1,pz));
85
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1024 for (i=0;i<k-1;i++) {
86
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
896 if (PetscAbsScalar(pz[i])<5.0*PETSC_MACHINE_EPSILON) pz[i]=0.0;
87 }
88
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(VecRestoreArray(z,&pz));
89
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(VecView(z,view));
90
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(VecDestroy(&z));
91
92
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(BVDestroy(&X));
93
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
128 PetscCall(VecDestroy(&t));
94
3/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
128 PetscCall(SlepcFinalize());
95 return 0;
96 }
97
98 /*TEST
99
100 testset:
101 output_file: output/test8_1.out
102 test:
103 suffix: 1
104 args: -bv_type {{vecs contiguous svec mat}shared output}
105 test:
106 suffix: 1_cuda
107 args: -bv_type {{svec mat}} -vec_type cuda
108 requires: cuda
109 test:
110 suffix: 1_hip
111 args: -bv_type {{svec mat}} -vec_type hip
112 requires: hip
113 test:
114 suffix: 2
115 args: -bv_type {{vecs contiguous svec mat}shared output} -bv_orthog_refine never
116 requires: !single
117 test:
118 suffix: 3
119 args: -bv_type {{vecs contiguous svec mat}shared output} -bv_orthog_refine always
120
121 TEST*/
122