GCC Code Coverage Report


Directory: ./
File: src/sys/classes/bv/impls/vecs/vecs.c
Date: 2026-02-22 03:58:10
Exec Total Coverage
Lines: 366 374 97.9%
Functions: 30 30 100.0%
Branches: 769 1274 60.4%

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 BV implemented as an array of independent Vecs
12 */
13
14 #include <slepc/private/bvimpl.h>
15
16 typedef struct {
17 Vec *V;
18 PetscInt vmip; /* Version of BVMultInPlace:
19 0: memory-efficient version, uses VecGetArray (default in CPU)
20 1: version that allocates (e-s) work vectors in every call (default in GPU) */
21 } BV_VECS;
22
23 807 static PetscErrorCode BVMult_Vecs(BV Y,PetscScalar alpha,PetscScalar beta,BV X,Mat Q)
24 {
25 807 BV_VECS *y = (BV_VECS*)Y->data,*x = (BV_VECS*)X->data;
26 807 PetscScalar *s=NULL;
27 807 const PetscScalar *q;
28 807 PetscInt i,j,ldq;
29 807 PetscBool trivial=(alpha==1.0)?PETSC_TRUE:PETSC_FALSE;
30
31
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
807 PetscFunctionBegin;
32
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
807 if (Q) {
33
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.
647 PetscCall(MatDenseGetLDA(Q,&ldq));
34
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
647 if (!trivial) {
35
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.
647 PetscCall(BVAllocateWork_Private(Y,X->k-X->l));
36 647 s = Y->work;
37 }
38
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.
647 PetscCall(MatDenseGetArrayRead(Q,&q));
39
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
4300 for (j=Y->l;j<Y->k;j++) {
40
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.
3653 PetscCall(VecScale(y->V[Y->nc+j],beta));
41
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
3653 if (!trivial) {
42
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
21886 for (i=X->l;i<X->k;i++) s[i-X->l] = alpha*q[i+j*ldq];
43 } else s = (PetscScalar*)(q+j*ldq+X->l);
44
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.
3653 PetscCall(VecMAXPY(y->V[Y->nc+j],X->k-X->l,s,x->V+X->nc+X->l));
45 }
46
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.
647 PetscCall(MatDenseRestoreArrayRead(Q,&q));
47 } else {
48
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
800 for (j=0;j<Y->k-Y->l;j++) {
49
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.
640 PetscCall(VecScale(y->V[Y->nc+Y->l+j],beta));
50
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.
640 PetscCall(VecAXPY(y->V[Y->nc+Y->l+j],alpha,x->V[X->nc+X->l+j]));
51 }
52 }
53
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.
198 PetscFunctionReturn(PETSC_SUCCESS);
54 }
55
56 7756 static PetscErrorCode BVMultVec_Vecs(BV X,PetscScalar alpha,PetscScalar beta,Vec y,PetscScalar *q)
57 {
58 7756 BV_VECS *x = (BV_VECS*)X->data;
59 7756 PetscScalar *s=NULL,*qq=q;
60 7756 PetscInt i;
61 7756 PetscBool trivial=(alpha==1.0)?PETSC_TRUE:PETSC_FALSE;
62
63
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
7756 PetscFunctionBegin;
64
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
7756 if (!trivial) {
65
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.
7756 PetscCall(BVAllocateWork_Private(X,X->k-X->l));
66 7756 s = X->work;
67 }
68
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
7756 if (!q) PetscCall(VecGetArray(X->buffer,&qq));
69
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.
7756 PetscCall(VecScale(y,beta));
70
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
7756 if (!trivial) {
71
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
58635 for (i=0;i<X->k-X->l;i++) s[i] = alpha*qq[i];
72 } else s = qq;
73
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.
7756 PetscCall(VecMAXPY(y,X->k-X->l,s,x->V+X->nc+X->l));
74
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
7756 if (!q) PetscCall(VecRestoreArray(X->buffer,&qq));
75
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.
1940 PetscFunctionReturn(PETSC_SUCCESS);
76 }
77
78 /*
79 BVMultInPlace_Vecs_ME - V(:,s:e-1) = V*Q(:,s:e-1) for regular vectors.
80
81 Memory-efficient version, uses VecGetArray (default in CPU)
82
83 Writing V = [ V1 V2 V3 ] and Q(:,s:e-1) = [ Q1 Q2 Q3 ]', where V2
84 corresponds to the columns s:e-1, the computation is done as
85 V2 := V2*Q2 + V1*Q1 + V3*Q3
86 */
87 933 static PetscErrorCode BVMultInPlace_Vecs_ME(BV V,Mat Q,PetscInt s,PetscInt e)
88 {
89 933 BV_VECS *ctx = (BV_VECS*)V->data;
90 933 const PetscScalar *q;
91 933 PetscInt i,ldq;
92
93
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
933 PetscFunctionBegin;
94
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.
933 PetscCall(MatDenseGetLDA(Q,&ldq));
95
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.
933 PetscCall(MatDenseGetArrayRead(Q,&q));
96 /* V2 := V2*Q2 */
97
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.
933 PetscCall(BVMultInPlace_Vecs_Private(V,V->n,e-s,ldq,ctx->V+V->nc+s,q+s*ldq+s,PETSC_FALSE));
98 /* V2 += V1*Q1 + V3*Q3 */
99
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
4533 for (i=s;i<e;i++) {
100
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
3600 if (PetscUnlikely(s>V->l)) PetscCall(VecMAXPY(ctx->V[V->nc+i],s-V->l,q+i*ldq+V->l,ctx->V+V->nc+V->l));
101
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
3600 if (V->k>e) PetscCall(VecMAXPY(ctx->V[V->nc+i],V->k-e,q+i*ldq+e,ctx->V+V->nc+e));
102 }
103
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.
933 PetscCall(MatDenseRestoreArrayRead(Q,&q));
104
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.
231 PetscFunctionReturn(PETSC_SUCCESS);
105 }
106
107 /*
108 BVMultInPlace_Vecs_Alloc - V(:,s:e-1) = V*Q(:,s:e-1) for regular vectors.
109
110 Version that allocates (e-s) work vectors in every call (default in GPU)
111 */
112 12 static PetscErrorCode BVMultInPlace_Vecs_Alloc(BV V,Mat Q,PetscInt s,PetscInt e)
113 {
114 12 BV_VECS *ctx = (BV_VECS*)V->data;
115 12 const PetscScalar *q;
116 12 PetscInt i,ldq;
117 12 Vec *W,z;
118
119
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
12 PetscFunctionBegin;
120
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.
12 PetscCall(MatDenseGetLDA(Q,&ldq));
121
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.
12 PetscCall(MatDenseGetArrayRead(Q,&q));
122
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.
12 PetscCall(BVCreateVec(V,&z));
123
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.
12 PetscCall(VecDuplicateVecs(z,e-s,&W));
124
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.
12 PetscCall(VecDestroy(&z));
125
7/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
64 for (i=s;i<e;i++) PetscCall(VecMAXPY(W[i-s],V->k-V->l,q+i*ldq+V->l,ctx->V+V->nc+V->l));
126
7/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
64 for (i=s;i<e;i++) PetscCall(VecCopy(W[i-s],ctx->V[V->nc+i]));
127
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.
12 PetscCall(VecDestroyVecs(e-s,&W));
128
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.
12 PetscCall(MatDenseRestoreArrayRead(Q,&q));
129
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.
2 PetscFunctionReturn(PETSC_SUCCESS);
130 }
131
132 /*
133 BVMultInPlaceHermitianTranspose_Vecs - V(:,s:e-1) = V*Q'(:,s:e-1) for regular vectors.
134 */
135 8 static PetscErrorCode BVMultInPlaceHermitianTranspose_Vecs(BV V,Mat Q,PetscInt s,PetscInt e)
136 {
137 8 BV_VECS *ctx = (BV_VECS*)V->data;
138 8 const PetscScalar *q;
139 8 PetscInt i,j,ldq,n;
140
141
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8 PetscFunctionBegin;
142
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.
8 PetscCall(MatGetSize(Q,NULL,&n));
143
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.
8 PetscCall(MatDenseGetLDA(Q,&ldq));
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.
8 PetscCall(MatDenseGetArrayRead(Q,&q));
145 /* V2 := V2*Q2' */
146
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.
8 PetscCall(BVMultInPlace_Vecs_Private(V,V->n,e-s,ldq,ctx->V+V->nc+s,q+s*ldq+s,PETSC_TRUE));
147 /* V2 += V1*Q1' + V3*Q3' */
148
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
40 for (i=s;i<e;i++) {
149
7/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
64 for (j=V->l;j<s;j++) PetscCall(VecAXPY(ctx->V[V->nc+i],q[i+j*ldq],ctx->V[V->nc+j]));
150
7/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
160 for (j=e;j<n;j++) PetscCall(VecAXPY(ctx->V[V->nc+i],q[i+j*ldq],ctx->V[V->nc+j]));
151 }
152
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.
8 PetscCall(MatDenseRestoreArrayRead(Q,&q));
153
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.
2 PetscFunctionReturn(PETSC_SUCCESS);
154 }
155
156 1247 static PetscErrorCode BVDot_Vecs(BV X,BV Y,Mat M)
157 {
158 1247 BV_VECS *x = (BV_VECS*)X->data,*y = (BV_VECS*)Y->data;
159 1247 PetscScalar *m;
160 1247 PetscInt j,ldm;
161
162
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1247 PetscFunctionBegin;
163
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.
1247 PetscCall(MatDenseGetLDA(M,&ldm));
164
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.
1247 PetscCall(MatDenseGetArray(M,&m));
165
7/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
8306 for (j=X->l;j<X->k;j++) PetscCall(VecMDot(x->V[X->nc+j],Y->k-Y->l,y->V+Y->nc+Y->l,m+j*ldm+Y->l));
166
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.
1247 PetscCall(MatDenseRestoreArray(M,&m));
167
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.
308 PetscFunctionReturn(PETSC_SUCCESS);
168 }
169
170 10884 static PetscErrorCode BVDotVec_Vecs(BV X,Vec y,PetscScalar *q)
171 {
172 10884 BV_VECS *x = (BV_VECS*)X->data;
173 10884 Vec z = y;
174 10884 PetscScalar *qq=q;
175
176
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10884 PetscFunctionBegin;
177
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
10884 if (PetscUnlikely(X->matrix)) {
178
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.
456 PetscCall(BV_IPMatMult(X,y));
179 456 z = X->Bx;
180 }
181
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
10884 if (!q) PetscCall(VecGetArray(X->buffer,&qq));
182
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.
10884 PetscCall(VecMDot(z,X->k-X->l,x->V+X->nc+X->l,qq));
183
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
10884 if (!q) PetscCall(VecRestoreArray(X->buffer,&qq));
184
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.
2722 PetscFunctionReturn(PETSC_SUCCESS);
185 }
186
187 32 static PetscErrorCode BVDotVec_Begin_Vecs(BV X,Vec y,PetscScalar *m)
188 {
189 32 BV_VECS *x = (BV_VECS*)X->data;
190 32 Vec z = y;
191
192
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
32 PetscFunctionBegin;
193
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
32 if (PetscUnlikely(X->matrix)) {
194 PetscCall(BV_IPMatMult(X,y));
195 z = X->Bx;
196 }
197
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.
32 PetscCall(VecMDotBegin(z,X->k-X->l,x->V+X->nc+X->l,m));
198
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.
8 PetscFunctionReturn(PETSC_SUCCESS);
199 }
200
201 32 static PetscErrorCode BVDotVec_End_Vecs(BV X,Vec y,PetscScalar *m)
202 {
203 32 BV_VECS *x = (BV_VECS*)X->data;
204
205
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
32 PetscFunctionBegin;
206
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.
32 PetscCall(VecMDotEnd(y,X->k-X->l,x->V+X->nc+X->l,m));
207
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.
8 PetscFunctionReturn(PETSC_SUCCESS);
208 }
209
210 5051 static PetscErrorCode BVScale_Vecs(BV bv,PetscInt j,PetscScalar alpha)
211 {
212 5051 PetscInt i;
213 5051 BV_VECS *ctx = (BV_VECS*)bv->data;
214
215
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
5051 PetscFunctionBegin;
216
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
5051 if (PetscUnlikely(j<0)) {
217
7/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
426 for (i=bv->l;i<bv->k;i++) PetscCall(VecScale(ctx->V[bv->nc+i],alpha));
218
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.
4996 } else PetscCall(VecScale(ctx->V[bv->nc+j],alpha));
219
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.
1257 PetscFunctionReturn(PETSC_SUCCESS);
220 }
221
222 924 static PetscErrorCode BVNorm_Vecs(BV bv,PetscInt j,NormType type,PetscReal *val)
223 {
224 924 PetscInt i;
225 924 PetscReal nrm;
226 924 BV_VECS *ctx = (BV_VECS*)bv->data;
227
228
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
924 PetscFunctionBegin;
229
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
924 if (PetscUnlikely(j<0)) {
230
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
567 PetscCheck(type==NORM_FROBENIUS,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Requested norm not implemented in BVVECS");
231 567 *val = 0.0;
232
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
3546 for (i=bv->l;i<bv->k;i++) {
233
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.
2979 PetscCall(VecNorm(ctx->V[bv->nc+i],NORM_2,&nrm));
234 2979 *val += nrm*nrm;
235 }
236 567 *val = PetscSqrtReal(*val);
237
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.
357 } else PetscCall(VecNorm(ctx->V[bv->nc+j],type,val));
238
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.
224 PetscFunctionReturn(PETSC_SUCCESS);
239 }
240
241 16 static PetscErrorCode BVNorm_Begin_Vecs(BV bv,PetscInt j,NormType type,PetscReal *val)
242 {
243 16 BV_VECS *ctx = (BV_VECS*)bv->data;
244
245
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16 PetscFunctionBegin;
246
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
16 PetscCheck(j>=0,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Requested norm not implemented in BVVECS");
247
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.
16 PetscCall(VecNormBegin(ctx->V[bv->nc+j],type,val));
248
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.
4 PetscFunctionReturn(PETSC_SUCCESS);
249 }
250
251 16 static PetscErrorCode BVNorm_End_Vecs(BV bv,PetscInt j,NormType type,PetscReal *val)
252 {
253 16 BV_VECS *ctx = (BV_VECS*)bv->data;
254
255
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16 PetscFunctionBegin;
256
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
16 PetscCheck(j>=0,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Requested norm not implemented in BVVECS");
257
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.
16 PetscCall(VecNormEnd(ctx->V[bv->nc+j],type,val));
258
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.
4 PetscFunctionReturn(PETSC_SUCCESS);
259 }
260
261 36 static PetscErrorCode BVNormalize_Vecs(BV bv,PetscScalar *eigi)
262 {
263 36 BV_VECS *ctx = (BV_VECS*)bv->data;
264 36 PetscInt i;
265
266
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
36 PetscFunctionBegin;
267
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
336 for (i=bv->l;i<bv->k;i++) {
268 #if !defined(PETSC_USE_COMPLEX)
269
4/4
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 4 times.
192 if (eigi && eigi[i] != 0.0) {
270
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
24 PetscCall(VecNormalizeComplex(ctx->V[bv->nc+i],ctx->V[bv->nc+i+1],PETSC_TRUE,NULL));
271 24 i++;
272 } else
273 #endif
274 {
275
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.
300 PetscCall(VecNormalize(ctx->V[bv->nc+i],NULL));
276 }
277 }
278
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.
9 PetscFunctionReturn(PETSC_SUCCESS);
279 }
280
281 752 static PetscErrorCode BVMatMult_Vecs(BV V,Mat A,BV W)
282 {
283 752 BV_VECS *v = (BV_VECS*)V->data,*w = (BV_VECS*)W->data;
284 752 PetscInt j;
285 752 Mat Vmat,Wmat;
286
287
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
752 PetscFunctionBegin;
288
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
752 if (V->vmm) {
289
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.
40 PetscCall(BVGetMat(V,&Vmat));
290
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.
40 PetscCall(BVGetMat(W,&Wmat));
291
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.
40 PetscCall(MatProductCreateWithMat(A,Vmat,NULL,Wmat));
292
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.
40 PetscCall(MatProductSetType(Wmat,MATPRODUCT_AB));
293
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.
40 PetscCall(MatProductSetFromOptions(Wmat));
294
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.
40 PetscCall(MatProductSymbolic(Wmat));
295
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.
40 PetscCall(MatProductNumeric(Wmat));
296
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.
40 PetscCall(MatProductClear(Wmat));
297
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.
40 PetscCall(BVRestoreMat(V,&Vmat));
298
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.
40 PetscCall(BVRestoreMat(W,&Wmat));
299 } else {
300
7/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
4104 for (j=0;j<V->k-V->l;j++) PetscCall(MatMult(A,v->V[V->nc+V->l+j],w->V[W->nc+W->l+j]));
301 }
302
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.
188 PetscFunctionReturn(PETSC_SUCCESS);
303 }
304
305 776 static PetscErrorCode BVCopy_Vecs(BV V,BV W)
306 {
307 776 BV_VECS *v = (BV_VECS*)V->data,*w = (BV_VECS*)W->data;
308 776 PetscInt j;
309
310
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
776 PetscFunctionBegin;
311
7/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
5808 for (j=0;j<V->k-V->l;j++) PetscCall(VecCopy(v->V[V->nc+V->l+j],w->V[W->nc+W->l+j]));
312
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.
194 PetscFunctionReturn(PETSC_SUCCESS);
313 }
314
315 558 static PetscErrorCode BVCopyColumn_Vecs(BV V,PetscInt j,PetscInt i)
316 {
317 558 BV_VECS *v = (BV_VECS*)V->data;
318
319
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
558 PetscFunctionBegin;
320
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.
558 PetscCall(VecCopy(v->V[V->nc+j],v->V[V->nc+i]));
321
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.
141 PetscFunctionReturn(PETSC_SUCCESS);
322 }
323
324 72 static PetscErrorCode BVResize_Vecs(BV bv,PetscInt m,PetscBool copy)
325 {
326 72 BV_VECS *ctx = (BV_VECS*)bv->data;
327 72 Vec *newV,z;
328 72 PetscInt j;
329 72 char str[50];
330
331
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
72 PetscFunctionBegin;
332
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.
72 PetscCall(BVCreateVec(bv,&z));
333
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.
72 PetscCall(VecDuplicateVecs(z,m,&newV));
334
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.
72 PetscCall(VecDestroy(&z));
335
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
72 if (((PetscObject)bv)->name) {
336
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
888 for (j=0;j<m;j++) {
337
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.
816 PetscCall(PetscSNPrintf(str,sizeof(str),"%s_%" PetscInt_FMT,((PetscObject)bv)->name,j));
338
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.
816 PetscCall(PetscObjectSetName((PetscObject)newV[j],str));
339 }
340 }
341
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
72 if (copy) {
342
7/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
360 for (j=0;j<PetscMin(m,bv->m);j++) PetscCall(VecCopy(ctx->V[j],newV[j]));
343 }
344
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.
72 PetscCall(VecDestroyVecs(bv->m,&ctx->V));
345 72 ctx->V = newV;
346
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.
72 PetscFunctionReturn(PETSC_SUCCESS);
347 }
348
349 37020 static PetscErrorCode BVGetColumn_Vecs(BV bv,PetscInt j,Vec *v)
350 {
351 37020 BV_VECS *ctx = (BV_VECS*)bv->data;
352 37020 PetscInt l;
353
354
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
37020 PetscFunctionBegin;
355
3/4
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
37020 l = BVAvailableVec;
356 37020 bv->cv[l] = ctx->V[bv->nc+j];
357
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.
37020 PetscFunctionReturn(PETSC_SUCCESS);
358 }
359
360 37020 static PetscErrorCode BVRestoreColumn_Vecs(BV bv,PetscInt j,Vec *v)
361 {
362 37020 PetscInt l;
363
364
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
37020 PetscFunctionBegin;
365 37020 l = (j==bv->ci[0])? 0: 1;
366 37020 bv->cv[l] = NULL;
367
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.
37020 PetscFunctionReturn(PETSC_SUCCESS);
368 }
369
370 472 static PetscErrorCode BVGetArray_Vecs(BV bv,PetscScalar **a)
371 {
372 472 BV_VECS *ctx = (BV_VECS*)bv->data;
373 472 PetscInt j;
374 472 const PetscScalar *p;
375
376
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
472 PetscFunctionBegin;
377
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.
472 PetscCall(PetscMalloc1((bv->nc+bv->m)*bv->n,a));
378
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
4384 for (j=0;j<bv->nc+bv->m;j++) {
379
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.
3912 PetscCall(VecGetArrayRead(ctx->V[j],&p));
380
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.
3912 PetscCall(PetscArraycpy(*a+j*bv->n,p,bv->n));
381
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.
3912 PetscCall(VecRestoreArrayRead(ctx->V[j],&p));
382 }
383
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.
118 PetscFunctionReturn(PETSC_SUCCESS);
384 }
385
386 472 static PetscErrorCode BVRestoreArray_Vecs(BV bv,PetscScalar **a)
387 {
388 472 BV_VECS *ctx = (BV_VECS*)bv->data;
389 472 PetscInt j;
390 472 PetscScalar *p;
391
392
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
472 PetscFunctionBegin;
393
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
4384 for (j=0;j<bv->nc+bv->m;j++) {
394
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.
3912 PetscCall(VecGetArray(ctx->V[j],&p));
395
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.
3912 PetscCall(PetscArraycpy(p,*a+j*bv->n,bv->n));
396
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.
3912 PetscCall(VecRestoreArray(ctx->V[j],&p));
397 }
398
5/8
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
472 PetscCall(PetscFree(*a));
399
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.
118 PetscFunctionReturn(PETSC_SUCCESS);
400 }
401
402 64 static PetscErrorCode BVGetArrayRead_Vecs(BV bv,const PetscScalar **a)
403 {
404 64 BV_VECS *ctx = (BV_VECS*)bv->data;
405 64 PetscInt j;
406 64 const PetscScalar *p;
407
408
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
64 PetscFunctionBegin;
409
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.
64 PetscCall(PetscMalloc1((bv->nc+bv->m)*bv->n,(PetscScalar**)a));
410
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
432 for (j=0;j<bv->nc+bv->m;j++) {
411
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.
368 PetscCall(VecGetArrayRead(ctx->V[j],&p));
412
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.
368 PetscCall(PetscArraycpy((PetscScalar*)*a+j*bv->n,p,bv->n));
413
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.
368 PetscCall(VecRestoreArrayRead(ctx->V[j],&p));
414 }
415
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.
16 PetscFunctionReturn(PETSC_SUCCESS);
416 }
417
418 64 static PetscErrorCode BVRestoreArrayRead_Vecs(BV bv,const PetscScalar **a)
419 {
420
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
64 PetscFunctionBegin;
421
5/8
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
64 PetscCall(PetscFree(*a));
422
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.
16 PetscFunctionReturn(PETSC_SUCCESS);
423 }
424
425 /*
426 Sets the value of vmip flag and resets ops->multinplace accordingly
427 */
428 5188 static inline PetscErrorCode BVVecsSetVmip(BV bv,PetscInt vmip)
429 {
430 5188 typedef PetscErrorCode (*fmultinplace)(BV,Mat,PetscInt,PetscInt);
431 5188 fmultinplace multinplace[2] = {BVMultInPlace_Vecs_ME, BVMultInPlace_Vecs_Alloc};
432 5188 BV_VECS *ctx = (BV_VECS*)bv->data;
433
434
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
5188 PetscFunctionBegin;
435 5188 ctx->vmip = vmip;
436 5188 bv->ops->multinplace = multinplace[vmip];
437
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.
5188 PetscFunctionReturn(PETSC_SUCCESS);
438 }
439
440 938 static PetscErrorCode BVSetFromOptions_Vecs(BV bv,PetscOptionItems PetscOptionsObject)
441 {
442 938 BV_VECS *ctx = (BV_VECS*)bv->data;
443
444
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
938 PetscFunctionBegin;
445
1/12
✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
938 PetscOptionsHeadBegin(PetscOptionsObject,"BV Vecs Options");
446
447
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.
938 PetscCall(PetscOptionsRangeInt("-bv_vecs_vmip","Version of BVMultInPlace operation","",ctx->vmip,&ctx->vmip,NULL,0,1));
448
3/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 taken 2 times.
938 PetscCall(BVVecsSetVmip(bv,ctx->vmip));
449
450
1/14
✗ Branch 0 not taken.
✓ Branch 1 taken 2 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
938 PetscOptionsHeadEnd();
451
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.
226 PetscFunctionReturn(PETSC_SUCCESS);
452 }
453
454 96 PetscErrorCode BVView_Vecs(BV bv,PetscViewer viewer)
455 {
456 96 BV_VECS *ctx = (BV_VECS*)bv->data;
457 96 PetscInt j;
458 96 PetscViewerFormat format;
459 96 PetscBool isascii,ismatlab=PETSC_FALSE;
460 96 const char *bvname,*name;
461
462
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
96 PetscFunctionBegin;
463
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.
96 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii));
464
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
96 if (isascii) {
465
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.
96 PetscCall(PetscViewerGetFormat(viewer,&format));
466
8/14
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ 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.
96 if (format == PETSC_VIEWER_ASCII_INFO || format == PETSC_VIEWER_ASCII_INFO_DETAIL) PetscFunctionReturn(PETSC_SUCCESS);
467
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
80 if (format == PETSC_VIEWER_ASCII_MATLAB) ismatlab = PETSC_TRUE;
468 }
469 if (ismatlab) {
470 PetscCall(PetscObjectGetName((PetscObject)bv,&bvname));
471 PetscCall(PetscViewerASCIIPrintf(viewer,"%s=[];\n",bvname));
472 }
473
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
384 for (j=bv->nc;j<bv->nc+bv->m;j++) {
474
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.
304 PetscCall(VecView(ctx->V[j],viewer));
475
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
304 if (ismatlab) {
476 PetscCall(PetscObjectGetName((PetscObject)ctx->V[j],&name));
477
0/6
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
304 PetscCall(PetscViewerASCIIPrintf(viewer,"%s=[%s,%s];clear %s\n",bvname,bvname,name,name));
478 }
479 }
480
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.
20 PetscFunctionReturn(PETSC_SUCCESS);
481 }
482
483 2594 static PetscErrorCode BVDestroy_Vecs(BV bv)
484 {
485 2594 BV_VECS *ctx = (BV_VECS*)bv->data;
486
487
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2594 PetscFunctionBegin;
488
6/8
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
2594 if (!bv->issplit) PetscCall(VecDestroyVecs(bv->nc+bv->m,&ctx->V));
489
5/8
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
2594 PetscCall(PetscFree(bv->data));
490
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.
640 PetscFunctionReturn(PETSC_SUCCESS);
491 }
492
493 1656 static PetscErrorCode BVDuplicate_Vecs(BV V,BV W)
494 {
495 1656 BV_VECS *ctx = (BV_VECS*)V->data;
496
497
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1656 PetscFunctionBegin;
498
3/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 taken 2 times.
1656 PetscCall(BVVecsSetVmip(W,ctx->vmip));
499
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.
1656 PetscFunctionReturn(PETSC_SUCCESS);
500 }
501
502 /*MC
503 BVVECS - BVVECS = "vecs" - A basis vectors object represented by an array of
504 independent `Vec`s.
505
506 Level: beginner
507
508 .seealso: [](sec:bv), `BV`, `BVType`, `BVSetType()`
509 M*/
510
511 2594 SLEPC_EXTERN PetscErrorCode BVCreate_Vecs(BV bv)
512 {
513 2594 BV_VECS *ctx;
514 2594 PetscInt j,lsplit;
515 2594 PetscBool isgpu;
516 2594 char str[50];
517 2594 BV parent;
518 2594 Vec *Vpar,z;
519
520
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2594 PetscFunctionBegin;
521
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.
2594 PetscCall(PetscNew(&ctx));
522 2594 bv->data = (void*)ctx;
523
524
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
2594 if (PetscUnlikely(bv->issplit)) {
525
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
640 PetscCheck(bv->issplit>0,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"BVVECS does not support BVGetSplitRows()");
526 /* split BV: share the Vecs of the parent BV */
527 640 parent = bv->splitparent;
528 640 lsplit = parent->lsplit;
529 640 Vpar = ((BV_VECS*)parent->data)->V;
530
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
640 ctx->V = (bv->issplit==1)? Vpar: Vpar+lsplit;
531 } else {
532 /* regular BV: create array of Vecs to store the BV columns */
533
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.
1954 PetscCall(BVCreateVec(bv,&z));
534
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.
1954 PetscCall(VecDuplicateVecs(z,bv->m,&ctx->V));
535
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.
1954 PetscCall(VecDestroy(&z));
536
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
1954 if (((PetscObject)bv)->name) {
537
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
7836 for (j=0;j<bv->m;j++) {
538
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.
6952 PetscCall(PetscSNPrintf(str,sizeof(str),"%s_%" PetscInt_FMT,((PetscObject)bv)->name,j));
539
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.
6952 PetscCall(PetscObjectSetName((PetscObject)ctx->V[j],str));
540 }
541 }
542 }
543
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
2594 if (!bv->ld) bv->ld = bv->n;
544
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
2594 PetscCheck(bv->ld==bv->n,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"BVVECS does not support a user-defined leading dimension");
545
546
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
2594 if (PetscUnlikely(bv->Acreate)) {
547
7/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
144 for (j=0;j<bv->m;j++) PetscCall(MatGetColumnVector(bv->Acreate,ctx->V[j],j));
548
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.
16 PetscCall(MatDestroy(&bv->Acreate));
549 }
550
551 /* Default version of BVMultInPlace */
552
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.
2594 PetscCall(PetscStrcmpAny(bv->vtype,&isgpu,VECSEQCUDA,VECMPICUDA,VECSEQHIP,VECMPIHIP,""));
553 2594 ctx->vmip = isgpu? 1: 0;
554
555 /* Default BVMatMult method */
556 2594 bv->vmm = BV_MATMULT_VECS;
557
558 /* Deferred call to setfromoptions */
559
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
2594 if (bv->defersfo) {
560
8/10
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 8 times.
✓ Branch 5 taken 6 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 2 times.
24 PetscObjectOptionsBegin((PetscObject)bv);
561
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.
8 PetscCall(BVSetFromOptions_Vecs(bv,PetscOptionsObject));
562
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.
8 PetscOptionsEnd();
563 }
564
3/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 taken 2 times.
2594 PetscCall(BVVecsSetVmip(bv,ctx->vmip));
565
566 2594 bv->ops->mult = BVMult_Vecs;
567 2594 bv->ops->multvec = BVMultVec_Vecs;
568 2594 bv->ops->multinplacetrans = BVMultInPlaceHermitianTranspose_Vecs;
569 2594 bv->ops->dot = BVDot_Vecs;
570 2594 bv->ops->dotvec = BVDotVec_Vecs;
571 2594 bv->ops->dotvec_begin = BVDotVec_Begin_Vecs;
572 2594 bv->ops->dotvec_end = BVDotVec_End_Vecs;
573 2594 bv->ops->scale = BVScale_Vecs;
574 2594 bv->ops->norm = BVNorm_Vecs;
575 2594 bv->ops->norm_begin = BVNorm_Begin_Vecs;
576 2594 bv->ops->norm_end = BVNorm_End_Vecs;
577 2594 bv->ops->normalize = BVNormalize_Vecs;
578 2594 bv->ops->matmult = BVMatMult_Vecs;
579 2594 bv->ops->copy = BVCopy_Vecs;
580 2594 bv->ops->copycolumn = BVCopyColumn_Vecs;
581 2594 bv->ops->resize = BVResize_Vecs;
582 2594 bv->ops->getcolumn = BVGetColumn_Vecs;
583 2594 bv->ops->restorecolumn = BVRestoreColumn_Vecs;
584 2594 bv->ops->getarray = BVGetArray_Vecs;
585 2594 bv->ops->restorearray = BVRestoreArray_Vecs;
586 2594 bv->ops->getarrayread = BVGetArrayRead_Vecs;
587 2594 bv->ops->restorearrayread = BVRestoreArrayRead_Vecs;
588 2594 bv->ops->getmat = BVGetMat_Default;
589 2594 bv->ops->restoremat = BVRestoreMat_Default;
590 2594 bv->ops->destroy = BVDestroy_Vecs;
591 2594 bv->ops->duplicate = BVDuplicate_Vecs;
592 2594 bv->ops->setfromoptions = BVSetFromOptions_Vecs;
593 2594 bv->ops->view = BVView_Vecs;
594
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.
2594 PetscFunctionReturn(PETSC_SUCCESS);
595 }
596