GCC Code Coverage Report


Directory: ./
File: src/sys/classes/bv/impls/mat/bvmat.c
Date: 2025-11-19 04:19:03
Exec Total Coverage
Lines: 374 380 98.4%
Functions: 24 24 100.0%
Branches: 784 1302 60.2%

Line Branch Exec Source
1 /*
2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
3 SLEPc - Scalable Library for Eigenvalue Problem Computations
4 Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain
5
6 This file is part of SLEPc.
7 SLEPc is distributed under a 2-clause BSD license (see LICENSE).
8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
9 */
10 /*
11 BV implemented with a dense Mat
12 */
13
14 #include <slepc/private/bvimpl.h>
15 #include "bvmat.h"
16
17 64816 static PetscErrorCode BVMult_Mat(BV Y,PetscScalar alpha,PetscScalar beta,BV X,Mat Q)
18 {
19 64816 BV_MAT *y = (BV_MAT*)Y->data,*x = (BV_MAT*)X->data;
20 64816 PetscScalar *py;
21 64816 const PetscScalar *px,*q;
22 64816 PetscInt ldq;
23
24
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
64816 PetscFunctionBegin;
25
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
64816 PetscCall(MatDenseGetArrayRead(x->A,&px));
26
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
64816 PetscCall(MatDenseGetArray(y->A,&py));
27
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
64816 if (Q) {
28
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
52922 PetscCall(MatDenseGetLDA(Q,&ldq));
29
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
52922 PetscCall(MatDenseGetArrayRead(Q,&q));
30
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
52922 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 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
52922 PetscCall(MatDenseRestoreArrayRead(Q,&q));
32
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
11894 } 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 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
64816 PetscCall(MatDenseRestoreArrayRead(x->A,&px));
34
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
64816 PetscCall(MatDenseRestoreArray(y->A,&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.
13289 PetscFunctionReturn(PETSC_SUCCESS);
36 }
37
38 6575741 static PetscErrorCode BVMultVec_Mat(BV X,PetscScalar alpha,PetscScalar beta,Vec y,PetscScalar *q)
39 {
40 6575741 BV_MAT *x = (BV_MAT*)X->data;
41 6575741 PetscScalar *py,*qq=q;
42 6575741 const PetscScalar *px;
43
44
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
6575741 PetscFunctionBegin;
45
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6575741 PetscCall(MatDenseGetArrayRead(x->A,&px));
46
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6575741 PetscCall(VecGetArray(y,&py));
47
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
6575741 if (!q) PetscCall(VecGetArray(X->buffer,&qq));
48
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6575741 PetscCall(BVMultVec_BLAS_Private(X,X->n,X->k-X->l,alpha,px+(X->nc+X->l)*X->ld,X->ld,qq,beta,py));
49
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
6575741 if (!q) PetscCall(VecRestoreArray(X->buffer,&qq));
50
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6575741 PetscCall(MatDenseRestoreArrayRead(x->A,&px));
51
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
6575741 PetscCall(VecRestoreArray(y,&py));
52
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.
1317760 PetscFunctionReturn(PETSC_SUCCESS);
53 }
54
55 283173 static PetscErrorCode BVMultInPlace_Mat(BV V,Mat Q,PetscInt s,PetscInt e)
56 {
57 283173 BV_MAT *ctx = (BV_MAT*)V->data;
58 283173 PetscScalar *pv;
59 283173 const PetscScalar *q;
60 283173 PetscInt ldq;
61
62
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
283173 PetscFunctionBegin;
63
10/16
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
283173 if (s>=e || !V->n) PetscFunctionReturn(PETSC_SUCCESS);
64
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
264190 PetscCall(MatDenseGetLDA(Q,&ldq));
65
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
264190 PetscCall(MatDenseGetArray(ctx->A,&pv));
66
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
264190 PetscCall(MatDenseGetArrayRead(Q,&q));
67
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
264190 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));
68
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
264190 PetscCall(MatDenseRestoreArrayRead(Q,&q));
69
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
264190 PetscCall(MatDenseRestoreArray(ctx->A,&pv));
70
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.
51439 PetscFunctionReturn(PETSC_SUCCESS);
71 }
72
73 10 static PetscErrorCode BVMultInPlaceHermitianTranspose_Mat(BV V,Mat Q,PetscInt s,PetscInt e)
74 {
75 10 BV_MAT *ctx = (BV_MAT*)V->data;
76 10 PetscScalar *pv;
77 10 const PetscScalar *q;
78 10 PetscInt ldq;
79
80
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10 PetscFunctionBegin;
81
3/16
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 8 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.
10 if (s>=e || !V->n) PetscFunctionReturn(PETSC_SUCCESS);
82
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(MatDenseGetLDA(Q,&ldq));
83
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(MatDenseGetArray(ctx->A,&pv));
84
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(MatDenseGetArrayRead(Q,&q));
85
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 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));
86
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(MatDenseRestoreArrayRead(Q,&q));
87
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
10 PetscCall(MatDenseRestoreArray(ctx->A,&pv));
88
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);
89 }
90
91 276356 static PetscErrorCode BVDot_Mat(BV X,BV Y,Mat M)
92 {
93 276356 BV_MAT *x = (BV_MAT*)X->data,*y = (BV_MAT*)Y->data;
94 276356 PetscScalar *m;
95 276356 const PetscScalar *px,*py;
96 276356 PetscInt ldm;
97
98
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
276356 PetscFunctionBegin;
99
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
276356 PetscCall(MatDenseGetLDA(M,&ldm));
100
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
276356 PetscCall(MatDenseGetArrayRead(x->A,&px));
101
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
276356 PetscCall(MatDenseGetArrayRead(y->A,&py));
102
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
276356 PetscCall(MatDenseGetArray(M,&m));
103
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
276356 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));
104
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
276356 PetscCall(MatDenseRestoreArray(M,&m));
105
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
276356 PetscCall(MatDenseRestoreArrayRead(x->A,&px));
106
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
276356 PetscCall(MatDenseRestoreArrayRead(y->A,&py));
107
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.
56138 PetscFunctionReturn(PETSC_SUCCESS);
108 }
109
110 4328487 static PetscErrorCode BVDotVec_Mat(BV X,Vec y,PetscScalar *q)
111 {
112 4328487 BV_MAT *x = (BV_MAT*)X->data;
113 4328487 PetscScalar *qq=q;
114 4328487 const PetscScalar *px,*py;
115 4328487 Vec z = y;
116
117
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
4328487 PetscFunctionBegin;
118
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4328487 if (PetscUnlikely(X->matrix)) {
119
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
634835 PetscCall(BV_IPMatMult(X,y));
120 634835 z = X->Bx;
121 }
122
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
4328487 PetscCall(MatDenseGetArrayRead(x->A,&px));
123
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
4328487 PetscCall(VecGetArrayRead(z,&py));
124
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
4328487 if (!q) PetscCall(VecGetArray(X->buffer,&qq));
125
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
4328487 PetscCall(BVDotVec_BLAS_Private(X,X->n,X->k-X->l,px+(X->nc+X->l)*X->ld,X->ld,py,qq,x->mpi));
126
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
4328487 if (!q) PetscCall(VecRestoreArray(X->buffer,&qq));
127
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
4328487 PetscCall(VecRestoreArrayRead(z,&py));
128
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
4328487 PetscCall(MatDenseRestoreArrayRead(x->A,&px));
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.
851885 PetscFunctionReturn(PETSC_SUCCESS);
130 }
131
132 66994 static PetscErrorCode BVDotVec_Local_Mat(BV X,Vec y,PetscScalar *m)
133 {
134 66994 BV_MAT *x = (BV_MAT*)X->data;
135 66994 const PetscScalar *px,*py;
136 66994 Vec z = y;
137
138
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
66994 PetscFunctionBegin;
139
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
66994 if (PetscUnlikely(X->matrix)) {
140 PetscCall(BV_IPMatMult(X,y));
141 z = X->Bx;
142 }
143
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
66994 PetscCall(MatDenseGetArrayRead(x->A,&px));
144
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
66994 PetscCall(VecGetArrayRead(z,&py));
145
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
66994 PetscCall(BVDotVec_BLAS_Private(X,X->n,X->k-X->l,px+(X->nc+X->l)*X->ld,X->ld,py,m,PETSC_FALSE));
146
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
66994 PetscCall(VecRestoreArrayRead(z,&py));
147
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
66994 PetscCall(MatDenseRestoreArrayRead(x->A,&px));
148
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.
13302 PetscFunctionReturn(PETSC_SUCCESS);
149 }
150
151 2029131 static PetscErrorCode BVScale_Mat(BV bv,PetscInt j,PetscScalar alpha)
152 {
153 2029131 BV_MAT *ctx = (BV_MAT*)bv->data;
154 2029131 PetscScalar *array;
155
156
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
2029131 PetscFunctionBegin;
157
2/14
✓ Branch 0 taken 8 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.
2029131 if (!bv->n) PetscFunctionReturn(PETSC_SUCCESS);
158
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2029131 PetscCall(MatDenseGetArray(ctx->A,&array));
159
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
2029131 if (PetscUnlikely(j<0)) PetscCall(BVScale_BLAS_Private(bv,(bv->k-bv->l)*bv->ld,array+(bv->nc+bv->l)*bv->ld,alpha));
160
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2026161 else PetscCall(BVScale_BLAS_Private(bv,bv->n,array+(bv->nc+j)*bv->ld,alpha));
161
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
2029131 PetscCall(MatDenseRestoreArray(ctx->A,&array));
162
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.
398835 PetscFunctionReturn(PETSC_SUCCESS);
163 }
164
165 72590 static PetscErrorCode BVNorm_Mat(BV bv,PetscInt j,NormType type,PetscReal *val)
166 {
167 72590 BV_MAT *ctx = (BV_MAT*)bv->data;
168 72590 const PetscScalar *array;
169
170
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
72590 PetscFunctionBegin;
171
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
72590 PetscCall(MatDenseGetArrayRead(ctx->A,&array));
172
6/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
72590 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));
173
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
71872 else PetscCall(BVNorm_LAPACK_Private(bv,bv->n,1,array+(bv->nc+j)*bv->ld,bv->ld,type,val,ctx->mpi));
174
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
72590 PetscCall(MatDenseRestoreArrayRead(ctx->A,&array));
175
6/12
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
13546 PetscFunctionReturn(PETSC_SUCCESS);
176 }
177
178 27061 static PetscErrorCode BVNorm_Local_Mat(BV bv,PetscInt j,NormType type,PetscReal *val)
179 {
180 27061 BV_MAT *ctx = (BV_MAT*)bv->data;
181 27061 const PetscScalar *array;
182
183
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
27061 PetscFunctionBegin;
184
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
27061 PetscCall(MatDenseGetArrayRead(ctx->A,&array));
185
1/8
✗ Branch 0 not taken.
✓ Branch 1 taken 10 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.
27061 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));
186
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
27061 else PetscCall(BVNorm_LAPACK_Private(bv,bv->n,1,array+(bv->nc+j)*bv->ld,bv->ld,type,val,PETSC_FALSE));
187
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
27061 PetscCall(MatDenseRestoreArrayRead(ctx->A,&array));
188
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.
5417 PetscFunctionReturn(PETSC_SUCCESS);
189 }
190
191 37303 static PetscErrorCode BVNormalize_Mat(BV bv,PetscScalar *eigi)
192 {
193 37303 BV_MAT *ctx = (BV_MAT*)bv->data;
194 37303 PetscScalar *array,*wi=NULL;
195
196
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
37303 PetscFunctionBegin;
197
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
37303 PetscCall(MatDenseGetArray(ctx->A,&array));
198
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
37303 if (eigi) wi = eigi+bv->l;
199
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
37303 PetscCall(BVNormalize_LAPACK_Private(bv,bv->n,bv->k-bv->l,array+(bv->nc+bv->l)*bv->ld,bv->ld,wi,ctx->mpi));
200
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
37303 PetscCall(MatDenseRestoreArray(ctx->A,&array));
201
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.
7447 PetscFunctionReturn(PETSC_SUCCESS);
202 }
203
204 111076 static PetscErrorCode BVMatMult_Mat(BV V,Mat A,BV W)
205 {
206 111076 PetscInt j;
207 111076 Mat Vmat,Wmat;
208 111076 Vec vv,ww;
209
210
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
111076 PetscFunctionBegin;
211
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
111076 if (V->vmm) {
212
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
111026 PetscCall(BVGetMat(V,&Vmat));
213
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
111026 PetscCall(BVGetMat(W,&Wmat));
214
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
111026 PetscCall(MatProductCreateWithMat(A,Vmat,NULL,Wmat));
215
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
111026 PetscCall(MatProductSetType(Wmat,MATPRODUCT_AB));
216
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
111026 PetscCall(MatProductSetFromOptions(Wmat));
217
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
111026 PetscCall(MatProductSymbolic(Wmat));
218
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
111026 PetscCall(MatProductNumeric(Wmat));
219
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
111026 PetscCall(MatProductClear(Wmat));
220
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
111026 PetscCall(BVRestoreMat(V,&Vmat));
221
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
111026 PetscCall(BVRestoreMat(W,&Wmat));
222 } else {
223
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
380 for (j=0;j<V->k-V->l;j++) {
224
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
330 PetscCall(BVGetColumn(V,V->l+j,&vv));
225
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
330 PetscCall(BVGetColumn(W,W->l+j,&ww));
226
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
330 PetscCall(MatMult(A,vv,ww));
227
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
330 PetscCall(BVRestoreColumn(V,V->l+j,&vv));
228
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
330 PetscCall(BVRestoreColumn(W,W->l+j,&ww));
229 }
230 }
231
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.
22500 PetscFunctionReturn(PETSC_SUCCESS);
232 }
233
234 131847 static PetscErrorCode BVCopy_Mat(BV V,BV W)
235 {
236 131847 BV_MAT *v = (BV_MAT*)V->data,*w = (BV_MAT*)W->data;
237 131847 const PetscScalar *pv;
238 131847 PetscScalar *pw;
239 131847 PetscInt j;
240
241
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
131847 PetscFunctionBegin;
242
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
131847 PetscCall(MatDenseGetArrayRead(v->A,&pv));
243
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
131847 PetscCall(MatDenseGetArray(w->A,&pw));
244
7/8
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
826587 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));
245
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
131847 PetscCall(MatDenseRestoreArrayRead(v->A,&pv));
246
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
131847 PetscCall(MatDenseRestoreArray(w->A,&pw));
247
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.
27121 PetscFunctionReturn(PETSC_SUCCESS);
248 }
249
250 85447 static PetscErrorCode BVCopyColumn_Mat(BV V,PetscInt j,PetscInt i)
251 {
252 85447 BV_MAT *v = (BV_MAT*)V->data;
253 85447 PetscScalar *pv;
254
255
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
85447 PetscFunctionBegin;
256
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
85447 PetscCall(MatDenseGetArray(v->A,&pv));
257
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
85447 PetscCall(PetscArraycpy(pv+(V->nc+i)*V->ld,pv+(V->nc+j)*V->ld,V->n));
258
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
85447 PetscCall(MatDenseRestoreArray(v->A,&pv));
259
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.
16361 PetscFunctionReturn(PETSC_SUCCESS);
260 }
261
262 1570 static PetscErrorCode BVResize_Mat(BV bv,PetscInt m,PetscBool copy)
263 {
264 1570 BV_MAT *ctx = (BV_MAT*)bv->data;
265 1570 Mat A,Msrc,Mdst;
266 1570 char str[50];
267
268
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1570 PetscFunctionBegin;
269
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1570 PetscCall(MatCreateDenseFromVecType(PetscObjectComm((PetscObject)bv),bv->vtype,bv->n,PETSC_DECIDE,bv->N,m,bv->ld,NULL,&A));
270
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1570 if (((PetscObject)bv)->name) {
271
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
210 PetscCall(PetscSNPrintf(str,sizeof(str),"%s_0",((PetscObject)bv)->name));
272
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
210 PetscCall(PetscObjectSetName((PetscObject)A,str));
273 }
274
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
1570 if (copy) {
275
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
348 PetscCall(MatDenseGetSubMatrix(ctx->A,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,PetscMin(m,bv->m),&Msrc));
276
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
348 PetscCall(MatDenseGetSubMatrix(A,PETSC_DECIDE,PETSC_DECIDE,PETSC_DECIDE,PetscMin(m,bv->m),&Mdst));
277
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
348 PetscCall(MatCopy(Msrc,Mdst,SAME_NONZERO_PATTERN));
278
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
348 PetscCall(MatDenseRestoreSubMatrix(ctx->A,&Msrc));
279
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
348 PetscCall(MatDenseRestoreSubMatrix(A,&Mdst));
280 }
281
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1570 PetscCall(MatDestroy(&ctx->A));
282 1570 ctx->A = A;
283
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.
1570 PetscFunctionReturn(PETSC_SUCCESS);
284 }
285
286 13494521 static PetscErrorCode BVGetColumn_Mat(BV bv,PetscInt j,Vec *v)
287 {
288 13494521 BV_MAT *ctx = (BV_MAT*)bv->data;
289 13494521 PetscScalar *pA;
290 13494521 PetscInt l;
291
292
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
13494521 PetscFunctionBegin;
293
3/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
13494521 l = BVAvailableVec;
294
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
13494521 PetscCall(MatDenseGetArray(ctx->A,&pA));
295
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
13494521 PetscCall(VecPlaceArray(bv->cv[l],pA+(bv->nc+j)*bv->ld));
296
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.
2661350 PetscFunctionReturn(PETSC_SUCCESS);
297 }
298
299 13494521 static PetscErrorCode BVRestoreColumn_Mat(BV bv,PetscInt j,Vec *v)
300 {
301 13494521 BV_MAT *ctx = (BV_MAT*)bv->data;
302 13494521 PetscScalar *pA;
303 13494521 PetscInt l;
304
305
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
13494521 PetscFunctionBegin;
306 13494521 l = (j==bv->ci[0])? 0: 1;
307
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
13494521 PetscCall(VecResetArray(bv->cv[l]));
308
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
13494521 PetscCall(MatDenseRestoreArray(ctx->A,&pA));
309
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.
2661350 PetscFunctionReturn(PETSC_SUCCESS);
310 }
311
312 256568 static PetscErrorCode BVGetArray_Mat(BV bv,PetscScalar **a)
313 {
314 256568 BV_MAT *ctx = (BV_MAT*)bv->data;
315
316
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
256568 PetscFunctionBegin;
317
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
256568 PetscCall(MatDenseGetArray(ctx->A,a));
318
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.
52023 PetscFunctionReturn(PETSC_SUCCESS);
319 }
320
321 256568 static PetscErrorCode BVRestoreArray_Mat(BV bv,PetscScalar **a)
322 {
323 256568 BV_MAT *ctx = (BV_MAT*)bv->data;
324
325
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
256568 PetscFunctionBegin;
326
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
256568 if (a) PetscCall(MatDenseRestoreArray(ctx->A,a));
327
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.
52023 PetscFunctionReturn(PETSC_SUCCESS);
328 }
329
330 1730 static PetscErrorCode BVGetArrayRead_Mat(BV bv,const PetscScalar **a)
331 {
332 1730 BV_MAT *ctx = (BV_MAT*)bv->data;
333
334
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1730 PetscFunctionBegin;
335
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1730 PetscCall(MatDenseGetArrayRead(ctx->A,a));
336
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.
332 PetscFunctionReturn(PETSC_SUCCESS);
337 }
338
339 1730 static PetscErrorCode BVRestoreArrayRead_Mat(BV bv,const PetscScalar **a)
340 {
341 1730 BV_MAT *ctx = (BV_MAT*)bv->data;
342
343
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1730 PetscFunctionBegin;
344
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
1730 if (a) PetscCall(MatDenseRestoreArrayRead(ctx->A,a));
345
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.
332 PetscFunctionReturn(PETSC_SUCCESS);
346 }
347
348 384 static PetscErrorCode BVView_Mat(BV bv,PetscViewer viewer)
349 {
350 384 Mat A;
351 384 PetscViewerFormat format;
352 384 PetscBool isascii;
353 384 const char *bvname,*name;
354
355
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
384 PetscFunctionBegin;
356
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
384 PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii));
357
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
384 if (isascii) {
358
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
384 PetscCall(PetscViewerGetFormat(viewer,&format));
359
8/14
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 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.
384 if (format == PETSC_VIEWER_ASCII_INFO || format == PETSC_VIEWER_ASCII_INFO_DETAIL) PetscFunctionReturn(PETSC_SUCCESS);
360 }
361
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
180 PetscCall(BVGetMat(bv,&A));
362
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
180 PetscCall(MatView(A,viewer));
363
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
180 if (format == PETSC_VIEWER_ASCII_MATLAB) {
364 PetscCall(PetscObjectGetName((PetscObject)A,&name));
365 PetscCall(PetscObjectGetName((PetscObject)bv,&bvname));
366 PetscCall(PetscViewerASCIIPrintf(viewer,"%s=%s;clear %s\n",bvname,name,name));
367 if (bv->nc) PetscCall(PetscViewerASCIIPrintf(viewer,"%s=%s(:,%" PetscInt_FMT ":end);\n",bvname,bvname,bv->nc+1));
368 }
369
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
180 PetscCall(BVRestoreMat(bv,&A));
370
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);
371 }
372
373 141266 static PetscErrorCode BVDestroy_Mat(BV bv)
374 {
375 141266 BV_MAT *ctx = (BV_MAT*)bv->data;
376
377
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
141266 PetscFunctionBegin;
378
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
141266 PetscCall(MatDestroy(&ctx->A));
379
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
141266 PetscCall(VecDestroy(&bv->cv[0]));
380
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
141266 PetscCall(VecDestroy(&bv->cv[1]));
381
5/8
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
141266 PetscCall(PetscFree(bv->data));
382
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.
27538 PetscFunctionReturn(PETSC_SUCCESS);
383 }
384
385 /*MC
386 BVMAT - BVMAT = "mat" - A basis vectors object represented by a dense `Mat`.
387
388 Level: beginner
389
390 .seealso: [](sec:bv), `BV`, `BVType`, `BVSetType()`
391 M*/
392
393 141266 SLEPC_EXTERN PetscErrorCode BVCreate_Mat(BV bv)
394 {
395 141266 BV_MAT *ctx;
396 141266 PetscInt nloc,lsplit;
397 141266 PetscBool seq;
398 141266 char str[50];
399 141266 PetscScalar *array,*ptr=NULL;
400 141266 BV parent;
401 141266 Mat Apar;
402
403
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
141266 PetscFunctionBegin;
404
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
141266 PetscCall(PetscNew(&ctx));
405 141266 bv->data = (void*)ctx;
406
407
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
141266 PetscCall(PetscStrcmpAny(bv->vtype,&bv->cuda,VECSEQCUDA,VECMPICUDA,""));
408
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
141266 PetscCall(PetscStrcmpAny(bv->vtype,&bv->hip,VECSEQHIP,VECMPIHIP,""));
409
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
141266 PetscCall(PetscStrcmpAny(bv->vtype,&ctx->mpi,VECMPI,VECMPICUDA,VECMPIHIP,""));
410
411
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.
141266 PetscCall(PetscStrcmp(bv->vtype,VECSEQ,&seq));
412
7/10
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 4 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
141266 PetscCheck(seq || ctx->mpi || bv->cuda || bv->hip,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"BVMAT does not support the requested vector type: %s",bv->vtype);
413
414
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
141266 PetscCall(PetscLayoutGetLocalSize(bv->map,&nloc));
415
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
141266 PetscCall(BV_SetDefaultLD(bv,nloc));
416
417
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
141266 if (PetscUnlikely(bv->issplit)) {
418 /* split BV: share the memory of the parent BV */
419 2200 parent = bv->splitparent;
420 2200 lsplit = parent->lsplit;
421 2200 Apar = ((BV_MAT*)parent->data)->A;
422
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 times.
2200 if (bv->cuda) {
423 #if defined(PETSC_HAVE_CUDA)
424
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
168 PetscCall(MatDenseCUDAGetArray(Apar,&array));
425
4/4
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 2 times.
168 if (bv->issplit>0) ptr = (bv->issplit==1)? array: array+lsplit*bv->ld;
426
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
36 else ptr = (bv->issplit==1)? array: array-lsplit;
427
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
168 PetscCall(MatDenseCUDARestoreArray(Apar,&array));
428 #endif
429
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 times.
2032 } else if (bv->hip) {
430 #if defined(PETSC_HAVE_HIP)
431
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
168 PetscCall(MatDenseHIPGetArray(Apar,&array));
432
4/4
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 2 times.
168 if (bv->issplit>0) ptr = (bv->issplit==1)? array: array+lsplit*bv->ld;
433
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
36 else ptr = (bv->issplit==1)? array: array-lsplit;
434
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
168 PetscCall(MatDenseHIPRestoreArray(Apar,&array));
435 #endif
436 } else {
437
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1864 PetscCall(MatDenseGetArray(Apar,&array));
438
4/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
1864 if (bv->issplit>0) ptr = (bv->issplit==1)? array: array+lsplit*bv->ld;
439
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
994 else ptr = (bv->issplit==-1)? array: array-lsplit;
440
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1864 PetscCall(MatDenseRestoreArray(Apar,&array));
441 }
442 }
443
444
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
141266 PetscCall(MatCreateDenseFromVecType(PetscObjectComm((PetscObject)bv),bv->vtype,nloc,PETSC_DECIDE,bv->N,bv->m,bv->ld,ptr,&ctx->A));
445
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
141266 if (((PetscObject)bv)->name) {
446
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1520 PetscCall(PetscSNPrintf(str,sizeof(str),"%s_0",((PetscObject)bv)->name));
447
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1520 PetscCall(PetscObjectSetName((PetscObject)ctx->A,str));
448 }
449
450
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
141266 if (PetscUnlikely(bv->Acreate)) {
451
6/10
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
2168 PetscCall(MatConvert(bv->Acreate,bv->cuda?MATDENSECUDA:bv->hip?MATDENSEHIP:MATDENSE,MAT_REUSE_MATRIX,&ctx->A));
452
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
1084 PetscCall(MatDestroy(&bv->Acreate));
453 }
454
455
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
141266 PetscCall(BVCreateVecEmpty(bv,&bv->cv[0]));
456
4/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
141266 PetscCall(BVCreateVecEmpty(bv,&bv->cv[1]));
457
458
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 times.
141266 if (bv->cuda) {
459 #if defined(PETSC_HAVE_CUDA)
460 2336 bv->ops->mult = BVMult_Mat_CUDA;
461 2336 bv->ops->multvec = BVMultVec_Mat_CUDA;
462 2336 bv->ops->multinplace = BVMultInPlace_Mat_CUDA;
463 2336 bv->ops->multinplacetrans = BVMultInPlaceHermitianTranspose_Mat_CUDA;
464 2336 bv->ops->dot = BVDot_Mat_CUDA;
465 2336 bv->ops->dotvec = BVDotVec_Mat_CUDA;
466 2336 bv->ops->dotvec_local = BVDotVec_Local_Mat_CUDA;
467 2336 bv->ops->scale = BVScale_Mat_CUDA;
468 2336 bv->ops->norm = BVNorm_Mat_CUDA;
469 2336 bv->ops->norm_local = BVNorm_Local_Mat_CUDA;
470 2336 bv->ops->normalize = BVNormalize_Mat_CUDA;
471 2336 bv->ops->matmult = BVMatMult_Mat_CUDA;
472 2336 bv->ops->copy = BVCopy_Mat_CUDA;
473 2336 bv->ops->copycolumn = BVCopyColumn_Mat_CUDA;
474 2336 bv->ops->getcolumn = BVGetColumn_Mat_CUDA;
475 2336 bv->ops->restorecolumn = BVRestoreColumn_Mat_CUDA;
476 2336 bv->ops->restoresplit = BVRestoreSplit_Mat_CUDA;
477 2336 bv->ops->restoresplitrows = BVRestoreSplitRows_Mat_CUDA;
478 2336 bv->ops->getmat = BVGetMat_Mat_CUDA;
479 2336 bv->ops->restoremat = BVRestoreMat_Mat_CUDA;
480 #endif
481
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 times.
138930 } else if (bv->hip) {
482 #if defined(PETSC_HAVE_HIP)
483 2342 bv->ops->mult = BVMult_Mat_HIP;
484 2342 bv->ops->multvec = BVMultVec_Mat_HIP;
485 2342 bv->ops->multinplace = BVMultInPlace_Mat_HIP;
486 2342 bv->ops->multinplacetrans = BVMultInPlaceHermitianTranspose_Mat_HIP;
487 2342 bv->ops->dot = BVDot_Mat_HIP;
488 2342 bv->ops->dotvec = BVDotVec_Mat_HIP;
489 2342 bv->ops->dotvec_local = BVDotVec_Local_Mat_HIP;
490 2342 bv->ops->scale = BVScale_Mat_HIP;
491 2342 bv->ops->norm = BVNorm_Mat_HIP;
492 2342 bv->ops->norm_local = BVNorm_Local_Mat_HIP;
493 2342 bv->ops->normalize = BVNormalize_Mat_HIP;
494 2342 bv->ops->matmult = BVMatMult_Mat_HIP;
495 2342 bv->ops->copy = BVCopy_Mat_HIP;
496 2342 bv->ops->copycolumn = BVCopyColumn_Mat_HIP;
497 2342 bv->ops->getcolumn = BVGetColumn_Mat_HIP;
498 2342 bv->ops->restorecolumn = BVRestoreColumn_Mat_HIP;
499 2342 bv->ops->restoresplit = BVRestoreSplit_Mat_HIP;
500 2342 bv->ops->restoresplitrows = BVRestoreSplitRows_Mat_HIP;
501 2342 bv->ops->getmat = BVGetMat_Mat_HIP;
502 2342 bv->ops->restoremat = BVRestoreMat_Mat_HIP;
503 #endif
504 } else {
505 136588 bv->ops->mult = BVMult_Mat;
506 136588 bv->ops->multvec = BVMultVec_Mat;
507 136588 bv->ops->multinplace = BVMultInPlace_Mat;
508 136588 bv->ops->multinplacetrans = BVMultInPlaceHermitianTranspose_Mat;
509 136588 bv->ops->dot = BVDot_Mat;
510 136588 bv->ops->dotvec = BVDotVec_Mat;
511 136588 bv->ops->dotvec_local = BVDotVec_Local_Mat;
512 136588 bv->ops->scale = BVScale_Mat;
513 136588 bv->ops->norm = BVNorm_Mat;
514 136588 bv->ops->norm_local = BVNorm_Local_Mat;
515 136588 bv->ops->normalize = BVNormalize_Mat;
516 136588 bv->ops->matmult = BVMatMult_Mat;
517 136588 bv->ops->copy = BVCopy_Mat;
518 136588 bv->ops->copycolumn = BVCopyColumn_Mat;
519 136588 bv->ops->getcolumn = BVGetColumn_Mat;
520 136588 bv->ops->restorecolumn = BVRestoreColumn_Mat;
521 136588 bv->ops->getmat = BVGetMat_Default;
522 136588 bv->ops->restoremat = BVRestoreMat_Default;
523 }
524 141266 bv->ops->resize = BVResize_Mat;
525 141266 bv->ops->getarray = BVGetArray_Mat;
526 141266 bv->ops->restorearray = BVRestoreArray_Mat;
527 141266 bv->ops->getarrayread = BVGetArrayRead_Mat;
528 141266 bv->ops->restorearrayread = BVRestoreArrayRead_Mat;
529 141266 bv->ops->destroy = BVDestroy_Mat;
530 141266 bv->ops->view = BVView_Mat;
531
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.
141266 PetscFunctionReturn(PETSC_SUCCESS);
532 }
533