| 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 orthogonalization routines | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <slepc/private/bvimpl.h> /*I "slepcbv.h" I*/ | ||
| 15 | |||
| 16 | /* | ||
| 17 | BV_NormVecOrColumn - Compute the 2-norm of the working vector, irrespective of | ||
| 18 | whether it is in a column or not | ||
| 19 | */ | ||
| 20 | 185740 | static inline PetscErrorCode BV_NormVecOrColumn(BV bv,PetscInt j,Vec v,PetscReal *nrm) | |
| 21 | { | ||
| 22 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
185740 | PetscFunctionBegin; |
| 23 |
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.
|
185740 | if (v) PetscCall(BVNormVec(bv,v,NORM_2,nrm)); |
| 24 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
181228 | else PetscCall(BVNormColumn(bv,j,NORM_2,nrm)); |
| 25 |
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.
|
37432 | PetscFunctionReturn(PETSC_SUCCESS); |
| 26 | } | ||
| 27 | |||
| 28 | /* | ||
| 29 | BVDotColumnInc - Same as BVDotColumn() but also including column j, which | ||
| 30 | is multiplied by itself | ||
| 31 | */ | ||
| 32 | 2889162 | static inline PetscErrorCode BVDotColumnInc(BV X,PetscInt j,PetscScalar *q) | |
| 33 | { | ||
| 34 | 2889162 | PetscInt ksave; | |
| 35 | 2889162 | Vec y; | |
| 36 | |||
| 37 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2889162 | PetscFunctionBegin; |
| 38 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2889162 | PetscCall(PetscLogEventBegin(BV_DotVec,X,0,0,0)); |
| 39 | 2889162 | ksave = X->k; | |
| 40 | 2889162 | X->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.
|
2889162 | PetscCall(BVGetColumn(X,j,&y)); |
| 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.
|
2889162 | PetscUseTypeMethod(X,dotvec,y,q); |
| 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.
|
2889162 | PetscCall(BVRestoreColumn(X,j,&y)); |
| 44 | 2889162 | X->k = ksave; | |
| 45 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2889162 | PetscCall(PetscLogEventEnd(BV_DotVec,X,0,0,0)); |
| 46 |
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.
|
552245 | PetscFunctionReturn(PETSC_SUCCESS); |
| 47 | } | ||
| 48 | |||
| 49 | /* | ||
| 50 | BVOrthogonalizeMGS1 - Compute one step of Modified Gram-Schmidt | ||
| 51 | */ | ||
| 52 | 195549 | static PetscErrorCode BVOrthogonalizeMGS1(BV bv,PetscInt j,Vec v,PetscBool *which,PetscScalar *h,PetscScalar *c,PetscReal *onrm,PetscReal *nrm) | |
| 53 | { | ||
| 54 | 195549 | PetscInt i; | |
| 55 | 195549 | PetscScalar dot; | |
| 56 | 195549 | PetscBool indef=bv->indef; | |
| 57 | 195549 | Vec vi,z,w=v; | |
| 58 | 195549 | const PetscScalar *omega; | |
| 59 | |||
| 60 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
195549 | PetscFunctionBegin; |
| 61 |
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.
|
195549 | if (!v) PetscCall(BVGetColumn(bv,j,&w)); |
| 62 |
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.
|
195549 | if (onrm) PetscCall(BVNormVec(bv,w,NORM_2,onrm)); |
| 63 | 195549 | z = w; | |
| 64 |
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.
|
195549 | if (indef) PetscCall(VecGetArrayRead(bv->omega,&omega)); |
| 65 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2094179 | for (i=-bv->nc;i<j;i++) { |
| 66 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
1898630 | if (which && i>=0 && !which[i]) continue; |
| 67 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
844757 | PetscCall(BVGetColumn(bv,i,&vi)); |
| 68 | /* h_i = (v, v_i) */ | ||
| 69 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
844757 | if (bv->matrix) { |
| 70 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1760 | PetscCall(BV_IPMatMult(bv,w)); |
| 71 | 1760 | z = bv->Bx; | |
| 72 | } | ||
| 73 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
844757 | PetscCall(VecDot(z,vi,&dot)); |
| 74 | /* v <- v - h_i v_i */ | ||
| 75 |
5/6✓ Branch 0 taken 6 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1181137 | PetscCall(BV_SetValue(bv,i,0,c,dot)); |
| 76 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
844757 | if (indef) dot /= PetscRealPart(omega[bv->nc+i]); |
| 77 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
844757 | PetscCall(VecAXPY(w,-dot,vi)); |
| 78 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1898630 | PetscCall(BVRestoreColumn(bv,i,&vi)); |
| 79 | } | ||
| 80 |
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.
|
195549 | if (nrm) PetscCall(BVNormVec(bv,w,NORM_2,nrm)); |
| 81 |
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.
|
195549 | if (!v) PetscCall(BVRestoreColumn(bv,j,&w)); |
| 82 |
5/6✓ Branch 0 taken 6 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
273511 | PetscCall(BV_AddCoefficients(bv,j,h,c)); |
| 83 |
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.
|
195549 | if (indef) PetscCall(VecRestoreArrayRead(bv->omega,&omega)); |
| 84 |
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.
|
38995 | PetscFunctionReturn(PETSC_SUCCESS); |
| 85 | } | ||
| 86 | |||
| 87 | /* | ||
| 88 | BVOrthogonalizeCGS1 - Compute |v'| (estimated), |v| and one step of CGS with | ||
| 89 | only one global synchronization | ||
| 90 | */ | ||
| 91 | 3469746 | static PetscErrorCode BVOrthogonalizeCGS1(BV bv,PetscInt j,Vec v,PetscBool *which,PetscScalar *h,PetscScalar *c,PetscReal *onorm,PetscReal *norm) | |
| 92 | { | ||
| 93 | 3469746 | PetscReal sum,beta; | |
| 94 | |||
| 95 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3469746 | PetscFunctionBegin; |
| 96 | /* h = W^* v ; alpha = (v, v) */ | ||
| 97 | 3469746 | bv->k = j; | |
| 98 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3469746 | if (onorm || norm) { |
| 99 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3385757 | if (!v) { |
| 100 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2889162 | PetscCall(BVDotColumnInc(bv,j,c)); |
| 101 |
5/6✓ Branch 0 taken 6 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4003025 | PetscCall(BV_SquareRoot(bv,j,c,&beta)); |
| 102 | } else { | ||
| 103 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
496595 | PetscCall(BVDotVec(bv,v,c)); |
| 104 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
496595 | PetscCall(BVNormVec(bv,v,NORM_2,&beta)); |
| 105 | } | ||
| 106 | } else { | ||
| 107 |
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.
|
83989 | if (!v) PetscCall(BVDotColumn(bv,j,c)); |
| 108 | ✗ | else PetscCall(BVDotVec(bv,v,c)); | |
| 109 | } | ||
| 110 | |||
| 111 | /* q = v - V h */ | ||
| 112 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
3538618 | if (PetscUnlikely(bv->indef)) PetscCall(BV_ApplySignature(bv,j,c,PETSC_TRUE)); |
| 113 |
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.
|
3469746 | if (!v) PetscCall(BVMultColumn(bv,-1.0,1.0,j,c)); |
| 114 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
496595 | else PetscCall(BVMultVec(bv,-1.0,1.0,v,c)); |
| 115 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
3538618 | if (PetscUnlikely(bv->indef)) PetscCall(BV_ApplySignature(bv,j,c,PETSC_FALSE)); |
| 116 | |||
| 117 | /* compute |v| */ | ||
| 118 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3469746 | if (onorm) *onorm = beta; |
| 119 | |||
| 120 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3469746 | if (norm) { |
| 121 |
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.
|
3385757 | if (PetscUnlikely(bv->indef)) PetscCall(BV_NormVecOrColumn(bv,j,v,norm)); |
| 122 | else { | ||
| 123 | /* estimate |v'| from |v| */ | ||
| 124 |
5/6✓ Branch 0 taken 6 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4526888 | PetscCall(BV_SquareSum(bv,j,c,&sum)); |
| 125 | 3263695 | *norm = beta*beta-sum; | |
| 126 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
3263695 | if (PetscUnlikely(*norm <= 0.0)) PetscCall(BV_NormVecOrColumn(bv,j,v,norm)); |
| 127 | 3200365 | else *norm = PetscSqrtReal(*norm); | |
| 128 | } | ||
| 129 | } | ||
| 130 |
5/6✓ Branch 0 taken 6 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4803257 | PetscCall(BV_AddCoefficients(bv,j,h,c)); |
| 131 |
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.
|
667929 | PetscFunctionReturn(PETSC_SUCCESS); |
| 132 | } | ||
| 133 | |||
| 134 | #define BVOrthogonalizeGS1(a,b,c,d,e,f,g,h) (bv->ops->gramschmidt?(*bv->ops->gramschmidt):(mgs?BVOrthogonalizeMGS1:BVOrthogonalizeCGS1))(a,b,c,d,e,f,g,h) | ||
| 135 | |||
| 136 | /* | ||
| 137 | BVOrthogonalizeGS - Orthogonalize with (classical or modified) Gram-Schmidt | ||
| 138 | |||
| 139 | j - the index of the column to orthogonalize (cannot use both j and v) | ||
| 140 | v - the vector to orthogonalize (cannot use both j and v) | ||
| 141 | which - logical array indicating selected columns (only used in MGS) | ||
| 142 | norm - (optional) norm of the vector after being orthogonalized | ||
| 143 | lindep - (optional) flag indicating possible linear dependence | ||
| 144 | */ | ||
| 145 | 2554007 | static PetscErrorCode BVOrthogonalizeGS(BV bv,PetscInt j,Vec v,PetscBool *which,PetscReal *norm,PetscBool *lindep) | |
| 146 | { | ||
| 147 | 2554007 | PetscScalar *h,*c,*omega; | |
| 148 | 2554007 | PetscReal onrm,nrm; | |
| 149 | 2554007 | PetscInt k,l; | |
| 150 | 2554007 | PetscBool mgs,dolindep,signature; | |
| 151 | |||
| 152 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2554007 | PetscFunctionBegin; |
| 153 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2554007 | if (v) { |
| 154 | 452582 | k = bv->k; | |
| 155 | 452582 | h = bv->h; | |
| 156 | 452582 | c = bv->c; | |
| 157 | } else { | ||
| 158 | k = j; | ||
| 159 | h = NULL; | ||
| 160 | c = NULL; | ||
| 161 | } | ||
| 162 | |||
| 163 | 2554007 | mgs = (bv->orthog_type==BV_ORTHOG_MGS)? PETSC_TRUE: PETSC_FALSE; | |
| 164 | |||
| 165 | /* if indefinite inner product, skip the computation of lindep */ | ||
| 166 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
2554007 | if (bv->indef && lindep) *lindep = PETSC_FALSE; |
| 167 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
2554007 | dolindep = (!bv->indef && lindep)? PETSC_TRUE: PETSC_FALSE; |
| 168 | |||
| 169 | /* if indefinite and we are orthogonalizing a column, the norm must always be computed */ | ||
| 170 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
2554007 | signature = (bv->indef && !v)? PETSC_TRUE: PETSC_FALSE; |
| 171 | |||
| 172 |
5/6✓ Branch 0 taken 6 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3539097 | PetscCall(BV_CleanCoefficients(bv,k,h)); |
| 173 | |||
| 174 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
2554007 | switch (bv->orthog_ref) { |
| 175 | |||
| 176 | 2424905 | case BV_ORTHOG_REFINE_IFNEEDED: | |
| 177 |
9/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
4641299 | PetscCall(BVOrthogonalizeGS1(bv,k,v,which,h,c,&onrm,&nrm)); |
| 178 | /* repeat if ||q|| < eta ||h|| */ | ||
| 179 | l = 1; | ||
| 180 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
3656153 | while (l<3 && nrm && PetscAbsReal(nrm) < bv->orthog_eta*PetscAbsReal(onrm)) { |
| 181 | 1271413 | l++; | |
| 182 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
1271413 | if (mgs||bv->indef) onrm = nrm; |
| 183 |
15/16✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 10 times.
✓ Branch 7 taken 10 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 10 times.
✓ Branch 10 taken 10 times.
✓ Branch 11 taken 10 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✓ Branch 14 taken 2 times.
✓ Branch 15 taken 2 times.
|
3928617 | PetscCall(BVOrthogonalizeGS1(bv,k,v,which,h,c,(mgs||bv->indef)?NULL:&onrm,&nrm)); |
| 184 | } | ||
| 185 | /* linear dependence check: criterion not satisfied in the last iteration */ | ||
| 186 |
6/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
|
4014545 | if (dolindep) *lindep = PetscNot(nrm && PetscAbsReal(nrm) >= bv->orthog_eta*PetscAbsReal(onrm)); |
| 187 | break; | ||
| 188 | |||
| 189 | 896 | case BV_ORTHOG_REFINE_NEVER: | |
| 190 |
8/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
1472 | PetscCall(BVOrthogonalizeGS1(bv,k,v,which,h,c,NULL,NULL)); |
| 191 | /* compute ||v|| */ | ||
| 192 |
7/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ 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.
|
896 | if (norm || dolindep || signature) PetscCall(BV_NormVecOrColumn(bv,k,v,&nrm)); |
| 193 | /* linear dependence check: just test for exactly zero norm */ | ||
| 194 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
896 | if (dolindep) *lindep = PetscNot(nrm); |
| 195 | break; | ||
| 196 | |||
| 197 | 128206 | case BV_ORTHOG_REFINE_ALWAYS: | |
| 198 |
9/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
211619 | PetscCall(BVOrthogonalizeGS1(bv,k,v,which,h,c,NULL,NULL)); |
| 199 |
15/16✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 10 times.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 10 times.
✓ Branch 9 taken 10 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 8 times.
✓ Branch 12 taken 2 times.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
|
336648 | PetscCall(BVOrthogonalizeGS1(bv,k,v,which,h,c,dolindep?&onrm:NULL,(norm||dolindep||signature)?&nrm:NULL)); |
| 200 | /* linear dependence check: criterion not satisfied in the second iteration */ | ||
| 201 |
4/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
131423 | if (dolindep) *lindep = PetscNot(nrm && PetscAbsReal(nrm) >= bv->orthog_eta*PetscAbsReal(onrm)); |
| 202 | break; | ||
| 203 | } | ||
| 204 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2554007 | if (signature) { |
| 205 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
155015 | PetscCall(VecGetArray(bv->omega,&omega)); |
| 206 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
155015 | omega[bv->nc+k] = (nrm<0.0)? -1.0: 1.0; |
| 207 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
155015 | PetscCall(VecRestoreArray(bv->omega,&omega)); |
| 208 | } | ||
| 209 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2554007 | if (norm) { |
| 210 | 2401977 | *norm = nrm; | |
| 211 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2401977 | if (!v) { /* store norm value next to the orthogonalization coefficients */ |
| 212 |
9/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 6 times.
✓ Branch 5 taken 4 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 4 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
2104289 | if (dolindep && *lindep) PetscCall(BV_SetValue(bv,k,k,h,0.0)); |
| 213 |
5/6✓ Branch 0 taken 6 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2899626 | else PetscCall(BV_SetValue(bv,k,k,h,nrm)); |
| 214 | } | ||
| 215 | } | ||
| 216 |
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.
|
491936 | PetscFunctionReturn(PETSC_SUCCESS); |
| 217 | } | ||
| 218 | |||
| 219 | /*@ | ||
| 220 | BVOrthogonalizeVec - Orthogonalize a given vector with respect to all | ||
| 221 | active columns. | ||
| 222 | |||
| 223 | Collective | ||
| 224 | |||
| 225 | Input Parameters: | ||
| 226 | + bv - the basis vectors context | ||
| 227 | - v - the vector | ||
| 228 | |||
| 229 | Output Parameters: | ||
| 230 | + H - (optional) coefficients computed during orthogonalization | ||
| 231 | . norm - (optional) norm of the vector after being orthogonalized | ||
| 232 | - lindep - (optional) flag indicating that refinement did not improve the quality | ||
| 233 | of orthogonalization | ||
| 234 | |||
| 235 | Notes: | ||
| 236 | This function is equivalent to `BVOrthogonalizeColumn()` but orthogonalizes | ||
| 237 | a vector as an argument rather than taking one of the `BV` columns. The | ||
| 238 | vector is orthogonalized against all active columns (`k`) and the constraints. | ||
| 239 | If `H` is given, it must have enough space to store `k-l` coefficients, where `l` | ||
| 240 | is the number of leading columns. | ||
| 241 | |||
| 242 | In the case of an indefinite inner product, the `lindep` parameter is not | ||
| 243 | computed (set to false). | ||
| 244 | |||
| 245 | Level: advanced | ||
| 246 | |||
| 247 | .seealso: [](sec:bv), `BVOrthogonalizeColumn()`, `BVSetOrthogonalization()`, `BVSetActiveColumns()`, `BVGetNumConstraints()` | ||
| 248 | @*/ | ||
| 249 | 452582 | PetscErrorCode BVOrthogonalizeVec(BV bv,Vec v,PetscScalar H[],PetscReal *norm,PetscBool *lindep) | |
| 250 | { | ||
| 251 | 452582 | PetscInt ksave,lsave; | |
| 252 | |||
| 253 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
452582 | PetscFunctionBegin; |
| 254 |
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.
|
452582 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 255 |
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.
|
452582 | PetscValidHeaderSpecific(v,VEC_CLASSID,2); |
| 256 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
452582 | PetscValidType(bv,1); |
| 257 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
452582 | BVCheckSizes(bv,1); |
| 258 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
452582 | PetscValidType(v,2); |
| 259 |
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.
|
452582 | PetscCheckSameComm(bv,1,v,2); |
| 260 | |||
| 261 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
452582 | PetscCall(PetscLogEventBegin(BV_OrthogonalizeVec,bv,0,0,0)); |
| 262 | 452582 | ksave = bv->k; | |
| 263 | 452582 | lsave = bv->l; | |
| 264 | 452582 | bv->l = -bv->nc; /* must also orthogonalize against constraints and leading columns */ | |
| 265 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
452582 | PetscCall(BV_AllocateCoeffs(bv)); |
| 266 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
452582 | PetscCall(BV_AllocateSignature(bv)); |
| 267 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
452582 | PetscCall(BVOrthogonalizeGS(bv,0,v,NULL,norm,lindep)); |
| 268 | 452582 | bv->k = ksave; | |
| 269 | 452582 | bv->l = lsave; | |
| 270 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
560318 | if (H) PetscCall(BV_StoreCoefficients(bv,bv->k,bv->h,H)); |
| 271 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
452582 | PetscCall(PetscLogEventEnd(BV_OrthogonalizeVec,bv,0,0,0)); |
| 272 |
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.
|
89150 | PetscFunctionReturn(PETSC_SUCCESS); |
| 273 | } | ||
| 274 | |||
| 275 | /*@ | ||
| 276 | BVOrthogonalizeColumn - Orthogonalize one of the column vectors with respect to | ||
| 277 | the previous ones. | ||
| 278 | |||
| 279 | Collective | ||
| 280 | |||
| 281 | Input Parameters: | ||
| 282 | + bv - the basis vectors context | ||
| 283 | - j - index of column to be orthogonalized | ||
| 284 | |||
| 285 | Output Parameters: | ||
| 286 | + H - (optional) coefficients computed during orthogonalization | ||
| 287 | . norm - (optional) norm of the vector after being orthogonalized | ||
| 288 | - lindep - (optional) flag indicating that refinement did not improve the quality | ||
| 289 | of orthogonalization | ||
| 290 | |||
| 291 | Notes: | ||
| 292 | This function applies an orthogonal projector to project vector $v_j$ onto | ||
| 293 | the orthogonal complement of the span of the columns $v_{0:j-1}$. | ||
| 294 | The columns $v_{0:j-1}$ are assumed to be mutually orthonormal. | ||
| 295 | |||
| 296 | Leading columns $v_{0:\ell-1}$ also participate in the orthogonalization, as well | ||
| 297 | as the constraints. If `H` is given, it must have enough space to store | ||
| 298 | $j-\ell+1$ coefficients (the last coefficient will contain the value `norm`, unless | ||
| 299 | the `norm` argument is `NULL`). | ||
| 300 | |||
| 301 | If a non-standard inner product has been specified with `BVSetMatrix()`, | ||
| 302 | then the vector is B-orthogonalized, using the non-standard inner product | ||
| 303 | defined by matrix $B$. The output vector satisfies $v_j^*Bv_{0:j-1} = 0$. | ||
| 304 | |||
| 305 | This routine does not normalize the resulting vector, see `BVOrthonormalizeColumn()`. | ||
| 306 | |||
| 307 | In the case of an indefinite inner product, the `lindep` parameter is not | ||
| 308 | computed (set to false). | ||
| 309 | |||
| 310 | Level: advanced | ||
| 311 | |||
| 312 | .seealso: [](sec:bv), `BVSetOrthogonalization()`, `BVSetMatrix()`, `BVSetActiveColumns()`, `BVOrthogonalize()`, `BVOrthogonalizeVec()`, `BVGetNumConstraints()`, `BVOrthonormalizeColumn()` | ||
| 313 | @*/ | ||
| 314 | 801487 | PetscErrorCode BVOrthogonalizeColumn(BV bv,PetscInt j,PetscScalar H[],PetscReal *norm,PetscBool *lindep) | |
| 315 | { | ||
| 316 | 801487 | PetscInt ksave,lsave; | |
| 317 | |||
| 318 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
801487 | PetscFunctionBegin; |
| 319 |
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.
|
801487 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 320 |
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.
|
801487 | PetscValidLogicalCollectiveInt(bv,j,2); |
| 321 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
801487 | PetscValidType(bv,1); |
| 322 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
801487 | BVCheckSizes(bv,1); |
| 323 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
801487 | PetscCheck(j>=0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"Index j must be non-negative"); |
| 324 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
801487 | PetscCheck(j<bv->m,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"Index j=%" PetscInt_FMT " but BV only has %" PetscInt_FMT " columns",j,bv->m); |
| 325 | |||
| 326 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
801487 | PetscCall(PetscLogEventBegin(BV_OrthogonalizeVec,bv,0,0,0)); |
| 327 | 801487 | ksave = bv->k; | |
| 328 | 801487 | lsave = bv->l; | |
| 329 | 801487 | bv->l = -bv->nc; /* must also orthogonalize against constraints and leading columns */ | |
| 330 |
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.
|
801487 | if (!bv->buffer) PetscCall(BVGetBufferVec(bv,&bv->buffer)); |
| 331 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
801487 | PetscCall(BV_AllocateSignature(bv)); |
| 332 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
801487 | PetscCall(BVOrthogonalizeGS(bv,j,NULL,NULL,norm,lindep)); |
| 333 | 801487 | bv->k = ksave; | |
| 334 | 801487 | bv->l = lsave; | |
| 335 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
950988 | if (H) PetscCall(BV_StoreCoefficients(bv,j,NULL,H)); |
| 336 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
801487 | PetscCall(PetscLogEventEnd(BV_OrthogonalizeVec,bv,0,0,0)); |
| 337 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
801487 | PetscCall(PetscObjectStateIncrease((PetscObject)bv)); |
| 338 |
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.
|
801487 | PetscFunctionReturn(PETSC_SUCCESS); |
| 339 | } | ||
| 340 | |||
| 341 | /*@ | ||
| 342 | BVOrthonormalizeColumn - Orthonormalize one of the column vectors with respect to | ||
| 343 | the previous ones. | ||
| 344 | |||
| 345 | Collective | ||
| 346 | |||
| 347 | Input Parameters: | ||
| 348 | + bv - the basis vectors context | ||
| 349 | . j - index of column to be orthonormalized | ||
| 350 | - replace - whether it is allowed to set the vector randomly | ||
| 351 | |||
| 352 | Output Parameters: | ||
| 353 | + norm - (optional) norm of the vector after orthogonalization and before normalization | ||
| 354 | - lindep - (optional) flag indicating that linear dependence was determined during | ||
| 355 | orthogonalization | ||
| 356 | |||
| 357 | Notes: | ||
| 358 | This is equivalent to a call to `BVOrthogonalizeColumn()` followed by a | ||
| 359 | call to `BVScaleColumn()` with the reciprocal of the norm. | ||
| 360 | |||
| 361 | This function first orthogonalizes vector $v_j$ with respect to $v_{0:j-1}$. | ||
| 362 | A byproduct of this computation is `norm`, the norm of the vector after | ||
| 363 | orthogonalization. Secondly, it scales the vector with `1/norm`, so that the | ||
| 364 | resulting vector has unit norm. | ||
| 365 | |||
| 366 | If after orthogonalization the vector $v_j$ is exactly zero, it cannot be normalized | ||
| 367 | because `norm=0`. In that case, it could be left as zero or replaced by a random | ||
| 368 | vector that is then orthonormalized. The latter is achieved by setting the | ||
| 369 | argument `replace` to `PETSC_TRUE`. The vector will be replaced by a random vector also | ||
| 370 | if `lindep` was set to `PETSC_TRUE`, even if the norm is not exactly zero. | ||
| 371 | |||
| 372 | If the vector has been replaced by a random vector, the output arguments `norm` and | ||
| 373 | `lindep` will be set according to the orthogonalization of this new vector. | ||
| 374 | |||
| 375 | Level: advanced | ||
| 376 | |||
| 377 | .seealso: [](sec:bv), `BVOrthogonalizeColumn()`, `BVScaleColumn()` | ||
| 378 | @*/ | ||
| 379 | 1212154 | PetscErrorCode BVOrthonormalizeColumn(BV bv,PetscInt j,PetscBool replace,PetscReal *norm,PetscBool *lindep) | |
| 380 | { | ||
| 381 | 1212154 | PetscScalar alpha; | |
| 382 | 1212154 | PetscReal nrm; | |
| 383 | 1212154 | PetscInt ksave,lsave; | |
| 384 | 1212154 | PetscBool lndep; | |
| 385 | |||
| 386 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1212154 | PetscFunctionBegin; |
| 387 |
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.
|
1212154 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 388 |
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.
|
1212154 | PetscValidLogicalCollectiveInt(bv,j,2); |
| 389 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1212154 | PetscValidType(bv,1); |
| 390 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1212154 | BVCheckSizes(bv,1); |
| 391 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1212154 | PetscCheck(j>=0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"Index j must be non-negative"); |
| 392 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1212154 | PetscCheck(j<bv->m,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"Index j=%" PetscInt_FMT " but BV only has %" PetscInt_FMT " columns",j,bv->m); |
| 393 | |||
| 394 | /* orthogonalize */ | ||
| 395 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1212154 | PetscCall(PetscLogEventBegin(BV_OrthogonalizeVec,bv,0,0,0)); |
| 396 | 1212154 | ksave = bv->k; | |
| 397 | 1212154 | lsave = bv->l; | |
| 398 | 1212154 | bv->l = -bv->nc; /* must also orthogonalize against constraints and leading columns */ | |
| 399 |
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.
|
1212154 | if (!bv->buffer) PetscCall(BVGetBufferVec(bv,&bv->buffer)); |
| 400 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1212154 | PetscCall(BV_AllocateSignature(bv)); |
| 401 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1212154 | PetscCall(BVOrthogonalizeGS(bv,j,NULL,NULL,&nrm,&lndep)); |
| 402 |
5/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
|
1212154 | if (replace && (nrm==0.0 || lndep)) { |
| 403 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
6 | PetscCall(PetscInfo(bv,"Vector was linearly dependent, generating a new random vector\n")); |
| 404 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
6 | PetscCall(BVSetRandomColumn(bv,j)); |
| 405 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
6 | PetscCall(BVOrthogonalizeGS(bv,j,NULL,NULL,&nrm,&lndep)); |
| 406 |
2/4✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 6 times.
|
6 | if (nrm==0.0 || lndep) { /* yet another attempt */ |
| 407 | ✗ | PetscCall(BVSetRandomColumn(bv,j)); | |
| 408 | ✗ | PetscCall(BVOrthogonalizeGS(bv,j,NULL,NULL,&nrm,&lndep)); | |
| 409 | } | ||
| 410 | } | ||
| 411 | 1212154 | bv->k = ksave; | |
| 412 | 1212154 | bv->l = lsave; | |
| 413 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1212154 | PetscCall(PetscLogEventEnd(BV_OrthogonalizeVec,bv,0,0,0)); |
| 414 | |||
| 415 | /* scale */ | ||
| 416 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
1212154 | if (nrm!=1.0 && nrm!=0.0) { |
| 417 | 1206555 | alpha = 1.0/nrm; | |
| 418 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1206555 | PetscCall(PetscLogEventBegin(BV_Scale,bv,0,0,0)); |
| 419 |
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.
|
1206555 | PetscUseTypeMethod(bv,scale,j,alpha); |
| 420 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1206555 | PetscCall(PetscLogEventEnd(BV_Scale,bv,0,0,0)); |
| 421 | } | ||
| 422 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1212154 | if (norm) *norm = nrm; |
| 423 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1212154 | if (lindep) *lindep = lndep; |
| 424 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
1212154 | PetscCall(PetscObjectStateIncrease((PetscObject)bv)); |
| 425 |
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.
|
1212154 | PetscFunctionReturn(PETSC_SUCCESS); |
| 426 | } | ||
| 427 | |||
| 428 | /*@ | ||
| 429 | BVOrthogonalizeSomeColumn - Orthogonalize one of the column vectors with | ||
| 430 | respect to some of the previous ones. | ||
| 431 | |||
| 432 | Collective | ||
| 433 | |||
| 434 | Input Parameters: | ||
| 435 | + bv - the basis vectors context | ||
| 436 | . j - index of column to be orthogonalized | ||
| 437 | - which - logical array indicating selected columns | ||
| 438 | |||
| 439 | Output Parameters: | ||
| 440 | + H - (optional) coefficients computed during orthogonalization | ||
| 441 | . norm - (optional) norm of the vector after being orthogonalized | ||
| 442 | - lindep - (optional) flag indicating that refinement did not improve the quality | ||
| 443 | of orthogonalization | ||
| 444 | |||
| 445 | Notes: | ||
| 446 | This function is similar to `BVOrthogonalizeColumn()`, but $v_j$ is | ||
| 447 | orthogonalized only against columns $v_i$ having `which[i]=PETSC_TRUE`. | ||
| 448 | The length of array `which` must be `j` at least. | ||
| 449 | |||
| 450 | The use of this operation is restricted to MGS orthogonalization type, | ||
| 451 | `BV_ORTHOG_MGS`. | ||
| 452 | |||
| 453 | In the case of an indefinite inner product, the `lindep` parameter is not | ||
| 454 | computed (set to false). | ||
| 455 | |||
| 456 | Level: advanced | ||
| 457 | |||
| 458 | .seealso: [](sec:bv), `BVOrthogonalizeColumn()`, `BVSetOrthogonalization()` | ||
| 459 | @*/ | ||
| 460 | 87778 | PetscErrorCode BVOrthogonalizeSomeColumn(BV bv,PetscInt j,PetscBool *which,PetscScalar H[],PetscReal *norm,PetscBool *lindep) | |
| 461 | { | ||
| 462 | 87778 | PetscInt ksave,lsave; | |
| 463 | |||
| 464 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
87778 | PetscFunctionBegin; |
| 465 |
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.
|
87778 | PetscValidHeaderSpecific(bv,BV_CLASSID,1); |
| 466 |
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.
|
87778 | PetscValidLogicalCollectiveInt(bv,j,2); |
| 467 |
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.
|
87778 | PetscAssertPointer(which,3); |
| 468 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
87778 | PetscValidType(bv,1); |
| 469 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
87778 | BVCheckSizes(bv,1); |
| 470 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
87778 | PetscCheck(j>=0,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"Index j must be non-negative"); |
| 471 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
87778 | PetscCheck(j<bv->m,PetscObjectComm((PetscObject)bv),PETSC_ERR_ARG_OUTOFRANGE,"Index j=%" PetscInt_FMT " but BV only has %" PetscInt_FMT " columns",j,bv->m); |
| 472 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
87778 | PetscCheck(bv->orthog_type==BV_ORTHOG_MGS,PetscObjectComm((PetscObject)bv),PETSC_ERR_SUP,"Operation only available for MGS orthogonalization"); |
| 473 | |||
| 474 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
87778 | PetscCall(PetscLogEventBegin(BV_OrthogonalizeVec,bv,0,0,0)); |
| 475 | 87778 | ksave = bv->k; | |
| 476 | 87778 | lsave = bv->l; | |
| 477 | 87778 | bv->l = -bv->nc; /* must also orthogonalize against constraints and leading columns */ | |
| 478 |
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.
|
87778 | if (!bv->buffer) PetscCall(BVGetBufferVec(bv,&bv->buffer)); |
| 479 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
87778 | PetscCall(BV_AllocateSignature(bv)); |
| 480 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
87778 | PetscCall(BVOrthogonalizeGS(bv,j,NULL,which,norm,lindep)); |
| 481 | 87778 | bv->k = ksave; | |
| 482 | 87778 | bv->l = lsave; | |
| 483 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 4 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
122850 | if (H) PetscCall(BV_StoreCoefficients(bv,j,NULL,H)); |
| 484 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
87778 | PetscCall(PetscLogEventEnd(BV_OrthogonalizeVec,bv,0,0,0)); |
| 485 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
87778 | PetscCall(PetscObjectStateIncrease((PetscObject)bv)); |
| 486 |
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.
|
87778 | PetscFunctionReturn(PETSC_SUCCESS); |
| 487 | } | ||
| 488 | |||
| 489 | /* | ||
| 490 | Block Gram-Schmidt: V2 = V2 - V1*R12, where R12 = V1'*V2 | ||
| 491 | */ | ||
| 492 | 1432 | static PetscErrorCode BVOrthogonalize_BlockGS(BV V,Mat R) | |
| 493 | { | ||
| 494 | 1432 | BV V1; | |
| 495 | |||
| 496 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1432 | PetscFunctionBegin; |
| 497 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1432 | PetscCall(BVGetSplit(V,&V1,NULL)); |
| 498 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1432 | PetscCall(BVDot(V,V1,R)); |
| 499 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1432 | PetscCall(BVMult(V,-1.0,1.0,V1,R)); |
| 500 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1432 | PetscCall(BVRestoreSplit(V,&V1,NULL)); |
| 501 |
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.
|
248 | PetscFunctionReturn(PETSC_SUCCESS); |
| 502 | } | ||
| 503 | |||
| 504 | /*MC | ||
| 505 | BV_ORTHOG_BLOCK_GS - Orthogonalize a set of vectors with Gram-Schmidt, column by column. | ||
| 506 | |||
| 507 | Note: | ||
| 508 | In this case, the block orthogonalization is done in the same way as the | ||
| 509 | orthogonalization of individual vectors, e.g., `BVOrthogonalizeColumn`, and | ||
| 510 | hence the settings provided via `BVSetOrthogonalization()` apply. | ||
| 511 | |||
| 512 | Level: advanced | ||
| 513 | |||
| 514 | .seealso: [](sec:bv), `BVOrthogBlockType`, `BVSetOrthogonalization()`, `BVOrthogonalize()`, `BV_ORTHOG_BLOCK_CHOL`, `BV_ORTHOG_BLOCK_TSQR`, `BV_ORTHOG_BLOCK_TSQRCHOL`, `BV_ORTHOG_BLOCK_SVQB` | ||
| 515 | M*/ | ||
| 516 | 56436 | static PetscErrorCode BVOrthogonalize_GS(BV V,Mat R) | |
| 517 | { | ||
| 518 | 56436 | PetscScalar *r=NULL; | |
| 519 | 56436 | PetscReal norm; | |
| 520 | 56436 | PetscInt j,ldr,lsave; | |
| 521 | 56436 | Vec v,w; | |
| 522 | |||
| 523 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
56436 | PetscFunctionBegin; |
| 524 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
56436 | if (R) { |
| 525 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4135 | PetscCall(MatDenseGetLDA(R,&ldr)); |
| 526 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4135 | PetscCall(MatDenseGetArray(R,&r)); |
| 527 | } | ||
| 528 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
56436 | if (V->matrix) { |
| 529 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17896 | PetscCall(BVGetCachedBV(V,&V->cached)); |
| 530 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17896 | PetscCall(BVSetActiveColumns(V->cached,V->l,V->k)); |
| 531 | } | ||
| 532 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
431952 | for (j=V->l;j<V->k;j++) { |
| 533 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
375516 | if (V->matrix && V->orthog_type==BV_ORTHOG_MGS) { /* fill cached BV */ |
| 534 | ✗ | PetscCall(BVGetColumn(V->cached,j,&v)); | |
| 535 | ✗ | PetscCall(BVGetColumn(V,j,&w)); | |
| 536 | ✗ | PetscCall(MatMult(V->matrix,w,v)); | |
| 537 | ✗ | PetscCall(BVRestoreColumn(V,j,&w)); | |
| 538 | ✗ | PetscCall(BVRestoreColumn(V->cached,j,&v)); | |
| 539 | } | ||
| 540 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
375516 | if (R) { |
| 541 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
53123 | PetscCall(BVOrthogonalizeColumn(V,j,NULL,&norm,NULL)); |
| 542 | 53123 | lsave = V->l; | |
| 543 | 53123 | V->l = -V->nc; | |
| 544 |
5/6✓ Branch 0 taken 6 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
73437 | PetscCall(BV_StoreCoefficients(V,j,NULL,r+j*ldr)); |
| 545 | 53123 | V->l = lsave; | |
| 546 | 53123 | r[j+j*ldr] = norm; | |
| 547 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
322393 | } else PetscCall(BVOrthogonalizeColumn(V,j,NULL,&norm,NULL)); |
| 548 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
375516 | PetscCheck(norm,PetscObjectComm((PetscObject)V),PETSC_ERR_CONV_FAILED,"Breakdown in BVOrthogonalize due to a linearly dependent column"); |
| 549 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
375516 | if (V->matrix && V->orthog_type==BV_ORTHOG_CGS) { /* fill cached BV */ |
| 550 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
113958 | PetscCall(BVGetColumn(V->cached,j,&v)); |
| 551 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
113958 | PetscCall(VecCopy(V->Bx,v)); |
| 552 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
113958 | PetscCall(BVRestoreColumn(V->cached,j,&v)); |
| 553 | } | ||
| 554 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
375516 | PetscCall(BVScaleColumn(V,j,1.0/norm)); |
| 555 | } | ||
| 556 |
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.
|
56436 | if (R) PetscCall(MatDenseRestoreArray(R,&r)); |
| 557 |
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.
|
11209 | PetscFunctionReturn(PETSC_SUCCESS); |
| 558 | } | ||
| 559 | |||
| 560 | /* | ||
| 561 | BV_GetBufferMat - Create auxiliary seqdense matrix that wraps the bv->buffer. | ||
| 562 | */ | ||
| 563 | 5251 | static inline PetscErrorCode BV_GetBufferMat(BV bv) | |
| 564 | { | ||
| 565 | 5251 | PetscInt ld; | |
| 566 | 5251 | PetscScalar *array; | |
| 567 | |||
| 568 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
5251 | PetscFunctionBegin; |
| 569 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5251 | if (!bv->Abuffer) { |
| 570 |
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.
|
1807 | if (!bv->buffer) PetscCall(BVGetBufferVec(bv,&bv->buffer)); |
| 571 | 1807 | ld = bv->m+bv->nc; | |
| 572 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1807 | PetscCall(VecGetArray(bv->buffer,&array)); |
| 573 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1807 | PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,ld,bv->m,array,&bv->Abuffer)); |
| 574 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1807 | PetscCall(VecRestoreArray(bv->buffer,&array)); |
| 575 | } | ||
| 576 |
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.
|
946 | PetscFunctionReturn(PETSC_SUCCESS); |
| 577 | } | ||
| 578 | |||
| 579 | /* | ||
| 580 | BV_StoreCoeffsBlock_Default - Copy the contents of the BV buffer to a dense Mat | ||
| 581 | provided by the caller. Only columns l:k-1 are copied, restricting to the upper | ||
| 582 | triangular part if tri=PETSC_TRUE. | ||
| 583 | */ | ||
| 584 | 1889 | static inline PetscErrorCode BV_StoreCoeffsBlock_Default(BV bv,Mat R,PetscBool tri) | |
| 585 | { | ||
| 586 | 1889 | const PetscScalar *bb; | |
| 587 | 1889 | PetscScalar *rr; | |
| 588 | 1889 | PetscInt j,ldr,ldb; | |
| 589 | |||
| 590 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1889 | PetscFunctionBegin; |
| 591 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1889 | PetscCall(MatDenseGetLDA(R,&ldr)); |
| 592 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1889 | PetscCall(MatDenseGetArray(R,&rr)); |
| 593 | 1889 | ldb = bv->m+bv->nc; | |
| 594 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1889 | PetscCall(VecGetArrayRead(bv->buffer,&bb)); |
| 595 |
9/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 2 times.
|
20657 | for (j=bv->l;j<bv->k;j++) PetscCall(PetscArraycpy(rr+j*ldr,bb+j*ldb,(tri?(j+1):bv->k)+bv->nc)); |
| 596 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1889 | PetscCall(VecRestoreArrayRead(bv->buffer,&bb)); |
| 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.
|
1889 | PetscCall(MatDenseRestoreArray(R,&rr)); |
| 598 |
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.
|
312 | PetscFunctionReturn(PETSC_SUCCESS); |
| 599 | } | ||
| 600 | |||
| 601 | /*MC | ||
| 602 | BV_ORTHOG_BLOCK_CHOL - Orthogonalize a set of vectors $V$ with the Cholesky QR | ||
| 603 | method, that is, compute $R=\mathrm{chol}(V^*V)$, then obtain the | ||
| 604 | orthogonalized vectors as $Q=V R^{-1}$. | ||
| 605 | |||
| 606 | Developer Note: | ||
| 607 | This is plain Cholesky QR, which may fail in case of ill-conditioned $V$. | ||
| 608 | An iterated version such as CholeskyQR2 should be preferred {cite:p}`Yam15`. | ||
| 609 | |||
| 610 | Level: advanced | ||
| 611 | |||
| 612 | .seealso: [](sec:bv), `BVOrthogBlockType`, `BVSetOrthogonalization()`, `BVOrthogonalize()`, `BV_ORTHOG_BLOCK_GS`, `BV_ORTHOG_BLOCK_TSQR`, `BV_ORTHOG_BLOCK_TSQRCHOL`, `BV_ORTHOG_BLOCK_SVQB` | ||
| 613 | M*/ | ||
| 614 | 1178 | static PetscErrorCode BVOrthogonalize_Chol(BV V,Mat Rin) | |
| 615 | { | ||
| 616 | 1178 | Mat R,S; | |
| 617 | |||
| 618 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1178 | PetscFunctionBegin; |
| 619 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1178 | PetscCall(BV_GetBufferMat(V)); |
| 620 | 1178 | R = V->Abuffer; | |
| 621 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1178 | if (Rin) S = Rin; /* use Rin as a workspace for S */ |
| 622 | 794 | else S = R; | |
| 623 |
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.
|
1178 | if (V->l) PetscCall(BVOrthogonalize_BlockGS(V,R)); |
| 624 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1178 | PetscCall(BVDot(V,V,R)); |
| 625 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1178 | PetscCall(BVMatCholInv_LAPACK_Private(V,R,S)); |
| 626 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1178 | PetscCall(BVMultInPlace(V,S,V->l,V->k)); |
| 627 |
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.
|
1178 | if (Rin) PetscCall(BV_StoreCoeffsBlock_Default(V,Rin,PETSC_TRUE)); |
| 628 |
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.
|
210 | PetscFunctionReturn(PETSC_SUCCESS); |
| 629 | } | ||
| 630 | |||
| 631 | /*MC | ||
| 632 | BV_ORTHOG_BLOCK_TSQR - Orthogonalize a set of vectors with the Tall-Skinny QR method {cite:p}`Dem12`. | ||
| 633 | |||
| 634 | Level: advanced | ||
| 635 | |||
| 636 | .seealso: [](sec:bv), `BVOrthogBlockType`, `BVSetOrthogonalization()`, `BVOrthogonalize()`, `BV_ORTHOG_BLOCK_GS`, `BV_ORTHOG_BLOCK_CHOL`, `BV_ORTHOG_BLOCK_TSQRCHOL`, `BV_ORTHOG_BLOCK_SVQB` | ||
| 637 | M*/ | ||
| 638 | 2101 | static PetscErrorCode BVOrthogonalize_TSQR(BV V,Mat Rin) | |
| 639 | { | ||
| 640 | 2101 | PetscScalar *pv,*r=NULL; | |
| 641 | 2101 | PetscInt ldr; | |
| 642 | 2101 | Mat R; | |
| 643 | |||
| 644 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2101 | PetscFunctionBegin; |
| 645 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2101 | PetscCall(BV_GetBufferMat(V)); |
| 646 | 2101 | R = V->Abuffer; | |
| 647 |
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.
|
2101 | if (V->l) PetscCall(BVOrthogonalize_BlockGS(V,R)); |
| 648 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2101 | PetscCall(MatDenseGetLDA(R,&ldr)); |
| 649 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2101 | PetscCall(MatDenseGetArray(R,&r)); |
| 650 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2101 | PetscCall(BVGetArray(V,&pv)); |
| 651 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2101 | PetscCall(BVOrthogonalize_LAPACK_TSQR(V,V->n,V->k-V->l,pv+(V->nc+V->l)*V->ld,V->ld,r+V->l*ldr+V->l,ldr)); |
| 652 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2101 | PetscCall(BVRestoreArray(V,&pv)); |
| 653 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2101 | PetscCall(MatDenseRestoreArray(R,&r)); |
| 654 |
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.
|
2101 | if (Rin) PetscCall(BV_StoreCoeffsBlock_Default(V,Rin,PETSC_TRUE)); |
| 655 |
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.
|
380 | PetscFunctionReturn(PETSC_SUCCESS); |
| 656 | } | ||
| 657 | |||
| 658 | /*MC | ||
| 659 | BV_ORTHOG_BLOCK_TSQRCHOL - Orthogonalize a set of vectors $V$ with the TSQR | ||
| 660 | method, but computing the triangular factor $R$ only, then retrieving the | ||
| 661 | orthogonalized vectors as $Q=V R^{-1}$. | ||
| 662 | |||
| 663 | Level: advanced | ||
| 664 | |||
| 665 | .seealso: [](sec:bv), `BVOrthogBlockType`, `BVSetOrthogonalization()`, `BVOrthogonalize()`, `BV_ORTHOG_BLOCK_GS`, `BV_ORTHOG_BLOCK_CHOL`, `BV_ORTHOG_BLOCK_TSQR`, `BV_ORTHOG_BLOCK_SVQB` | ||
| 666 | M*/ | ||
| 667 | 794 | static PetscErrorCode BVOrthogonalize_TSQRCHOL(BV V,Mat Rin) | |
| 668 | { | ||
| 669 | 794 | PetscScalar *pv,*r=NULL; | |
| 670 | 794 | PetscInt ldr; | |
| 671 | 794 | Mat R,S; | |
| 672 | |||
| 673 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
794 | PetscFunctionBegin; |
| 674 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
794 | PetscCall(BV_GetBufferMat(V)); |
| 675 | 794 | R = V->Abuffer; | |
| 676 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
794 | if (Rin) S = Rin; /* use Rin as a workspace for S */ |
| 677 | 602 | else S = R; | |
| 678 |
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.
|
794 | if (V->l) PetscCall(BVOrthogonalize_BlockGS(V,R)); |
| 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.
|
794 | PetscCall(MatDenseGetLDA(R,&ldr)); |
| 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.
|
794 | PetscCall(MatDenseGetArray(R,&r)); |
| 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.
|
794 | PetscCall(BVGetArray(V,&pv)); |
| 682 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
794 | PetscCall(BVOrthogonalize_LAPACK_TSQR_OnlyR(V,V->n,V->k-V->l,pv+(V->nc+V->l)*V->ld,V->ld,r+V->l*ldr+V->l,ldr)); |
| 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.
|
794 | PetscCall(BVRestoreArray(V,&pv)); |
| 684 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
794 | PetscCall(MatDenseRestoreArray(R,&r)); |
| 685 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
794 | PetscCall(BVMatTriInv_LAPACK_Private(V,R,S)); |
| 686 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
794 | PetscCall(BVMultInPlace(V,S,V->l,V->k)); |
| 687 |
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.
|
794 | if (Rin) PetscCall(BV_StoreCoeffsBlock_Default(V,Rin,PETSC_TRUE)); |
| 688 |
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.
|
146 | PetscFunctionReturn(PETSC_SUCCESS); |
| 689 | } | ||
| 690 | |||
| 691 | /*MC | ||
| 692 | BV_ORTHOG_BLOCK_SVQB - Orthogonalize a set of vectors with the SVQB method {cite:p}`Sta02`. | ||
| 693 | |||
| 694 | Note: | ||
| 695 | As opposed to other block orthogonalization methods, SVQB does not compute a | ||
| 696 | QR decomposition but a QB decomposition, i.e., the second factor is not | ||
| 697 | triangular. | ||
| 698 | |||
| 699 | Level: advanced | ||
| 700 | |||
| 701 | .seealso: [](sec:bv), `BVOrthogBlockType`, `BVSetOrthogonalization()`, `BVOrthogonalize()`, `BV_ORTHOG_BLOCK_GS`, `BV_ORTHOG_BLOCK_CHOL`, `BV_ORTHOG_BLOCK_TSQR`, `BV_ORTHOG_BLOCK_TSQRCHOL` | ||
| 702 | M*/ | ||
| 703 | 1178 | static PetscErrorCode BVOrthogonalize_SVQB(BV V,Mat Rin) | |
| 704 | { | ||
| 705 | 1178 | Mat R,S; | |
| 706 | |||
| 707 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1178 | PetscFunctionBegin; |
| 708 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1178 | PetscCall(BV_GetBufferMat(V)); |
| 709 | 1178 | R = V->Abuffer; | |
| 710 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1178 | if (Rin) S = Rin; /* use Rin as a workspace for S */ |
| 711 | 794 | else S = R; | |
| 712 |
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.
|
1178 | if (V->l) PetscCall(BVOrthogonalize_BlockGS(V,R)); |
| 713 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1178 | PetscCall(BVDot(V,V,R)); |
| 714 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1178 | PetscCall(BVMatSVQB_LAPACK_Private(V,R,S)); |
| 715 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1178 | PetscCall(BVMultInPlace(V,S,V->l,V->k)); |
| 716 |
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.
|
1178 | if (Rin) PetscCall(BV_StoreCoeffsBlock_Default(V,Rin,PETSC_FALSE)); |
| 717 |
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.
|
210 | PetscFunctionReturn(PETSC_SUCCESS); |
| 718 | } | ||
| 719 | |||
| 720 | /*@ | ||
| 721 | BVOrthogonalize - Orthogonalize all columns (starting from the leading ones), | ||
| 722 | that is, compute the QR decomposition. | ||
| 723 | |||
| 724 | Collective | ||
| 725 | |||
| 726 | Input Parameters: | ||
| 727 | + V - basis vectors to be orthogonalized (or $B$-orthogonalized), modified on output | ||
| 728 | - R - a sequential dense matrix (or `NULL`), on output the triangular factor of | ||
| 729 | the QR decomposition | ||
| 730 | |||
| 731 | Notes: | ||
| 732 | On input, matrix `R` must be a square sequential dense `Mat`, with at least as many | ||
| 733 | rows and columns as the number of active columns of `V`. The output satisfies | ||
| 734 | $V = \tilde V R$ (where $\tilde V$ represents `V` on exit) and $\tilde V^*\tilde V = I$ | ||
| 735 | (or $\tilde V^*B\tilde V = I$ if an inner product matrix $B$ has been specified with | ||
| 736 | `BVSetMatrix()`). | ||
| 737 | |||
| 738 | If `V` has leading columns, then they are not modified (are assumed to be already | ||
| 739 | orthonormal) and the leading columns of `R` are not referenced. Let the | ||
| 740 | decomposition be | ||
| 741 | $$ | ||
| 742 | \begin{bmatrix} | ||
| 743 | V_1 & V_2 | ||
| 744 | \end{bmatrix}= | ||
| 745 | \begin{bmatrix} | ||
| 746 | \tilde V_1 & \tilde V_2 | ||
| 747 | \end{bmatrix} | ||
| 748 | \begin{bmatrix} | ||
| 749 | R_{11} & R_{12} \\ | ||
| 750 | 0 & R_{22} | ||
| 751 | \end{bmatrix} | ||
| 752 | $$ | ||
| 753 | then $\tilde V_1$ is left unchanged (equal to $V_1$) as well as $R_{11}$ (they should | ||
| 754 | satisfy $V_1 = \tilde V_1 R_{11}$). | ||
| 755 | |||
| 756 | Can pass `NULL` if `R` is not required. | ||
| 757 | |||
| 758 | The method to be used for block orthogonalization can be set with | ||
| 759 | `BVSetOrthogonalization()`. If set to `BV_ORTHOG_BLOCK_GS`, the computation is done | ||
| 760 | column by column with successive calls to `BVOrthogonalizeColumn()`. Note that in the | ||
| 761 | `BV_ORTHOG_BLOCK_SVQB` method the `R` factor is not upper triangular. | ||
| 762 | |||
| 763 | If `V` is rank-deficient or very ill-conditioned, that is, one or more columns are | ||
| 764 | (almost) linearly dependent with respect to the rest, then the algorithm may | ||
| 765 | break down or result in larger numerical error. Linearly dependent columns are | ||
| 766 | essentially replaced by random directions, and the corresponding diagonal entry | ||
| 767 | in `R` is set to (nearly) zero. | ||
| 768 | |||
| 769 | Level: intermediate | ||
| 770 | |||
| 771 | .seealso: [](sec:bv), `BVOrthogonalizeColumn()`, `BVOrthogonalizeVec()`, `BVSetMatrix()`, `BVSetActiveColumns()`, `BVSetOrthogonalization()`, `BVOrthogBlockType` | ||
| 772 | @*/ | ||
| 773 | 61687 | PetscErrorCode BVOrthogonalize(BV V,Mat R) | |
| 774 | { | ||
| 775 | 61687 | PetscInt m,n; | |
| 776 | |||
| 777 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
61687 | PetscFunctionBegin; |
| 778 |
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.
|
61687 | PetscValidHeaderSpecific(V,BV_CLASSID,1); |
| 779 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
61687 | PetscValidType(V,1); |
| 780 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
61687 | BVCheckSizes(V,1); |
| 781 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
61687 | if (R) { |
| 782 |
2/12✗ 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 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
6024 | PetscValidHeaderSpecific(R,MAT_CLASSID,2); |
| 783 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
6024 | PetscValidType(R,2); |
| 784 |
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.
|
6024 | PetscCheckTypeName(R,MATSEQDENSE); |
| 785 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
6024 | PetscCall(MatGetSize(R,&m,&n)); |
| 786 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
6024 | PetscCheck(m==n,PetscObjectComm((PetscObject)V),PETSC_ERR_ARG_SIZ,"Mat argument is not square, it has %" PetscInt_FMT " rows and %" PetscInt_FMT " columns",m,n); |
| 787 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
6024 | PetscCheck(n>=V->k,PetscObjectComm((PetscObject)V),PETSC_ERR_ARG_SIZ,"Mat size %" PetscInt_FMT " is smaller than the number of BV active columns %" PetscInt_FMT,n,V->k); |
| 788 | } | ||
| 789 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
61687 | PetscCheck(!V->nc,PetscObjectComm((PetscObject)V),PETSC_ERR_SUP,"Not implemented for BV with constraints, use BVOrthogonalizeColumn() instead"); |
| 790 | |||
| 791 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
61687 | PetscCall(PetscLogEventBegin(BV_Orthogonalize,V,R,0,0)); |
| 792 |
5/6✓ 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 not taken.
|
61687 | switch (V->orthog_block) { |
| 793 | 56436 | case BV_ORTHOG_BLOCK_GS: /* proceed column by column with Gram-Schmidt */ | |
| 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.
|
56436 | PetscCall(BVOrthogonalize_GS(V,R)); |
| 795 | break; | ||
| 796 | 1178 | case BV_ORTHOG_BLOCK_CHOL: | |
| 797 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1178 | PetscCall(BVOrthogonalize_Chol(V,R)); |
| 798 | break; | ||
| 799 | 2101 | case BV_ORTHOG_BLOCK_TSQR: | |
| 800 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2101 | PetscCheck(!V->matrix,PetscObjectComm((PetscObject)V),PETSC_ERR_SUP,"Orthogonalization method not available for non-standard inner product"); |
| 801 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2101 | PetscCall(BVOrthogonalize_TSQR(V,R)); |
| 802 | break; | ||
| 803 | 794 | case BV_ORTHOG_BLOCK_TSQRCHOL: | |
| 804 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
794 | PetscCheck(!V->matrix,PetscObjectComm((PetscObject)V),PETSC_ERR_SUP,"Orthogonalization method not available for non-standard inner product"); |
| 805 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
794 | PetscCall(BVOrthogonalize_TSQRCHOL(V,R)); |
| 806 | break; | ||
| 807 | 1178 | case BV_ORTHOG_BLOCK_SVQB: | |
| 808 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1178 | PetscCall(BVOrthogonalize_SVQB(V,R)); |
| 809 | break; | ||
| 810 | } | ||
| 811 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
61687 | PetscCall(PetscLogEventEnd(BV_Orthogonalize,V,R,0,0)); |
| 812 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
61687 | PetscCall(PetscObjectStateIncrease((PetscObject)V)); |
| 813 |
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.
|
61687 | PetscFunctionReturn(PETSC_SUCCESS); |
| 814 | } | ||
| 815 |