GCC Code Coverage Report


Directory: ./
File: src/sys/vec/veccomp0.h
Date: 2026-02-22 03:58:10
Exec Total Coverage
Lines: 169 194 87.1%
Functions: 5 10 50.0%
Branches: 360 771 46.7%

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 #include <petsc/private/vecimpl.h>
12
13 #if defined(__WITH_MPI__)
14 #define __SUF__(A) A##_MPI
15 #else
16 #define __SUF__(A) A##_Seq
17 #endif
18 #define __QUOTEME_(x) #x
19 #define __QUOTEME(x) __QUOTEME_(x)
20 #define __SUF_C__(A) __QUOTEME(__SUF__(A))
21
22 877108 static PetscErrorCode __SUF__(VecDot_Comp)(Vec a,Vec b,PetscScalar *z)
23 {
24 877108 PetscScalar sum = 0.0,work;
25 877108 PetscInt i;
26 877108 Vec_Comp *as = (Vec_Comp*)a->data,*bs = (Vec_Comp*)b->data;
27
28
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
877108 PetscFunctionBegin;
29
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
877108 SlepcValidVecComp(a,1);
30
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
877108 SlepcValidVecComp(b,2);
31
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
877108 if (as->x[0]->ops->dot_local) {
32
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
1756408 for (i=0;i<as->n->n;i++) {
33
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
879300 PetscUseTypeMethod(as->x[i],dot_local,bs->x[i],&work);
34 879300 sum += work;
35 }
36 #if defined(__WITH_MPI__)
37 877108 work = sum;
38
28/58
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
877108 PetscCallMPI(MPIU_Allreduce(&work,&sum,1,MPIU_SCALAR,MPIU_SUM,PetscObjectComm((PetscObject)a)));
39 #endif
40 } else {
41 for (i=0;i<as->n->n;i++) {
42 PetscCall(VecDot(as->x[i],bs->x[i],&work));
43 sum += work;
44 }
45 }
46 877108 *z = sum;
47
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
877108 PetscFunctionReturn(PETSC_SUCCESS);
48 }
49
50 649702 static PetscErrorCode __SUF__(VecMDot_Comp)(Vec a,PetscInt n,const Vec b[],PetscScalar *z)
51 {
52 649702 PetscScalar *work,*work0,*r;
53 649702 Vec_Comp *as = (Vec_Comp*)a->data;
54 649702 Vec *bx;
55 649702 PetscInt i,j;
56
57
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
649702 PetscFunctionBegin;
58
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
649702 SlepcValidVecComp(a,1);
59
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
1000498 SlepcValidVecsComp(b,n,3);
60
61
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
649702 if (as->n->n == 0) {
62 *z = 0;
63 PetscFunctionReturn(PETSC_SUCCESS);
64 }
65
66
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
649702 PetscCall(PetscMalloc2(n,&work0,n,&bx));
67
68 #if defined(__WITH_MPI__)
69
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
649702 if (as->x[0]->ops->mdot_local) {
70 649702 r = work0;
71 649702 work = z;
72 } else
73 #endif
74 {
75 r = z;
76 work = work0;
77 }
78
79 /* z[i] <- a.x' * b[i].x */
80
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
2243906 for (i=0;i<n;i++) r[i] = 0.0;
81
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
1300814 for (j=0;j<as->n->n;j++) {
82
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
2248136 for (i=0;i<n;i++) bx[i] = ((Vec_Comp*)b[i]->data)->x[j];
83
6/12
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 6 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
651112 if (as->x[0]->ops->mdot_local) PetscUseTypeMethod(as->x[j],mdot_local,n,bx,work);
84 else PetscCall(VecMDot(as->x[j],n,bx,work));
85
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
2248136 for (i=0;i<n;i++) r[i] += work[i];
86 }
87
88 /* If def(__WITH_MPI__) and exists mdot_local */
89 #if defined(__WITH_MPI__)
90
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
649702 if (as->x[0]->ops->mdot_local) {
91 /* z[i] <- Allreduce(work[i]) */
92
28/58
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
649702 PetscCallMPI(MPIU_Allreduce(r,z,n,MPIU_SCALAR,MPIU_SUM,PetscObjectComm((PetscObject)a)));
93 }
94 #endif
95
96
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
649702 PetscCall(PetscFree2(work0,bx));
97
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
137934 PetscFunctionReturn(PETSC_SUCCESS);
98 }
99
100 48 static PetscErrorCode __SUF__(VecTDot_Comp)(Vec a,Vec b,PetscScalar *z)
101 {
102 48 PetscScalar sum = 0.0,work;
103 48 PetscInt i;
104 48 Vec_Comp *as = (Vec_Comp*)a->data,*bs = (Vec_Comp*)b->data;
105
106
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
48 PetscFunctionBegin;
107
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
48 SlepcValidVecComp(a,1);
108
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
48 SlepcValidVecComp(b,2);
109
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
48 if (as->x[0]->ops->tdot_local) {
110
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
144 for (i=0;i<as->n->n;i++) {
111
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 6 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
96 PetscUseTypeMethod(as->x[i],tdot_local,bs->x[i],&work);
112 96 sum += work;
113 }
114 #if defined(__WITH_MPI__)
115 48 work = sum;
116
28/58
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
48 PetscCallMPI(MPIU_Allreduce(&work,&sum,1,MPIU_SCALAR,MPIU_SUM,PetscObjectComm((PetscObject)a)));
117 #endif
118 } else {
119 for (i=0;i<as->n->n;i++) {
120 PetscCall(VecTDot(as->x[i],bs->x[i],&work));
121 sum += work;
122 }
123 }
124 48 *z = sum;
125
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
48 PetscFunctionReturn(PETSC_SUCCESS);
126 }
127
128 48 static PetscErrorCode __SUF__(VecMTDot_Comp)(Vec a,PetscInt n,const Vec b[],PetscScalar *z)
129 {
130 48 PetscScalar *work,*work0,*r;
131 48 Vec_Comp *as = (Vec_Comp*)a->data;
132 48 Vec *bx;
133 48 PetscInt i,j;
134
135
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
48 PetscFunctionBegin;
136
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
48 SlepcValidVecComp(a,1);
137
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
72 SlepcValidVecsComp(b,n,3);
138
139
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
48 if (as->n->n == 0) {
140 *z = 0;
141 PetscFunctionReturn(PETSC_SUCCESS);
142 }
143
144
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
48 PetscCall(PetscMalloc2(n,&work0,n,&bx));
145
146 #if defined(__WITH_MPI__)
147
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
48 if (as->x[0]->ops->mtdot_local) {
148 48 r = work0;
149 48 work = z;
150 } else
151 #endif
152 {
153 r = z;
154 work = work0;
155 }
156
157 /* z[i] <- a.x' * b[i].x */
158
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
144 for (i=0;i<n;i++) r[i] = 0.0;
159
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
144 for (j=0;j<as->n->n;j++) {
160
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
288 for (i=0;i<n;i++) bx[i] = ((Vec_Comp*)b[i]->data)->x[j];
161
6/12
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 6 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
96 if (as->x[0]->ops->mtdot_local) PetscUseTypeMethod(as->x[j],mtdot_local,n,bx,work);
162 else PetscCall(VecMTDot(as->x[j],n,bx,work));
163
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
288 for (i=0;i<n;i++) r[i] += work[i];
164 }
165
166 /* If def(__WITH_MPI__) and exists mtdot_local */
167 #if defined(__WITH_MPI__)
168
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
48 if (as->x[0]->ops->mtdot_local) {
169 /* z[i] <- Allreduce(work[i]) */
170
28/58
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
48 PetscCallMPI(MPIU_Allreduce(r,z,n,MPIU_SCALAR,MPIU_SUM,PetscObjectComm((PetscObject)a)));
171 }
172 #endif
173
174
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
48 PetscCall(PetscFree2(work0,bx));
175
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
12 PetscFunctionReturn(PETSC_SUCCESS);
176 }
177
178 685304 static PetscErrorCode __SUF__(VecNorm_Comp)(Vec a,NormType t,PetscReal *norm)
179 {
180 685304 PetscReal work[3],s=0.0;
181 685304 Vec_Comp *as = (Vec_Comp*)a->data;
182 685304 PetscInt i;
183
184
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
685304 PetscFunctionBegin;
185
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
685304 SlepcValidVecComp(a,1);
186 /* Initialize norm */
187
3/4
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
685304 switch (t) {
188 192 case NORM_1:
189 case NORM_INFINITY:
190 192 *norm = 0.0;
191 192 break;
192 685064 case NORM_2:
193 case NORM_FROBENIUS:
194 685064 *norm = 1.0;
195 685064 s = 0.0;
196 685064 break;
197 48 case NORM_1_AND_2:
198 48 norm[0] = 0.0;
199 48 norm[1] = 1.0;
200 48 s = 0.0;
201 48 break;
202 }
203
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
1372730 for (i=0;i<as->n->n;i++) {
204
6/12
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 6 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
687426 if (as->x[0]->ops->norm_local) PetscUseTypeMethod(as->x[i],norm_local,t,work);
205 else PetscCall(VecNorm(as->x[i],t,work));
206 /* norm+= work */
207
4/5
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
687426 switch (t) {
208 96 case NORM_1:
209 96 *norm += *work;
210 96 break;
211 686946 case NORM_2:
212 case NORM_FROBENIUS:
213 686946 AddNorm2(norm,&s,*work);
214 686946 break;
215 96 case NORM_1_AND_2:
216 96 norm[0] += work[0];
217 96 AddNorm2(&norm[1],&s,work[1]);
218 96 break;
219 288 case NORM_INFINITY:
220
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
288 *norm = PetscMax(*norm,*work);
221 288 break;
222 }
223 188946 }
224
225 /* If def(__WITH_MPI__) and exists norm_local */
226 #if defined(__WITH_MPI__)
227
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
685304 if (as->x[0]->ops->norm_local) {
228 685304 PetscReal work0[3];
229 /* norm <- Allreduce(work) */
230
4/5
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
685304 switch (t) {
231 48 case NORM_1:
232 48 work[0] = *norm;
233
28/58
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
48 PetscCallMPI(MPIU_Allreduce(work,norm,1,MPIU_REAL,MPIU_SUM,PetscObjectComm((PetscObject)a)));
234 break;
235 685064 case NORM_2:
236 case NORM_FROBENIUS:
237 685064 work[0] = *norm;
238 685064 work[1] = s;
239
28/58
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
685064 PetscCallMPI(MPIU_Allreduce(work,work0,1,MPIU_NORM2,MPIU_NORM2_SUM,PetscObjectComm((PetscObject)a)));
240 685064 *norm = GetNorm2(work0[0],work0[1]);
241 685064 break;
242 48 case NORM_1_AND_2:
243 48 work[0] = norm[0];
244 48 work[1] = norm[1];
245 48 work[2] = s;
246
28/58
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
48 PetscCallMPI(MPIU_Allreduce(work,work0,1,MPIU_NORM1_AND_2,MPIU_NORM2_SUM,PetscObjectComm((PetscObject)a)));
247 48 norm[0] = work0[0];
248 48 norm[1] = GetNorm2(work0[1],work0[2]);
249 48 break;
250 144 case NORM_INFINITY:
251 144 work[0] = *norm;
252
28/58
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
144 PetscCallMPI(MPIU_Allreduce(work,norm,1,MPIU_REAL,MPIU_MAX,PetscObjectComm((PetscObject)a)));
253 break;
254 }
255 188898 }
256 #else
257 /* Norm correction */
258 switch (t) {
259 case NORM_1:
260 case NORM_INFINITY:
261 break;
262 case NORM_2:
263 case NORM_FROBENIUS:
264 *norm = GetNorm2(*norm,s);
265 break;
266 case NORM_1_AND_2:
267 norm[1] = GetNorm2(norm[1],s);
268 break;
269 }
270 #endif
271
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
146818 PetscFunctionReturn(PETSC_SUCCESS);
272 }
273
274 6558 PetscErrorCode __SUF__(VecDotNorm2_Comp)(Vec v,Vec w,PetscScalar *dp,PetscScalar *nm)
275 {
276 6558 PetscScalar dp0=0.0,nm0=0.0,dp1=0.0,nm1=0.0;
277 6558 const PetscScalar *vx,*wx;
278 6558 Vec_Comp *vs = (Vec_Comp*)v->data,*ws = (Vec_Comp*)w->data;
279 6558 PetscInt i,n;
280 6558 PetscBool t0,t1;
281 #if defined(__WITH_MPI__)
282 3267 PetscScalar work[4];
283 #endif
284
285 6558 PetscFunctionBegin;
286 /* Compute recursively the local part */
287 6558 PetscCall(PetscObjectTypeCompare((PetscObject)v,VECCOMP,&t0));
288 6558 PetscCall(PetscObjectTypeCompare((PetscObject)w,VECCOMP,&t1));
289 6558 if (t0 && t1) {
290 723 SlepcValidVecComp(v,1);
291 723 SlepcValidVecComp(w,2);
292 6558 for (i=0;i<vs->n->n;i++) {
293 3291 PetscCall(VecDotNorm2_Comp_Seq(vs->x[i],ws->x[i],&dp1,&nm1));
294 3291 dp0 += dp1;
295 3291 nm0 += nm1;
296 }
297 3291 } else if (!t0 && !t1) {
298 3291 PetscCall(VecGetLocalSize(v,&n));
299 3291 PetscCall(VecGetArrayRead(v,&vx));
300 3291 PetscCall(VecGetArrayRead(w,&wx));
301 360149 for (i=0;i<n;i++) {
302 356858 dp0 += vx[i]*PetscConj(wx[i]);
303 356858 nm0 += wx[i]*PetscConj(wx[i]);
304 }
305 3291 PetscCall(VecRestoreArrayRead(v,&vx));
306 3291 PetscCall(VecRestoreArrayRead(w,&wx));
307 } else SETERRQ(PetscObjectComm((PetscObject)v),PETSC_ERR_ARG_INCOMP,"Incompatible vector types");
308
309 #if defined(__WITH_MPI__)
310 /* [dp, nm] <- Allreduce([dp0, nm0]) */
311 3267 work[0] = dp0;
312 3267 work[1] = nm0;
313 3267 PetscCallMPI(MPIU_Allreduce(work,&work[2],2,MPIU_SCALAR,MPIU_SUM,PetscObjectComm((PetscObject)v)));
314 3267 *dp = work[2];
315 3267 *nm = work[3];
316 #else
317 3291 *dp = dp0;
318 3291 *nm = nm0;
319 #endif
320 6558 PetscFunctionReturn(PETSC_SUCCESS);
321 }
322
323 #undef __SUF__
324 #undef __QUOTEME
325 #undef __SUF_C__
326