Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
3 | SLEPc - Scalable Library for Eigenvalue Problem Computations | ||
4 | Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain | ||
5 | |||
6 | This file is part of SLEPc. | ||
7 | SLEPc is distributed under a 2-clause BSD license (see LICENSE). | ||
8 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
9 | */ | ||
10 | /* | ||
11 | BV implemented as an array of Vecs sharing a contiguous array for elements | ||
12 | */ | ||
13 | |||
14 | #include <slepc/private/bvimpl.h> | ||
15 | |||
16 | typedef struct { | ||
17 | Vec *V; | ||
18 | PetscScalar *array; | ||
19 | PetscBool mpi; | ||
20 | } BV_CONTIGUOUS; | ||
21 | |||
22 | 998 | static PetscErrorCode BVMult_Contiguous(BV Y,PetscScalar alpha,PetscScalar beta,BV X,Mat Q) | |
23 | { | ||
24 | 998 | BV_CONTIGUOUS *y = (BV_CONTIGUOUS*)Y->data,*x = (BV_CONTIGUOUS*)X->data; | |
25 | 998 | const PetscScalar *q; | |
26 | 998 | PetscInt ldq; | |
27 | |||
28 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
998 | PetscFunctionBegin; |
29 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
998 | if (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.
|
798 | PetscCall(MatDenseGetLDA(Q,&ldq)); |
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.
|
798 | PetscCall(MatDenseGetArrayRead(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.
|
798 | PetscCall(BVMult_BLAS_Private(Y,Y->n,Y->k-Y->l,X->k-X->l,alpha,x->array+(X->nc+X->l)*X->ld,X->ld,q+Y->l*ldq+X->l,ldq,beta,y->array+(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.
|
798 | PetscCall(MatDenseRestoreArrayRead(Q,&q)); |
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.
|
200 | } else PetscCall(BVAXPY_BLAS_Private(Y,Y->n,Y->k-Y->l,alpha,x->array+(X->nc+X->l)*X->ld,X->ld,beta,y->array+(Y->nc+Y->l)*Y->ld,Y->ld)); |
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 | 3478 | static PetscErrorCode BVMultVec_Contiguous(BV X,PetscScalar alpha,PetscScalar beta,Vec y,PetscScalar *q) | |
39 | { | ||
40 | 3478 | BV_CONTIGUOUS *x = (BV_CONTIGUOUS*)X->data; | |
41 | 3478 | PetscScalar *py,*qq=q; | |
42 | |||
43 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3478 | PetscFunctionBegin; |
44 |
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.
|
3478 | PetscCall(VecGetArray(y,&py)); |
45 |
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.
|
3478 | if (!q) PetscCall(VecGetArray(X->buffer,&qq)); |
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.
|
3478 | PetscCall(BVMultVec_BLAS_Private(X,X->n,X->k-X->l,alpha,x->array+(X->nc+X->l)*X->ld,X->ld,qq,beta,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.
|
3478 | if (!q) PetscCall(VecRestoreArray(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.
|
3478 | PetscCall(VecRestoreArray(y,&py)); |
49 |
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.
|
693 | PetscFunctionReturn(PETSC_SUCCESS); |
50 | } | ||
51 | |||
52 | 478 | static PetscErrorCode BVMultInPlace_Contiguous(BV V,Mat Q,PetscInt s,PetscInt e) | |
53 | { | ||
54 | 478 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)V->data; | |
55 | 478 | const PetscScalar *q; | |
56 | 478 | PetscInt ldq; | |
57 | |||
58 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
478 | PetscFunctionBegin; |
59 |
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.
|
478 | if (s>=e || !V->n) PetscFunctionReturn(PETSC_SUCCESS); |
60 |
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.
|
478 | PetscCall(MatDenseGetLDA(Q,&ldq)); |
61 |
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.
|
478 | PetscCall(MatDenseGetArrayRead(Q,&q)); |
62 |
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.
|
478 | PetscCall(BVMultInPlace_BLAS_Private(V,V->n,V->k-V->l,s-V->l,e-V->l,ctx->array+(V->nc+V->l)*V->ld,V->ld,q+V->l*ldq+V->l,ldq,PETSC_FALSE)); |
63 |
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.
|
478 | PetscCall(MatDenseRestoreArrayRead(Q,&q)); |
64 |
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); |
65 | } | ||
66 | |||
67 | 10 | static PetscErrorCode BVMultInPlaceHermitianTranspose_Contiguous(BV V,Mat Q,PetscInt s,PetscInt e) | |
68 | { | ||
69 | 10 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)V->data; | |
70 | 10 | const PetscScalar *q; | |
71 | 10 | PetscInt ldq; | |
72 | |||
73 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
74 |
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); |
75 |
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)); |
76 |
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)); |
77 |
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,ctx->array+(V->nc+V->l)*V->ld,V->ld,q+V->l*ldq+V->l,ldq,PETSC_TRUE)); |
78 |
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)); |
79 |
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); |
80 | } | ||
81 | |||
82 | 2368 | static PetscErrorCode BVDot_Contiguous(BV X,BV Y,Mat M) | |
83 | { | ||
84 | 2368 | BV_CONTIGUOUS *x = (BV_CONTIGUOUS*)X->data,*y = (BV_CONTIGUOUS*)Y->data; | |
85 | 2368 | PetscScalar *m; | |
86 | 2368 | PetscInt ldm; | |
87 | |||
88 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2368 | PetscFunctionBegin; |
89 |
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.
|
2368 | PetscCall(MatDenseGetLDA(M,&ldm)); |
90 |
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.
|
2368 | PetscCall(MatDenseGetArray(M,&m)); |
91 |
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.
|
2368 | PetscCall(BVDot_BLAS_Private(X,Y->k-Y->l,X->k-X->l,X->n,y->array+(Y->nc+Y->l)*Y->ld,Y->ld,x->array+(X->nc+X->l)*X->ld,X->ld,m+X->l*ldm+Y->l,ldm,x->mpi)); |
92 |
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.
|
2368 | PetscCall(MatDenseRestoreArray(M,&m)); |
93 |
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.
|
470 | PetscFunctionReturn(PETSC_SUCCESS); |
94 | } | ||
95 | |||
96 | 3548 | static PetscErrorCode BVDotVec_Contiguous(BV X,Vec y,PetscScalar *q) | |
97 | { | ||
98 | 3548 | BV_CONTIGUOUS *x = (BV_CONTIGUOUS*)X->data; | |
99 | 3548 | const PetscScalar *py; | |
100 | 3548 | PetscScalar *qq=q; | |
101 | 3548 | Vec z = y; | |
102 | |||
103 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3548 | PetscFunctionBegin; |
104 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3548 | if (PetscUnlikely(X->matrix)) { |
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.
|
570 | PetscCall(BV_IPMatMult(X,y)); |
106 | 570 | z = X->Bx; | |
107 | } | ||
108 |
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.
|
3548 | PetscCall(VecGetArrayRead(z,&py)); |
109 |
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.
|
3548 | if (!q) PetscCall(VecGetArray(X->buffer,&qq)); |
110 |
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.
|
3548 | PetscCall(BVDotVec_BLAS_Private(X,X->n,X->k-X->l,x->array+(X->nc+X->l)*X->ld,X->ld,py,qq,x->mpi)); |
111 |
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.
|
3548 | if (!q) PetscCall(VecRestoreArray(X->buffer,&qq)); |
112 |
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.
|
3548 | PetscCall(VecRestoreArrayRead(z,&py)); |
113 |
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.
|
707 | PetscFunctionReturn(PETSC_SUCCESS); |
114 | } | ||
115 | |||
116 | 40 | static PetscErrorCode BVDotVec_Local_Contiguous(BV X,Vec y,PetscScalar *m) | |
117 | { | ||
118 | 40 | BV_CONTIGUOUS *x = (BV_CONTIGUOUS*)X->data; | |
119 | 40 | PetscScalar *py; | |
120 | 40 | Vec z = y; | |
121 | |||
122 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
40 | PetscFunctionBegin; |
123 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
40 | if (PetscUnlikely(X->matrix)) { |
124 | ✗ | PetscCall(BV_IPMatMult(X,y)); | |
125 | ✗ | z = X->Bx; | |
126 | } | ||
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.
|
40 | PetscCall(VecGetArray(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.
|
40 | PetscCall(BVDotVec_BLAS_Private(X,X->n,X->k-X->l,x->array+(X->nc+X->l)*X->ld,X->ld,py,m,PETSC_FALSE)); |
129 |
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.
|
40 | PetscCall(VecRestoreArray(z,&py)); |
130 |
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); |
131 | } | ||
132 | |||
133 | 3184 | static PetscErrorCode BVScale_Contiguous(BV bv,PetscInt j,PetscScalar alpha) | |
134 | { | ||
135 | 3184 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
136 | |||
137 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3184 | PetscFunctionBegin; |
138 |
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.
|
3184 | if (!bv->n) PetscFunctionReturn(PETSC_SUCCESS); |
139 |
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.
|
3184 | if (PetscUnlikely(j<0)) PetscCall(BVScale_BLAS_Private(bv,(bv->k-bv->l)*bv->ld,ctx->array+(bv->nc+bv->l)*bv->ld,alpha)); |
140 |
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.
|
3126 | else PetscCall(BVScale_BLAS_Private(bv,bv->n,ctx->array+(bv->nc+j)*bv->ld,alpha)); |
141 |
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.
|
634 | PetscFunctionReturn(PETSC_SUCCESS); |
142 | } | ||
143 | |||
144 | 1123 | static PetscErrorCode BVNorm_Contiguous(BV bv,PetscInt j,NormType type,PetscReal *val) | |
145 | { | ||
146 | 1123 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
147 | |||
148 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1123 | PetscFunctionBegin; |
149 |
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.
|
1123 | if (PetscUnlikely(j<0)) PetscCall(BVNorm_LAPACK_Private(bv,bv->n,bv->k-bv->l,ctx->array+(bv->nc+bv->l)*bv->ld,bv->ld,type,val,ctx->mpi)); |
150 |
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.
|
425 | else PetscCall(BVNorm_LAPACK_Private(bv,bv->n,1,ctx->array+(bv->nc+j)*bv->ld,bv->ld,type,val,ctx->mpi)); |
151 |
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.
|
217 | PetscFunctionReturn(PETSC_SUCCESS); |
152 | } | ||
153 | |||
154 | 20 | static PetscErrorCode BVNorm_Local_Contiguous(BV bv,PetscInt j,NormType type,PetscReal *val) | |
155 | { | ||
156 | 20 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
157 | |||
158 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
159 |
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.
|
20 | if (PetscUnlikely(j<0)) PetscCall(BVNorm_LAPACK_Private(bv,bv->n,bv->k-bv->l,ctx->array+(bv->nc+bv->l)*bv->ld,bv->ld,type,val,PETSC_FALSE)); |
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.
|
20 | else PetscCall(BVNorm_LAPACK_Private(bv,bv->n,1,ctx->array+(bv->nc+j)*bv->ld,bv->ld,type,val,PETSC_FALSE)); |
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.
|
4 | PetscFunctionReturn(PETSC_SUCCESS); |
162 | } | ||
163 | |||
164 | 45 | static PetscErrorCode BVNormalize_Contiguous(BV bv,PetscScalar *eigi) | |
165 | { | ||
166 | 45 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
167 | 45 | PetscScalar *wi=NULL; | |
168 | |||
169 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
45 | PetscFunctionBegin; |
170 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
|
45 | if (eigi) wi = eigi+bv->l; |
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.
|
45 | PetscCall(BVNormalize_LAPACK_Private(bv,bv->n,bv->k-bv->l,ctx->array+(bv->nc+bv->l)*bv->ld,bv->ld,wi,ctx->mpi)); |
172 |
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); |
173 | } | ||
174 | |||
175 | 1030 | static PetscErrorCode BVMatMult_Contiguous(BV V,Mat A,BV W) | |
176 | { | ||
177 | 1030 | BV_CONTIGUOUS *v = (BV_CONTIGUOUS*)V->data,*w = (BV_CONTIGUOUS*)W->data; | |
178 | 1030 | PetscInt j; | |
179 | 1030 | Mat Vmat,Wmat; | |
180 | |||
181 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1030 | PetscFunctionBegin; |
182 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1030 | if (V->vmm) { |
183 |
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.
|
980 | PetscCall(BVGetMat(V,&Vmat)); |
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.
|
980 | PetscCall(BVGetMat(W,&Wmat)); |
185 |
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.
|
980 | PetscCall(MatProductCreateWithMat(A,Vmat,NULL,Wmat)); |
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.
|
980 | PetscCall(MatProductSetType(Wmat,MATPRODUCT_AB)); |
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.
|
980 | PetscCall(MatProductSetFromOptions(Wmat)); |
188 |
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.
|
980 | PetscCall(MatProductSymbolic(Wmat)); |
189 |
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.
|
980 | PetscCall(MatProductNumeric(Wmat)); |
190 |
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.
|
980 | PetscCall(MatProductClear(Wmat)); |
191 |
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.
|
980 | PetscCall(BVRestoreMat(V,&Vmat)); |
192 |
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.
|
980 | PetscCall(BVRestoreMat(W,&Wmat)); |
193 | } else { | ||
194 |
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.
|
380 | for (j=0;j<V->k-V->l;j++) PetscCall(MatMult(A,v->V[V->nc+V->l+j],w->V[W->nc+W->l+j])); |
195 | } | ||
196 |
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.
|
206 | PetscFunctionReturn(PETSC_SUCCESS); |
197 | } | ||
198 | |||
199 | 970 | static PetscErrorCode BVCopy_Contiguous(BV V,BV W) | |
200 | { | ||
201 | 970 | BV_CONTIGUOUS *v = (BV_CONTIGUOUS*)V->data,*w = (BV_CONTIGUOUS*)W->data; | |
202 | 970 | PetscInt j; | |
203 | |||
204 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
970 | PetscFunctionBegin; |
205 |
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.
|
7260 | for (j=0;j<V->k-V->l;j++) PetscCall(PetscArraycpy(w->array+(W->nc+W->l+j)*W->ld,v->array+(V->nc+V->l+j)*V->ld,V->n)); |
206 |
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); |
207 | } | ||
208 | |||
209 | 20 | static PetscErrorCode BVCopyColumn_Contiguous(BV V,PetscInt j,PetscInt i) | |
210 | { | ||
211 | 20 | BV_CONTIGUOUS *v = (BV_CONTIGUOUS*)V->data; | |
212 | |||
213 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
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.
|
20 | PetscCall(PetscArraycpy(v->array+(V->nc+i)*V->ld,v->array+(V->nc+j)*V->ld,V->n)); |
215 |
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); |
216 | } | ||
217 | |||
218 | 80 | static PetscErrorCode BVResize_Contiguous(BV bv,PetscInt m,PetscBool copy) | |
219 | { | ||
220 | 80 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
221 | 80 | PetscInt j,bs; | |
222 | 80 | PetscScalar *newarray; | |
223 | 80 | Vec *newV; | |
224 | 80 | char str[50]; | |
225 | |||
226 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
80 | PetscFunctionBegin; |
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.
|
80 | PetscCall(PetscLayoutGetBlockSize(bv->map,&bs)); |
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.
|
80 | PetscCall(PetscCalloc1(m*bv->ld,&newarray)); |
229 |
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.
|
80 | PetscCall(PetscMalloc1(m,&newV)); |
230 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
940 | for (j=0;j<m;j++) { |
231 |
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.
|
860 | if (ctx->mpi) PetscCall(VecCreateMPIWithArray(PetscObjectComm((PetscObject)bv),bs,bv->n,PETSC_DECIDE,newarray+j*bv->ld,newV+j)); |
232 |
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.
|
860 | else PetscCall(VecCreateSeqWithArray(PetscObjectComm((PetscObject)bv),bs,bv->n,newarray+j*bv->ld,newV+j)); |
233 | } | ||
234 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
80 | if (((PetscObject)bv)->name) { |
235 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
940 | for (j=0;j<m;j++) { |
236 |
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.
|
860 | PetscCall(PetscSNPrintf(str,sizeof(str),"%s_%" PetscInt_FMT,((PetscObject)bv)->name,j)); |
237 |
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.
|
860 | PetscCall(PetscObjectSetName((PetscObject)newV[j],str)); |
238 | } | ||
239 | } | ||
240 |
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.
|
80 | if (copy) PetscCall(PetscArraycpy(newarray,ctx->array,PetscMin(m,bv->m)*bv->ld)); |
241 |
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.
|
80 | PetscCall(VecDestroyVecs(bv->m,&ctx->V)); |
242 | 80 | ctx->V = newV; | |
243 |
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.
|
80 | PetscCall(PetscFree(ctx->array)); |
244 | 80 | ctx->array = newarray; | |
245 |
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.
|
80 | PetscFunctionReturn(PETSC_SUCCESS); |
246 | } | ||
247 | |||
248 | 24963 | static PetscErrorCode BVGetColumn_Contiguous(BV bv,PetscInt j,Vec *v) | |
249 | { | ||
250 | 24963 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
251 | 24963 | PetscInt l; | |
252 | |||
253 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
24963 | PetscFunctionBegin; |
254 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
24963 | l = BVAvailableVec; |
255 | 24963 | bv->cv[l] = ctx->V[bv->nc+j]; | |
256 |
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.
|
24963 | PetscFunctionReturn(PETSC_SUCCESS); |
257 | } | ||
258 | |||
259 | 24963 | static PetscErrorCode BVRestoreColumn_Contiguous(BV bv,PetscInt j,Vec *v) | |
260 | { | ||
261 | 24963 | PetscInt l; | |
262 | |||
263 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
24963 | PetscFunctionBegin; |
264 | 24963 | l = (j==bv->ci[0])? 0: 1; | |
265 | 24963 | bv->cv[l] = NULL; | |
266 |
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.
|
24963 | PetscFunctionReturn(PETSC_SUCCESS); |
267 | } | ||
268 | |||
269 | 2450 | static PetscErrorCode BVGetArray_Contiguous(BV bv,PetscScalar **a) | |
270 | { | ||
271 | 2450 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
272 | |||
273 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2450 | PetscFunctionBegin; |
274 | 2450 | *a = ctx->array; | |
275 |
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.
|
2450 | PetscFunctionReturn(PETSC_SUCCESS); |
276 | } | ||
277 | |||
278 | 80 | static PetscErrorCode BVGetArrayRead_Contiguous(BV bv,const PetscScalar **a) | |
279 | { | ||
280 | 80 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
281 | |||
282 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
80 | PetscFunctionBegin; |
283 | 80 | *a = ctx->array; | |
284 |
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.
|
80 | PetscFunctionReturn(PETSC_SUCCESS); |
285 | } | ||
286 | |||
287 | 3332 | static PetscErrorCode BVDestroy_Contiguous(BV bv) | |
288 | { | ||
289 | 3332 | BV_CONTIGUOUS *ctx = (BV_CONTIGUOUS*)bv->data; | |
290 | |||
291 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3332 | PetscFunctionBegin; |
292 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3332 | if (!bv->issplit) { |
293 |
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.
|
2532 | PetscCall(VecDestroyVecs(bv->nc+bv->m,&ctx->V)); |
294 |
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.
|
2532 | PetscCall(PetscFree(ctx->array)); |
295 | } | ||
296 |
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.
|
3332 | PetscCall(PetscFree(bv->data)); |
297 |
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.
|
664 | PetscFunctionReturn(PETSC_SUCCESS); |
298 | } | ||
299 | |||
300 | 120 | static PetscErrorCode BVView_Contiguous(BV bv,PetscViewer viewer) | |
301 | { | ||
302 | 120 | PetscInt j; | |
303 | 120 | Vec v; | |
304 | 120 | PetscViewerFormat format; | |
305 | 120 | PetscBool isascii,ismatlab=PETSC_FALSE; | |
306 | 120 | const char *bvname,*name; | |
307 | |||
308 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
120 | PetscFunctionBegin; |
309 |
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.
|
120 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
310 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
120 | if (isascii) { |
311 |
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.
|
120 | PetscCall(PetscViewerGetFormat(viewer,&format)); |
312 |
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.
|
120 | if (format == PETSC_VIEWER_ASCII_INFO || format == PETSC_VIEWER_ASCII_INFO_DETAIL) PetscFunctionReturn(PETSC_SUCCESS); |
313 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
100 | if (format == PETSC_VIEWER_ASCII_MATLAB) ismatlab = PETSC_TRUE; |
314 | } | ||
315 | ✗ | if (ismatlab) { | |
316 | ✗ | PetscCall(PetscObjectGetName((PetscObject)bv,&bvname)); | |
317 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer,"%s=[];\n",bvname)); | |
318 | } | ||
319 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
480 | for (j=0;j<bv->m;j++) { |
320 |
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.
|
380 | PetscCall(BVGetColumn(bv,j,&v)); |
321 |
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.
|
380 | PetscCall(VecView(v,viewer)); |
322 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
380 | if (ismatlab) { |
323 | ✗ | PetscCall(PetscObjectGetName((PetscObject)v,&name)); | |
324 | ✗ | PetscCall(PetscViewerASCIIPrintf(viewer,"%s=[%s,%s];clear %s\n",bvname,bvname,name,name)); | |
325 | } | ||
326 |
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.
|
380 | PetscCall(BVRestoreColumn(bv,j,&v)); |
327 | } | ||
328 |
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); |
329 | } | ||
330 | |||
331 | 3332 | SLEPC_EXTERN PetscErrorCode BVCreate_Contiguous(BV bv) | |
332 | { | ||
333 | 3332 | BV_CONTIGUOUS *ctx; | |
334 | 3332 | PetscInt j,nloc,bs,lsplit,lda; | |
335 | 3332 | PetscBool seq,isdense; | |
336 | 3332 | PetscScalar *aa; | |
337 | 3332 | char str[50]; | |
338 | 3332 | PetscScalar *array; | |
339 | 3332 | BV parent; | |
340 | 3332 | Vec *Vpar; | |
341 | 3332 | MatType mtype; | |
342 | |||
343 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3332 | PetscFunctionBegin; |
344 |
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.
|
3332 | PetscCall(PetscNew(&ctx)); |
345 | 3332 | bv->data = (void*)ctx; | |
346 | |||
347 |
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.
|
3332 | PetscCall(PetscStrcmp(bv->vtype,VECMPI,&ctx->mpi)); |
348 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3332 | if (!ctx->mpi) { |
349 |
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.
|
588 | PetscCall(PetscStrcmp(bv->vtype,VECSEQ,&seq)); |
350 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
588 | PetscCheck(seq,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Cannot create a contiguous BV from a non-standard vector type: %s",bv->vtype); |
351 | } | ||
352 | |||
353 |
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.
|
3332 | PetscCall(PetscLayoutGetLocalSize(bv->map,&nloc)); |
354 |
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.
|
3332 | PetscCall(PetscLayoutGetBlockSize(bv->map,&bs)); |
355 |
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.
|
3332 | PetscCall(BV_SetDefaultLD(bv,nloc)); |
356 | |||
357 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3332 | if (PetscUnlikely(bv->issplit)) { |
358 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
800 | PetscCheck(bv->issplit>0,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"BVCONTIGUOUS does not support BVGetSplitRows()"); |
359 | /* split BV: share memory and Vecs of the parent BV */ | ||
360 | 800 | parent = bv->splitparent; | |
361 | 800 | lsplit = parent->lsplit; | |
362 | 800 | Vpar = ((BV_CONTIGUOUS*)parent->data)->V; | |
363 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
800 | ctx->V = (bv->issplit==1)? Vpar: Vpar+lsplit; |
364 | 800 | array = ((BV_CONTIGUOUS*)parent->data)->array; | |
365 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
800 | ctx->array = (bv->issplit==1)? array: array+lsplit*bv->ld; |
366 | } else { | ||
367 | /* regular BV: allocate memory and Vecs for the BV entries */ | ||
368 |
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.
|
2532 | PetscCall(PetscCalloc1(bv->m*bv->ld,&ctx->array)); |
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.
|
2532 | PetscCall(PetscMalloc1(bv->m,&ctx->V)); |
370 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
21832 | for (j=0;j<bv->m;j++) { |
371 |
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.
|
19300 | if (ctx->mpi) PetscCall(VecCreateMPIWithArray(PetscObjectComm((PetscObject)bv),bs,nloc,PETSC_DECIDE,ctx->array+j*bv->ld,ctx->V+j)); |
372 |
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.
|
19300 | else PetscCall(VecCreateSeqWithArray(PetscObjectComm((PetscObject)bv),bs,nloc,ctx->array+j*bv->ld,ctx->V+j)); |
373 | } | ||
374 | } | ||
375 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3332 | if (((PetscObject)bv)->name) { |
376 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9500 | for (j=0;j<bv->m;j++) { |
377 |
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.
|
8420 | PetscCall(PetscSNPrintf(str,sizeof(str),"%s_%" PetscInt_FMT,((PetscObject)bv)->name,j)); |
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.
|
8420 | PetscCall(PetscObjectSetName((PetscObject)ctx->V[j],str)); |
379 | } | ||
380 | } | ||
381 | |||
382 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3332 | if (PetscUnlikely(bv->Acreate)) { |
383 |
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.
|
20 | PetscCall(MatGetType(bv->Acreate,&mtype)); |
384 |
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.
|
20 | PetscCall(PetscStrcmpAny(mtype,&isdense,MATSEQDENSE,MATMPIDENSE,"")); |
385 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
20 | PetscCheck(isdense,PetscObjectComm((PetscObject)bv->Acreate),PETSC_ERR_SUP,"BVCONTIGUOUS requires a dense matrix in BVCreateFromMat()"); |
386 |
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.
|
20 | PetscCall(MatDenseGetArray(bv->Acreate,&aa)); |
387 |
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.
|
20 | PetscCall(MatDenseGetLDA(bv->Acreate,&lda)); |
388 |
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.
|
180 | for (j=0;j<bv->m;j++) PetscCall(PetscArraycpy(ctx->array+j*bv->ld,aa+j*lda,bv->n)); |
389 |
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.
|
20 | PetscCall(MatDenseRestoreArray(bv->Acreate,&aa)); |
390 |
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.
|
20 | PetscCall(MatDestroy(&bv->Acreate)); |
391 | } | ||
392 | |||
393 | 3332 | bv->ops->mult = BVMult_Contiguous; | |
394 | 3332 | bv->ops->multvec = BVMultVec_Contiguous; | |
395 | 3332 | bv->ops->multinplace = BVMultInPlace_Contiguous; | |
396 | 3332 | bv->ops->multinplacetrans = BVMultInPlaceHermitianTranspose_Contiguous; | |
397 | 3332 | bv->ops->dot = BVDot_Contiguous; | |
398 | 3332 | bv->ops->dotvec = BVDotVec_Contiguous; | |
399 | 3332 | bv->ops->dotvec_local = BVDotVec_Local_Contiguous; | |
400 | 3332 | bv->ops->scale = BVScale_Contiguous; | |
401 | 3332 | bv->ops->norm = BVNorm_Contiguous; | |
402 | 3332 | bv->ops->norm_local = BVNorm_Local_Contiguous; | |
403 | 3332 | bv->ops->normalize = BVNormalize_Contiguous; | |
404 | 3332 | bv->ops->matmult = BVMatMult_Contiguous; | |
405 | 3332 | bv->ops->copy = BVCopy_Contiguous; | |
406 | 3332 | bv->ops->copycolumn = BVCopyColumn_Contiguous; | |
407 | 3332 | bv->ops->resize = BVResize_Contiguous; | |
408 | 3332 | bv->ops->getcolumn = BVGetColumn_Contiguous; | |
409 | 3332 | bv->ops->restorecolumn = BVRestoreColumn_Contiguous; | |
410 | 3332 | bv->ops->getarray = BVGetArray_Contiguous; | |
411 | 3332 | bv->ops->getarrayread = BVGetArrayRead_Contiguous; | |
412 | 3332 | bv->ops->getmat = BVGetMat_Default; | |
413 | 3332 | bv->ops->restoremat = BVRestoreMat_Default; | |
414 | 3332 | bv->ops->destroy = BVDestroy_Contiguous; | |
415 | 3332 | bv->ops->view = BVView_Contiguous; | |
416 |
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.
|
3332 | PetscFunctionReturn(PETSC_SUCCESS); |
417 | } | ||
418 |