GCC Code Coverage Report


Directory: ./
File: src/sys/classes/bv/impls/svec/svec.c
Date: 2026-02-22 03:58:10
Exec Total Coverage
Lines: 383 390 98.2%
Functions: 24 24 100.0%
Branches: 856 1424 60.1%

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 a single Vec
12 */
13
14 #include <slepc/private/bvimpl.h>
15 #include "svec.h"
16
17 799 static PetscErrorCode BVMult_Svec(BV Y,PetscScalar alpha,PetscScalar beta,BV X,Mat Q)
18 {
19 799 BV_SVEC *y = (BV_SVEC*)Y->data,*x = (BV_SVEC*)X->data;
20 799 const PetscScalar *px,*q;
21 799 PetscScalar *py;
22 799 PetscInt ldq;
23
24
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
799 PetscFunctionBegin;
25
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.
799 PetscCall(VecGetArrayRead(x->v,&px));
26
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.
799 PetscCall(VecGetArray(y->v,&py));
27
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
799 if (Q) {
28
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.
639 PetscCall(MatDenseGetLDA(Q,&ldq));
29
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.
639 PetscCall(MatDenseGetArrayRead(Q,&q));
30
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.
639 PetscCall(BVMult_BLAS_Private(Y,Y->n,Y->k-Y->l,X->k-X->l,alpha,px+(X->nc+X->l)*X->ld,X->ld,q+Y->l*ldq+X->l,ldq,beta,py+(Y->nc+Y->l)*Y->ld,Y->ld));
31
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.
639 PetscCall(MatDenseRestoreArrayRead(Q,&q));
32
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.
160 } else PetscCall(BVAXPY_BLAS_Private(Y,Y->n,Y->k-Y->l,alpha,px+(X->nc+X->l)*X->ld,X->ld,beta,py+(Y->nc+Y->l)*Y->ld,Y->ld));
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.
799 PetscCall(VecRestoreArrayRead(x->v,&px));
34
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.
799 PetscCall(VecRestoreArray(y->v,&py));
35
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.
196 PetscFunctionReturn(PETSC_SUCCESS);
36 }
37
38 2900 static PetscErrorCode BVMultVec_Svec(BV X,PetscScalar alpha,PetscScalar beta,Vec y,PetscScalar *q)
39 {
40 2900 BV_SVEC *x = (BV_SVEC*)X->data;
41 2900 PetscScalar *px,*py,*qq=q;
42
43
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2900 PetscFunctionBegin;
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.
2900 PetscCall(VecGetArray(x->v,&px));
45
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.
2900 PetscCall(VecGetArray(y,&py));
46
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.
2900 if (!q) PetscCall(VecGetArray(X->buffer,&qq));
47
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.
2900 PetscCall(BVMultVec_BLAS_Private(X,X->n,X->k-X->l,alpha,px+(X->nc+X->l)*X->ld,X->ld,qq,beta,py));
48
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.
2900 if (!q) PetscCall(VecRestoreArray(X->buffer,&qq));
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.
2900 PetscCall(VecRestoreArray(x->v,&px));
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.
2900 PetscCall(VecRestoreArray(y,&py));
51
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.
713 PetscFunctionReturn(PETSC_SUCCESS);
52 }
53
54 383 static PetscErrorCode BVMultInPlace_Svec(BV V,Mat Q,PetscInt s,PetscInt e)
55 {
56 383 BV_SVEC *ctx = (BV_SVEC*)V->data;
57 383 PetscScalar *pv;
58 383 const PetscScalar *q;
59 383 PetscInt ldq;
60
61
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
383 PetscFunctionBegin;
62
3/16
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 2 times.
✗ 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.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
383 if (s>=e || !V->n) PetscFunctionReturn(PETSC_SUCCESS);
63
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.
383 PetscCall(MatDenseGetLDA(Q,&ldq));
64
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.
383 PetscCall(VecGetArray(ctx->v,&pv));
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.
383 PetscCall(MatDenseGetArrayRead(Q,&q));
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.
383 PetscCall(BVMultInPlace_BLAS_Private(V,V->n,V->k-V->l,s-V->l,e-V->l,pv+(V->nc+V->l)*V->ld,V->ld,q+V->l*ldq+V->l,ldq,PETSC_FALSE));
67
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.
383 PetscCall(MatDenseRestoreArrayRead(Q,&q));
68
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.
383 PetscCall(VecRestoreArray(ctx->v,&pv));
69
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.
92 PetscFunctionReturn(PETSC_SUCCESS);
70 }
71
72 8 static PetscErrorCode BVMultInPlaceHermitianTranspose_Svec(BV V,Mat Q,PetscInt s,PetscInt e)
73 {
74 8 BV_SVEC *ctx = (BV_SVEC*)V->data;
75 8 PetscScalar *pv;
76 8 const PetscScalar *q;
77 8 PetscInt ldq;
78
79
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
8 PetscFunctionBegin;
80
3/16
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 2 times.
✗ 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.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
8 if (s>=e || !V->n) PetscFunctionReturn(PETSC_SUCCESS);
81
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));
82
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(VecGetArray(ctx->v,&pv));
83
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));
84
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_BLAS_Private(V,V->n,V->k-V->l,s-V->l,e-V->l,pv+(V->nc+V->l)*V->ld,V->ld,q+V->l*ldq+V->l,ldq,PETSC_TRUE));
85
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));
86
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(VecRestoreArray(ctx->v,&pv));
87
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);
88 }
89
90 1947 static PetscErrorCode BVDot_Svec(BV X,BV Y,Mat M)
91 {
92 1947 BV_SVEC *x = (BV_SVEC*)X->data,*y = (BV_SVEC*)Y->data;
93 1947 const PetscScalar *px,*py;
94 1947 PetscScalar *m;
95 1947 PetscInt ldm;
96
97
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1947 PetscFunctionBegin;
98
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.
1947 PetscCall(MatDenseGetLDA(M,&ldm));
99
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.
1947 PetscCall(VecGetArrayRead(x->v,&px));
100
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.
1947 PetscCall(VecGetArrayRead(y->v,&py));
101
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.
1947 PetscCall(MatDenseGetArray(M,&m));
102
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.
1947 PetscCall(BVDot_BLAS_Private(X,Y->k-Y->l,X->k-X->l,X->n,py+(Y->nc+Y->l)*Y->ld,Y->ld,px+(X->nc+X->l)*X->ld,X->ld,m+X->l*ldm+Y->l,ldm,x->mpi));
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.
1947 PetscCall(MatDenseRestoreArray(M,&m));
104
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.
1947 PetscCall(VecRestoreArrayRead(x->v,&px));
105
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.
1947 PetscCall(VecRestoreArrayRead(y->v,&py));
106
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.
482 PetscFunctionReturn(PETSC_SUCCESS);
107 }
108
109 3356 static PetscErrorCode BVDotVec_Svec(BV X,Vec y,PetscScalar *q)
110 {
111 3356 BV_SVEC *x = (BV_SVEC*)X->data;
112 3356 const PetscScalar *px,*py;
113 3356 PetscScalar *qq=q;
114 3356 Vec z = y;
115
116
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
3356 PetscFunctionBegin;
117
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
3356 if (PetscUnlikely(X->matrix)) {
118
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.
496 PetscCall(BV_IPMatMult(X,y));
119 496 z = X->Bx;
120 }
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.
3356 PetscCall(VecGetArrayRead(x->v,&px));
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.
3356 PetscCall(VecGetArrayRead(z,&py));
123
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.
3356 if (!q) PetscCall(VecGetArray(X->buffer,&qq));
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.
3356 PetscCall(BVDotVec_BLAS_Private(X,X->n,X->k-X->l,px+(X->nc+X->l)*X->ld,X->ld,py,qq,x->mpi));
125
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.
3356 if (!q) PetscCall(VecRestoreArray(X->buffer,&qq));
126
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.
3356 PetscCall(VecRestoreArrayRead(z,&py));
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.
3356 PetscCall(VecRestoreArrayRead(x->v,&px));
128
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.
827 PetscFunctionReturn(PETSC_SUCCESS);
129 }
130
131 32 static PetscErrorCode BVDotVec_Local_Svec(BV X,Vec y,PetscScalar *m)
132 {
133 32 BV_SVEC *x = (BV_SVEC*)X->data;
134 32 PetscScalar *px,*py;
135 32 Vec z = y;
136
137
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
32 PetscFunctionBegin;
138
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
32 if (PetscUnlikely(X->matrix)) {
139 PetscCall(BV_IPMatMult(X,y));
140 z = X->Bx;
141 }
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.
32 PetscCall(VecGetArray(x->v,&px));
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.
32 PetscCall(VecGetArray(z,&py));
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.
32 PetscCall(BVDotVec_BLAS_Private(X,X->n,X->k-X->l,px+(X->nc+X->l)*X->ld,X->ld,py,m,PETSC_FALSE));
145
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(VecRestoreArray(z,&py));
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.
32 PetscCall(VecRestoreArray(x->v,&px));
147
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);
148 }
149
150 2641 static PetscErrorCode BVScale_Svec(BV bv,PetscInt j,PetscScalar alpha)
151 {
152 2641 BV_SVEC *ctx = (BV_SVEC*)bv->data;
153 2641 PetscScalar *array;
154
155
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2641 PetscFunctionBegin;
156
2/14
✓ Branch 0 taken 6 times.
✓ 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.
2641 if (!bv->n) PetscFunctionReturn(PETSC_SUCCESS);
157
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.
2641 PetscCall(VecGetArray(ctx->v,&array));
158
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.
2641 if (PetscUnlikely(j<0)) PetscCall(BVScale_BLAS_Private(bv,(bv->k-bv->l)*bv->ld,array+(bv->nc+bv->l)*bv->ld,alpha));
159
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 else PetscCall(BVScale_BLAS_Private(bv,bv->n,array+(bv->nc+j)*bv->ld,alpha));
160
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.
2641 PetscCall(VecRestoreArray(ctx->v,&array));
161
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.
648 PetscFunctionReturn(PETSC_SUCCESS);
162 }
163
164 900 static PetscErrorCode BVNorm_Svec(BV bv,PetscInt j,NormType type,PetscReal *val)
165 {
166 900 BV_SVEC *ctx = (BV_SVEC*)bv->data;
167 900 const PetscScalar *array;
168
169
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
900 PetscFunctionBegin;
170
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.
900 PetscCall(VecGetArrayRead(ctx->v,&array));
171
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.
900 if (PetscUnlikely(j<0)) PetscCall(BVNorm_LAPACK_Private(bv,bv->n,bv->k-bv->l,array+(bv->nc+bv->l)*bv->ld,bv->ld,type,val,ctx->mpi));
172
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.
341 else PetscCall(BVNorm_LAPACK_Private(bv,bv->n,1,array+(bv->nc+j)*bv->ld,bv->ld,type,val,ctx->mpi));
173
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.
900 PetscCall(VecRestoreArrayRead(ctx->v,&array));
174
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.
218 PetscFunctionReturn(PETSC_SUCCESS);
175 }
176
177 16 static PetscErrorCode BVNorm_Local_Svec(BV bv,PetscInt j,NormType type,PetscReal *val)
178 {
179 16 BV_SVEC *ctx = (BV_SVEC*)bv->data;
180 16 const PetscScalar *array;
181
182
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16 PetscFunctionBegin;
183
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(VecGetArrayRead(ctx->v,&array));
184
1/8
✗ 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.
16 if (PetscUnlikely(j<0)) PetscCall(BVNorm_LAPACK_Private(bv,bv->n,bv->k-bv->l,array+(bv->nc+bv->l)*bv->ld,bv->ld,type,val,PETSC_FALSE));
185
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 else PetscCall(BVNorm_LAPACK_Private(bv,bv->n,1,array+(bv->nc+j)*bv->ld,bv->ld,type,val,PETSC_FALSE));
186
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(VecRestoreArrayRead(ctx->v,&array));
187
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);
188 }
189
190 36 static PetscErrorCode BVNormalize_Svec(BV bv,PetscScalar *eigi)
191 {
192 36 BV_SVEC *ctx = (BV_SVEC*)bv->data;
193 36 PetscScalar *array,*wi=NULL;
194
195
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
36 PetscFunctionBegin;
196
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.
36 PetscCall(VecGetArray(ctx->v,&array));
197
2/2
✓ Branch 0 taken 4 times.
✓ Branch 1 taken 8 times.
36 if (eigi) wi = eigi+bv->l;
198
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.
36 PetscCall(BVNormalize_LAPACK_Private(bv,bv->n,bv->k-bv->l,array+(bv->nc+bv->l)*bv->ld,bv->ld,wi,ctx->mpi));
199
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.
36 PetscCall(VecRestoreArray(ctx->v,&array));
200
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);
201 }
202
203 856 static PetscErrorCode BVMatMult_Svec(BV V,Mat A,BV W)
204 {
205 856 PetscInt j;
206 856 Mat Vmat,Wmat;
207 856 Vec vv,ww;
208
209
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
856 PetscFunctionBegin;
210
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
856 if (V->vmm) {
211
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.
784 PetscCall(BVGetMat(V,&Vmat));
212
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.
784 PetscCall(BVGetMat(W,&Wmat));
213
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.
784 PetscCall(MatProductCreateWithMat(A,Vmat,NULL,Wmat));
214
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.
784 PetscCall(MatProductSetType(Wmat,MATPRODUCT_AB));
215
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.
784 PetscCall(MatProductSetFromOptions(Wmat));
216
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.
784 PetscCall(MatProductSymbolic(Wmat));
217
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.
784 PetscCall(MatProductNumeric(Wmat));
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.
784 PetscCall(MatProductClear(Wmat));
219
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.
784 PetscCall(BVRestoreMat(V,&Vmat));
220
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.
784 PetscCall(BVRestoreMat(W,&Wmat));
221 } else {
222
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
520 for (j=0;j<V->k-V->l;j++) {
223
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.
448 PetscCall(BVGetColumn(V,V->l+j,&vv));
224
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.
448 PetscCall(BVGetColumn(W,W->l+j,&ww));
225
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.
448 PetscCall(MatMult(A,vv,ww));
226
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.
448 PetscCall(BVRestoreColumn(V,V->l+j,&vv));
227
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.
448 PetscCall(BVRestoreColumn(W,W->l+j,&ww));
228 }
229 }
230
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.
214 PetscFunctionReturn(PETSC_SUCCESS);
231 }
232
233 776 static PetscErrorCode BVCopy_Svec(BV V,BV W)
234 {
235 776 BV_SVEC *v = (BV_SVEC*)V->data,*w = (BV_SVEC*)W->data;
236 776 const PetscScalar *pv;
237 776 PetscScalar *pw;
238 776 PetscInt j;
239
240
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
776 PetscFunctionBegin;
241
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.
776 PetscCall(VecGetArrayRead(v->v,&pv));
242
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.
776 PetscCall(VecGetArray(w->v,&pw));
243
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(PetscArraycpy(pw+(W->nc+W->l+j)*W->ld,pv+(V->nc+V->l+j)*V->ld,V->n));
244
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.
776 PetscCall(VecRestoreArrayRead(v->v,&pv));
245
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.
776 PetscCall(VecRestoreArray(w->v,&pw));
246
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);
247 }
248
249 16 static PetscErrorCode BVCopyColumn_Svec(BV V,PetscInt j,PetscInt i)
250 {
251 16 BV_SVEC *v = (BV_SVEC*)V->data;
252 16 PetscScalar *pv;
253
254
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
16 PetscFunctionBegin;
255
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(VecGetArray(v->v,&pv));
256
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(PetscArraycpy(pv+(V->nc+i)*V->ld,pv+(V->nc+j)*V->ld,V->n));
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(VecRestoreArray(v->v,&pv));
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 92 static PetscErrorCode BVResize_Svec(BV bv,PetscInt m,PetscBool copy)
262 {
263 92 BV_SVEC *ctx = (BV_SVEC*)bv->data;
264 92 PetscScalar *pnew;
265 92 const PetscScalar *pv;
266 92 PetscInt bs;
267 92 Vec vnew;
268 92 char str[50];
269
270
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
92 PetscFunctionBegin;
271
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.
92 PetscCall(PetscLayoutGetBlockSize(bv->map,&bs));
272
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.
92 PetscCall(VecCreate(PetscObjectComm((PetscObject)bv),&vnew));
273
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.
92 PetscCall(VecSetType(vnew,bv->vtype));
274
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.
92 PetscCall(VecSetSizes(vnew,m*bv->ld,PETSC_DECIDE));
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.
92 PetscCall(VecSetBlockSize(vnew,bs));
276
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
92 if (((PetscObject)bv)->name) {
277
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.
92 PetscCall(PetscSNPrintf(str,sizeof(str),"%s_0",((PetscObject)bv)->name));
278
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.
92 PetscCall(PetscObjectSetName((PetscObject)vnew,str));
279 }
280
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
92 if (copy) {
281
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(VecGetArrayRead(ctx->v,&pv));
282
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(VecGetArray(vnew,&pnew));
283
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(PetscArraycpy(pnew,pv,PetscMin(m,bv->m)*bv->ld));
284
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(VecRestoreArrayRead(ctx->v,&pv));
285
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(VecRestoreArray(vnew,&pnew));
286 }
287
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.
92 PetscCall(VecDestroy(&ctx->v));
288 92 ctx->v = vnew;
289
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.
92 PetscFunctionReturn(PETSC_SUCCESS);
290 }
291
292 21988 static PetscErrorCode BVGetColumn_Svec(BV bv,PetscInt j,Vec *v)
293 {
294 21988 BV_SVEC *ctx = (BV_SVEC*)bv->data;
295 21988 PetscScalar *pv;
296 21988 PetscInt l;
297
298
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
21988 PetscFunctionBegin;
299
3/4
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 8 times.
21988 l = BVAvailableVec;
300
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.
21988 PetscCall(VecGetArray(ctx->v,&pv));
301
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.
21988 PetscCall(VecPlaceArray(bv->cv[l],pv+(bv->nc+j)*bv->ld));
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.
5381 PetscFunctionReturn(PETSC_SUCCESS);
303 }
304
305 21988 static PetscErrorCode BVRestoreColumn_Svec(BV bv,PetscInt j,Vec *v)
306 {
307 21988 BV_SVEC *ctx = (BV_SVEC*)bv->data;
308 21988 PetscInt l;
309
310
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
21988 PetscFunctionBegin;
311 21988 l = (j==bv->ci[0])? 0: 1;
312
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.
21988 PetscCall(VecResetArray(bv->cv[l]));
313
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.
21988 PetscCall(VecRestoreArray(ctx->v,NULL));
314
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.
5381 PetscFunctionReturn(PETSC_SUCCESS);
315 }
316
317 1994 static PetscErrorCode BVGetArray_Svec(BV bv,PetscScalar **a)
318 {
319 1994 BV_SVEC *ctx = (BV_SVEC*)bv->data;
320
321
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1994 PetscFunctionBegin;
322
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.
1994 PetscCall(VecGetArray(ctx->v,a));
323
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.
490 PetscFunctionReturn(PETSC_SUCCESS);
324 }
325
326 1994 static PetscErrorCode BVRestoreArray_Svec(BV bv,PetscScalar **a)
327 {
328 1994 BV_SVEC *ctx = (BV_SVEC*)bv->data;
329
330
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1994 PetscFunctionBegin;
331
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.
1994 PetscCall(VecRestoreArray(ctx->v,a));
332
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.
490 PetscFunctionReturn(PETSC_SUCCESS);
333 }
334
335 84 static PetscErrorCode BVGetArrayRead_Svec(BV bv,const PetscScalar **a)
336 {
337 84 BV_SVEC *ctx = (BV_SVEC*)bv->data;
338
339
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
84 PetscFunctionBegin;
340
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.
84 PetscCall(VecGetArrayRead(ctx->v,a));
341
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);
342 }
343
344 84 static PetscErrorCode BVRestoreArrayRead_Svec(BV bv,const PetscScalar **a)
345 {
346 84 BV_SVEC *ctx = (BV_SVEC*)bv->data;
347
348
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
84 PetscFunctionBegin;
349
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.
84 PetscCall(VecRestoreArrayRead(ctx->v,a));
350
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);
351 }
352
353 144 static PetscErrorCode BVView_Svec(BV bv,PetscViewer viewer)
354 {
355 144 PetscInt j;
356 144 Vec v;
357 144 PetscViewerFormat format;
358 144 PetscBool isascii,ismatlab=PETSC_FALSE;
359 144 const char *bvname,*name;
360
361
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
144 PetscFunctionBegin;
362
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.
144 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii));
363
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
144 if (isascii) {
364
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.
144 PetscCall(PetscViewerGetFormat(viewer,&format));
365
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.
144 if (format == PETSC_VIEWER_ASCII_INFO || format == PETSC_VIEWER_ASCII_INFO_DETAIL) PetscFunctionReturn(PETSC_SUCCESS);
366
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
120 if (format == PETSC_VIEWER_ASCII_MATLAB) ismatlab = PETSC_TRUE;
367 }
368 if (ismatlab) {
369 PetscCall(PetscObjectGetName((PetscObject)bv,&bvname));
370 PetscCall(PetscViewerASCIIPrintf(viewer,"%s=[];\n",bvname));
371 }
372
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
576 for (j=0;j<bv->m;j++) {
373
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(BVGetColumn(bv,j,&v));
374
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(VecView(v,viewer));
375
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
456 if (ismatlab) {
376 PetscCall(PetscObjectGetName((PetscObject)v,&name));
377 PetscCall(PetscViewerASCIIPrintf(viewer,"%s=[%s,%s];clear %s\n",bvname,bvname,name,name));
378 }
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.
456 PetscCall(BVRestoreColumn(bv,j,&v));
380 }
381
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);
382 }
383
384 3388 static PetscErrorCode BVDestroy_Svec(BV bv)
385 {
386 3388 BV_SVEC *ctx = (BV_SVEC*)bv->data;
387
388
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
3388 PetscFunctionBegin;
389
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.
3388 PetscCall(VecDestroy(&ctx->v));
390
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.
3388 PetscCall(VecDestroy(&bv->cv[0]));
391
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.
3388 PetscCall(VecDestroy(&bv->cv[1]));
392
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.
3388 PetscCall(PetscFree(bv->data));
393 3388 bv->cuda = PETSC_FALSE;
394
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.
3388 PetscFunctionReturn(PETSC_SUCCESS);
395 }
396
397 /*MC
398 BVSVEC - BVSVEC = "svec" - A basis vectors object represented by a single
399 `Vec` object. The local array of the `Vec` stores the local part of the
400 basis vectors column-wise.
401
402 Level: beginner
403
404 .seealso: [](sec:bv), `BV`, `BVType`, `BVSetType()`
405 M*/
406
407 3388 SLEPC_EXTERN PetscErrorCode BVCreate_Svec(BV bv)
408 {
409 3388 BV_SVEC *ctx;
410 3388 PetscInt nloc,N,bs,tglobal=0,tlocal,lsplit,j,lda;
411 3388 PetscBool seq,isdense;
412 3388 PetscScalar *vv;
413 3388 const PetscScalar *aa,*array,*ptr;
414 3388 char str[50];
415 3388 BV parent;
416 3388 Vec vpar;
417 3388 MatType mtype;
418
419
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
3388 PetscFunctionBegin;
420
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.
3388 PetscCall(PetscNew(&ctx));
421 3388 bv->data = (void*)ctx;
422
423
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.
3388 PetscCall(PetscStrcmpAny(bv->vtype,&bv->cuda,VECSEQCUDA,VECMPICUDA,""));
424
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.
3388 PetscCall(PetscStrcmpAny(bv->vtype,&bv->hip,VECSEQHIP,VECMPIHIP,""));
425
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.
3388 PetscCall(PetscStrcmpAny(bv->vtype,&ctx->mpi,VECMPI,VECMPICUDA,VECMPIHIP,""));
426
427
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.
3388 PetscCall(PetscStrcmp(bv->vtype,VECSEQ,&seq));
428
5/10
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
3388 PetscCheck(seq || ctx->mpi || bv->cuda || bv->hip,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"BVSVEC does not support the requested vector type: %s",bv->vtype);
429
430
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.
3388 PetscCall(PetscLayoutGetLocalSize(bv->map,&nloc));
431
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.
3388 PetscCall(PetscLayoutGetSize(bv->map,&N));
432
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.
3388 PetscCall(PetscLayoutGetBlockSize(bv->map,&bs));
433
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.
3388 PetscCall(BV_SetDefaultLD(bv,nloc));
434 3388 tlocal = bv->m*bv->ld;
435
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.
3388 PetscCall(PetscIntMultError(bv->m,N,&tglobal)); /* just to check integer overflow */
436
437
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
3388 if (PetscUnlikely(bv->issplit)) {
438 /* split BV: create Vec sharing the memory of the parent BV */
439 892 parent = bv->splitparent;
440 892 lsplit = parent->lsplit;
441 892 vpar = ((BV_SVEC*)parent->data)->v;
442
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
892 if (bv->cuda) {
443 #if defined(PETSC_HAVE_CUDA)
444
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
156 PetscCall(VecCUDAGetArrayRead(vpar,&array));
445
4/4
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 2 times.
156 if (bv->issplit>0) ptr = (bv->issplit==1)? array: array+lsplit*bv->ld;
446
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
24 else ptr = (bv->issplit==1)? array: array-lsplit;
447
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
156 PetscCall(VecCUDARestoreArrayRead(vpar,&array));
448
3/4
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
156 if (ctx->mpi) PetscCall(VecCreateMPICUDAWithArray(PetscObjectComm((PetscObject)bv),bs,tlocal,PETSC_DECIDE,NULL,&ctx->v));
449
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
8 else PetscCall(VecCreateSeqCUDAWithArray(PetscObjectComm((PetscObject)bv),bs,tlocal,NULL,&ctx->v));
450
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
156 PetscCall(VecCUDAPlaceArray(ctx->v,ptr));
451 #endif
452
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
736 } else if (bv->hip) {
453 #if defined(PETSC_HAVE_HIP)
454 PetscCall(VecHIPGetArrayRead(vpar,&array));
455 if (bv->issplit>0) ptr = (bv->issplit==1)? array: array+lsplit*bv->ld;
456 else ptr = (bv->issplit==1)? array: array-lsplit;
457 PetscCall(VecHIPRestoreArrayRead(vpar,&array));
458 if (ctx->mpi) PetscCall(VecCreateMPIHIPWithArray(PetscObjectComm((PetscObject)bv),bs,tlocal,PETSC_DECIDE,NULL,&ctx->v));
459 else PetscCall(VecCreateSeqHIPWithArray(PetscObjectComm((PetscObject)bv),bs,tlocal,NULL,&ctx->v));
460 PetscCall(VecHIPPlaceArray(ctx->v,ptr));
461 #endif
462 } else {
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.
736 PetscCall(VecGetArrayRead(vpar,&array));
464
4/4
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 8 times.
736 if (bv->issplit>0) ptr = (bv->issplit==1)? array: array+lsplit*bv->ld;
465
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
96 else ptr = (bv->issplit==1)? array: array-lsplit;
466
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.
736 PetscCall(VecRestoreArrayRead(vpar,&array));
467
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.
736 if (ctx->mpi) PetscCall(VecCreateMPIWithArray(PetscObjectComm((PetscObject)bv),bs,tlocal,PETSC_DECIDE,NULL,&ctx->v));
468
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 else PetscCall(VecCreateSeqWithArray(PetscObjectComm((PetscObject)bv),bs,tlocal,NULL,&ctx->v));
469
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.
736 PetscCall(VecPlaceArray(ctx->v,ptr));
470 }
471 } else {
472 /* regular BV: create Vec to store the BV entries */
473
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.
2496 PetscCall(VecCreate(PetscObjectComm((PetscObject)bv),&ctx->v));
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.
2496 PetscCall(VecSetType(ctx->v,bv->vtype));
475
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.
2496 PetscCall(VecSetSizes(ctx->v,tlocal,PETSC_DECIDE));
476
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.
2496 PetscCall(VecSetBlockSize(ctx->v,bs));
477 }
478
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
3388 if (((PetscObject)bv)->name) {
479
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.
1130 PetscCall(PetscSNPrintf(str,sizeof(str),"%s_0",((PetscObject)bv)->name));
480
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.
1130 PetscCall(PetscObjectSetName((PetscObject)ctx->v,str));
481 }
482
483
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
3388 if (PetscUnlikely(bv->Acreate)) {
484
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(MatGetType(bv->Acreate,&mtype));
485
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(PetscStrcmpAny(mtype,&isdense,MATSEQDENSE,MATMPIDENSE,""));
486
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
16 PetscCheck(isdense,PetscObjectComm((PetscObject)bv->Acreate),PETSC_ERR_SUP,"BVSVEC requires a dense matrix in BVCreateFromMat()");
487
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(MatDenseGetArrayRead(bv->Acreate,&aa));
488
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(MatDenseGetLDA(bv->Acreate,&lda));
489
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(VecGetArray(ctx->v,&vv));
490
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(PetscArraycpy(vv+j*bv->ld,aa+j*lda,bv->n));
491
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(VecRestoreArray(ctx->v,&vv));
492
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(MatDenseRestoreArrayRead(bv->Acreate,&aa));
493
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));
494 }
495
496
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.
3388 PetscCall(BVCreateVecEmpty(bv,&bv->cv[0]));
497
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.
3388 PetscCall(BVCreateVecEmpty(bv,&bv->cv[1]));
498
499
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
3388 if (bv->cuda) {
500 #if defined(PETSC_HAVE_CUDA)
501 514 bv->ops->mult = BVMult_Svec_CUDA;
502 514 bv->ops->multvec = BVMultVec_Svec_CUDA;
503 514 bv->ops->multinplace = BVMultInPlace_Svec_CUDA;
504 514 bv->ops->multinplacetrans = BVMultInPlaceHermitianTranspose_Svec_CUDA;
505 514 bv->ops->dot = BVDot_Svec_CUDA;
506 514 bv->ops->dotvec = BVDotVec_Svec_CUDA;
507 514 bv->ops->dotvec_local = BVDotVec_Local_Svec_CUDA;
508 514 bv->ops->scale = BVScale_Svec_CUDA;
509 514 bv->ops->norm = BVNorm_Svec_CUDA;
510 514 bv->ops->norm_local = BVNorm_Local_Svec_CUDA;
511 514 bv->ops->normalize = BVNormalize_Svec_CUDA;
512 514 bv->ops->matmult = BVMatMult_Svec_CUDA;
513 514 bv->ops->copy = BVCopy_Svec_CUDA;
514 514 bv->ops->copycolumn = BVCopyColumn_Svec_CUDA;
515 514 bv->ops->resize = BVResize_Svec_CUDA;
516 514 bv->ops->getcolumn = BVGetColumn_Svec_CUDA;
517 514 bv->ops->restorecolumn = BVRestoreColumn_Svec_CUDA;
518 514 bv->ops->restoresplit = BVRestoreSplit_Svec_CUDA;
519 514 bv->ops->restoresplitrows = BVRestoreSplitRows_Svec_CUDA;
520 514 bv->ops->getmat = BVGetMat_Svec_CUDA;
521 514 bv->ops->restoremat = BVRestoreMat_Svec_CUDA;
522 #endif
523
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
2874 } else if (bv->hip) {
524 #if defined(PETSC_HAVE_HIP)
525 bv->ops->mult = BVMult_Svec_HIP;
526 bv->ops->multvec = BVMultVec_Svec_HIP;
527 bv->ops->multinplace = BVMultInPlace_Svec_HIP;
528 bv->ops->multinplacetrans = BVMultInPlaceHermitianTranspose_Svec_HIP;
529 bv->ops->dot = BVDot_Svec_HIP;
530 bv->ops->dotvec = BVDotVec_Svec_HIP;
531 bv->ops->dotvec_local = BVDotVec_Local_Svec_HIP;
532 bv->ops->scale = BVScale_Svec_HIP;
533 bv->ops->norm = BVNorm_Svec_HIP;
534 bv->ops->norm_local = BVNorm_Local_Svec_HIP;
535 bv->ops->normalize = BVNormalize_Svec_HIP;
536 bv->ops->matmult = BVMatMult_Svec_HIP;
537 bv->ops->copy = BVCopy_Svec_HIP;
538 bv->ops->copycolumn = BVCopyColumn_Svec_HIP;
539 bv->ops->resize = BVResize_Svec_HIP;
540 bv->ops->getcolumn = BVGetColumn_Svec_HIP;
541 bv->ops->restorecolumn = BVRestoreColumn_Svec_HIP;
542 bv->ops->restoresplit = BVRestoreSplit_Svec_HIP;
543 bv->ops->restoresplitrows = BVRestoreSplitRows_Svec_HIP;
544 bv->ops->getmat = BVGetMat_Svec_HIP;
545 bv->ops->restoremat = BVRestoreMat_Svec_HIP;
546 #endif
547 } else {
548 2874 bv->ops->mult = BVMult_Svec;
549 2874 bv->ops->multvec = BVMultVec_Svec;
550 2874 bv->ops->multinplace = BVMultInPlace_Svec;
551 2874 bv->ops->multinplacetrans = BVMultInPlaceHermitianTranspose_Svec;
552 2874 bv->ops->dot = BVDot_Svec;
553 2874 bv->ops->dotvec = BVDotVec_Svec;
554 2874 bv->ops->dotvec_local = BVDotVec_Local_Svec;
555 2874 bv->ops->scale = BVScale_Svec;
556 2874 bv->ops->norm = BVNorm_Svec;
557 2874 bv->ops->norm_local = BVNorm_Local_Svec;
558 2874 bv->ops->normalize = BVNormalize_Svec;
559 2874 bv->ops->matmult = BVMatMult_Svec;
560 2874 bv->ops->copy = BVCopy_Svec;
561 2874 bv->ops->copycolumn = BVCopyColumn_Svec;
562 2874 bv->ops->resize = BVResize_Svec;
563 2874 bv->ops->getcolumn = BVGetColumn_Svec;
564 2874 bv->ops->restorecolumn = BVRestoreColumn_Svec;
565 2874 bv->ops->getmat = BVGetMat_Default;
566 2874 bv->ops->restoremat = BVRestoreMat_Default;
567 }
568 3388 bv->ops->getarray = BVGetArray_Svec;
569 3388 bv->ops->restorearray = BVRestoreArray_Svec;
570 3388 bv->ops->getarrayread = BVGetArrayRead_Svec;
571 3388 bv->ops->restorearrayread = BVRestoreArrayRead_Svec;
572 3388 bv->ops->destroy = BVDestroy_Svec;
573
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 8 times.
3388 if (!ctx->mpi) bv->ops->view = BVView_Svec;
574
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.
710 PetscFunctionReturn(PETSC_SUCCESS);
575 }
576