GCC Code Coverage Report


Directory: ./
File: src/svd/tests/test13.c
Date: 2025-10-04 04:19:13
Exec Total Coverage
Lines: 38 38 100.0%
Functions: 1 1 100.0%
Branches: 107 172 62.2%

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 interface to external package PRIMME.\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 a rectangular bidiagonal matrix
20
21 | 1 2 |
22 | 1 2 |
23 | 1 2 |
24 A = | . . |
25 | . . |
26 | 1 2 |
27 | 1 2 |
28 */
29
30 12 int main(int argc,char **argv)
31 {
32 12 Mat A;
33 12 SVD svd;
34 12 PetscInt m=20,n,Istart,Iend,i,k=6,col[2],bs;
35 12 PetscScalar value[] = { 1, 2 };
36 12 PetscBool flg;
37 12 SVDPRIMMEMethod meth;
38
39
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
12 PetscFunctionBeginUser;
40
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(SlepcInitialize(&argc,&argv,NULL,help));
41
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(PetscOptionsGetInt(NULL,NULL,"-m",&m,NULL));
42
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,&flg));
43
1/2
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
12 if (!flg) n=m+2;
44
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(PetscOptionsGetInt(NULL,NULL,"-k",&k,NULL));
45
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\nRectangular bidiagonal matrix, m=%" PetscInt_FMT " n=%" PetscInt_FMT "\n\n",m,n));
46
47 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
48 Generate the matrix
49 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
50
51
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(MatCreate(PETSC_COMM_WORLD,&A));
52
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,m,n));
53
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(MatSetFromOptions(A));
54
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(MatGetOwnershipRange(A,&Istart,&Iend));
55
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 6 times.
132 for (i=Istart;i<Iend;i++) {
56 120 col[0]=i; col[1]=i+1;
57
5/8
✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
120 if (i<n-1) PetscCall(MatSetValues(A,1,&i,2,col,value,INSERT_VALUES));
58
0/8
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
120 else if (i==n-1) PetscCall(MatSetValue(A,i,col[0],value[0],INSERT_VALUES));
59 }
60
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY));
61
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY));
62
63 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
64 Compute singular values
65 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
66
67
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(SVDCreate(PETSC_COMM_WORLD,&svd));
68
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(SVDSetOperators(svd,A,NULL));
69
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(SVDSetType(svd,SVDPRIMME));
70
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(SVDPRIMMESetBlockSize(svd,4));
71
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(SVDPRIMMESetMethod(svd,SVD_PRIMME_HYBRID));
72
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(SVDSetFromOptions(svd));
73
74
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(SVDSolve(svd));
75
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(SVDPRIMMEGetBlockSize(svd,&bs));
76
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(SVDPRIMMEGetMethod(svd,&meth));
77
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(PetscPrintf(PETSC_COMM_WORLD," PRIMME: using block size %" PetscInt_FMT ", method %s\n",bs,SVDPRIMMEMethods[meth]));
78
79 /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
80 Display solution and clean up
81 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
82
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(SVDErrorView(svd,SVD_ERROR_RELATIVE,PETSC_VIEWER_STDOUT_WORLD));
83
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(SVDDestroy(&svd));
84
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
12 PetscCall(MatDestroy(&A));
85
2/6
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
12 PetscCall(SlepcFinalize());
86 return 0;
87 }
88
89 /*TEST
90
91 build:
92 requires: primme
93
94 test:
95 suffix: 1
96 nsize: 2
97 args: -svd_nsv 4
98 requires: primme
99 filter: sed -e "s/2.99255/2.99254/" | sed -e "s/2.97024/2.97023/"
100
101 TEST*/
102