GCC Code Coverage Report


Directory: ./
File: src/svd/tests/test14.c
Date: 2025-10-03 04:28:47
Exec Total Coverage
Lines: 46 46 100.0%
Functions: 1 1 100.0%
Branches: 152 222 68.5%

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[] = "Tests multiple calls to SVDSolve with equal matrix size.\n\n"
12 "The command line options are:\n"
13 " -m <m>, where <m> = matrix rows.\n"
14 " -n <n>, where <n> = matrix columns (defaults to m+2).\n\n";
15
16 #include <slepcsvd.h>
17
18 /*
19 This example computes the singular values of two rectangular bidiagonal matrices
20
21 | 1 2 | | 1 |
22 | 1 2 | | 2 1 |
23 | 1 2 | | 2 1 |
24 A = | . . | B = | . . |
25 | . . | | . . |
26 | 1 2 | | 2 1 |
27 | 1 2 | | 2 1 |
28 */
29
30 140 int main(int argc,char **argv)
31 {
32 140 Mat A,B;
33 140 SVD svd;
34 140 PetscInt m=20,n,Istart,Iend,i,col[2];
35 140 PetscScalar valsa[] = { 1, 2 }, valsb[] = { 2, 1 };
36 140 PetscBool flg;
37
38
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
140 PetscFunctionBeginUser;
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.
140 PetscCall(SlepcInitialize(&argc,&argv,NULL,help));
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.
140 PetscCall(PetscOptionsGetInt(NULL,NULL,"-m",&m,NULL));
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.
140 PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,&flg));
42
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
140 if (!flg) n=m+2;
43
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.
140 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\nRectangular bidiagonal matrix, m=%" PetscInt_FMT " n=%" PetscInt_FMT "\n\n",m,n));
44
45 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
46 Generate the matrices
47 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
48
49
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.
140 PetscCall(MatCreate(PETSC_COMM_WORLD,&A));
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.
140 PetscCall(MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,m,n));
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.
140 PetscCall(MatSetFromOptions(A));
52
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.
140 PetscCall(MatGetOwnershipRange(A,&Istart,&Iend));
53
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
2940 for (i=Istart;i<Iend;i++) {
54 2800 col[0]=i; col[1]=i+1;
55
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ 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.
2800 if (i<n-1) PetscCall(MatSetValues(A,1,&i,2,col,valsa,INSERT_VALUES));
56
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ 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.
2800 else if (i==n-1) PetscCall(MatSetValue(A,i,col[0],valsa[0],INSERT_VALUES));
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.
140 PetscCall(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY));
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.
140 PetscCall(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY));
60
61
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.
140 PetscCall(MatCreate(PETSC_COMM_WORLD,&B));
62
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.
140 PetscCall(MatSetSizes(B,PETSC_DECIDE,PETSC_DECIDE,m,n));
63
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.
140 PetscCall(MatSetFromOptions(B));
64
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.
140 PetscCall(MatGetOwnershipRange(B,&Istart,&Iend));
65
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
2940 for (i=Istart;i<Iend;i++) {
66 2800 col[0]=i-1; col[1]=i;
67
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ 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.
2800 if (i==0) PetscCall(MatSetValue(B,i,col[1],valsb[1],INSERT_VALUES));
68
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ 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.
2660 else if (i<n) PetscCall(MatSetValues(B,1,&i,2,col,valsb,INSERT_VALUES));
69
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ 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.
2800 else if (i==n) PetscCall(MatSetValue(B,i,col[0],valsb[0],INSERT_VALUES));
70 }
71
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.
140 PetscCall(MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY));
72
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.
140 PetscCall(MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY));
73
74 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
75 Create the singular value solver, set options and solve
76 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
77
78
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.
140 PetscCall(SVDCreate(PETSC_COMM_WORLD,&svd));
79
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.
140 PetscCall(SVDSetOperators(svd,A,NULL));
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.
140 PetscCall(SVDSetTolerances(svd,PETSC_CURRENT,1000));
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.
140 PetscCall(SVDSetFromOptions(svd));
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.
140 PetscCall(SVDSolve(svd));
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.
140 PetscCall(SVDErrorView(svd,SVD_ERROR_RELATIVE,NULL));
84
85 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
86 Solve with second matrix
87 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
88
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.
140 PetscCall(SVDSetOperators(svd,B,NULL));
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.
140 PetscCall(SVDSolve(svd));
91
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.
140 PetscCall(SVDErrorView(svd,SVD_ERROR_RELATIVE,NULL));
92
93 /* Free work space */
94
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.
140 PetscCall(SVDDestroy(&svd));
95
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.
140 PetscCall(MatDestroy(&A));
96
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.
140 PetscCall(MatDestroy(&B));
97
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.
140 PetscCall(SlepcFinalize());
98 return 0;
99 }
100
101 /*TEST
102
103 testset:
104 args: -svd_nsv 3
105 requires: !single
106 output_file: output/test14_1.out
107 test:
108 suffix: 1
109 args: -svd_type {{lanczos trlanczos lapack}}
110 test:
111 suffix: 1_cross
112 args: -svd_type cross -svd_cross_explicitmatrix {{0 1}}
113 test:
114 suffix: 1_cyclic
115 args: -svd_type cyclic -svd_cyclic_explicitmatrix {{0 1}}
116
117 testset:
118 args: -n 18 -svd_nsv 3
119 requires: !single
120 output_file: output/test14_2.out
121 test:
122 suffix: 2
123 args: -svd_type {{lanczos trlanczos lapack}}
124 test:
125 suffix: 2_cross
126 args: -svd_type cross -svd_cross_explicitmatrix {{0 1}}
127 test:
128 suffix: 2_cyclic
129 args: -svd_type cyclic -svd_cyclic_explicitmatrix {{0 1}}
130
131 TEST*/
132