| 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 | SLEPc eigensolver: "davidson" | ||
| 12 | |||
| 13 | Step: calculate the best eigenpairs in the subspace V | ||
| 14 | |||
| 15 | For that, performs these steps: | ||
| 16 | 1) Update W <- A * V | ||
| 17 | 2) Update H <- V' * W | ||
| 18 | 3) Obtain eigenpairs of H | ||
| 19 | 4) Select some eigenpairs | ||
| 20 | 5) Compute the Ritz pairs of the selected ones | ||
| 21 | */ | ||
| 22 | |||
| 23 | #include "davidson.h" | ||
| 24 | #include <slepcblaslapack.h> | ||
| 25 | |||
| 26 | 980 | static PetscErrorCode dvd_calcpairs_qz_start(dvdDashboard *d) | |
| 27 | { | ||
| 28 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
980 | PetscFunctionBegin; |
| 29 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(BVSetActiveColumns(d->eps->V,0,0)); |
| 30 |
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.
|
980 | if (d->W) PetscCall(BVSetActiveColumns(d->W,0,0)); |
| 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.
|
980 | PetscCall(BVSetActiveColumns(d->AX,0,0)); |
| 32 |
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.
|
980 | if (d->BX) PetscCall(BVSetActiveColumns(d->BX,0,0)); |
| 33 |
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.
|
192 | PetscFunctionReturn(PETSC_SUCCESS); |
| 34 | } | ||
| 35 | |||
| 36 | 980 | static PetscErrorCode dvd_calcpairs_qz_d(dvdDashboard *d) | |
| 37 | { | ||
| 38 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
980 | PetscFunctionBegin; |
| 39 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(BVDestroy(&d->W)); |
| 40 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(BVDestroy(&d->AX)); |
| 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.
|
980 | PetscCall(BVDestroy(&d->BX)); |
| 42 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(BVDestroy(&d->auxBV)); |
| 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.
|
980 | PetscCall(MatDestroy(&d->H)); |
| 44 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(MatDestroy(&d->G)); |
| 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.
|
980 | PetscCall(MatDestroy(&d->auxM)); |
| 46 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(SlepcVecPoolDestroy(&d->auxV)); |
| 47 |
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.
|
980 | PetscCall(PetscFree(d->nBds)); |
| 48 |
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.
|
192 | PetscFunctionReturn(PETSC_SUCCESS); |
| 49 | } | ||
| 50 | |||
| 51 | /* in complex, d->size_H real auxiliary values are needed */ | ||
| 52 | 86394 | static PetscErrorCode dvd_calcpairs_projeig_solve(dvdDashboard *d) | |
| 53 | { | ||
| 54 | 86394 | Vec v; | |
| 55 | 86394 | Mat A,B,H0,G0; | |
| 56 | 86394 | PetscScalar *pA; | |
| 57 | 86394 | const PetscScalar *pv; | |
| 58 | 86394 | PetscInt i,lV,kV,n,ld; | |
| 59 | |||
| 60 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
86394 | PetscFunctionBegin; |
| 61 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
86394 | PetscCall(BVGetActiveColumns(d->eps->V,&lV,&kV)); |
| 62 | 86394 | n = kV-lV; | |
| 63 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
86394 | if (!n) PetscFunctionReturn(PETSC_SUCCESS); |
| 64 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
86394 | PetscCall(DSSetDimensions(d->eps->ds,n,0,0)); |
| 65 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
86394 | PetscCall(DSGetMat(d->eps->ds,DS_MAT_A,&A)); |
| 66 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
86394 | PetscCall(MatDenseGetSubMatrix(d->H,lV,lV+n,lV,lV+n,&H0)); |
| 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.
|
86394 | PetscCall(MatCopy(H0,A,SAME_NONZERO_PATTERN)); |
| 68 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
86394 | PetscCall(MatDenseRestoreSubMatrix(d->H,&H0)); |
| 69 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
86394 | PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_A,&A)); |
| 70 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
86394 | if (d->G) { |
| 71 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
12881 | PetscCall(DSGetMat(d->eps->ds,DS_MAT_B,&B)); |
| 72 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
12881 | PetscCall(MatDenseGetSubMatrix(d->G,lV,lV+n,lV,lV+n,&G0)); |
| 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.
|
12881 | PetscCall(MatCopy(G0,B,SAME_NONZERO_PATTERN)); |
| 74 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
12881 | PetscCall(MatDenseRestoreSubMatrix(d->G,&G0)); |
| 75 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
12881 | PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_B,&B)); |
| 76 | } | ||
| 77 | /* Set the signature on projected matrix B */ | ||
| 78 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
86394 | if (DVD_IS(d->sEP,DVD_EP_INDEFINITE)) { |
| 79 | ✗ | PetscCall(DSGetLeadingDimension(d->eps->ds,&ld)); | |
| 80 | ✗ | PetscCall(DSGetArray(d->eps->ds,DS_MAT_B,&pA)); | |
| 81 | ✗ | PetscCall(PetscArrayzero(pA,n*ld)); | |
| 82 | ✗ | PetscCall(VecCreateSeq(PETSC_COMM_SELF,kV,&v)); | |
| 83 | ✗ | PetscCall(BVGetSignature(d->eps->V,v)); | |
| 84 | ✗ | PetscCall(VecGetArrayRead(v,&pv)); | |
| 85 | ✗ | for (i=0;i<n;i++) { | |
| 86 | ✗ | pA[i+ld*i] = d->nBds[i] = PetscRealPart(pv[lV+i]); | |
| 87 | } | ||
| 88 | ✗ | PetscCall(VecRestoreArrayRead(v,&pv)); | |
| 89 | ✗ | PetscCall(VecDestroy(&v)); | |
| 90 | ✗ | PetscCall(DSRestoreArray(d->eps->ds,DS_MAT_B,&pA)); | |
| 91 | } | ||
| 92 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
86394 | PetscCall(DSSetState(d->eps->ds,DS_STATE_RAW)); |
| 93 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
86394 | PetscCall(DSSolve(d->eps->ds,d->eigr,d->eigi)); |
| 94 |
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.
|
16811 | PetscFunctionReturn(PETSC_SUCCESS); |
| 95 | } | ||
| 96 | |||
| 97 | /* | ||
| 98 | A(lA:kA-1,lA:kA-1) <- Z(l:k-1)'*A(l:k-1,l:k-1)*Q(l,k-1), where k=l+kA-lA | ||
| 99 | */ | ||
| 100 | 17072 | static PetscErrorCode EPSXDUpdateProj(Mat Q,Mat Z,PetscInt l,Mat A,PetscInt lA,PetscInt kA,Mat aux) | |
| 101 | { | ||
| 102 | 17072 | PetscScalar one=1.0,zero=0.0; | |
| 103 | 17072 | PetscInt i,j,dA_=kA-lA,m0,n0,ldA_,ldQ_,ldZ_,nQ_; | |
| 104 | 17072 | PetscBLASInt dA,nQ,ldA,ldQ,ldZ; | |
| 105 | 17072 | PetscScalar *pA,*pW; | |
| 106 | 17072 | const PetscScalar *pQ,*pZ; | |
| 107 | 17072 | PetscBool symm=PETSC_FALSE,set,flg; | |
| 108 | |||
| 109 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
17072 | PetscFunctionBegin; |
| 110 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(MatGetSize(A,&m0,&n0)); |
| 111 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(MatDenseGetLDA(A,&ldA_)); |
| 112 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
17072 | PetscAssert(m0==n0,PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"A should be square"); |
| 113 |
2/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
17072 | PetscAssert(lA>=0 && lA<=m0,PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Invalid initial row, column in A"); |
| 114 |
2/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
17072 | PetscAssert(kA>=0 && kA>=lA && kA<=m0,PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Invalid final row, column in A"); |
| 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.
|
17072 | PetscCall(MatIsHermitianKnown(A,&set,&flg)); |
| 116 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
|
17072 | symm = set? flg: PETSC_FALSE; |
| 117 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(MatGetSize(Q,&m0,&n0)); nQ_=m0; |
| 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.
|
17072 | PetscCall(MatDenseGetLDA(Q,&ldQ_)); |
| 119 |
3/8✓ 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 not taken.
|
17072 | PetscAssert(l>=0 && l<=n0 && l+dA_<=n0,PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Invalid initial column in Q"); |
| 120 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(MatGetSize(Z,&m0,&n0)); |
| 121 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(MatDenseGetLDA(Z,&ldZ_)); |
| 122 |
2/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
17072 | PetscAssert(l>=0 && l<=n0 && l+dA_<=n0,PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Invalid initial column in Z"); |
| 123 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(MatGetSize(aux,&m0,&n0)); |
| 124 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
17072 | PetscAssert(m0*n0>=nQ_*dA_,PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"aux should be larger"); |
| 125 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(PetscBLASIntCast(dA_,&dA)); |
| 126 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(PetscBLASIntCast(nQ_,&nQ)); |
| 127 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(PetscBLASIntCast(ldA_,&ldA)); |
| 128 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(PetscBLASIntCast(ldQ_,&ldQ)); |
| 129 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(PetscBLASIntCast(ldZ_,&ldZ)); |
| 130 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(MatDenseGetArray(A,&pA)); |
| 131 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(MatDenseGetArrayRead(Q,&pQ)); |
| 132 |
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.
|
17072 | if (Q!=Z) PetscCall(MatDenseGetArrayRead(Z,&pZ)); |
| 133 | 13068 | else pZ = pQ; | |
| 134 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(MatDenseGetArrayWrite(aux,&pW)); |
| 135 | /* W = A*Q */ | ||
| 136 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
17072 | if (symm) { |
| 137 | /* symmetrize before multiplying */ | ||
| 138 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
163073 | for (i=lA+1;i<lA+nQ;i++) { |
| 139 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1260470 | for (j=lA;j<i;j++) pA[i+j*ldA] = PetscConj(pA[j+i*ldA]); |
| 140 | } | ||
| 141 | } | ||
| 142 |
10/20✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
17072 | PetscCallBLAS("BLASgemm",BLASgemm_("N","N",&nQ,&dA,&nQ,&one,&pA[ldA*lA+lA],&ldA,&pQ[ldQ*l+l],&ldQ,&zero,pW,&nQ)); |
| 143 | /* A = Q'*W */ | ||
| 144 |
10/20✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ 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 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
17072 | PetscCallBLAS("BLASgemm",BLASgemm_("C","N",&dA,&dA,&nQ,&one,&pZ[ldZ*l+l],&ldZ,pW,&nQ,&zero,&pA[ldA*lA+lA],&ldA)); |
| 145 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(MatDenseRestoreArray(A,&pA)); |
| 146 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(MatDenseRestoreArrayRead(Q,&pQ)); |
| 147 |
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.
|
17072 | if (Q!=Z) PetscCall(MatDenseRestoreArrayRead(Z,&pZ)); |
| 148 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
17072 | PetscCall(MatDenseRestoreArrayWrite(aux,&pW)); |
| 149 |
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.
|
3400 | PetscFunctionReturn(PETSC_SUCCESS); |
| 150 | } | ||
| 151 | |||
| 152 | 15070 | static PetscErrorCode dvd_calcpairs_updateproj(dvdDashboard *d) | |
| 153 | { | ||
| 154 | 15070 | Mat Q,Z; | |
| 155 | 15070 | PetscInt lV,kV; | |
| 156 | 15070 | PetscBool symm; | |
| 157 | |||
| 158 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
15070 | PetscFunctionBegin; |
| 159 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
15070 | PetscCall(DSGetMat(d->eps->ds,DS_MAT_Q,&Q)); |
| 160 |
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.
|
15070 | if (d->W) PetscCall(DSGetMat(d->eps->ds,DS_MAT_Z,&Z)); |
| 161 | 13068 | else Z = Q; | |
| 162 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
15070 | PetscCall(BVGetActiveColumns(d->eps->V,&lV,&kV)); |
| 163 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
15070 | PetscCall(EPSXDUpdateProj(Q,Z,0,d->H,lV,lV+d->V_tra_e,d->auxM)); |
| 164 |
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.
|
15070 | if (d->G) PetscCall(EPSXDUpdateProj(Q,Z,0,d->G,lV,lV+d->V_tra_e,d->auxM)); |
| 165 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
15070 | PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_Q,&Q)); |
| 166 |
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.
|
15070 | if (d->W) PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_Z,&Z)); |
| 167 | |||
| 168 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
15070 | PetscCall(PetscObjectTypeCompareAny((PetscObject)d->eps->ds,&symm,DSHEP,DSGHIEP,DSGHEP,"")); |
| 169 |
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.
|
15070 | if (d->V_tra_s==0 || symm) PetscFunctionReturn(PETSC_SUCCESS); |
| 170 | /* Compute upper part of H (and G): H(0:l-1,l:k-1) <- W(0:l-1)' * AV(l:k-1), where | ||
| 171 | k=l+d->V_tra_s */ | ||
| 172 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
648 | PetscCall(BVSetActiveColumns(d->W?d->W:d->eps->V,0,lV)); |
| 173 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
648 | PetscCall(BVSetActiveColumns(d->AX,lV,lV+d->V_tra_s)); |
| 174 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
648 | PetscCall(BVDot(d->AX,d->W?d->W:d->eps->V,d->H)); |
| 175 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
648 | if (d->G) { |
| 176 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
528 | PetscCall(BVSetActiveColumns(d->BX?d->BX:d->eps->V,lV,lV+d->V_tra_s)); |
| 177 |
8/10✓ 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 10 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
528 | PetscCall(BVDot(d->BX?d->BX:d->eps->V,d->W?d->W:d->eps->V,d->G)); |
| 178 | } | ||
| 179 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
648 | PetscCall(PetscObjectTypeCompare((PetscObject)d->eps->ds,DSGHEP,&symm)); |
| 180 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
648 | if (!symm) { |
| 181 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
648 | PetscCall(BVSetActiveColumns(d->W?d->W:d->eps->V,lV,lV+d->V_tra_s)); |
| 182 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
648 | PetscCall(BVSetActiveColumns(d->AX,0,lV)); |
| 183 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
648 | PetscCall(BVDot(d->AX,d->W?d->W:d->eps->V,d->H)); |
| 184 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
648 | if (d->G) { |
| 185 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
528 | PetscCall(BVSetActiveColumns(d->BX?d->BX:d->eps->V,0,lV)); |
| 186 |
8/10✓ 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 10 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
528 | PetscCall(BVDot(d->BX?d->BX:d->eps->V,d->W?d->W:d->eps->V,d->G)); |
| 187 | } | ||
| 188 | } | ||
| 189 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
648 | PetscCall(BVSetActiveColumns(d->eps->V,lV,kV)); |
| 190 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
648 | PetscCall(BVSetActiveColumns(d->AX,lV,kV)); |
| 191 |
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.
|
648 | if (d->BX) PetscCall(BVSetActiveColumns(d->BX,lV,kV)); |
| 192 |
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.
|
648 | if (d->W) PetscCall(BVSetActiveColumns(d->W,lV,kV)); |
| 193 |
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.
|
648 | if (d->W) PetscCall(dvd_harm_updateproj(d)); |
| 194 |
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.
|
136 | PetscFunctionReturn(PETSC_SUCCESS); |
| 195 | } | ||
| 196 | |||
| 197 | /* | ||
| 198 | BV <- BV*MT | ||
| 199 | */ | ||
| 200 | 34416 | static inline PetscErrorCode dvd_calcpairs_updateBV0_gen(dvdDashboard *d,BV bv,DSMatType mat) | |
| 201 | { | ||
| 202 | 34416 | PetscInt l,k,n; | |
| 203 | 34416 | Mat M,M0,auxM,auxM0; | |
| 204 | |||
| 205 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
34416 | PetscFunctionBegin; |
| 206 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
34416 | PetscCall(BVGetActiveColumns(d->eps->V,&l,&k)); |
| 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.
|
34416 | PetscCall(DSGetDimensions(d->eps->ds,&n,NULL,NULL,NULL)); |
| 208 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
34416 | PetscAssert(k-l==n,PETSC_COMM_SELF,PETSC_ERR_PLIB,"Consistency broken"); |
| 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.
|
34416 | PetscCall(DSGetMat(d->eps->ds,mat,&M)); |
| 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.
|
34416 | PetscCall(MatDenseGetSubMatrix(M,0,n,0,d->V_tra_e,&M0)); |
| 211 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
34416 | PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,k,k,NULL,&auxM)); |
| 212 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
34416 | PetscCall(MatDenseGetSubMatrix(auxM,l,l+n,l,l+d->V_tra_e,&auxM0)); |
| 213 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
34416 | PetscCall(MatCopy(M0,auxM0,SAME_NONZERO_PATTERN)); |
| 214 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
34416 | PetscCall(MatDenseRestoreSubMatrix(auxM,&auxM0)); |
| 215 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
34416 | PetscCall(MatDenseRestoreSubMatrix(M,&M0)); |
| 216 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
34416 | PetscCall(DSRestoreMat(d->eps->ds,mat,&M)); |
| 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.
|
34416 | PetscCall(BVMultInPlace(bv,auxM,l,l+d->V_tra_e)); |
| 218 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
34416 | PetscCall(MatDestroy(&auxM)); |
| 219 |
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.
|
6804 | PetscFunctionReturn(PETSC_SUCCESS); |
| 220 | } | ||
| 221 | |||
| 222 | 86394 | static PetscErrorCode dvd_calcpairs_proj(dvdDashboard *d) | |
| 223 | { | ||
| 224 | 86394 | PetscInt i,l,k; | |
| 225 | 86394 | Vec v1,v2; | |
| 226 | 86394 | PetscScalar *pv; | |
| 227 | |||
| 228 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
86394 | PetscFunctionBegin; |
| 229 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
86394 | PetscCall(BVGetActiveColumns(d->eps->V,&l,&k)); |
| 230 | /* Update AV, BV, W and the projected matrices */ | ||
| 231 | /* 1. S <- S*MT */ | ||
| 232 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
86394 | if (d->V_tra_s != d->V_tra_e || d->V_tra_e > 0) { |
| 233 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
15070 | PetscCall(dvd_calcpairs_updateBV0_gen(d,d->eps->V,DS_MAT_Q)); |
| 234 |
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.
|
15070 | if (d->W) PetscCall(dvd_calcpairs_updateBV0_gen(d,d->W,DS_MAT_Z)); |
| 235 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
15070 | PetscCall(dvd_calcpairs_updateBV0_gen(d,d->AX,DS_MAT_Q)); |
| 236 |
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.
|
15070 | if (d->BX) PetscCall(dvd_calcpairs_updateBV0_gen(d,d->BX,DS_MAT_Q)); |
| 237 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
15070 | PetscCall(dvd_calcpairs_updateproj(d)); |
| 238 | /* Update signature */ | ||
| 239 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
15070 | if (d->nBds) { |
| 240 | ✗ | PetscCall(VecCreateSeq(PETSC_COMM_SELF,l+d->V_tra_e,&v1)); | |
| 241 | ✗ | PetscCall(BVSetActiveColumns(d->eps->V,0,l+d->V_tra_e)); | |
| 242 | ✗ | PetscCall(BVGetSignature(d->eps->V,v1)); | |
| 243 | ✗ | PetscCall(VecGetArray(v1,&pv)); | |
| 244 | ✗ | for (i=0;i<d->V_tra_e;i++) pv[l+i] = d->nBds[i]; | |
| 245 | ✗ | PetscCall(VecRestoreArray(v1,&pv)); | |
| 246 | ✗ | PetscCall(BVSetSignature(d->eps->V,v1)); | |
| 247 | ✗ | PetscCall(BVSetActiveColumns(d->eps->V,l,k)); | |
| 248 | ✗ | PetscCall(VecDestroy(&v1)); | |
| 249 | } | ||
| 250 | 15070 | k = l+d->V_tra_e; | |
| 251 | 15070 | l+= d->V_tra_s; | |
| 252 | } else { | ||
| 253 | /* 2. V <- orth(V, V_new) */ | ||
| 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.
|
71324 | PetscCall(dvd_orthV(d->eps->V,l+d->V_new_s,l+d->V_new_e)); |
| 255 | /* 3. AV <- [AV A * V(V_new_s:V_new_e-1)] */ | ||
| 256 | /* Check consistency */ | ||
| 257 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
71324 | PetscAssert(k-l==d->V_new_s,PETSC_COMM_SELF,PETSC_ERR_PLIB,"Consistency broken"); |
| 258 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
174556 | for (i=l+d->V_new_s;i<l+d->V_new_e;i++) { |
| 259 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
103232 | PetscCall(BVGetColumn(d->eps->V,i,&v1)); |
| 260 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
103232 | PetscCall(BVGetColumn(d->AX,i,&v2)); |
| 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.
|
103232 | PetscCall(MatMult(d->A,v1,v2)); |
| 262 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
103232 | PetscCall(BVRestoreColumn(d->eps->V,i,&v1)); |
| 263 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
103232 | PetscCall(BVRestoreColumn(d->AX,i,&v2)); |
| 264 | } | ||
| 265 | /* 4. BV <- [BV B * V(V_new_s:V_new_e-1)] */ | ||
| 266 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
71324 | if (d->BX) { |
| 267 | /* Check consistency */ | ||
| 268 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
13900 | PetscAssert(k-l==d->V_new_s,PETSC_COMM_SELF,PETSC_ERR_PLIB,"Consistency broken"); |
| 269 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
30203 | for (i=l+d->V_new_s;i<l+d->V_new_e;i++) { |
| 270 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
16303 | PetscCall(BVGetColumn(d->eps->V,i,&v1)); |
| 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.
|
16303 | PetscCall(BVGetColumn(d->BX,i,&v2)); |
| 272 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
16303 | PetscCall(MatMult(d->B,v1,v2)); |
| 273 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
16303 | PetscCall(BVRestoreColumn(d->eps->V,i,&v1)); |
| 274 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
16303 | PetscCall(BVRestoreColumn(d->BX,i,&v2)); |
| 275 | } | ||
| 276 | } | ||
| 277 | /* 5. W <- [W f(AV,BV)] */ | ||
| 278 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
71324 | if (d->W) { |
| 279 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10879 | PetscCall(d->calcpairs_W(d)); |
| 280 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10879 | PetscCall(dvd_orthV(d->W,l+d->V_new_s,l+d->V_new_e)); |
| 281 | } | ||
| 282 | /* 6. H <- W' * AX; G <- W' * BX */ | ||
| 283 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71324 | PetscCall(BVSetActiveColumns(d->eps->V,l+d->V_new_s,l+d->V_new_e)); |
| 284 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71324 | PetscCall(BVSetActiveColumns(d->AX,l+d->V_new_s,l+d->V_new_e)); |
| 285 |
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.
|
71324 | if (d->BX) PetscCall(BVSetActiveColumns(d->BX,l+d->V_new_s,l+d->V_new_e)); |
| 286 |
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.
|
71324 | if (d->W) PetscCall(BVSetActiveColumns(d->W,l+d->V_new_s,l+d->V_new_e)); |
| 287 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
71324 | PetscCall(BVMatProject(d->AX,NULL,d->W?d->W:d->eps->V,d->H)); |
| 288 |
10/12✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
71324 | if (d->G) PetscCall(BVMatProject(d->BX?d->BX:d->eps->V,NULL,d->W?d->W:d->eps->V,d->G)); |
| 289 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71324 | PetscCall(BVSetActiveColumns(d->eps->V,l,k)); |
| 290 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71324 | PetscCall(BVSetActiveColumns(d->AX,l,k)); |
| 291 |
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.
|
71324 | if (d->BX) PetscCall(BVSetActiveColumns(d->BX,l,k)); |
| 292 |
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.
|
71324 | if (d->W) PetscCall(BVSetActiveColumns(d->W,l,k)); |
| 293 | |||
| 294 | /* Perform the transformation on the projected problem */ | ||
| 295 |
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.
|
71324 | if (d->W) PetscCall(d->calcpairs_proj_trans(d)); |
| 296 | 71324 | k = l+d->V_new_e; | |
| 297 | } | ||
| 298 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
86394 | PetscCall(BVSetActiveColumns(d->eps->V,l,k)); |
| 299 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
86394 | PetscCall(BVSetActiveColumns(d->AX,l,k)); |
| 300 |
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.
|
86394 | if (d->BX) PetscCall(BVSetActiveColumns(d->BX,l,k)); |
| 301 |
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.
|
86394 | if (d->W) PetscCall(BVSetActiveColumns(d->W,l,k)); |
| 302 | |||
| 303 | /* Solve the projected problem */ | ||
| 304 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
86394 | PetscCall(dvd_calcpairs_projeig_solve(d)); |
| 305 | |||
| 306 | 86394 | d->V_tra_s = d->V_tra_e = 0; | |
| 307 | 86394 | d->V_new_s = d->V_new_e; | |
| 308 |
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.
|
86394 | PetscFunctionReturn(PETSC_SUCCESS); |
| 309 | } | ||
| 310 | |||
| 311 | 99922 | static PetscErrorCode dvd_calcpairs_apply_arbitrary(dvdDashboard *d,PetscInt r_s,PetscInt r_e,PetscScalar *rr,PetscScalar *ri) | |
| 312 | { | ||
| 313 | 99922 | PetscInt i,k,ld; | |
| 314 | 99922 | PetscScalar *pX; | |
| 315 | 99922 | Vec *X,xr,xi; | |
| 316 | #if defined(PETSC_USE_COMPLEX) | ||
| 317 | 53931 | PetscInt N=1; | |
| 318 | #else | ||
| 319 | 45991 | PetscInt N=2,j; | |
| 320 | #endif | ||
| 321 | |||
| 322 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
99922 | PetscFunctionBegin; |
| 323 | /* Quick exit without neither arbitrary selection nor harmonic extraction */ | ||
| 324 |
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.
|
99922 | if (!d->eps->arbitrary && !d->calcpairs_eig_backtrans) PetscFunctionReturn(PETSC_SUCCESS); |
| 325 | |||
| 326 | /* Quick exit without arbitrary selection, but with harmonic extraction */ | ||
| 327 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
29016 | if (d->calcpairs_eig_backtrans) { |
| 328 |
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.
|
314708 | for (i=r_s; i<r_e; i++) PetscCall(d->calcpairs_eig_backtrans(d,d->eigr[i],d->eigi[i],&rr[i-r_s],&ri[i-r_s])); |
| 329 | } | ||
| 330 |
8/14✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
|
29016 | if (!d->eps->arbitrary) PetscFunctionReturn(PETSC_SUCCESS); |
| 331 | |||
| 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.
|
12122 | PetscCall(SlepcVecPoolGetVecs(d->auxV,N,&X)); |
| 333 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
12122 | PetscCall(DSGetLeadingDimension(d->eps->ds,&ld)); |
| 334 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
153518 | for (i=r_s;i<r_e;i++) { |
| 335 | 141396 | k = i; | |
| 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.
|
141396 | PetscCall(DSVectors(d->eps->ds,DS_MAT_X,&k,NULL)); |
| 337 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
141396 | PetscCall(DSGetArray(d->eps->ds,DS_MAT_X,&pX)); |
| 338 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
141396 | PetscCall(dvd_improvex_compute_X(d,i,k+1,X,pX,ld)); |
| 339 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
141396 | PetscCall(DSRestoreArray(d->eps->ds,DS_MAT_X,&pX)); |
| 340 | #if !defined(PETSC_USE_COMPLEX) | ||
| 341 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
63048 | if (d->nX[i] != 1.0) { |
| 342 | ✗ | for (j=i;j<k+1;j++) PetscCall(VecScale(X[j-i],1.0/d->nX[i])); | |
| 343 | } | ||
| 344 | 63048 | xr = X[0]; | |
| 345 | 63048 | xi = X[1]; | |
| 346 |
5/8✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ 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.
|
63048 | if (i == k) PetscCall(VecSet(xi,0.0)); |
| 347 | #else | ||
| 348 | 78348 | xr = X[0]; | |
| 349 | 78348 | xi = NULL; | |
| 350 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 5 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.
|
78348 | if (d->nX[i] != 1.0) PetscCall(VecScale(xr,1.0/d->nX[i])); |
| 351 | #endif | ||
| 352 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
141396 | PetscCall(d->eps->arbitrary(rr[i-r_s],ri[i-r_s],xr,xi,&rr[i-r_s],&ri[i-r_s],d->eps->arbitraryctx)); |
| 353 | #if !defined(PETSC_USE_COMPLEX) | ||
| 354 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
63048 | if (i != k) { |
| 355 | ✗ | rr[i+1-r_s] = rr[i-r_s]; | |
| 356 | ✗ | ri[i+1-r_s] = ri[i-r_s]; | |
| 357 | ✗ | i++; | |
| 358 | } | ||
| 359 | #endif | ||
| 360 | } | ||
| 361 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
12122 | PetscCall(SlepcVecPoolRestoreVecs(d->auxV,N,&X)); |
| 362 |
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.
|
2510 | PetscFunctionReturn(PETSC_SUCCESS); |
| 363 | } | ||
| 364 | |||
| 365 | 85414 | static PetscErrorCode dvd_calcpairs_selectPairs(dvdDashboard *d,PetscInt n) | |
| 366 | { | ||
| 367 | 85414 | PetscInt k,lV,kV,nV; | |
| 368 | 85414 | PetscScalar *rr,*ri; | |
| 369 | |||
| 370 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
85414 | PetscFunctionBegin; |
| 371 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
85414 | PetscCall(BVGetActiveColumns(d->eps->V,&lV,&kV)); |
| 372 | 85414 | nV = kV - lV; | |
| 373 | 85414 | n = PetscMin(n,nV); | |
| 374 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
85414 | if (n <= 0) PetscFunctionReturn(PETSC_SUCCESS); |
| 375 | /* Put the best n pairs at the beginning. Useful for restarting */ | ||
| 376 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
85414 | if (d->eps->arbitrary || d->calcpairs_eig_backtrans) { |
| 377 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
14508 | PetscCall(PetscMalloc1(nV,&rr)); |
| 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.
|
14508 | PetscCall(PetscMalloc1(nV,&ri)); |
| 379 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
14508 | PetscCall(dvd_calcpairs_apply_arbitrary(d,0,nV,rr,ri)); |
| 380 | } else { | ||
| 381 | 70906 | rr = d->eigr; | |
| 382 | 70906 | ri = d->eigi; | |
| 383 | } | ||
| 384 | 85414 | k = n; | |
| 385 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
85414 | PetscCall(DSSort(d->eps->ds,d->eigr,d->eigi,rr,ri,&k)); |
| 386 | /* Put the best pair at the beginning. Useful to check its residual */ | ||
| 387 | #if !defined(PETSC_USE_COMPLEX) | ||
| 388 |
4/6✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
|
39832 | if (n != 1 && (n != 2 || d->eigi[0] == 0.0)) |
| 389 | #else | ||
| 390 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
45582 | if (n != 1) |
| 391 | #endif | ||
| 392 | { | ||
| 393 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
85414 | PetscCall(dvd_calcpairs_apply_arbitrary(d,0,nV,rr,ri)); |
| 394 | 85414 | k = 1; | |
| 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.
|
85414 | PetscCall(DSSort(d->eps->ds,d->eigr,d->eigi,rr,ri,&k)); |
| 396 | } | ||
| 397 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
85414 | PetscCall(DSSynchronize(d->eps->ds,d->eigr,d->eigi)); |
| 398 | |||
| 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.
|
85414 | if (d->calcpairs_eigs_trans) PetscCall(d->calcpairs_eigs_trans(d)); |
| 400 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
85414 | if (d->eps->arbitrary || d->calcpairs_eig_backtrans) { |
| 401 |
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.
|
14508 | PetscCall(PetscFree(rr)); |
| 402 |
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.
|
14508 | PetscCall(PetscFree(ri)); |
| 403 | } | ||
| 404 |
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.
|
16619 | PetscFunctionReturn(PETSC_SUCCESS); |
| 405 | } | ||
| 406 | |||
| 407 | 980 | static PetscErrorCode EPSXDComputeDSConv(dvdDashboard *d) | |
| 408 | { | ||
| 409 | 980 | PetscInt i,ld; | |
| 410 | 980 | Vec v; | |
| 411 | 980 | Mat A,B,H0,G0; | |
| 412 | 980 | PetscScalar *pA; | |
| 413 | 980 | const PetscScalar *pv; | |
| 414 | 980 | PetscBool symm; | |
| 415 | |||
| 416 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
980 | PetscFunctionBegin; |
| 417 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(BVSetActiveColumns(d->eps->V,0,d->eps->nconv)); |
| 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.
|
980 | PetscCall(PetscObjectTypeCompare((PetscObject)d->eps->ds,DSHEP,&symm)); |
| 419 |
10/16✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 8 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
|
980 | if (symm || !d->eps->nconv) PetscFunctionReturn(PETSC_SUCCESS); |
| 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.
|
248 | PetscCall(DSSetDimensions(d->eps->ds,d->eps->nconv,0,0)); |
| 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.
|
248 | PetscCall(DSGetMat(d->eps->ds,DS_MAT_A,&A)); |
| 422 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(MatDenseGetSubMatrix(d->H,0,d->eps->nconv,0,d->eps->nconv,&H0)); |
| 423 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(MatCopy(H0,A,SAME_NONZERO_PATTERN)); |
| 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.
|
248 | PetscCall(MatDenseRestoreSubMatrix(d->H,&H0)); |
| 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.
|
248 | PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_A,&A)); |
| 426 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
248 | if (d->G) { |
| 427 |
4/6✓ Branch 0 taken 2 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(DSGetMat(d->eps->ds,DS_MAT_B,&B)); |
| 428 |
4/6✓ Branch 0 taken 2 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(MatDenseGetSubMatrix(d->G,0,d->eps->nconv,0,d->eps->nconv,&G0)); |
| 429 |
4/6✓ Branch 0 taken 2 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(MatCopy(G0,B,SAME_NONZERO_PATTERN)); |
| 430 |
4/6✓ Branch 0 taken 2 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(MatDenseRestoreSubMatrix(d->G,&G0)); |
| 431 |
4/6✓ Branch 0 taken 2 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(DSRestoreMat(d->eps->ds,DS_MAT_B,&B)); |
| 432 | } | ||
| 433 | /* Set the signature on projected matrix B */ | ||
| 434 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
248 | if (DVD_IS(d->sEP,DVD_EP_INDEFINITE)) { |
| 435 | ✗ | PetscCall(DSGetLeadingDimension(d->eps->ds,&ld)); | |
| 436 | ✗ | PetscCall(DSGetArray(d->eps->ds,DS_MAT_B,&pA)); | |
| 437 | ✗ | PetscCall(PetscArrayzero(pA,d->eps->nconv*ld)); | |
| 438 | ✗ | PetscCall(VecCreateSeq(PETSC_COMM_SELF,d->eps->nconv,&v)); | |
| 439 | ✗ | PetscCall(BVGetSignature(d->eps->V,v)); | |
| 440 | ✗ | PetscCall(VecGetArrayRead(v,&pv)); | |
| 441 | ✗ | for (i=0;i<d->eps->nconv;i++) pA[i+ld*i] = pv[i]; | |
| 442 | ✗ | PetscCall(VecRestoreArrayRead(v,&pv)); | |
| 443 | ✗ | PetscCall(VecDestroy(&v)); | |
| 444 | ✗ | PetscCall(DSRestoreArray(d->eps->ds,DS_MAT_B,&pA)); | |
| 445 | } | ||
| 446 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(DSSetState(d->eps->ds,DS_STATE_RAW)); |
| 447 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(DSSolve(d->eps->ds,d->eps->eigr,d->eps->eigi)); |
| 448 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
248 | PetscCall(DSSynchronize(d->eps->ds,d->eps->eigr,d->eps->eigi)); |
| 449 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
248 | if (d->W) { |
| 450 |
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.
|
756 | for (i=0;i<d->eps->nconv;i++) PetscCall(d->calcpairs_eig_backtrans(d,d->eps->eigr[i],d->eps->eigi[i],&d->eps->eigr[i],&d->eps->eigi[i])); |
| 451 | } | ||
| 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.
|
52 | PetscFunctionReturn(PETSC_SUCCESS); |
| 453 | } | ||
| 454 | |||
| 455 | /* | ||
| 456 | Compute the residual vectors R(i) <- (AV - BV*eigr(i))*pX(i), and also | ||
| 457 | the norm associated to the Schur pair, where i = r_s..r_e | ||
| 458 | */ | ||
| 459 | 25211 | static PetscErrorCode dvd_calcpairs_res_0(dvdDashboard *d,PetscInt r_s,PetscInt r_e) | |
| 460 | { | ||
| 461 | 25211 | PetscInt i,ldpX; | |
| 462 | 25211 | PetscScalar *pX; | |
| 463 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
25211 | BV BX = d->BX?d->BX:d->eps->V; |
| 464 | 25211 | Vec *R; | |
| 465 | |||
| 466 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
25211 | PetscFunctionBegin; |
| 467 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25211 | PetscCall(DSGetLeadingDimension(d->eps->ds,&ldpX)); |
| 468 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25211 | PetscCall(DSGetArray(d->eps->ds,DS_MAT_Q,&pX)); |
| 469 | /* nX(i) <- ||X(i)|| */ | ||
| 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.
|
25211 | PetscCall(dvd_improvex_compute_X(d,r_s,r_e,NULL,pX,ldpX)); |
| 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.
|
25211 | PetscCall(SlepcVecPoolGetVecs(d->auxV,r_e-r_s,&R)); |
| 472 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
50471 | for (i=r_s;i<r_e;i++) { |
| 473 | /* R(i-r_s) <- AV*pX(i) */ | ||
| 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.
|
25260 | PetscCall(BVMultVec(d->AX,1.0,0.0,R[i-r_s],&pX[ldpX*i])); |
| 475 | /* R(i-r_s) <- R(i-r_s) - eigr(i)*BX*pX(i) */ | ||
| 476 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25260 | PetscCall(BVMultVec(BX,-d->eigr[i],1.0,R[i-r_s],&pX[ldpX*i])); |
| 477 | } | ||
| 478 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25211 | PetscCall(DSRestoreArray(d->eps->ds,DS_MAT_Q,&pX)); |
| 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.
|
25211 | PetscCall(d->calcpairs_proj_res(d,r_s,r_e,R)); |
| 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.
|
25211 | PetscCall(SlepcVecPoolRestoreVecs(d->auxV,r_e-r_s,&R)); |
| 481 |
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.
|
5098 | PetscFunctionReturn(PETSC_SUCCESS); |
| 482 | } | ||
| 483 | |||
| 484 | 102700 | static PetscErrorCode dvd_calcpairs_proj_res(dvdDashboard *d,PetscInt r_s,PetscInt r_e,Vec *R) | |
| 485 | { | ||
| 486 | 102700 | PetscInt i,l,k; | |
| 487 | 102700 | PetscBool lindep=PETSC_FALSE; | |
| 488 | 102700 | BV cX; | |
| 489 | |||
| 490 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
102700 | PetscFunctionBegin; |
| 491 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
102700 | if (d->W) cX = d->W; /* If left subspace exists, R <- orth(cY, R), nR[i] <- ||R[i]|| */ |
| 492 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
88046 | else if (!(DVD_IS(d->sEP, DVD_EP_STD) && DVD_IS(d->sEP, DVD_EP_HERMITIAN))) cX = d->eps->V; /* If not HEP, R <- orth(cX, R), nR[i] <- ||R[i]|| */ |
| 493 | else cX = NULL; /* Otherwise, nR[i] <- ||R[i]|| */ | ||
| 494 | |||
| 495 |
2/2✓ Branch 0 taken 8 times.
✓ Branch 1 taken 10 times.
|
86034 | if (cX) { |
| 496 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
22107 | PetscCall(BVGetActiveColumns(cX,&l,&k)); |
| 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.
|
22107 | PetscCall(BVSetActiveColumns(cX,0,l)); |
| 498 |
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.
|
44509 | for (i=0;i<r_e-r_s;i++) PetscCall(BVOrthogonalizeVec(cX,R[i],NULL,&d->nR[r_s+i],&lindep)); |
| 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.
|
22107 | PetscCall(BVSetActiveColumns(cX,l,k)); |
| 500 |
3/14✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 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.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
22107 | if (lindep || (PetscAbs(d->nR[r_s+i]) < PETSC_MACHINE_EPSILON)) PetscCall(PetscInfo(d->eps,"The computed eigenvector residual %" PetscInt_FMT " is too low, %g!\n",r_s+i,(double)d->nR[r_s+i])); |
| 501 | } else { | ||
| 502 |
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.
|
161186 | for (i=0;i<r_e-r_s;i++) PetscCall(VecNormBegin(R[i],NORM_2,&d->nR[r_s+i])); |
| 503 |
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.
|
161186 | for (i=0;i<r_e-r_s;i++) PetscCall(VecNormEnd(R[i],NORM_2,&d->nR[r_s+i])); |
| 504 | } | ||
| 505 |
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.
|
20152 | PetscFunctionReturn(PETSC_SUCCESS); |
| 506 | } | ||
| 507 | |||
| 508 | 2940 | PetscErrorCode dvd_calcpairs_qz(dvdDashboard *d,dvdBlackboard *b,PetscBool borth,PetscBool harm) | |
| 509 | { | ||
| 510 | 2940 | PetscBool std_probl,her_probl,ind_probl; | |
| 511 | 2940 | DSType dstype; | |
| 512 | 2940 | Vec v1; | |
| 513 | |||
| 514 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2940 | PetscFunctionBegin; |
| 515 | 2940 | std_probl = DVD_IS(d->sEP,DVD_EP_STD)? PETSC_TRUE: PETSC_FALSE; | |
| 516 | 2940 | her_probl = DVD_IS(d->sEP,DVD_EP_HERMITIAN)? PETSC_TRUE: PETSC_FALSE; | |
| 517 | 2940 | ind_probl = DVD_IS(d->sEP,DVD_EP_INDEFINITE)? PETSC_TRUE: PETSC_FALSE; | |
| 518 | |||
| 519 | /* Setting configuration constrains */ | ||
| 520 | 2940 | b->max_size_proj = PetscMax(b->max_size_proj,b->max_size_V); | |
| 521 | 2940 | d->W_shift = d->B? PETSC_TRUE: PETSC_FALSE; | |
| 522 | |||
| 523 | /* Setup the step */ | ||
| 524 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2940 | if (b->state >= DVD_STATE_CONF) { |
| 525 | 980 | d->max_size_P = b->max_size_P; | |
| 526 | 980 | d->max_size_proj = b->max_size_proj; | |
| 527 | /* Create a DS if the method works with Schur decompositions */ | ||
| 528 | 980 | d->calcPairs = dvd_calcpairs_proj; | |
| 529 | 980 | d->calcpairs_residual = dvd_calcpairs_res_0; | |
| 530 | 980 | d->calcpairs_proj_res = dvd_calcpairs_proj_res; | |
| 531 | 980 | d->calcpairs_selectPairs = dvd_calcpairs_selectPairs; | |
| 532 | /* Create and configure a DS for solving the projected problems */ | ||
| 533 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
980 | if (d->W) dstype = DSGNHEP; /* If we use harmonics */ |
| 534 | else { | ||
| 535 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
980 | if (ind_probl) dstype = DSGHIEP; |
| 536 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
980 | else if (std_probl) dstype = her_probl? DSHEP : DSNHEP; |
| 537 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
218 | else dstype = her_probl? DSGHEP : DSGNHEP; |
| 538 | } | ||
| 539 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(DSSetType(d->eps->ds,dstype)); |
| 540 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(DSAllocate(d->eps->ds,d->eps->ncv)); |
| 541 | /* Create various vector basis */ | ||
| 542 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | if (harm) { |
| 543 |
4/6✓ Branch 0 taken 2 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(BVDuplicateResize(d->eps->V,d->eps->ncv,&d->W)); |
| 544 |
4/6✓ Branch 0 taken 2 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(BVSetMatrix(d->W,NULL,PETSC_FALSE)); |
| 545 | 762 | } else d->W = NULL; | |
| 546 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(BVDuplicateResize(d->eps->V,d->eps->ncv,&d->AX)); |
| 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.
|
980 | PetscCall(BVSetMatrix(d->AX,NULL,PETSC_FALSE)); |
| 548 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(BVDuplicateResize(d->eps->V,d->eps->ncv,&d->auxBV)); |
| 549 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(BVSetMatrix(d->auxBV,NULL,PETSC_FALSE)); |
| 550 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | if (d->B) { |
| 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.
|
152 | PetscCall(BVDuplicateResize(d->eps->V,d->eps->ncv,&d->BX)); |
| 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.
|
152 | PetscCall(BVSetMatrix(d->BX,NULL,PETSC_FALSE)); |
| 553 | 828 | } else d->BX = NULL; | |
| 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.
|
980 | PetscCall(MatCreateVecsEmpty(d->A,&v1,NULL)); |
| 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.
|
980 | PetscCall(SlepcVecPoolCreate(v1,0,&d->auxV)); |
| 556 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(VecDestroy(&v1)); |
| 557 | /* Create projected problem matrices */ | ||
| 558 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,d->eps->ncv,d->eps->ncv,NULL,&d->H)); |
| 559 |
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.
|
980 | if (!std_probl) PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,d->eps->ncv,d->eps->ncv,NULL,&d->G)); |
| 560 | 762 | else d->G = NULL; | |
| 561 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | if (her_probl) { |
| 562 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
732 | PetscCall(MatSetOption(d->H,MAT_HERMITIAN,PETSC_TRUE)); |
| 563 |
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.
|
732 | if (d->G) PetscCall(MatSetOption(d->G,MAT_HERMITIAN,PETSC_TRUE)); |
| 564 | } | ||
| 565 | |||
| 566 |
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.
|
980 | if (ind_probl) PetscCall(PetscMalloc1(d->eps->ncv,&d->nBds)); |
| 567 | 980 | else d->nBds = NULL; | |
| 568 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(MatCreateSeqDense(PETSC_COMM_SELF,d->eps->ncv,d->eps->ncv,NULL,&d->auxM)); |
| 569 | |||
| 570 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(EPSDavidsonFLAdd(&d->startList,dvd_calcpairs_qz_start)); |
| 571 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
980 | PetscCall(EPSDavidsonFLAdd(&d->endList,EPSXDComputeDSConv)); |
| 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.
|
980 | PetscCall(EPSDavidsonFLAdd(&d->destroyList,dvd_calcpairs_qz_d)); |
| 573 | } | ||
| 574 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
576 | PetscFunctionReturn(PETSC_SUCCESS); |
| 575 | } | ||
| 576 |