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 | 86393 | static PetscErrorCode dvd_calcpairs_projeig_solve(dvdDashboard *d) | |
53 | { | ||
54 | 86393 | Vec v; | |
55 | 86393 | Mat A,B,H0,G0; | |
56 | 86393 | PetscScalar *pA; | |
57 | 86393 | const PetscScalar *pv; | |
58 | 86393 | PetscInt i,lV,kV,n,ld; | |
59 | |||
60 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
86393 | 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.
|
86393 | PetscCall(BVGetActiveColumns(d->eps->V,&lV,&kV)); |
62 | 86393 | 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.
|
86393 | 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.
|
86393 | 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.
|
86393 | 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.
|
86393 | 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.
|
86393 | 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.
|
86393 | 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.
|
86393 | PetscCall(DSRestoreMat(d->eps->ds,DS_MAT_A,&A)); |
70 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
86393 | 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.
|
86393 | 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.
|
86393 | 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.
|
86393 | 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.
|
163072 | for (i=lA+1;i<lA+nQ;i++) { |
139 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1260458 | 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 | 86393 | static PetscErrorCode dvd_calcpairs_proj(dvdDashboard *d) | |
223 | { | ||
224 | 86393 | PetscInt i,l,k; | |
225 | 86393 | Vec v1,v2; | |
226 | 86393 | PetscScalar *pv; | |
227 | |||
228 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
86393 | 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.
|
86393 | 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.
|
86393 | 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.
|
71323 | 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.
|
71323 | 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.
|
174554 | 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.
|
103231 | 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.
|
103231 | 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.
|
103231 | 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.
|
103231 | 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.
|
103231 | 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.
|
71323 | 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.
|
71323 | 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.
|
71323 | 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.
|
71323 | 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.
|
71323 | 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.
|
71323 | 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.
|
71323 | 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.
|
71323 | 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.
|
71323 | 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.
|
71323 | 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.
|
71323 | 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.
|
71323 | 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.
|
71323 | if (d->W) PetscCall(d->calcpairs_proj_trans(d)); |
296 | 71323 | 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.
|
86393 | 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.
|
86393 | 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.
|
86393 | 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.
|
86393 | 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.
|
86393 | PetscCall(dvd_calcpairs_projeig_solve(d)); |
305 | |||
306 | 86393 | d->V_tra_s = d->V_tra_e = 0; | |
307 | 86393 | 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.
|
86393 | PetscFunctionReturn(PETSC_SUCCESS); |
309 | } | ||
310 | |||
311 | 99920 | static PetscErrorCode dvd_calcpairs_apply_arbitrary(dvdDashboard *d,PetscInt r_s,PetscInt r_e,PetscScalar *rr,PetscScalar *ri) | |
312 | { | ||
313 | 99920 | PetscInt i,k,ld; | |
314 | 99920 | PetscScalar *pX; | |
315 | 99920 | Vec *X,xr,xi; | |
316 | #if defined(PETSC_USE_COMPLEX) | ||
317 | 53929 | 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.
|
99920 | 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.
|
99920 | 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.
|
29014 | 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.
|
29014 | 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.
|
12120 | 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.
|
12120 | PetscCall(DSGetLeadingDimension(d->eps->ds,&ld)); |
334 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
153492 | for (i=r_s;i<r_e;i++) { |
335 | 141372 | 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.
|
141372 | 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.
|
141372 | 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.
|
141372 | 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.
|
141372 | 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 | 78324 | xr = X[0]; | |
349 | 78324 | 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.
|
78324 | 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.
|
141372 | 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.
|
12120 | 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 | 85413 | static PetscErrorCode dvd_calcpairs_selectPairs(dvdDashboard *d,PetscInt n) | |
366 | { | ||
367 | 85413 | PetscInt k,lV,kV,nV; | |
368 | 85413 | PetscScalar *rr,*ri; | |
369 | |||
370 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
85413 | 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.
|
85413 | PetscCall(BVGetActiveColumns(d->eps->V,&lV,&kV)); |
372 | 85413 | nV = kV - lV; | |
373 | 85413 | 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.
|
85413 | 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.
|
85413 | 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.
|
14507 | 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.
|
14507 | 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.
|
14507 | PetscCall(dvd_calcpairs_apply_arbitrary(d,0,nV,rr,ri)); |
380 | } else { | ||
381 | 70906 | rr = d->eigr; | |
382 | 70906 | ri = d->eigi; | |
383 | } | ||
384 | 85413 | 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.
|
85413 | 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.
|
45581 | 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.
|
85413 | PetscCall(dvd_calcpairs_apply_arbitrary(d,0,nV,rr,ri)); |
394 | 85413 | 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.
|
85413 | 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.
|
85413 | 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.
|
85413 | 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.
|
85413 | 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.
|
14507 | 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.
|
14507 | 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 | 102699 | static PetscErrorCode dvd_calcpairs_proj_res(dvdDashboard *d,PetscInt r_s,PetscInt r_e,Vec *R) | |
485 | { | ||
486 | 102699 | PetscInt i,l,k; | |
487 | 102699 | PetscBool lindep=PETSC_FALSE; | |
488 | 102699 | BV cX; | |
489 | |||
490 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
102699 | PetscFunctionBegin; |
491 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
102699 | 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.
|
88045 | 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.
|
86033 | 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.
|
161184 | 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.
|
161184 | 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 |