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 operations involving global communication | ||
12 | */ | ||
13 | |||
14 | #include <slepc/private/bvimpl.h> /*I "slepcbv.h" I*/ | ||
15 | |||
16 | /* | ||
17 | BVDot for the particular case of non-standard inner product with | ||
18 | matrix B, which is assumed to be symmetric (or complex Hermitian) | ||
19 | */ | ||
20 | 680 | static inline PetscErrorCode BVDot_Private(BV X,BV Y,Mat M) | |
21 | { | ||
22 | 680 | PetscObjectId idx,idy; | |
23 | 680 | PetscInt i,j,jend,m; | |
24 | 680 | PetscScalar *marray; | |
25 | 680 | PetscBool symm=PETSC_FALSE; | |
26 | 680 | Mat B; | |
27 | 680 | Vec z; | |
28 | |||
29 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
680 | PetscFunctionBegin; |
30 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
680 | BVCheckOp(Y,1,dotvec); |
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.
|
680 | PetscCall(MatGetSize(M,&m,NULL)); |
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.
|
680 | PetscCall(MatDenseGetArray(M,&marray)); |
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.
|
680 | PetscCall(PetscObjectGetId((PetscObject)X,&idx)); |
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.
|
680 | PetscCall(PetscObjectGetId((PetscObject)Y,&idy)); |
35 | 680 | B = Y->matrix; | |
36 | 680 | Y->matrix = NULL; | |
37 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
680 | if (idx==idy) symm=PETSC_TRUE; /* M=X'BX is symmetric */ |
38 | 680 | jend = X->k; | |
39 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4120 | for (j=X->l;j<jend;j++) { |
40 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3440 | if (symm) Y->k = j+1; |
41 |
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.
|
3440 | PetscCall(BVGetColumn(X->cached,j,&z)); |
42 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ 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.
|
3440 | PetscUseTypeMethod(Y,dotvec,z,marray+j*m+Y->l); |
43 |
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.
|
3440 | PetscCall(BVRestoreColumn(X->cached,j,&z)); |
44 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3440 | if (symm) { |
45 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
10320 | for (i=X->l;i<j;i++) |
46 | 7360 | marray[j+i*m] = PetscConj(marray[i+j*m]); | |
47 | } | ||
48 | } | ||
49 |
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.
|
680 | PetscCall(MatDenseRestoreArray(M,&marray)); |
50 | 680 | Y->matrix = B; | |
51 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
680 | PetscFunctionReturn(PETSC_SUCCESS); |
52 | } | ||
53 | |||
54 | /*@ | ||
55 | BVDot - Computes the 'block-dot' product of two basis vectors objects. | ||
56 | |||
57 | Collective | ||
58 | |||
59 | Input Parameters: | ||
60 | + X - first basis vectors | ||
61 | - Y - second basis vectors | ||
62 | |||
63 | Output Parameter: | ||
64 | . M - the resulting matrix | ||
65 | |||
66 | Notes: | ||
67 | This is the generalization of VecDot() for a collection of vectors, M = Y^H*X. | ||
68 | The result is a matrix M whose entry m_ij is equal to y_i^H x_j (where y_i^H | ||
69 | denotes the conjugate transpose of y_i). | ||
70 | |||
71 | If a non-standard inner product has been specified with BVSetMatrix(), | ||
72 | then the result is M = Y^H*B*X. In this case, both X and Y must have | ||
73 | the same associated matrix. | ||
74 | |||
75 | On entry, M must be a sequential dense Mat with dimensions m,n at least, where | ||
76 | m is the number of active columns of Y and n is the number of active columns of X. | ||
77 | Only rows (resp. columns) of M starting from ly (resp. lx) are computed, | ||
78 | where ly (resp. lx) is the number of leading columns of Y (resp. X). | ||
79 | |||
80 | X and Y need not be different objects. | ||
81 | |||
82 | Level: intermediate | ||
83 | |||
84 | .seealso: BVDotVec(), BVDotColumn(), BVSetActiveColumns(), BVSetMatrix() | ||
85 | @*/ | ||
86 | 295016 | PetscErrorCode BVDot(BV X,BV Y,Mat M) | |
87 | { | ||
88 | 295016 | PetscInt m,n; | |
89 | |||
90 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
295016 | PetscFunctionBegin; |
91 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
295016 | PetscValidHeaderSpecific(X,BV_CLASSID,1); |
92 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
295016 | PetscValidHeaderSpecific(Y,BV_CLASSID,2); |
93 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
295016 | PetscValidHeaderSpecific(M,MAT_CLASSID,3); |
94 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
295016 | PetscValidType(X,1); |
95 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
295016 | BVCheckSizes(X,1); |
96 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
295016 | PetscValidType(Y,2); |
97 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
295016 | BVCheckSizes(Y,2); |
98 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
295016 | PetscValidType(M,3); |
99 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
295016 | PetscCheckSameTypeAndComm(X,1,Y,2); |
100 |
4/10✓ 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.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
295016 | SlepcMatCheckSeq(M); |
101 | |||
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.
|
295016 | PetscCall(MatGetSize(M,&m,&n)); |
103 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
295016 | PetscCheck(m>=Y->k,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_SIZ,"Mat argument has %" PetscInt_FMT " rows, should have at least %" PetscInt_FMT,m,Y->k); |
104 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
295016 | PetscCheck(n>=X->k,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_SIZ,"Mat argument has %" PetscInt_FMT " columns, should have at least %" PetscInt_FMT,n,X->k); |
105 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
295016 | PetscCheck(X->n==Y->n,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_INCOMP,"Mismatching local dimension X %" PetscInt_FMT ", Y %" PetscInt_FMT,X->n,Y->n); |
106 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
295016 | PetscCheck(X->matrix==Y->matrix,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_WRONGSTATE,"X and Y must have the same inner product matrix"); |
107 |
10/16✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 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.
|
295016 | if (X->l==X->k || Y->l==Y->k) PetscFunctionReturn(PETSC_SUCCESS); |
108 | |||
109 |
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.
|
294084 | PetscCall(PetscLogEventBegin(BV_Dot,X,Y,0,0)); |
110 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
294084 | if (X->matrix) { /* non-standard inner product */ |
111 | /* compute BX first */ | ||
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.
|
3579 | PetscCall(BV_IPMatMultBV(X)); |
113 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3579 | if (X->vmm==BV_MATMULT_VECS) { |
114 | /* perform computation column by column */ | ||
115 |
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.
|
680 | PetscCall(BVDot_Private(X,Y,M)); |
116 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ 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.
|
2899 | } else PetscUseTypeMethod(X->cached,dot,Y,M); |
117 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ 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.
|
290505 | } else PetscUseTypeMethod(X,dot,Y,M); |
118 |
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.
|
294084 | PetscCall(PetscLogEventEnd(BV_Dot,X,Y,0,0)); |
119 |
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.
|
57550 | PetscFunctionReturn(PETSC_SUCCESS); |
120 | } | ||
121 | |||
122 | /*@ | ||
123 | BVDotVec - Computes multiple dot products of a vector against all the | ||
124 | column vectors of a BV. | ||
125 | |||
126 | Collective | ||
127 | |||
128 | Input Parameters: | ||
129 | + X - basis vectors | ||
130 | - y - a vector | ||
131 | |||
132 | Output Parameter: | ||
133 | . m - an array where the result must be placed | ||
134 | |||
135 | Notes: | ||
136 | This is analogue to VecMDot(), but using BV to represent a collection | ||
137 | of vectors. The result is m = X^H*y, so m_i is equal to x_i^H y. Note | ||
138 | that here X is transposed as opposed to BVDot(). | ||
139 | |||
140 | If a non-standard inner product has been specified with BVSetMatrix(), | ||
141 | then the result is m = X^H*B*y. | ||
142 | |||
143 | The length of array m must be equal to the number of active columns of X | ||
144 | minus the number of leading columns, i.e. the first entry of m is the | ||
145 | product of the first non-leading column with y. | ||
146 | |||
147 | Level: intermediate | ||
148 | |||
149 | .seealso: BVDot(), BVDotColumn(), BVSetActiveColumns(), BVSetMatrix() | ||
150 | @*/ | ||
151 | 1439075 | PetscErrorCode BVDotVec(BV X,Vec y,PetscScalar m[]) | |
152 | { | ||
153 | 1439075 | PetscInt n; | |
154 | |||
155 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1439075 | PetscFunctionBegin; |
156 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1439075 | PetscValidHeaderSpecific(X,BV_CLASSID,1); |
157 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
1439075 | PetscValidHeaderSpecific(y,VEC_CLASSID,2); |
158 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1439075 | PetscValidType(X,1); |
159 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1439075 | BVCheckSizes(X,1); |
160 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1439075 | BVCheckOp(X,1,dotvec); |
161 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1439075 | PetscValidType(y,2); |
162 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
1439075 | PetscCheckSameTypeAndComm(X,1,y,2); |
163 | |||
164 |
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.
|
1439075 | PetscCall(VecGetLocalSize(y,&n)); |
165 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1439075 | PetscCheck(X->n==n,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_INCOMP,"Mismatching local dimension X %" PetscInt_FMT ", y %" PetscInt_FMT,X->n,n); |
166 | |||
167 |
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.
|
1439075 | PetscCall(PetscLogEventBegin(BV_DotVec,X,y,0,0)); |
168 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ 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.
|
1439075 | PetscUseTypeMethod(X,dotvec,y,m); |
169 |
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.
|
1439075 | PetscCall(PetscLogEventEnd(BV_DotVec,X,y,0,0)); |
170 |
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.
|
283639 | PetscFunctionReturn(PETSC_SUCCESS); |
171 | } | ||
172 | |||
173 | /*@ | ||
174 | BVDotVecBegin - Starts a split phase dot product computation. | ||
175 | |||
176 | Input Parameters: | ||
177 | + X - basis vectors | ||
178 | . y - a vector | ||
179 | - m - an array where the result will go (can be NULL) | ||
180 | |||
181 | Note: | ||
182 | Each call to BVDotVecBegin() should be paired with a call to BVDotVecEnd(). | ||
183 | |||
184 | Level: advanced | ||
185 | |||
186 | .seealso: BVDotVecEnd(), BVDotVec() | ||
187 | @*/ | ||
188 | 45330 | PetscErrorCode BVDotVecBegin(BV X,Vec y,PetscScalar *m) | |
189 | { | ||
190 | 45330 | PetscInt i,n,nv; | |
191 | 45330 | PetscSplitReduction *sr; | |
192 | 45330 | MPI_Comm comm; | |
193 | |||
194 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
45330 | PetscFunctionBegin; |
195 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
45330 | PetscValidHeaderSpecific(X,BV_CLASSID,1); |
196 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
45330 | PetscValidHeaderSpecific(y,VEC_CLASSID,2); |
197 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
45330 | PetscValidType(X,1); |
198 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
45330 | BVCheckSizes(X,1); |
199 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
45330 | PetscValidType(y,2); |
200 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
45330 | PetscCheckSameTypeAndComm(X,1,y,2); |
201 | |||
202 |
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.
|
45330 | PetscCall(VecGetLocalSize(y,&n)); |
203 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
45330 | PetscCheck(X->n==n,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_INCOMP,"Mismatching local dimension X %" PetscInt_FMT ", y %" PetscInt_FMT,X->n,n); |
204 | |||
205 |
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.
|
45330 | if (X->ops->dotvec_begin) PetscUseTypeMethod(X,dotvec_begin,y,m); |
206 | else { | ||
207 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
45310 | BVCheckOp(X,1,dotvec_local); |
208 | 45310 | nv = X->k-X->l; | |
209 |
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.
|
45310 | PetscCall(PetscObjectGetComm((PetscObject)X,&comm)); |
210 |
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.
|
45310 | PetscCall(PetscSplitReductionGet(comm,&sr)); |
211 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
45310 | PetscCheck(sr->state==STATE_BEGIN,PetscObjectComm((PetscObject)X),PETSC_ERR_ORDER,"Called before all VecxxxEnd() called"); |
212 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
588802 | for (i=0;i<nv;i++) { |
213 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
543492 | if (sr->numopsbegin+i >= sr->maxops) PetscCall(PetscSplitReductionExtend(sr)); |
214 | 543492 | sr->reducetype[sr->numopsbegin+i] = PETSC_SR_REDUCE_SUM; | |
215 | 543492 | sr->invecs[sr->numopsbegin+i] = (void*)X; | |
216 | } | ||
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.
|
45310 | PetscCall(PetscLogEventBegin(BV_DotVec,X,y,0,0)); |
218 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ 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.
|
45310 | PetscUseTypeMethod(X,dotvec_local,y,sr->lvalues+sr->numopsbegin); |
219 | 45310 | sr->numopsbegin += nv; | |
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.
|
45310 | PetscCall(PetscLogEventEnd(BV_DotVec,X,y,0,0)); |
221 | } | ||
222 |
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.
|
8690 | PetscFunctionReturn(PETSC_SUCCESS); |
223 | } | ||
224 | |||
225 | /*@ | ||
226 | BVDotVecEnd - Ends a split phase dot product computation. | ||
227 | |||
228 | Input Parameters: | ||
229 | + X - basis vectors | ||
230 | . y - a vector | ||
231 | - m - an array where the result will go | ||
232 | |||
233 | Note: | ||
234 | Each call to BVDotVecBegin() should be paired with a call to BVDotVecEnd(). | ||
235 | |||
236 | Level: advanced | ||
237 | |||
238 | .seealso: BVDotVecBegin(), BVDotVec() | ||
239 | @*/ | ||
240 | 45330 | PetscErrorCode BVDotVecEnd(BV X,Vec y,PetscScalar *m) | |
241 | { | ||
242 | 45330 | PetscInt i,nv; | |
243 | 45330 | PetscSplitReduction *sr; | |
244 | 45330 | MPI_Comm comm; | |
245 | |||
246 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
45330 | PetscFunctionBegin; |
247 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
45330 | PetscValidHeaderSpecific(X,BV_CLASSID,1); |
248 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
45330 | PetscValidType(X,1); |
249 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
45330 | BVCheckSizes(X,1); |
250 | |||
251 |
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.
|
45330 | if (X->ops->dotvec_end) PetscUseTypeMethod(X,dotvec_end,y,m); |
252 | else { | ||
253 | 45310 | nv = X->k-X->l; | |
254 |
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.
|
45310 | PetscCall(PetscObjectGetComm((PetscObject)X,&comm)); |
255 |
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.
|
45310 | PetscCall(PetscSplitReductionGet(comm,&sr)); |
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.
|
45310 | PetscCall(PetscSplitReductionEnd(sr)); |
257 | |||
258 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
45310 | PetscCheck(sr->numopsend<sr->numopsbegin,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_WRONGSTATE,"Called VecxxxEnd() more times than VecxxxBegin()"); |
259 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
45310 | PetscCheck((void*)X==sr->invecs[sr->numopsend],PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_WRONGSTATE,"Called BVxxxEnd() in a different order or with a different BV than BVxxxBegin()"); |
260 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
45310 | PetscCheck(sr->reducetype[sr->numopsend]==PETSC_SR_REDUCE_SUM,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_WRONGSTATE,"Wrong type of reduction"); |
261 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
588802 | for (i=0;i<nv;i++) m[i] = sr->gvalues[sr->numopsend++]; |
262 | |||
263 | /* Finished getting all the results so reset to no outstanding requests */ | ||
264 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
45310 | if (sr->numopsend == sr->numopsbegin) { |
265 | 23251 | sr->state = STATE_BEGIN; | |
266 | 23251 | sr->numopsend = 0; | |
267 | 23251 | sr->numopsbegin = 0; | |
268 | } | ||
269 | } | ||
270 |
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.
|
8690 | PetscFunctionReturn(PETSC_SUCCESS); |
271 | } | ||
272 | |||
273 | /*@ | ||
274 | BVDotColumn - Computes multiple dot products of a column against all the | ||
275 | previous columns of a BV. | ||
276 | |||
277 | Collective | ||
278 | |||
279 | Input Parameters: | ||
280 | + X - basis vectors | ||
281 | - j - the column index | ||
282 | |||
283 | Output Parameter: | ||
284 | . q - an array where the result must be placed | ||
285 | |||
286 | Notes: | ||
287 | This operation is equivalent to BVDotVec() but it uses column j of X | ||
288 | rather than taking a Vec as an argument. The number of active columns of | ||
289 | X is set to j before the computation, and restored afterwards. | ||
290 | If X has leading columns specified, then these columns do not participate | ||
291 | in the computation. Therefore, the length of array q must be equal to j | ||
292 | minus the number of leading columns. | ||
293 | |||
294 | Developer Notes: | ||
295 | If q is NULL, then the result is written in position nc+l of the internal | ||
296 | buffer vector, see BVGetBufferVec(). | ||
297 | |||
298 | Level: advanced | ||
299 | |||
300 | .seealso: BVDot(), BVDotVec(), BVSetActiveColumns(), BVSetMatrix() | ||
301 | @*/ | ||
302 | 93958 | PetscErrorCode BVDotColumn(BV X,PetscInt j,PetscScalar *q) | |
303 | { | ||
304 | 93958 | PetscInt ksave; | |
305 | 93958 | Vec y; | |
306 | |||
307 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
93958 | PetscFunctionBegin; |
308 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
93958 | PetscValidHeaderSpecific(X,BV_CLASSID,1); |
309 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
93958 | PetscValidLogicalCollectiveInt(X,j,2); |
310 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
93958 | PetscValidType(X,1); |
311 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
93958 | BVCheckSizes(X,1); |
312 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
93958 | BVCheckOp(X,1,dotvec); |
313 | |||
314 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
93958 | PetscCheck(j>=0,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_OUTOFRANGE,"Index j must be non-negative"); |
315 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
93958 | PetscCheck(j<X->m,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_OUTOFRANGE,"Index j=%" PetscInt_FMT " but BV only has %" PetscInt_FMT " columns",j,X->m); |
316 | |||
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.
|
93958 | PetscCall(PetscLogEventBegin(BV_DotVec,X,0,0,0)); |
318 | 93958 | ksave = X->k; | |
319 | 93958 | X->k = j; | |
320 |
8/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ 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.
|
93958 | if (!q && !X->buffer) PetscCall(BVGetBufferVec(X,&X->buffer)); |
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.
|
93958 | PetscCall(BVGetColumn(X,j,&y)); |
322 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ 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.
|
93958 | PetscUseTypeMethod(X,dotvec,y,q); |
323 |
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.
|
93958 | PetscCall(BVRestoreColumn(X,j,&y)); |
324 | 93958 | X->k = ksave; | |
325 |
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.
|
93958 | PetscCall(PetscLogEventEnd(BV_DotVec,X,0,0,0)); |
326 |
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.
|
19332 | PetscFunctionReturn(PETSC_SUCCESS); |
327 | } | ||
328 | |||
329 | /*@ | ||
330 | BVDotColumnBegin - Starts a split phase dot product computation. | ||
331 | |||
332 | Input Parameters: | ||
333 | + X - basis vectors | ||
334 | . j - the column index | ||
335 | - m - an array where the result will go (can be NULL) | ||
336 | |||
337 | Note: | ||
338 | Each call to BVDotColumnBegin() should be paired with a call to BVDotColumnEnd(). | ||
339 | |||
340 | Level: advanced | ||
341 | |||
342 | .seealso: BVDotColumnEnd(), BVDotColumn() | ||
343 | @*/ | ||
344 | 24724 | PetscErrorCode BVDotColumnBegin(BV X,PetscInt j,PetscScalar *m) | |
345 | { | ||
346 | 24724 | PetscInt i,nv,ksave; | |
347 | 24724 | PetscSplitReduction *sr; | |
348 | 24724 | MPI_Comm comm; | |
349 | 24724 | Vec y; | |
350 | |||
351 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
24724 | PetscFunctionBegin; |
352 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
24724 | PetscValidHeaderSpecific(X,BV_CLASSID,1); |
353 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
24724 | PetscValidLogicalCollectiveInt(X,j,2); |
354 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24724 | PetscValidType(X,1); |
355 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24724 | BVCheckSizes(X,1); |
356 | |||
357 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24724 | PetscCheck(j>=0,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_OUTOFRANGE,"Index j must be non-negative"); |
358 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24724 | PetscCheck(j<X->m,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_OUTOFRANGE,"Index j=%" PetscInt_FMT " but BV only has %" PetscInt_FMT " columns",j,X->m); |
359 | 24724 | ksave = X->k; | |
360 | 24724 | X->k = j; | |
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.
|
24724 | PetscCall(BVGetColumn(X,j,&y)); |
362 | |||
363 |
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.
|
24724 | if (X->ops->dotvec_begin) PetscUseTypeMethod(X,dotvec_begin,y,m); |
364 | else { | ||
365 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24704 | BVCheckOp(X,1,dotvec_local); |
366 | 24704 | nv = X->k-X->l; | |
367 |
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.
|
24704 | PetscCall(PetscObjectGetComm((PetscObject)X,&comm)); |
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.
|
24704 | PetscCall(PetscSplitReductionGet(comm,&sr)); |
369 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24704 | PetscCheck(sr->state==STATE_BEGIN,PetscObjectComm((PetscObject)X),PETSC_ERR_ORDER,"Called before all VecxxxEnd() called"); |
370 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
247960 | for (i=0;i<nv;i++) { |
371 |
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.
|
223256 | if (sr->numopsbegin+i >= sr->maxops) PetscCall(PetscSplitReductionExtend(sr)); |
372 | 223256 | sr->reducetype[sr->numopsbegin+i] = PETSC_SR_REDUCE_SUM; | |
373 | 223256 | sr->invecs[sr->numopsbegin+i] = (void*)X; | |
374 | } | ||
375 |
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.
|
24704 | PetscCall(PetscLogEventBegin(BV_DotVec,X,0,0,0)); |
376 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ 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.
|
24704 | PetscUseTypeMethod(X,dotvec_local,y,sr->lvalues+sr->numopsbegin); |
377 | 24704 | sr->numopsbegin += nv; | |
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.
|
24704 | PetscCall(PetscLogEventEnd(BV_DotVec,X,0,0,0)); |
379 | } | ||
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.
|
24724 | PetscCall(BVRestoreColumn(X,j,&y)); |
381 | 24724 | X->k = ksave; | |
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.
|
24724 | PetscFunctionReturn(PETSC_SUCCESS); |
383 | } | ||
384 | |||
385 | /*@ | ||
386 | BVDotColumnEnd - Ends a split phase dot product computation. | ||
387 | |||
388 | Input Parameters: | ||
389 | + X - basis vectors | ||
390 | . j - the column index | ||
391 | - m - an array where the result will go | ||
392 | |||
393 | Notes: | ||
394 | Each call to BVDotColumnBegin() should be paired with a call to BVDotColumnEnd(). | ||
395 | |||
396 | Level: advanced | ||
397 | |||
398 | .seealso: BVDotColumnBegin(), BVDotColumn() | ||
399 | @*/ | ||
400 | 24724 | PetscErrorCode BVDotColumnEnd(BV X,PetscInt j,PetscScalar *m) | |
401 | { | ||
402 | 24724 | PetscInt i,nv,ksave; | |
403 | 24724 | PetscSplitReduction *sr; | |
404 | 24724 | MPI_Comm comm; | |
405 | 24724 | Vec y; | |
406 | |||
407 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
24724 | PetscFunctionBegin; |
408 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
24724 | PetscValidHeaderSpecific(X,BV_CLASSID,1); |
409 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
24724 | PetscValidLogicalCollectiveInt(X,j,2); |
410 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24724 | PetscValidType(X,1); |
411 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24724 | BVCheckSizes(X,1); |
412 | |||
413 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24724 | PetscCheck(j>=0,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_OUTOFRANGE,"Index j must be non-negative"); |
414 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24724 | PetscCheck(j<X->m,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_OUTOFRANGE,"Index j=%" PetscInt_FMT " but BV only has %" PetscInt_FMT " columns",j,X->m); |
415 | 24724 | ksave = X->k; | |
416 | 24724 | X->k = j; | |
417 | |||
418 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
24724 | if (X->ops->dotvec_end) { |
419 |
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(BVGetColumn(X,j,&y)); |
420 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ 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.
|
20 | PetscUseTypeMethod(X,dotvec_end,y,m); |
421 |
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(BVRestoreColumn(X,j,&y)); |
422 | } else { | ||
423 | 24704 | nv = X->k-X->l; | |
424 |
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.
|
24704 | PetscCall(PetscObjectGetComm((PetscObject)X,&comm)); |
425 |
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.
|
24704 | PetscCall(PetscSplitReductionGet(comm,&sr)); |
426 |
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.
|
24704 | PetscCall(PetscSplitReductionEnd(sr)); |
427 | |||
428 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24704 | PetscCheck(sr->numopsend<sr->numopsbegin,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_WRONGSTATE,"Called VecxxxEnd() more times than VecxxxBegin()"); |
429 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24704 | PetscCheck((void*)X==sr->invecs[sr->numopsend],PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_WRONGSTATE,"Called BVxxxEnd() in a different order or with a different BV than BVxxxBegin()"); |
430 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
24704 | PetscCheck(sr->reducetype[sr->numopsend]==PETSC_SR_REDUCE_SUM,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_WRONGSTATE,"Wrong type of reduction"); |
431 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
247960 | for (i=0;i<nv;i++) m[i] = sr->gvalues[sr->numopsend++]; |
432 | |||
433 | /* Finished getting all the results so reset to no outstanding requests */ | ||
434 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
24704 | if (sr->numopsend == sr->numopsbegin) { |
435 | 7754 | sr->state = STATE_BEGIN; | |
436 | 7754 | sr->numopsend = 0; | |
437 | 7754 | sr->numopsbegin = 0; | |
438 | } | ||
439 | } | ||
440 | 24724 | X->k = ksave; | |
441 |
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.
|
24724 | PetscFunctionReturn(PETSC_SUCCESS); |
442 | } | ||
443 | |||
444 | 211548 | static inline PetscErrorCode BVNorm_Private(BV bv,Vec z,NormType type,PetscReal *val) | |
445 | { | ||
446 | 211548 | PetscScalar p; | |
447 | |||
448 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
211548 | PetscFunctionBegin; |
449 |
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.
|
211548 | PetscCall(BV_IPMatMult(bv,z)); |
450 |
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.
|
211548 | PetscCall(VecDot(bv->Bx,z,&p)); |
451 |
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.
|
211548 | PetscCall(BV_SafeSqrt(bv,p,val)); |
452 |
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.
|
43013 | PetscFunctionReturn(PETSC_SUCCESS); |
453 | } | ||
454 | |||
455 | 5174 | static inline PetscErrorCode BVNorm_Begin_Private(BV bv,Vec z,NormType type,PetscReal *val) | |
456 | { | ||
457 | 5174 | PetscScalar p; | |
458 | |||
459 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
5174 | PetscFunctionBegin; |
460 |
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.
|
5174 | PetscCall(BV_IPMatMult(bv,z)); |
461 |
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.
|
5174 | PetscCall(VecDotBegin(bv->Bx,z,&p)); |
462 |
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.
|
846 | PetscFunctionReturn(PETSC_SUCCESS); |
463 | } | ||
464 | |||
465 | 5174 | static inline PetscErrorCode BVNorm_End_Private(BV bv,Vec z,NormType type,PetscReal *val) | |
466 | { | ||
467 | 5174 | PetscScalar p; | |
468 | |||
469 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
5174 | PetscFunctionBegin; |
470 |
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.
|
5174 | PetscCall(VecDotEnd(bv->Bx,z,&p)); |
471 |
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.
|
5174 | PetscCall(BV_SafeSqrt(bv,p,val)); |
472 |
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.
|
846 | PetscFunctionReturn(PETSC_SUCCESS); |
473 | } | ||
474 | |||
475 | /*@ | ||
476 | BVNorm - Computes the matrix norm of the BV. | ||
477 | |||
478 | Collective | ||
479 | |||
480 | Input Parameters: | ||
481 | + bv - basis vectors | ||
482 | - type - the norm type | ||
483 | |||
484 | Output Parameter: | ||
485 | . val - the norm | ||
486 | |||
487 | Notes: | ||
488 | All active columns (except the leading ones) are considered as a matrix. | ||
489 | The allowed norms are NORM_1, NORM_FROBENIUS, and NORM_INFINITY. | ||
490 | |||
491 | This operation fails if a non-standard inner product has been | ||
492 | specified with BVSetMatrix(). | ||
493 | |||
494 | Level: intermediate | ||
495 | |||
496 | .seealso: BVNormVec(), BVNormColumn(), BVNormalize(), BVSetActiveColumns(), BVSetMatrix() | ||
497 | @*/ | ||
498 | 3374 | PetscErrorCode BVNorm(BV bv,NormType type,PetscReal *val) | |
499 | { | ||
500 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3374 | PetscFunctionBegin; |
501 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
3374 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
502 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
3374 | PetscValidLogicalCollectiveEnum(bv,type,2); |
503 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
3374 | PetscAssertPointer(val,3); |
504 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
3374 | PetscValidType(bv,1); |
505 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
3374 | BVCheckSizes(bv,1); |
506 | |||
507 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
3374 | PetscCheck(type!=NORM_2 && type!=NORM_1_AND_2,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Requested norm not available"); |
508 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
3374 | PetscCheck(!bv->matrix,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Matrix norm not available for non-standard inner product"); |
509 | |||
510 |
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.
|
3374 | PetscCall(PetscLogEventBegin(BV_Norm,bv,0,0,0)); |
511 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ 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.
|
3374 | PetscUseTypeMethod(bv,norm,-1,type,val); |
512 |
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.
|
3374 | PetscCall(PetscLogEventEnd(BV_Norm,bv,0,0,0)); |
513 |
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.
|
566 | PetscFunctionReturn(PETSC_SUCCESS); |
514 | } | ||
515 | |||
516 | /*@ | ||
517 | BVNormVec - Computes the norm of a given vector. | ||
518 | |||
519 | Collective | ||
520 | |||
521 | Input Parameters: | ||
522 | + bv - basis vectors | ||
523 | . v - the vector | ||
524 | - type - the norm type | ||
525 | |||
526 | Output Parameter: | ||
527 | . val - the norm | ||
528 | |||
529 | Notes: | ||
530 | This is the analogue of BVNormColumn() but for a vector that is not in the BV. | ||
531 | If a non-standard inner product has been specified with BVSetMatrix(), | ||
532 | then the returned value is sqrt(v'*B*v), where B is the inner product | ||
533 | matrix (argument 'type' is ignored). Otherwise, VecNorm() is called. | ||
534 | |||
535 | Level: developer | ||
536 | |||
537 | .seealso: BVNorm(), BVNormColumn(), BVSetMatrix() | ||
538 | @*/ | ||
539 | 800678 | PetscErrorCode BVNormVec(BV bv,Vec v,NormType type,PetscReal *val) | |
540 | { | ||
541 | 800678 | PetscInt n; | |
542 | |||
543 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
800678 | PetscFunctionBegin; |
544 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
800678 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
545 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
800678 | PetscValidHeaderSpecific(v,VEC_CLASSID,2); |
546 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
800678 | PetscValidLogicalCollectiveEnum(bv,type,3); |
547 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
800678 | PetscAssertPointer(val,4); |
548 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
800678 | PetscValidType(bv,1); |
549 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
800678 | BVCheckSizes(bv,1); |
550 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
800678 | PetscValidType(v,2); |
551 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
800678 | PetscCheckSameComm(bv,1,v,2); |
552 | |||
553 |
1/6✗ 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.
|
800678 | PetscCheck(type!=NORM_1_AND_2 || bv->matrix,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Requested norm not available"); |
554 | |||
555 |
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.
|
800678 | PetscCall(PetscLogEventBegin(BV_NormVec,bv,0,0,0)); |
556 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
800678 | if (bv->matrix) { /* non-standard inner product */ |
557 |
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.
|
67300 | PetscCall(VecGetLocalSize(v,&n)); |
558 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
67300 | PetscCheck(bv->n==n,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_INCOMP,"Mismatching local dimension bv %" PetscInt_FMT ", v %" PetscInt_FMT,bv->n,n); |
559 |
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.
|
67300 | PetscCall(BVNorm_Private(bv,v,type,val)); |
560 |
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.
|
733378 | } else PetscCall(VecNorm(v,type,val)); |
561 |
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.
|
800678 | PetscCall(PetscLogEventEnd(BV_NormVec,bv,0,0,0)); |
562 |
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.
|
158931 | PetscFunctionReturn(PETSC_SUCCESS); |
563 | } | ||
564 | |||
565 | /*@ | ||
566 | BVNormVecBegin - Starts a split phase norm computation. | ||
567 | |||
568 | Input Parameters: | ||
569 | + bv - basis vectors | ||
570 | . v - the vector | ||
571 | . type - the norm type | ||
572 | - val - the norm | ||
573 | |||
574 | Note: | ||
575 | Each call to BVNormVecBegin() should be paired with a call to BVNormVecEnd(). | ||
576 | |||
577 | Level: advanced | ||
578 | |||
579 | .seealso: BVNormVecEnd(), BVNormVec() | ||
580 | @*/ | ||
581 | 6909 | PetscErrorCode BVNormVecBegin(BV bv,Vec v,NormType type,PetscReal *val) | |
582 | { | ||
583 | 6909 | PetscInt n; | |
584 | |||
585 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
6909 | PetscFunctionBegin; |
586 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
6909 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
587 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
6909 | PetscValidHeaderSpecific(v,VEC_CLASSID,2); |
588 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
6909 | PetscValidLogicalCollectiveEnum(bv,type,3); |
589 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6909 | PetscAssertPointer(val,4); |
590 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
6909 | PetscValidType(bv,1); |
591 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
6909 | BVCheckSizes(bv,1); |
592 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
6909 | PetscValidType(v,2); |
593 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
6909 | PetscCheckSameTypeAndComm(bv,1,v,2); |
594 | |||
595 |
1/6✗ 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.
|
6909 | PetscCheck(type!=NORM_1_AND_2 || bv->matrix,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Requested norm not available"); |
596 | |||
597 |
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.
|
6909 | PetscCall(PetscLogEventBegin(BV_NormVec,bv,0,0,0)); |
598 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6909 | if (bv->matrix) { /* non-standard inner product */ |
599 |
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.
|
218 | PetscCall(VecGetLocalSize(v,&n)); |
600 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
218 | PetscCheck(bv->n==n,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_INCOMP,"Mismatching local dimension bv %" PetscInt_FMT ", v %" PetscInt_FMT,bv->n,n); |
601 |
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.
|
218 | PetscCall(BVNorm_Begin_Private(bv,v,type,val)); |
602 |
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.
|
6691 | } else PetscCall(VecNormBegin(v,type,val)); |
603 |
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.
|
6909 | PetscCall(PetscLogEventEnd(BV_NormVec,bv,0,0,0)); |
604 |
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.
|
1377 | PetscFunctionReturn(PETSC_SUCCESS); |
605 | } | ||
606 | |||
607 | /*@ | ||
608 | BVNormVecEnd - Ends a split phase norm computation. | ||
609 | |||
610 | Input Parameters: | ||
611 | + bv - basis vectors | ||
612 | . v - the vector | ||
613 | . type - the norm type | ||
614 | - val - the norm | ||
615 | |||
616 | Note: | ||
617 | Each call to BVNormVecBegin() should be paired with a call to BVNormVecEnd(). | ||
618 | |||
619 | Level: advanced | ||
620 | |||
621 | .seealso: BVNormVecBegin(), BVNormVec() | ||
622 | @*/ | ||
623 | 6909 | PetscErrorCode BVNormVecEnd(BV bv,Vec v,NormType type,PetscReal *val) | |
624 | { | ||
625 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
6909 | PetscFunctionBegin; |
626 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
6909 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
627 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
6909 | PetscValidLogicalCollectiveEnum(bv,type,3); |
628 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
6909 | PetscAssertPointer(val,4); |
629 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
6909 | PetscValidType(bv,1); |
630 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
6909 | BVCheckSizes(bv,1); |
631 | |||
632 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
6909 | PetscCheck(type!=NORM_1_AND_2,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Requested norm not available"); |
633 | |||
634 |
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.
|
6909 | if (bv->matrix) PetscCall(BVNorm_End_Private(bv,v,type,val)); /* non-standard inner product */ |
635 |
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.
|
6691 | else PetscCall(VecNormEnd(v,type,val)); |
636 |
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.
|
1377 | PetscFunctionReturn(PETSC_SUCCESS); |
637 | } | ||
638 | |||
639 | /*@ | ||
640 | BVNormColumn - Computes the vector norm of a selected column. | ||
641 | |||
642 | Collective | ||
643 | |||
644 | Input Parameters: | ||
645 | + bv - basis vectors | ||
646 | . j - column number to be used | ||
647 | - type - the norm type | ||
648 | |||
649 | Output Parameter: | ||
650 | . val - the norm | ||
651 | |||
652 | Notes: | ||
653 | The norm of V[j] is computed (NORM_1, NORM_2, or NORM_INFINITY). | ||
654 | If a non-standard inner product has been specified with BVSetMatrix(), | ||
655 | then the returned value is sqrt(V[j]'*B*V[j]), | ||
656 | where B is the inner product matrix (argument 'type' is ignored). | ||
657 | |||
658 | Level: intermediate | ||
659 | |||
660 | .seealso: BVNorm(), BVNormVec(), BVNormalize(), BVSetActiveColumns(), BVSetMatrix() | ||
661 | @*/ | ||
662 | 219790 | PetscErrorCode BVNormColumn(BV bv,PetscInt j,NormType type,PetscReal *val) | |
663 | { | ||
664 | 219790 | Vec z; | |
665 | |||
666 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
219790 | PetscFunctionBegin; |
667 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
219790 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
668 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
219790 | PetscValidLogicalCollectiveInt(bv,j,2); |
669 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
219790 | PetscValidLogicalCollectiveEnum(bv,type,3); |
670 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
219790 | PetscAssertPointer(val,4); |
671 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
219790 | PetscValidType(bv,1); |
672 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
219790 | BVCheckSizes(bv,1); |
673 | |||
674 |
2/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
219790 | PetscCheck(j>=0 && j<bv->m,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"Argument j has wrong value %" PetscInt_FMT ", the number of columns is %" PetscInt_FMT,j,bv->m); |
675 |
1/6✗ 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.
|
219790 | PetscCheck(type!=NORM_1_AND_2 || bv->matrix,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Requested norm not available"); |
676 | |||
677 |
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.
|
219790 | PetscCall(PetscLogEventBegin(BV_NormVec,bv,0,0,0)); |
678 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
219790 | if (bv->matrix) { /* non-standard inner product */ |
679 |
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.
|
144248 | PetscCall(BVGetColumn(bv,j,&z)); |
680 |
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.
|
144248 | PetscCall(BVNorm_Private(bv,z,type,val)); |
681 |
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.
|
144248 | PetscCall(BVRestoreColumn(bv,j,&z)); |
682 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ 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.
|
75542 | } else PetscUseTypeMethod(bv,norm,j,type,val); |
683 |
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.
|
219790 | PetscCall(PetscLogEventEnd(BV_NormVec,bv,0,0,0)); |
684 |
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.
|
43600 | PetscFunctionReturn(PETSC_SUCCESS); |
685 | } | ||
686 | |||
687 | /*@ | ||
688 | BVNormColumnBegin - Starts a split phase norm computation. | ||
689 | |||
690 | Input Parameters: | ||
691 | + bv - basis vectors | ||
692 | . j - column number to be used | ||
693 | . type - the norm type | ||
694 | - val - the norm | ||
695 | |||
696 | Note: | ||
697 | Each call to BVNormColumnBegin() should be paired with a call to BVNormColumnEnd(). | ||
698 | |||
699 | Level: advanced | ||
700 | |||
701 | .seealso: BVNormColumnEnd(), BVNormColumn() | ||
702 | @*/ | ||
703 | 34821 | PetscErrorCode BVNormColumnBegin(BV bv,PetscInt j,NormType type,PetscReal *val) | |
704 | { | ||
705 | 34821 | PetscSplitReduction *sr; | |
706 | 34821 | PetscReal lresult; | |
707 | 34821 | MPI_Comm comm; | |
708 | 34821 | Vec z; | |
709 | |||
710 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
34821 | PetscFunctionBegin; |
711 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
34821 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
712 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
34821 | PetscValidLogicalCollectiveInt(bv,j,2); |
713 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
34821 | PetscValidLogicalCollectiveEnum(bv,type,3); |
714 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
34821 | PetscAssertPointer(val,4); |
715 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
34821 | PetscValidType(bv,1); |
716 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
34821 | BVCheckSizes(bv,1); |
717 | |||
718 |
2/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
34821 | PetscCheck(j>=0 && j<bv->m,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"Argument j has wrong value %" PetscInt_FMT ", the number of columns is %" PetscInt_FMT,j,bv->m); |
719 |
1/6✗ 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.
|
34821 | PetscCheck(type!=NORM_1_AND_2 || bv->matrix,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Requested norm not available"); |
720 | |||
721 |
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.
|
34821 | PetscCall(PetscLogEventBegin(BV_NormVec,bv,0,0,0)); |
722 |
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.
|
34821 | PetscCall(BVGetColumn(bv,j,&z)); |
723 |
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.
|
34821 | if (bv->matrix) PetscCall(BVNorm_Begin_Private(bv,z,type,val)); /* non-standard inner product */ |
724 |
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.
|
29865 | else if (bv->ops->norm_begin) PetscUseTypeMethod(bv,norm_begin,j,type,val); |
725 | else { | ||
726 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
29845 | BVCheckOp(bv,1,norm_local); |
727 |
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.
|
29845 | PetscCall(PetscObjectGetComm((PetscObject)z,&comm)); |
728 |
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.
|
29845 | PetscCall(PetscSplitReductionGet(comm,&sr)); |
729 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
29845 | PetscCheck(sr->state==STATE_BEGIN,PetscObjectComm((PetscObject)bv),PETSC_ERR_ORDER,"Called before all VecxxxEnd() called"); |
730 |
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.
|
29845 | if (sr->numopsbegin >= sr->maxops) PetscCall(PetscSplitReductionExtend(sr)); |
731 | 29845 | sr->invecs[sr->numopsbegin] = (void*)bv; | |
732 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ 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.
|
29845 | PetscUseTypeMethod(bv,norm_local,j,type,&lresult); |
733 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
29845 | if (type == NORM_2) lresult = lresult*lresult; |
734 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
29845 | if (type == NORM_MAX) sr->reducetype[sr->numopsbegin] = PETSC_SR_REDUCE_MAX; |
735 | 29845 | else sr->reducetype[sr->numopsbegin] = PETSC_SR_REDUCE_SUM; | |
736 | 29845 | sr->lvalues[sr->numopsbegin++] = lresult; | |
737 | } | ||
738 |
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.
|
34821 | PetscCall(BVRestoreColumn(bv,j,&z)); |
739 |
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.
|
34821 | PetscCall(PetscLogEventEnd(BV_NormVec,bv,0,0,0)); |
740 |
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.
|
6233 | PetscFunctionReturn(PETSC_SUCCESS); |
741 | } | ||
742 | |||
743 | /*@ | ||
744 | BVNormColumnEnd - Ends a split phase norm computation. | ||
745 | |||
746 | Input Parameters: | ||
747 | + bv - basis vectors | ||
748 | . j - column number to be used | ||
749 | . type - the norm type | ||
750 | - val - the norm | ||
751 | |||
752 | Note: | ||
753 | Each call to BVNormColumnBegin() should be paired with a call to BVNormColumnEnd(). | ||
754 | |||
755 | Level: advanced | ||
756 | |||
757 | .seealso: BVNormColumnBegin(), BVNormColumn() | ||
758 | @*/ | ||
759 | 34821 | PetscErrorCode BVNormColumnEnd(BV bv,PetscInt j,NormType type,PetscReal *val) | |
760 | { | ||
761 | 34821 | PetscSplitReduction *sr; | |
762 | 34821 | MPI_Comm comm; | |
763 | 34821 | Vec z; | |
764 | |||
765 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
34821 | PetscFunctionBegin; |
766 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
34821 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
767 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
34821 | PetscValidLogicalCollectiveInt(bv,j,2); |
768 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
34821 | PetscValidLogicalCollectiveEnum(bv,type,3); |
769 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
34821 | PetscAssertPointer(val,4); |
770 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
34821 | PetscValidType(bv,1); |
771 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
34821 | BVCheckSizes(bv,1); |
772 | |||
773 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
34821 | PetscCheck(type!=NORM_1_AND_2,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Requested norm not available"); |
774 | |||
775 |
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.
|
34821 | PetscCall(BVGetColumn(bv,j,&z)); |
776 |
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.
|
34821 | if (bv->matrix) PetscCall(BVNorm_End_Private(bv,z,type,val)); /* non-standard inner product */ |
777 |
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.
|
29865 | else if (bv->ops->norm_end) PetscUseTypeMethod(bv,norm_end,j,type,val); |
778 | else { | ||
779 |
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.
|
29845 | PetscCall(PetscObjectGetComm((PetscObject)z,&comm)); |
780 |
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.
|
29845 | PetscCall(PetscSplitReductionGet(comm,&sr)); |
781 |
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.
|
29845 | PetscCall(PetscSplitReductionEnd(sr)); |
782 | |||
783 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
29845 | PetscCheck(sr->numopsend<sr->numopsbegin,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Called VecxxxEnd() more times then VecxxxBegin()"); |
784 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
29845 | PetscCheck((void*)bv==sr->invecs[sr->numopsend],PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Called VecxxxEnd() in a different order or with a different vector than VecxxxBegin()"); |
785 |
2/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
29845 | PetscCheck(sr->reducetype[sr->numopsend]==PETSC_SR_REDUCE_MAX || type!=NORM_MAX,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_WRONGSTATE,"Called BVNormEnd(,NORM_MAX,) on a reduction started with VecDotBegin() or NORM_1 or NORM_2"); |
786 | 29845 | *val = PetscRealPart(sr->gvalues[sr->numopsend++]); | |
787 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
29845 | if (type == NORM_2) *val = PetscSqrtReal(*val); |
788 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
29845 | if (sr->numopsend == sr->numopsbegin) { |
789 | 1630 | sr->state = STATE_BEGIN; | |
790 | 1630 | sr->numopsend = 0; | |
791 | 1630 | sr->numopsbegin = 0; | |
792 | } | ||
793 | } | ||
794 |
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.
|
34821 | PetscCall(BVRestoreColumn(bv,j,&z)); |
795 |
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.
|
6233 | PetscFunctionReturn(PETSC_SUCCESS); |
796 | } | ||
797 | |||
798 | /*@ | ||
799 | BVNormalize - Normalize all columns (starting from the leading ones). | ||
800 | |||
801 | Collective | ||
802 | |||
803 | Input Parameters: | ||
804 | + bv - basis vectors | ||
805 | - eigi - (optional) imaginary parts of eigenvalues | ||
806 | |||
807 | Notes: | ||
808 | On output, all columns will have unit norm. The normalization is done with | ||
809 | respect to the 2-norm, or to the B-norm if a non-standard inner product has | ||
810 | been specified with BVSetMatrix(), see BVNormColumn(). | ||
811 | |||
812 | If the optional argument eigi is passed (taken into account only in real | ||
813 | scalars) it is interpreted as the imaginary parts of the eigenvalues and | ||
814 | the BV is supposed to contain the corresponding eigenvectors. Suppose the | ||
815 | first three values are eigi = { 0, alpha, -alpha }, then the first column | ||
816 | is normalized as usual, but the second and third ones are normalized assuming | ||
817 | that they contain the real and imaginary parts of a complex conjugate pair of | ||
818 | eigenvectors. | ||
819 | |||
820 | If eigi is passed, the inner-product matrix is ignored. | ||
821 | |||
822 | If there are leading columns, they are not modified (are assumed to be already | ||
823 | normalized). | ||
824 | |||
825 | Level: intermediate | ||
826 | |||
827 | .seealso: BVNormColumn() | ||
828 | @*/ | ||
829 | 39262 | PetscErrorCode BVNormalize(BV bv,PetscScalar *eigi) | |
830 | { | ||
831 | 39262 | PetscReal norm; | |
832 | 39262 | PetscInt i; | |
833 | |||
834 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
39262 | PetscFunctionBegin; |
835 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
39262 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
836 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
39262 | PetscValidType(bv,1); |
837 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
39262 | BVCheckSizes(bv,1); |
838 | |||
839 |
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.
|
39262 | PetscCall(PetscLogEventBegin(BV_Normalize,bv,0,0,0)); |
840 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
39262 | if (bv->matrix && !eigi) { |
841 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
12683 | for (i=bv->l;i<bv->k;i++) { |
842 |
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.
|
11861 | PetscCall(BVNormColumn(bv,i,NORM_2,&norm)); |
843 |
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.
|
11861 | PetscCall(BVScaleColumn(bv,i,1.0/norm)); |
844 | } | ||
845 |
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.
|
38440 | } else PetscTryTypeMethod(bv,normalize,eigi); |
846 |
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.
|
39262 | PetscCall(PetscLogEventEnd(BV_Normalize,bv,0,0,0)); |
847 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
39262 | PetscCall(PetscObjectStateIncrease((PetscObject)bv)); |
848 |
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.
|
39262 | PetscFunctionReturn(PETSC_SUCCESS); |
849 | } | ||
850 | |||
851 | /* | ||
852 | Compute Y^H*A*X: right part column by column (with MatMult) and bottom | ||
853 | part row by row (with MatMultHermitianTranspose); result placed in marray[*,ldm] | ||
854 | */ | ||
855 | 180 | static inline PetscErrorCode BVMatProject_Vec(BV X,Mat A,BV Y,PetscScalar *marray,PetscInt ldm,PetscBool symm) | |
856 | { | ||
857 | 180 | PetscInt i,j,lx,ly,kx,ky,ulim; | |
858 | 180 | Vec z,f; | |
859 | |||
860 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
180 | PetscFunctionBegin; |
861 | 180 | lx = X->l; kx = X->k; | |
862 | 180 | ly = Y->l; ky = Y->k; | |
863 |
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(BVCreateVec(X,&f)); |
864 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
36 | BVCheckOp(Y,3,dotvec); |
865 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
720 | for (j=lx;j<kx;j++) { |
866 |
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.
|
540 | PetscCall(BVGetColumn(X,j,&z)); |
867 |
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.
|
540 | PetscCall(MatMult(A,z,f)); |
868 |
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.
|
540 | PetscCall(BVRestoreColumn(X,j,&z)); |
869 | 540 | ulim = PetscMin(ly+(j-lx)+1,ky); | |
870 | 540 | Y->l = 0; Y->k = ulim; | |
871 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ 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.
|
540 | PetscUseTypeMethod(Y,dotvec,f,marray+j*ldm); |
872 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
540 | if (symm) { |
873 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
900 | for (i=0;i<j;i++) marray[j+i*ldm] = PetscConj(marray[i+j*ldm]); |
874 | } | ||
875 | } | ||
876 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
180 | if (!symm) { |
877 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
120 | BVCheckOp(X,1,dotvec); |
878 |
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(BV_AllocateCoeffs(Y)); |
879 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
480 | for (j=ly;j<ky;j++) { |
880 |
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.
|
360 | PetscCall(BVGetColumn(Y,j,&z)); |
881 |
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.
|
360 | PetscCall(MatMultHermitianTranspose(A,z,f)); |
882 |
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.
|
360 | PetscCall(BVRestoreColumn(Y,j,&z)); |
883 | 360 | ulim = PetscMin(lx+(j-ly),kx); | |
884 | 360 | X->l = 0; X->k = ulim; | |
885 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ 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.
|
360 | PetscUseTypeMethod(X,dotvec,f,Y->h); |
886 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1800 | for (i=0;i<ulim;i++) marray[j+i*ldm] = PetscConj(Y->h[i]); |
887 | } | ||
888 | } | ||
889 |
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(VecDestroy(&f)); |
890 | 180 | X->l = lx; X->k = kx; | |
891 | 180 | Y->l = ly; Y->k = ky; | |
892 |
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.
|
180 | PetscFunctionReturn(PETSC_SUCCESS); |
893 | } | ||
894 | |||
895 | /* | ||
896 | Compute Y^H*A*X= [ -- | Y0'*W1 ] | ||
897 | [ Y1'*W0 | Y1'*W1 ] | ||
898 | Allocates auxiliary BV to store the result of A*X, then one BVDot | ||
899 | call for top-right part and another one for bottom part; | ||
900 | result placed in marray[*,ldm] | ||
901 | */ | ||
902 | 21977 | static inline PetscErrorCode BVMatProject_MatMult(BV X,Mat A,BV Y,PetscScalar *marray,PetscInt ldm) | |
903 | { | ||
904 | 21977 | PetscInt j,lx,ly,kx,ky; | |
905 | 21977 | const PetscScalar *harray; | |
906 | 21977 | Mat H; | |
907 | 21977 | BV W; | |
908 | |||
909 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
21977 | PetscFunctionBegin; |
910 | 21977 | lx = X->l; kx = X->k; | |
911 | 21977 | ly = Y->l; ky = Y->k; | |
912 |
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.
|
21977 | PetscCall(BVDuplicate(X,&W)); |
913 | 21977 | X->l = 0; X->k = kx; | |
914 | 21977 | W->l = 0; W->k = kx; | |
915 |
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.
|
21977 | PetscCall(BVMatMult(X,A,W)); |
916 | |||
917 | /* top-right part, Y0'*AX1 */ | ||
918 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
21977 | if (ly>0 && lx<kx) { |
919 | ✗ | PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,ly,kx,NULL,&H)); | |
920 | ✗ | W->l = lx; W->k = kx; | |
921 | ✗ | Y->l = 0; Y->k = ly; | |
922 | ✗ | PetscCall(BVDot(W,Y,H)); | |
923 | ✗ | PetscCall(MatDenseGetArrayRead(H,&harray)); | |
924 | ✗ | for (j=lx;j<kx;j++) PetscCall(PetscArraycpy(marray+j*ldm,harray+j*ly,ly)); | |
925 | ✗ | PetscCall(MatDenseRestoreArrayRead(H,&harray)); | |
926 | ✗ | PetscCall(MatDestroy(&H)); | |
927 | } | ||
928 | |||
929 | /* bottom part, Y1'*AX */ | ||
930 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
21977 | if (kx>0 && ly<ky) { |
931 |
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.
|
21977 | PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,ky,kx,NULL,&H)); |
932 | 21977 | W->l = 0; W->k = kx; | |
933 | 21977 | Y->l = ly; Y->k = ky; | |
934 |
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.
|
21977 | PetscCall(BVDot(W,Y,H)); |
935 |
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.
|
21977 | PetscCall(MatDenseGetArrayRead(H,&harray)); |
936 |
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.
|
238586 | for (j=0;j<kx;j++) PetscCall(PetscArraycpy(marray+j*ldm+ly,harray+j*ky+ly,ky-ly)); |
937 |
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.
|
21977 | PetscCall(MatDenseRestoreArrayRead(H,&harray)); |
938 |
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.
|
21977 | PetscCall(MatDestroy(&H)); |
939 | } | ||
940 |
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.
|
21977 | PetscCall(BVDestroy(&W)); |
941 | 21977 | X->l = lx; X->k = kx; | |
942 | 21977 | Y->l = ly; Y->k = ky; | |
943 |
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.
|
21977 | PetscFunctionReturn(PETSC_SUCCESS); |
944 | } | ||
945 | |||
946 | /* | ||
947 | Compute Y^H*A*X= [ -- | Y0'*W1 ] | ||
948 | [ Y1'*W0 | Y1'*W1 ] | ||
949 | First stage: allocate auxiliary BV to store A*X1, one BVDot for right part; | ||
950 | Second stage: resize BV to accommodate A'*Y1, then call BVDot for transpose of | ||
951 | bottom-left part; result placed in marray[*,ldm] | ||
952 | */ | ||
953 | 5809 | static inline PetscErrorCode BVMatProject_MatMult_2(BV X,Mat A,BV Y,PetscScalar *marray,PetscInt ldm,PetscBool symm) | |
954 | { | ||
955 | 5809 | PetscInt i,j,lx,ly,kx,ky; | |
956 | 5809 | const PetscScalar *harray; | |
957 | 5809 | Mat H; | |
958 | 5809 | BV W; | |
959 | |||
960 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
5809 | PetscFunctionBegin; |
961 | 5809 | lx = X->l; kx = X->k; | |
962 | 5809 | ly = Y->l; ky = Y->k; | |
963 | |||
964 | /* right part, Y'*AX1 */ | ||
965 |
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.
|
5809 | PetscCall(BVDuplicateResize(X,kx-lx,&W)); |
966 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
5809 | if (ky>0 && lx<kx) { |
967 |
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.
|
5809 | PetscCall(BVMatMult(X,A,W)); |
968 |
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.
|
5809 | PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,ky,kx-lx,NULL,&H)); |
969 | 5809 | Y->l = 0; Y->k = ky; | |
970 |
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.
|
5809 | PetscCall(BVDot(W,Y,H)); |
971 |
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.
|
5809 | PetscCall(MatDenseGetArrayRead(H,&harray)); |
972 |
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.
|
14622 | for (j=lx;j<kx;j++) PetscCall(PetscArraycpy(marray+j*ldm,harray+(j-lx)*ky,ky)); |
973 |
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.
|
5809 | PetscCall(MatDenseRestoreArrayRead(H,&harray)); |
974 |
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.
|
5809 | PetscCall(MatDestroy(&H)); |
975 | } | ||
976 | |||
977 | /* bottom-left part, Y1'*AX0 */ | ||
978 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5809 | if (lx>0 && ly<ky) { |
979 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4789 | if (symm) { |
980 | /* do not compute, just copy symmetric elements */ | ||
981 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
8372 | for (i=ly;i<ky;i++) { |
982 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
21261 | for (j=0;j<lx;j++) marray[i+j*ldm] = PetscConj(marray[j+i*ldm]); |
983 | } | ||
984 | } else { | ||
985 |
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.
|
701 | PetscCall(BVResize(W,ky-ly,PETSC_FALSE)); |
986 | 701 | Y->l = ly; Y->k = ky; | |
987 |
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.
|
701 | PetscCall(BVMatMultHermitianTranspose(Y,A,W)); |
988 |
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.
|
701 | PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,lx,ky-ly,NULL,&H)); |
989 | 701 | X->l = 0; X->k = lx; | |
990 |
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.
|
701 | PetscCall(BVDot(W,X,H)); |
991 |
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.
|
701 | PetscCall(MatDenseGetArrayRead(H,&harray)); |
992 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1834 | for (i=0;i<ky-ly;i++) { |
993 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4592 | for (j=0;j<lx;j++) { |
994 | 3459 | marray[i+j*ldm+ly] = PetscConj(harray[j+i*(ky-ly)]); | |
995 | } | ||
996 | } | ||
997 |
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.
|
701 | PetscCall(MatDenseRestoreArrayRead(H,&harray)); |
998 |
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.
|
701 | PetscCall(MatDestroy(&H)); |
999 | } | ||
1000 | } | ||
1001 |
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.
|
5809 | PetscCall(BVDestroy(&W)); |
1002 | 5809 | X->l = lx; X->k = kx; | |
1003 | 5809 | Y->l = ly; Y->k = ky; | |
1004 |
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.
|
5809 | PetscFunctionReturn(PETSC_SUCCESS); |
1005 | } | ||
1006 | |||
1007 | /* | ||
1008 | Compute Y^H*X = [ -- | Y0'*X1 ] (X contains A*X): | ||
1009 | [ Y1'*X0 | Y1'*X1 ] | ||
1010 | one BVDot call for top-right part and another one for bottom part; | ||
1011 | result placed in marray[*,ldm] | ||
1012 | */ | ||
1013 | 158889 | static inline PetscErrorCode BVMatProject_Dot(BV X,BV Y,PetscScalar *marray,PetscInt ldm) | |
1014 | { | ||
1015 | 158889 | PetscInt j,lx,ly,kx,ky; | |
1016 | 158889 | const PetscScalar *harray; | |
1017 | 158889 | Mat H; | |
1018 | |||
1019 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
158889 | PetscFunctionBegin; |
1020 | 158889 | lx = X->l; kx = X->k; | |
1021 | 158889 | ly = Y->l; ky = Y->k; | |
1022 | |||
1023 | /* top-right part, Y0'*X1 */ | ||
1024 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
158889 | if (ly>0 && lx<kx) { |
1025 |
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.
|
89978 | PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,ly,kx,NULL,&H)); |
1026 | 89978 | X->l = lx; X->k = kx; | |
1027 | 89978 | Y->l = 0; Y->k = ly; | |
1028 |
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.
|
89978 | PetscCall(BVDot(X,Y,H)); |
1029 |
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.
|
89978 | PetscCall(MatDenseGetArrayRead(H,&harray)); |
1030 |
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.
|
218608 | for (j=lx;j<kx;j++) PetscCall(PetscArraycpy(marray+j*ldm,harray+j*ly,ly)); |
1031 |
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.
|
89978 | PetscCall(MatDenseRestoreArrayRead(H,&harray)); |
1032 |
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.
|
89978 | PetscCall(MatDestroy(&H)); |
1033 | } | ||
1034 | |||
1035 | /* bottom part, Y1'*X */ | ||
1036 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
158889 | if (kx>0 && ly<ky) { |
1037 |
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.
|
158889 | PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,ky,kx,NULL,&H)); |
1038 | 158889 | X->l = 0; X->k = kx; | |
1039 | 158889 | Y->l = ly; Y->k = ky; | |
1040 |
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.
|
158889 | PetscCall(BVDot(X,Y,H)); |
1041 |
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.
|
158889 | PetscCall(MatDenseGetArrayRead(H,&harray)); |
1042 |
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.
|
1523635 | for (j=0;j<kx;j++) PetscCall(PetscArraycpy(marray+j*ldm+ly,harray+j*ky+ly,ky-ly)); |
1043 |
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.
|
158889 | PetscCall(MatDenseRestoreArrayRead(H,&harray)); |
1044 |
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.
|
158889 | PetscCall(MatDestroy(&H)); |
1045 | } | ||
1046 | 158889 | X->l = lx; X->k = kx; | |
1047 | 158889 | Y->l = ly; Y->k = ky; | |
1048 |
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.
|
158889 | PetscFunctionReturn(PETSC_SUCCESS); |
1049 | } | ||
1050 | |||
1051 | /*@ | ||
1052 | BVMatProject - Computes the projection of a matrix onto a subspace. | ||
1053 | |||
1054 | Collective | ||
1055 | |||
1056 | Input Parameters: | ||
1057 | + X - basis vectors | ||
1058 | . A - (optional) matrix to be projected | ||
1059 | - Y - left basis vectors, can be equal to X | ||
1060 | |||
1061 | Output Parameter: | ||
1062 | . M - the resulting matrix | ||
1063 | |||
1064 | Notes: | ||
1065 | If A=NULL, then it is assumed that X already contains A*X. | ||
1066 | |||
1067 | This operation is similar to BVDot(), with important differences. | ||
1068 | The goal is to compute the matrix resulting from the orthogonal projection | ||
1069 | of A onto the subspace spanned by the columns of X, M = X^H*A*X, or the | ||
1070 | oblique projection onto X along Y, M = Y^H*A*X. | ||
1071 | |||
1072 | A difference with respect to BVDot() is that the standard inner product | ||
1073 | is always used, regardless of a non-standard inner product being specified | ||
1074 | with BVSetMatrix(). | ||
1075 | |||
1076 | On entry, M must be a sequential dense Mat with dimensions ky,kx at least, | ||
1077 | where ky (resp. kx) is the number of active columns of Y (resp. X). | ||
1078 | Another difference with respect to BVDot() is that all entries of M are | ||
1079 | computed except the leading ly,lx part, where ly (resp. lx) is the | ||
1080 | number of leading columns of Y (resp. X). Hence, the leading columns of | ||
1081 | X and Y participate in the computation, as opposed to BVDot(). | ||
1082 | The leading part of M is assumed to be already available from previous | ||
1083 | computations. | ||
1084 | |||
1085 | In the orthogonal projection case, Y=X, some computation can be saved if | ||
1086 | A is real symmetric (or complex Hermitian). In order to exploit this | ||
1087 | property, the symmetry flag of A must be set with MatSetOption(). | ||
1088 | |||
1089 | Level: intermediate | ||
1090 | |||
1091 | .seealso: BVDot(), BVSetActiveColumns(), BVSetMatrix() | ||
1092 | @*/ | ||
1093 | 186855 | PetscErrorCode BVMatProject(BV X,Mat A,BV Y,Mat M) | |
1094 | { | ||
1095 | 186855 | PetscBool set,flg,symm=PETSC_FALSE; | |
1096 | 186855 | PetscInt m,n,ldm; | |
1097 | 186855 | PetscScalar *marray; | |
1098 | 186855 | Mat Xmatrix,Ymatrix; | |
1099 | 186855 | PetscObjectId idx,idy; | |
1100 | |||
1101 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
186855 | PetscFunctionBegin; |
1102 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
186855 | PetscValidHeaderSpecific(X,BV_CLASSID,1); |
1103 |
4/14✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
186855 | if (A) PetscValidHeaderSpecific(A,MAT_CLASSID,2); |
1104 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
186855 | PetscValidHeaderSpecific(Y,BV_CLASSID,3); |
1105 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
186855 | PetscValidHeaderSpecific(M,MAT_CLASSID,4); |
1106 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
186855 | PetscValidType(X,1); |
1107 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
186855 | BVCheckSizes(X,1); |
1108 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
|
186855 | if (A) { |
1109 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
155860 | PetscValidType(A,2); |
1110 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
155860 | PetscCheckSameComm(X,1,A,2); |
1111 | } | ||
1112 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
186855 | PetscValidType(Y,3); |
1113 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
186855 | BVCheckSizes(Y,3); |
1114 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
186855 | PetscValidType(M,4); |
1115 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
186855 | PetscCheckSameTypeAndComm(X,1,Y,3); |
1116 |
4/10✓ 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.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
186855 | SlepcMatCheckSeq(M); |
1117 | |||
1118 |
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.
|
186855 | PetscCall(MatGetSize(M,&m,&n)); |
1119 |
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.
|
186855 | PetscCall(MatDenseGetLDA(M,&ldm)); |
1120 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
186855 | PetscCheck(m>=Y->k,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_SIZ,"Matrix M has %" PetscInt_FMT " rows, should have at least %" PetscInt_FMT,m,Y->k); |
1121 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
186855 | PetscCheck(n>=X->k,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_SIZ,"Matrix M has %" PetscInt_FMT " columns, should have at least %" PetscInt_FMT,n,X->k); |
1122 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
186855 | PetscCheck(X->n==Y->n,PetscObjectComm((PetscObject)X),PETSC_ERR_ARG_INCOMP,"Mismatching local dimension X %" PetscInt_FMT ", Y %" PetscInt_FMT,X->n,Y->n); |
1123 | |||
1124 |
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.
|
186855 | PetscCall(PetscLogEventBegin(BV_MatProject,X,A,Y,0)); |
1125 | /* temporarily set standard inner product */ | ||
1126 | 186855 | Xmatrix = X->matrix; | |
1127 | 186855 | Ymatrix = Y->matrix; | |
1128 | 186855 | X->matrix = Y->matrix = NULL; | |
1129 | |||
1130 |
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.
|
186855 | PetscCall(PetscObjectGetId((PetscObject)X,&idx)); |
1131 |
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.
|
186855 | PetscCall(PetscObjectGetId((PetscObject)Y,&idy)); |
1132 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
186855 | if (A && idx==idy) { /* check symmetry of M=X'AX */ |
1133 |
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.
|
27808 | PetscCall(MatIsHermitianKnown(A,&set,&flg)); |
1134 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 2 times.
|
27808 | symm = set? flg: PETSC_FALSE; |
1135 | } | ||
1136 | |||
1137 |
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.
|
186855 | PetscCall(MatDenseGetArray(M,&marray)); |
1138 | |||
1139 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
186855 | if (A) { |
1140 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
27966 | if (X->vmm==BV_MATMULT_VECS) { |
1141 | /* perform computation column by column */ | ||
1142 |
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(BVMatProject_Vec(X,A,Y,marray,ldm,symm)); |
1143 | } else { | ||
1144 | /* use BVMatMult, then BVDot */ | ||
1145 |
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.
|
27786 | PetscCall(MatHasOperation(A,MATOP_MULT_TRANSPOSE,&flg)); |
1146 |
11/14✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 10 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 8 times.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
27786 | if (symm || (flg && X->l>=X->k/2 && Y->l>=Y->k/2)) PetscCall(BVMatProject_MatMult_2(X,A,Y,marray,ldm,symm)); |
1147 |
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.
|
21977 | else PetscCall(BVMatProject_MatMult(X,A,Y,marray,ldm)); |
1148 | } | ||
1149 | } else { | ||
1150 | /* use BVDot on subblocks */ | ||
1151 |
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.
|
158889 | PetscCall(BVMatProject_Dot(X,Y,marray,ldm)); |
1152 | } | ||
1153 | |||
1154 |
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.
|
186855 | PetscCall(MatDenseRestoreArray(M,&marray)); |
1155 |
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.
|
186855 | PetscCall(PetscLogEventEnd(BV_MatProject,X,A,Y,0)); |
1156 | /* restore non-standard inner product */ | ||
1157 | 186855 | X->matrix = Xmatrix; | |
1158 | 186855 | Y->matrix = Ymatrix; | |
1159 |
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.
|
186855 | PetscFunctionReturn(PETSC_SUCCESS); |
1160 | } | ||
1161 |