| 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 | #include <slepc/private/dsimpl.h> | ||
| 12 | #include <slepcblaslapack.h> | ||
| 13 | |||
| 14 | /* | ||
| 15 | 1) Patterns of A and B | ||
| 16 | DS_STATE_RAW: DS_STATE_INTERM/CONDENSED | ||
| 17 | 0 n-1 0 n-1 | ||
| 18 | ------------- ------------- | ||
| 19 | 0 |* * * * * *| 0 |* * * * * *| | ||
| 20 | |* * * * * *| | * * * * *| | ||
| 21 | |* * * * * *| | * * * *| | ||
| 22 | |* * * * * *| | * * * *| | ||
| 23 | |* * * * * *| | * *| | ||
| 24 | n-1 |* * * * * *| n-1 | *| | ||
| 25 | ------------- ------------- | ||
| 26 | |||
| 27 | 2) Moreover, P and Q are assumed to be the identity in DS_STATE_INTERMEDIATE. | ||
| 28 | */ | ||
| 29 | |||
| 30 | static PetscErrorCode CleanDenseSchur(PetscInt n,PetscInt k,PetscScalar *S,PetscInt ldS,PetscScalar *T,PetscInt ldT,PetscScalar *X,PetscInt ldX,PetscScalar *Y,PetscInt ldY); | ||
| 31 | |||
| 32 | 336 | static PetscErrorCode DSAllocate_GNHEP(DS ds,PetscInt ld) | |
| 33 | { | ||
| 34 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
336 | PetscFunctionBegin; |
| 35 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
336 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_A)); |
| 36 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
336 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_B)); |
| 37 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
336 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_Z)); |
| 38 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
336 | PetscCall(DSAllocateMat_Private(ds,DS_MAT_Q)); |
| 39 |
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.
|
336 | PetscCall(PetscFree(ds->perm)); |
| 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.
|
336 | PetscCall(PetscMalloc1(ld,&ds->perm)); |
| 41 |
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.
|
70 | PetscFunctionReturn(PETSC_SUCCESS); |
| 42 | } | ||
| 43 | |||
| 44 | 40 | static PetscErrorCode DSView_GNHEP(DS ds,PetscViewer viewer) | |
| 45 | { | ||
| 46 | 40 | PetscViewerFormat format; | |
| 47 | |||
| 48 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
40 | PetscFunctionBegin; |
| 49 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
40 | PetscCall(PetscViewerGetFormat(viewer,&format)); |
| 50 |
8/14✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 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.
|
40 | if (format == PETSC_VIEWER_ASCII_INFO || format == PETSC_VIEWER_ASCII_INFO_DETAIL) PetscFunctionReturn(PETSC_SUCCESS); |
| 51 | ✗ | PetscCall(DSViewMat(ds,viewer,DS_MAT_A)); | |
| 52 | ✗ | PetscCall(DSViewMat(ds,viewer,DS_MAT_B)); | |
| 53 | ✗ | if (ds->state>DS_STATE_INTERMEDIATE) { | |
| 54 | ✗ | PetscCall(DSViewMat(ds,viewer,DS_MAT_Z)); | |
| 55 | ✗ | PetscCall(DSViewMat(ds,viewer,DS_MAT_Q)); | |
| 56 | } | ||
| 57 | ✗ | if (ds->omat[DS_MAT_X]) PetscCall(DSViewMat(ds,viewer,DS_MAT_X)); | |
| 58 | ✗ | if (ds->omat[DS_MAT_Y]) PetscCall(DSViewMat(ds,viewer,DS_MAT_Y)); | |
| 59 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
| 60 | } | ||
| 61 | |||
| 62 | 117995 | static PetscErrorCode DSVectors_GNHEP_Eigen_Some(DS ds,PetscInt *k,PetscReal *rnorm,PetscBool left) | |
| 63 | { | ||
| 64 | 117995 | PetscInt i; | |
| 65 | 117995 | PetscBLASInt n,ld,mout,info,*select,mm,inc=1,cols=1,zero=0; | |
| 66 | 117995 | PetscScalar *X,*Y,*XY,*Z,*Q,*A,*B,fone=1.0,fzero=0.0; | |
| 67 | 117995 | PetscReal norm,done=1.0; | |
| 68 | 117995 | PetscBool iscomplex = PETSC_FALSE; | |
| 69 | 117995 | const char *side; | |
| 70 | |||
| 71 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
117995 | PetscFunctionBegin; |
| 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.
|
117995 | PetscCall(PetscBLASIntCast(ds->n,&n)); |
| 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.
|
117995 | PetscCall(PetscBLASIntCast(ds->ld,&ld)); |
| 74 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
117995 | if (left) { |
| 75 | 7686 | X = NULL; | |
| 76 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
7686 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Y],&Y)); |
| 77 | side = "L"; | ||
| 78 | } else { | ||
| 79 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
110309 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_X],&X)); |
| 80 | 110309 | Y = NULL; | |
| 81 | 110309 | side = "R"; | |
| 82 | } | ||
| 83 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
117995 | XY = left? Y: X; |
| 84 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
117995 | PetscCall(DSAllocateWork_Private(ds,0,0,ld)); |
| 85 | 117995 | select = ds->iwork; | |
| 86 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1579000 | for (i=0;i<n;i++) select[i] = (PetscBLASInt)PETSC_FALSE; |
| 87 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
117995 | if (ds->state <= DS_STATE_INTERMEDIATE) { |
| 88 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(DSSetIdentity(ds,DS_MAT_Q)); |
| 89 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(DSSetIdentity(ds,DS_MAT_Z)); |
| 90 | } | ||
| 91 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
117995 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_A],&A)); |
| 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.
|
117995 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_B],&B)); |
| 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.
|
117995 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Q],&Q)); |
| 94 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
117995 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Z],&Z)); |
| 95 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
117995 | PetscCall(CleanDenseSchur(n,0,A,ld,B,ld,Q,ld,Z,ld)); |
| 96 |
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.
|
117995 | if (ds->state < DS_STATE_CONDENSED) PetscCall(DSSetState(ds,DS_STATE_CONDENSED)); |
| 97 | |||
| 98 | /* compute k-th eigenvector */ | ||
| 99 | 117995 | select[*k] = (PetscBLASInt)PETSC_TRUE; | |
| 100 | #if defined(PETSC_USE_COMPLEX) | ||
| 101 | 67339 | mm = 1; | |
| 102 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
67339 | PetscCall(DSAllocateWork_Private(ds,2*ld,2*ld,0)); |
| 103 |
16/24✓ Branch 0 taken 5 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 4 times.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
67339 | PetscCallBLAS("LAPACKtgevc",LAPACKtgevc_(side,"S",select,&n,A,&ld,B,&ld,PetscSafePointerPlusOffset(Y,(*k)*ld),&ld,PetscSafePointerPlusOffset(X,(*k)*ld),&ld,&mm,&mout,ds->work,ds->rwork,&info)); |
| 104 | #else | ||
| 105 |
5/6✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
|
50656 | if ((*k)<n-1 && (A[ld*(*k)+(*k)+1] != 0.0 || B[ld*(*k)+(*k)+1] != 0.0)) iscomplex = PETSC_TRUE; |
| 106 | 50656 | mm = iscomplex? 2: 1; | |
| 107 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
50656 | if (iscomplex) select[(*k)+1] = (PetscBLASInt)PETSC_TRUE; |
| 108 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
50656 | PetscCall(DSAllocateWork_Private(ds,6*ld,0,0)); |
| 109 |
16/24✓ Branch 0 taken 5 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 4 times.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 1 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 1 times.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 1 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
|
50656 | PetscCallBLAS("LAPACKtgevc",LAPACKtgevc_(side,"S",select,&n,A,&ld,B,&ld,PetscSafePointerPlusOffset(Y,(*k)*ld),&ld,PetscSafePointerPlusOffset(X,(*k)*ld),&ld,&mm,&mout,ds->work,&info)); |
| 110 | #endif | ||
| 111 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
117995 | SlepcCheckLapackInfo("tgevc",info); |
| 112 |
2/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
117995 | PetscCheck(select[*k] && mout==mm,PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"Wrong arguments in call to Lapack xTGEVC"); |
| 113 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
117995 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_A],&A)); |
| 114 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
117995 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_B],&B)); |
| 115 | |||
| 116 | /* accumulate and normalize eigenvectors */ | ||
| 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.
|
117995 | PetscCall(PetscArraycpy(ds->work,XY+(*k)*ld,mm*ld)); |
| 118 |
13/22✓ 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 not taken.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
117995 | PetscCallBLAS("BLASgemm",BLASgemm_("N","N",&n,&mm,&n,&fone,left?Z:Q,&ld,ds->work,&ld,&fzero,XY+(*k)*ld,&ld)); |
| 119 | 117995 | norm = BLASnrm2_(&n,XY+(*k)*ld,&inc); | |
| 120 | #if !defined(PETSC_USE_COMPLEX) | ||
| 121 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
50656 | if (iscomplex) { |
| 122 | 482 | norm = SlepcAbsEigenvalue(norm,BLASnrm2_(&n,XY+(*k+1)*ld,&inc)); | |
| 123 | 482 | cols = 2; | |
| 124 | } | ||
| 125 | #endif | ||
| 126 |
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.
|
117995 | PetscCallBLAS("LAPACKlascl",LAPACKlascl_("G",&zero,&zero,&norm,&done,&n,&cols,XY+(*k)*ld,&ld,&info)); |
| 127 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
117995 | SlepcCheckLapackInfo("lascl",info); |
| 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.
|
117995 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Q],&Q)); |
| 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.
|
117995 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Z],&Z)); |
| 130 | |||
| 131 | /* set output arguments */ | ||
| 132 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
117995 | if (rnorm) { |
| 133 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
200 | if (iscomplex) *rnorm = SlepcAbsEigenvalue(XY[n-1+(*k)*ld],XY[n-1+(*k+1)*ld]); |
| 134 | 190 | else *rnorm = PetscAbsScalar(XY[n-1+(*k)*ld]); | |
| 135 | } | ||
| 136 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
117995 | if (iscomplex) (*k)++; |
| 137 |
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.
|
228304 | PetscCall(MatDenseRestoreArray(ds->omat[left?DS_MAT_Y:DS_MAT_X],&XY)); |
| 138 |
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.
|
24587 | PetscFunctionReturn(PETSC_SUCCESS); |
| 139 | } | ||
| 140 | |||
| 141 | 562 | static PetscErrorCode DSVectors_GNHEP_Eigen_All(DS ds,PetscBool left) | |
| 142 | { | ||
| 143 | 562 | PetscInt i; | |
| 144 | 562 | PetscBLASInt n,ld,mout,info,inc = 1; | |
| 145 | 562 | PetscBool iscomplex; | |
| 146 | 562 | PetscScalar *X,*Y,*XY,*Q,*Z,*A,*B,tmp; | |
| 147 | 562 | PetscReal norm; | |
| 148 | 562 | const char *side,*back; | |
| 149 | |||
| 150 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
562 | PetscFunctionBegin; |
| 151 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
562 | PetscCall(PetscBLASIntCast(ds->n,&n)); |
| 152 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
562 | PetscCall(PetscBLASIntCast(ds->ld,&ld)); |
| 153 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
562 | if (left) { |
| 154 | ✗ | X = NULL; | |
| 155 | ✗ | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Y],&Y)); | |
| 156 | side = "L"; | ||
| 157 | } else { | ||
| 158 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
562 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_X],&X)); |
| 159 | 562 | Y = NULL; | |
| 160 | 562 | side = "R"; | |
| 161 | } | ||
| 162 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
562 | XY = left? Y: X; |
| 163 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
562 | if (ds->state <= DS_STATE_INTERMEDIATE) { |
| 164 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(DSSetIdentity(ds,DS_MAT_Q)); |
| 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.
|
30 | PetscCall(DSSetIdentity(ds,DS_MAT_Z)); |
| 166 | } | ||
| 167 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
562 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_A],&A)); |
| 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.
|
562 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_B],&B)); |
| 169 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
562 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Q],&Q)); |
| 170 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
562 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Z],&Z)); |
| 171 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
562 | PetscCall(CleanDenseSchur(n,0,A,ld,B,ld,Q,ld,Z,ld)); |
| 172 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
562 | if (ds->state>=DS_STATE_CONDENSED) { |
| 173 | /* DSSolve() has been called, backtransform with matrix Q */ | ||
| 174 | 532 | back = "B"; | |
| 175 |
7/10✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
532 | PetscCall(PetscArraycpy(left?Y:X,left?Z:Q,ld*ld)); |
| 176 | } else { | ||
| 177 | 30 | back = "A"; | |
| 178 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(DSSetState(ds,DS_STATE_CONDENSED)); |
| 179 | } | ||
| 180 | #if defined(PETSC_USE_COMPLEX) | ||
| 181 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
342 | PetscCall(DSAllocateWork_Private(ds,2*ld,2*ld,0)); |
| 182 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
342 | PetscCallBLAS("LAPACKtgevc",LAPACKtgevc_(side,back,NULL,&n,A,&ld,B,&ld,Y,&ld,X,&ld,&n,&mout,ds->work,ds->rwork,&info)); |
| 183 | #else | ||
| 184 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
220 | PetscCall(DSAllocateWork_Private(ds,6*ld,0,0)); |
| 185 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
220 | PetscCallBLAS("LAPACKtgevc",LAPACKtgevc_(side,back,NULL,&n,A,&ld,B,&ld,Y,&ld,X,&ld,&n,&mout,ds->work,&info)); |
| 186 | #endif | ||
| 187 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
562 | SlepcCheckLapackInfo("tgevc",info); |
| 188 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
562 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Q],&Q)); |
| 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.
|
562 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Z],&Z)); |
| 190 | |||
| 191 | /* normalize eigenvectors */ | ||
| 192 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4034 | for (i=0;i<n;i++) { |
| 193 |
5/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 5 times.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
3472 | iscomplex = (i<n-1 && (A[i+1+i*ld]!=0.0 || B[i+1+i*ld]!=0.0))? PETSC_TRUE: PETSC_FALSE; |
| 194 | 3472 | norm = BLASnrm2_(&n,XY+i*ld,&inc); | |
| 195 | #if !defined(PETSC_USE_COMPLEX) | ||
| 196 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
853 | if (iscomplex) { |
| 197 | 45 | tmp = BLASnrm2_(&n,XY+(i+1)*ld,&inc); | |
| 198 | 45 | norm = SlepcAbsEigenvalue(norm,tmp); | |
| 199 | } | ||
| 200 | #endif | ||
| 201 | 3472 | tmp = 1.0 / norm; | |
| 202 |
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.
|
3472 | PetscCallBLAS("BLASscal",BLASscal_(&n,&tmp,XY+i*ld,&inc)); |
| 203 | #if !defined(PETSC_USE_COMPLEX) | ||
| 204 |
12/22✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
853 | if (iscomplex) PetscCallBLAS("BLASscal",BLASscal_(&n,&tmp,XY+(i+1)*ld,&inc)); |
| 205 | #endif | ||
| 206 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
2628 | if (iscomplex) i++; |
| 207 | } | ||
| 208 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
562 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_A],&A)); |
| 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.
|
562 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_B],&B)); |
| 210 |
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.
|
1124 | PetscCall(MatDenseRestoreArray(ds->omat[left?DS_MAT_Y:DS_MAT_X],&XY)); |
| 211 |
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.
|
116 | PetscFunctionReturn(PETSC_SUCCESS); |
| 212 | } | ||
| 213 | |||
| 214 | 118557 | static PetscErrorCode DSVectors_GNHEP(DS ds,DSMatType mat,PetscInt *k,PetscReal *rnorm) | |
| 215 | { | ||
| 216 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
118557 | PetscFunctionBegin; |
| 217 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
118557 | switch (mat) { |
| 218 | 118557 | case DS_MAT_X: | |
| 219 | case DS_MAT_Y: | ||
| 220 |
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.
|
118557 | if (k) PetscCall(DSVectors_GNHEP_Eigen_Some(ds,k,rnorm,mat == DS_MAT_Y?PETSC_TRUE:PETSC_FALSE)); |
| 221 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
562 | else PetscCall(DSVectors_GNHEP_Eigen_All(ds,mat == DS_MAT_Y?PETSC_TRUE:PETSC_FALSE)); |
| 222 | 24703 | break; | |
| 223 | ✗ | default: | |
| 224 | ✗ | SETERRQ(PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"Invalid mat parameter"); | |
| 225 | } | ||
| 226 |
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.
|
24703 | PetscFunctionReturn(PETSC_SUCCESS); |
| 227 | } | ||
| 228 | |||
| 229 | 25449 | static PetscErrorCode DSSort_GNHEP_Arbitrary(DS ds,PetscScalar *wr,PetscScalar *wi,PetscScalar *rr,PetscScalar *ri,PetscInt *k) | |
| 230 | { | ||
| 231 | 25449 | PetscInt i; | |
| 232 | 25449 | PetscBLASInt info,n,ld,mout,lwork,liwork,*iwork,*selection,zero_=0,true_=1; | |
| 233 | 25449 | PetscScalar *S,*T,*Q,*Z,*work,*beta; | |
| 234 | |||
| 235 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
25449 | PetscFunctionBegin; |
| 236 |
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.
|
25449 | if (!ds->sc) PetscFunctionReturn(PETSC_SUCCESS); |
| 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.
|
25449 | PetscCall(PetscBLASIntCast(ds->n,&n)); |
| 238 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | PetscCall(PetscBLASIntCast(ds->ld,&ld)); |
| 239 | #if !defined(PETSC_USE_COMPLEX) | ||
| 240 | 10594 | lwork = 4*n+16; | |
| 241 | #else | ||
| 242 | 14855 | lwork = 1; | |
| 243 | #endif | ||
| 244 | 25449 | liwork = 1; | |
| 245 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | PetscCall(DSAllocateWork_Private(ds,lwork+2*n,0,liwork+n)); |
| 246 | 25449 | beta = ds->work; | |
| 247 | 25449 | work = ds->work + n; | |
| 248 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | PetscCall(PetscBLASIntCast(ds->lwork-n,&lwork)); |
| 249 | 25449 | selection = ds->iwork; | |
| 250 | 25449 | iwork = ds->iwork + n; | |
| 251 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | PetscCall(PetscBLASIntCast(ds->liwork-n,&liwork)); |
| 252 | /* Compute the selected eigenvalue to be in the leading position */ | ||
| 253 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | PetscCall(DSSortEigenvalues_Private(ds,rr,ri,ds->perm,PETSC_FALSE)); |
| 254 |
4/6✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | PetscCall(PetscArrayzero(selection,n)); |
| 255 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
110763 | for (i=0; i<*k; i++) selection[ds->perm[i]] = 1; |
| 256 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_A],&S)); |
| 257 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_B],&T)); |
| 258 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Q],&Q)); |
| 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.
|
25449 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Z],&Z)); |
| 260 | #if !defined(PETSC_USE_COMPLEX) | ||
| 261 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
10594 | PetscCallBLAS("LAPACKtgsen",LAPACKtgsen_(&zero_,&true_,&true_,selection,&n,S,&ld,T,&ld,wr,wi,beta,Z,&ld,Q,&ld,&mout,NULL,NULL,NULL,work,&lwork,iwork,&liwork,&info)); |
| 262 | #else | ||
| 263 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
14855 | PetscCallBLAS("LAPACKtgsen",LAPACKtgsen_(&zero_,&true_,&true_,selection,&n,S,&ld,T,&ld,wr,beta,Z,&ld,Q,&ld,&mout,NULL,NULL,NULL,work,&lwork,iwork,&liwork,&info)); |
| 264 | #endif | ||
| 265 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
25449 | SlepcCheckLapackInfo("tgsen",info); |
| 266 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_A],&S)); |
| 267 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_B],&T)); |
| 268 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Q],&Q)); |
| 269 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Z],&Z)); |
| 270 | 25449 | *k = mout; | |
| 271 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
315964 | for (i=0;i<n;i++) { |
| 272 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
290515 | if (beta[i]==0.0) wr[i] = (PetscRealPart(wr[i])>0.0)? PETSC_MAX_REAL: PETSC_MIN_REAL; |
| 273 | 290515 | else wr[i] /= beta[i]; | |
| 274 | #if !defined(PETSC_USE_COMPLEX) | ||
| 275 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
118314 | if (beta[i]==0.0) wi[i] = (wi[i]>0.0)? PETSC_MAX_REAL: PETSC_MIN_REAL; |
| 276 | 118314 | else wi[i] /= beta[i]; | |
| 277 | #endif | ||
| 278 | } | ||
| 279 |
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.
|
5209 | PetscFunctionReturn(PETSC_SUCCESS); |
| 280 | } | ||
| 281 | |||
| 282 | 65 | static PetscErrorCode DSSort_GNHEP_Total(DS ds,PetscScalar *wr,PetscScalar *wi) | |
| 283 | { | ||
| 284 | 65 | PetscScalar re; | |
| 285 | 65 | PetscInt i,j,pos,result; | |
| 286 | 65 | PetscBLASInt ifst,ilst,info,n,ld,one=1; | |
| 287 | 65 | PetscScalar *S,*T,*Z,*Q; | |
| 288 | #if !defined(PETSC_USE_COMPLEX) | ||
| 289 | 30 | PetscBLASInt lwork; | |
| 290 | 30 | PetscScalar *work,a,safmin,scale1,scale2,im; | |
| 291 | #endif | ||
| 292 | |||
| 293 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
65 | PetscFunctionBegin; |
| 294 |
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.
|
65 | if (!ds->sc) PetscFunctionReturn(PETSC_SUCCESS); |
| 295 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
65 | PetscCall(PetscBLASIntCast(ds->n,&n)); |
| 296 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
65 | PetscCall(PetscBLASIntCast(ds->ld,&ld)); |
| 297 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
65 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_A],&S)); |
| 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.
|
65 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_B],&T)); |
| 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.
|
65 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Q],&Q)); |
| 300 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
65 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Z],&Z)); |
| 301 | #if !defined(PETSC_USE_COMPLEX) | ||
| 302 | 30 | lwork = -1; | |
| 303 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
30 | PetscCallBLAS("LAPACKtgexc",LAPACKtgexc_(&one,&one,&ld,NULL,&ld,NULL,&ld,NULL,&ld,NULL,&ld,&one,&one,&a,&lwork,&info)); |
| 304 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
30 | SlepcCheckLapackInfo("tgexc",info); |
| 305 | 30 | safmin = LAPACKlamch_("S"); | |
| 306 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
30 | PetscCall(PetscBLASIntCast((PetscInt)a,&lwork)); |
| 307 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
30 | PetscCall(DSAllocateWork_Private(ds,lwork,0,0)); |
| 308 | 30 | work = ds->work; | |
| 309 | #endif | ||
| 310 | /* selection sort */ | ||
| 311 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
980 | for (i=ds->l;i<n-1;i++) { |
| 312 | 915 | re = wr[i]; | |
| 313 | #if !defined(PETSC_USE_COMPLEX) | ||
| 314 | 390 | im = wi[i]; | |
| 315 | #endif | ||
| 316 | 915 | pos = 0; | |
| 317 | 915 | j = i+1; /* j points to the next eigenvalue */ | |
| 318 | #if !defined(PETSC_USE_COMPLEX) | ||
| 319 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
390 | if (im != 0) j=i+2; |
| 320 | #endif | ||
| 321 | /* find minimum eigenvalue */ | ||
| 322 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
7935 | for (;j<n;j++) { |
| 323 | #if !defined(PETSC_USE_COMPLEX) | ||
| 324 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
2700 | PetscCall(SlepcSCCompare(ds->sc,re,im,wr[j],wi[j],&result)); |
| 325 | #else | ||
| 326 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
4320 | PetscCall(SlepcSCCompare(ds->sc,re,0.0,wr[j],0.0,&result)); |
| 327 | #endif | ||
| 328 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
7020 | if (result > 0) { |
| 329 | 5366 | re = wr[j]; | |
| 330 | #if !defined(PETSC_USE_COMPLEX) | ||
| 331 | 2215 | im = wi[j]; | |
| 332 | #endif | ||
| 333 | 5366 | pos = j; | |
| 334 | } | ||
| 335 | #if !defined(PETSC_USE_COMPLEX) | ||
| 336 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
2700 | if (wi[j] != 0) j++; |
| 337 | #endif | ||
| 338 | } | ||
| 339 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
915 | if (pos) { |
| 340 | /* interchange blocks */ | ||
| 341 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
856 | PetscCall(PetscBLASIntCast(pos+1,&ifst)); |
| 342 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
856 | PetscCall(PetscBLASIntCast(i+1,&ilst)); |
| 343 | #if !defined(PETSC_USE_COMPLEX) | ||
| 344 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
360 | PetscCallBLAS("LAPACKtgexc",LAPACKtgexc_(&one,&one,&n,S,&ld,T,&ld,Z,&ld,Q,&ld,&ifst,&ilst,work,&lwork,&info)); |
| 345 | #else | ||
| 346 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
496 | PetscCallBLAS("LAPACKtgexc",LAPACKtgexc_(&one,&one,&n,S,&ld,T,&ld,Z,&ld,Q,&ld,&ifst,&ilst,&info)); |
| 347 | #endif | ||
| 348 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
856 | SlepcCheckLapackInfo("tgexc",info); |
| 349 | /* recover original eigenvalues from T and S matrices */ | ||
| 350 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
8512 | for (j=i;j<n;j++) { |
| 351 | #if !defined(PETSC_USE_COMPLEX) | ||
| 352 |
4/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
3000 | if (j<n-1 && S[j*ld+j+1] != 0.0) { |
| 353 | /* complex conjugate eigenvalue */ | ||
| 354 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
755 | PetscCallBLAS("LAPACKlag2",LAPACKlag2_(S+j*ld+j,&ld,T+j*ld+j,&ld,&safmin,&scale1,&scale2,&re,&a,&im)); |
| 355 | 755 | wr[j] = re / scale1; | |
| 356 | 755 | wi[j] = im / scale1; | |
| 357 | 755 | wr[j+1] = a / scale2; | |
| 358 | 755 | wi[j+1] = -wi[j]; | |
| 359 | 755 | j++; | |
| 360 | } else | ||
| 361 | #endif | ||
| 362 | { | ||
| 363 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
6901 | if (T[j*ld+j] == 0.0) wr[j] = (PetscRealPart(S[j*ld+j])>0.0)? PETSC_MAX_REAL: PETSC_MIN_REAL; |
| 364 | 6901 | else wr[j] = S[j*ld+j] / T[j*ld+j]; | |
| 365 | #if !defined(PETSC_USE_COMPLEX) | ||
| 366 | 2245 | wi[j] = 0.0; | |
| 367 | #endif | ||
| 368 | } | ||
| 369 | } | ||
| 370 | } | ||
| 371 | #if !defined(PETSC_USE_COMPLEX) | ||
| 372 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
390 | if (wi[i] != 0.0) i++; |
| 373 | #endif | ||
| 374 | } | ||
| 375 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
65 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_A],&S)); |
| 376 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
65 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_B],&T)); |
| 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.
|
65 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Q],&Q)); |
| 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.
|
65 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Z],&Z)); |
| 379 |
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.
|
13 | PetscFunctionReturn(PETSC_SUCCESS); |
| 380 | } | ||
| 381 | |||
| 382 | 25514 | static PetscErrorCode DSSort_GNHEP(DS ds,PetscScalar *wr,PetscScalar *wi,PetscScalar *rr,PetscScalar *ri,PetscInt *k) | |
| 383 | { | ||
| 384 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
25514 | PetscFunctionBegin; |
| 385 |
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.
|
25514 | if (!rr || wr == rr) PetscCall(DSSort_GNHEP_Total(ds,wr,wi)); |
| 386 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25449 | else PetscCall(DSSort_GNHEP_Arbitrary(ds,wr,wi,rr,ri,k)); |
| 387 |
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.
|
5222 | PetscFunctionReturn(PETSC_SUCCESS); |
| 388 | } | ||
| 389 | |||
| 390 | 55 | static PetscErrorCode DSUpdateExtraRow_GNHEP(DS ds) | |
| 391 | { | ||
| 392 | 55 | PetscInt i; | |
| 393 | 55 | PetscBLASInt n,ld,incx=1; | |
| 394 | 55 | PetscScalar *A,*B,*x,*y,one=1.0,zero=0.0; | |
| 395 | 55 | const PetscScalar *Q; | |
| 396 | |||
| 397 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
55 | PetscFunctionBegin; |
| 398 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
55 | PetscCall(PetscBLASIntCast(ds->n,&n)); |
| 399 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
55 | PetscCall(PetscBLASIntCast(ds->ld,&ld)); |
| 400 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
55 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_A],&A)); |
| 401 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
55 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_B],&B)); |
| 402 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
55 | PetscCall(MatDenseGetArrayRead(ds->omat[DS_MAT_Q],&Q)); |
| 403 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
55 | PetscCall(DSAllocateWork_Private(ds,2*ld,0,0)); |
| 404 | 55 | x = ds->work; | |
| 405 | 55 | y = ds->work+ld; | |
| 406 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1045 | for (i=0;i<n;i++) x[i] = PetscConj(A[n+i*ld]); |
| 407 |
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.
|
55 | PetscCallBLAS("BLASgemv",BLASgemv_("C",&n,&n,&one,Q,&ld,x,&incx,&zero,y,&incx)); |
| 408 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1045 | for (i=0;i<n;i++) A[n+i*ld] = PetscConj(y[i]); |
| 409 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1045 | for (i=0;i<n;i++) x[i] = PetscConj(B[n+i*ld]); |
| 410 |
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.
|
55 | PetscCallBLAS("BLASgemv",BLASgemv_("C",&n,&n,&one,Q,&ld,x,&incx,&zero,y,&incx)); |
| 411 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1045 | for (i=0;i<n;i++) B[n+i*ld] = PetscConj(y[i]); |
| 412 | 55 | ds->k = n; | |
| 413 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
55 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_A],&A)); |
| 414 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
55 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_B],&B)); |
| 415 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
55 | PetscCall(MatDenseRestoreArrayRead(ds->omat[DS_MAT_Q],&Q)); |
| 416 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
11 | PetscFunctionReturn(PETSC_SUCCESS); |
| 417 | } | ||
| 418 | |||
| 419 | /* | ||
| 420 | Write zeros from the column k to n in the lower triangular part of the | ||
| 421 | matrices S and T, and inside 2-by-2 diagonal blocks of T in order to | ||
| 422 | make (S,T) a valid Schur decompositon. | ||
| 423 | */ | ||
| 424 | 118557 | static PetscErrorCode CleanDenseSchur(PetscInt n,PetscInt k,PetscScalar *S,PetscInt ldS,PetscScalar *T,PetscInt ldT,PetscScalar *X,PetscInt ldX,PetscScalar *Y,PetscInt ldY) | |
| 425 | { | ||
| 426 | 118557 | PetscInt i; | |
| 427 | #if defined(PETSC_USE_COMPLEX) | ||
| 428 | 67681 | PetscInt j; | |
| 429 | 67681 | PetscScalar s; | |
| 430 | #else | ||
| 431 | 50876 | PetscBLASInt ldS_,ldT_,n_i,n_i_2,one=1,n_,i_2,i_; | |
| 432 | 50876 | PetscScalar b11,b22,sr,cr,sl,cl; | |
| 433 | #endif | ||
| 434 | |||
| 435 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
118557 | PetscFunctionBegin; |
| 436 | #if defined(PETSC_USE_COMPLEX) | ||
| 437 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
907451 | for (i=k; i<n; i++) { |
| 438 | /* Some functions need the diagonal elements in T be real */ | ||
| 439 |
3/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
839770 | if (T && PetscImaginaryPart(T[ldT*i+i]) != 0.0) { |
| 440 | 547 | s = PetscConj(T[ldT*i+i])/PetscAbsScalar(T[ldT*i+i]); | |
| 441 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
5882 | for (j=0;j<=i;j++) { |
| 442 | 5335 | T[ldT*i+j] *= s; | |
| 443 | 5335 | S[ldS*i+j] *= s; | |
| 444 | } | ||
| 445 | 547 | T[ldT*i+i] = PetscRealPart(T[ldT*i+i]); | |
| 446 |
3/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
10097 | if (X) for (j=0;j<n;j++) X[ldX*i+j] *= s; |
| 447 | } | ||
| 448 | 839770 | j = i+1; | |
| 449 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
839770 | if (j<n) { |
| 450 | 772089 | S[ldS*i+j] = 0.0; | |
| 451 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
772089 | if (T) T[ldT*i+j] = 0.0; |
| 452 | } | ||
| 453 | } | ||
| 454 | #else | ||
| 455 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
50876 | PetscCall(PetscBLASIntCast(ldS,&ldS_)); |
| 456 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
50876 | PetscCall(PetscBLASIntCast(ldT,&ldT_)); |
| 457 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
50876 | PetscCall(PetscBLASIntCast(n,&n_)); |
| 458 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
621721 | for (i=k;i<n-1;i++) { |
| 459 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
570845 | if (S[ldS*i+i+1] != 0.0) { |
| 460 | /* Check if T(i+1,i) and T(i,i+1) are zero */ | ||
| 461 |
3/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5 times.
|
3441 | if (T[ldT*(i+1)+i] != 0.0 || T[ldT*i+i+1] != 0.0) { |
| 462 | /* Check if T(i+1,i) and T(i,i+1) are negligible */ | ||
| 463 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 5 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 5 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 5 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 5 times.
|
5 | if (PetscAbs(T[ldT*(i+1)+i])+PetscAbs(T[ldT*i+i+1]) < (PetscAbs(T[ldT*i+i])+PetscAbs(T[ldT*(i+1)+i+1]))*PETSC_MACHINE_EPSILON) { |
| 464 | ✗ | T[ldT*i+i+1] = 0.0; | |
| 465 | ✗ | T[ldT*(i+1)+i] = 0.0; | |
| 466 | } else { | ||
| 467 | /* If one of T(i+1,i) or T(i,i+1) is negligible, we make zero the other element */ | ||
| 468 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
5 | if (PetscAbs(T[ldT*i+i+1]) < (PetscAbs(T[ldT*i+i])+PetscAbs(T[ldT*(i+1)+i+1])+PetscAbs(T[ldT*(i+1)+i]))*PETSC_MACHINE_EPSILON) { |
| 469 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
5 | PetscCallBLAS("LAPACKlasv2",LAPACKlasv2_(&T[ldT*i+i],&T[ldT*(i+1)+i],&T[ldT*(i+1)+i+1],&b22,&b11,&sl,&cl,&sr,&cr)); |
| 470 | ✗ | } else if (PetscAbs(T[ldT*(i+1)+i]) < (PetscAbs(T[ldT*i+i])+PetscAbs(T[ldT*(i+1)+i+1])+PetscAbs(T[ldT*i+i+1]))*PETSC_MACHINE_EPSILON) { | |
| 471 | ✗ | PetscCallBLAS("LAPACKlasv2",LAPACKlasv2_(&T[ldT*i+i],&T[ldT*i+i+1],&T[ldT*(i+1)+i+1],&b22,&b11,&sr,&cr,&sl,&cl)); | |
| 472 | ✗ | } else SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,"Unsupported format. Call DSSolve before this function"); | |
| 473 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
5 | PetscCall(PetscBLASIntCast(n-i,&n_i)); |
| 474 | 5 | n_i_2 = n_i - 2; | |
| 475 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
5 | PetscCall(PetscBLASIntCast(i+2,&i_2)); |
| 476 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
5 | PetscCall(PetscBLASIntCast(i,&i_)); |
| 477 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
|
5 | if (b11 < 0.0) { |
| 478 | ✗ | cr = -cr; sr = -sr; | |
| 479 | ✗ | b11 = -b11; b22 = -b22; | |
| 480 | } | ||
| 481 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
5 | PetscCallBLAS("BLASrot",BLASrot_(&n_i,&S[ldS*i+i],&ldS_,&S[ldS*i+i+1],&ldS_,&cl,&sl)); |
| 482 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
5 | PetscCallBLAS("BLASrot",BLASrot_(&i_2,&S[ldS*i],&one,&S[ldS*(i+1)],&one,&cr,&sr)); |
| 483 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
5 | PetscCallBLAS("BLASrot",BLASrot_(&n_i_2,&T[ldT*(i+2)+i],&ldT_,&T[ldT*(i+2)+i+1],&ldT_,&cl,&sl)); |
| 484 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
5 | PetscCallBLAS("BLASrot",BLASrot_(&i_,&T[ldT*i],&one,&T[ldT*(i+1)],&one,&cr,&sr)); |
| 485 |
11/22✓ 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 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
5 | if (X) PetscCallBLAS("BLASrot",BLASrot_(&n_,&X[ldX*i],&one,&X[ldX*(i+1)],&one,&cr,&sr)); |
| 486 |
11/22✓ 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 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 1 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 1 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
5 | if (Y) PetscCallBLAS("BLASrot",BLASrot_(&n_,&Y[ldY*i],&one,&Y[ldY*(i+1)],&one,&cl,&sl)); |
| 487 | 5 | T[ldT*i+i] = b11; T[ldT*i+i+1] = 0.0; | |
| 488 | 5 | T[ldT*(i+1)+i] = 0.0; T[ldT*(i+1)+i+1] = b22; | |
| 489 | } | ||
| 490 | } | ||
| 491 | i++; | ||
| 492 | } | ||
| 493 | } | ||
| 494 | #endif | ||
| 495 |
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.
|
78593 | PetscFunctionReturn(PETSC_SUCCESS); |
| 496 | } | ||
| 497 | |||
| 498 | 13287 | static PetscErrorCode DSSolve_GNHEP(DS ds,PetscScalar *wr,PetscScalar *wi) | |
| 499 | { | ||
| 500 | 13287 | PetscScalar *work,*beta,a; | |
| 501 | 13287 | PetscInt i; | |
| 502 | 13287 | PetscBLASInt lwork,info,n,ld,iaux; | |
| 503 | 13287 | PetscScalar *A,*B,*Z,*Q; | |
| 504 | 13287 | PetscBool usegges3=(ds->method==1)?PETSC_TRUE:PETSC_FALSE; | |
| 505 | |||
| 506 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
13287 | PetscFunctionBegin; |
| 507 | #if !defined(PETSC_USE_COMPLEX) | ||
| 508 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
5561 | PetscAssertPointer(wi,3); |
| 509 | #endif | ||
| 510 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
13287 | PetscCall(PetscBLASIntCast(ds->n,&n)); |
| 511 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
13287 | PetscCall(PetscBLASIntCast(ds->ld,&ld)); |
| 512 | 13287 | lwork = -1; | |
| 513 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
13287 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_A],&A)); |
| 514 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
13287 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_B],&B)); |
| 515 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
13287 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Q],&Q)); |
| 516 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
13287 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Z],&Z)); |
| 517 | #if !defined(PETSC_USE_COMPLEX) | ||
| 518 |
1/22✗ 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
5561 | if (usegges3) PetscCallBLAS("LAPACKgges3",LAPACKgges3_("V","V","N",NULL,&n,A,&ld,B,&ld,&iaux,wr,wi,NULL,Z,&ld,Q,&ld,&a,&lwork,NULL,&info)); |
| 519 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
5561 | else PetscCallBLAS("LAPACKgges",LAPACKgges_("V","V","N",NULL,&n,A,&ld,B,&ld,&iaux,wr,wi,NULL,Z,&ld,Q,&ld,&a,&lwork,NULL,&info)); |
| 520 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
5561 | PetscCall(PetscBLASIntCast((PetscInt)a,&lwork)); |
| 521 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
5561 | PetscCall(DSAllocateWork_Private(ds,lwork+ld,0,0)); |
| 522 | 5561 | beta = ds->work; | |
| 523 | 5561 | work = beta+ds->n; | |
| 524 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
5561 | PetscCall(PetscBLASIntCast(ds->lwork-ds->n,&lwork)); |
| 525 |
1/22✗ 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
5561 | if (usegges3) PetscCallBLAS("LAPACKgges3",LAPACKgges3_("V","V","N",NULL,&n,A,&ld,B,&ld,&iaux,wr,wi,beta,Z,&ld,Q,&ld,work,&lwork,NULL,&info)); |
| 526 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
5561 | else PetscCallBLAS("LAPACKgges",LAPACKgges_("V","V","N",NULL,&n,A,&ld,B,&ld,&iaux,wr,wi,beta,Z,&ld,Q,&ld,work,&lwork,NULL,&info)); |
| 527 | #else | ||
| 528 |
1/22✗ 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
7726 | if (usegges3) PetscCallBLAS("LAPACKgges3",LAPACKgges3_("V","V","N",NULL,&n,A,&ld,B,&ld,&iaux,wr,NULL,Z,&ld,Q,&ld,&a,&lwork,NULL,NULL,&info)); |
| 529 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
7726 | else PetscCallBLAS("LAPACKgges",LAPACKgges_("V","V","N",NULL,&n,A,&ld,B,&ld,&iaux,wr,NULL,Z,&ld,Q,&ld,&a,&lwork,NULL,NULL,&info)); |
| 530 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
7726 | PetscCall(PetscBLASIntCast((PetscInt)PetscRealPart(a),&lwork)); |
| 531 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
7726 | PetscCall(DSAllocateWork_Private(ds,lwork+ld,8*ld,0)); |
| 532 | 7726 | beta = ds->work; | |
| 533 | 7726 | work = beta+ds->n; | |
| 534 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
7726 | PetscCall(PetscBLASIntCast(ds->lwork-ds->n,&lwork)); |
| 535 |
1/22✗ 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.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
|
7726 | if (usegges3) PetscCallBLAS("LAPACKgges3",LAPACKgges3_("V","V","N",NULL,&n,A,&ld,B,&ld,&iaux,wr,beta,Z,&ld,Q,&ld,work,&lwork,ds->rwork,NULL,&info)); |
| 536 |
10/20✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
✓ Branch 12 taken 1 times.
✗ Branch 13 not taken.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
|
7726 | else PetscCallBLAS("LAPACKgges",LAPACKgges_("V","V","N",NULL,&n,A,&ld,B,&ld,&iaux,wr,beta,Z,&ld,Q,&ld,work,&lwork,ds->rwork,NULL,&info)); |
| 537 | #endif | ||
| 538 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
13287 | SlepcCheckLapackInfo(usegges3?"gges3":"gges",info); |
| 539 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
162913 | for (i=0;i<n;i++) { |
| 540 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
149626 | if (beta[i]==0.0) wr[i] = (PetscRealPart(wr[i])>0.0)? PETSC_MAX_REAL: PETSC_MIN_REAL; |
| 541 | 149626 | else wr[i] /= beta[i]; | |
| 542 | #if !defined(PETSC_USE_COMPLEX) | ||
| 543 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
61015 | if (beta[i]==0.0) wi[i] = (wi[i]>0.0)? PETSC_MAX_REAL: PETSC_MIN_REAL; |
| 544 | 61015 | else wi[i] /= beta[i]; | |
| 545 | #else | ||
| 546 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
88611 | if (wi) wi[i] = 0.0; |
| 547 | #endif | ||
| 548 | } | ||
| 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.
|
13287 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_A],&A)); |
| 550 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
13287 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_B],&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.
|
13287 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Q],&Q)); |
| 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.
|
13287 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Z],&Z)); |
| 553 |
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.
|
2722 | PetscFunctionReturn(PETSC_SUCCESS); |
| 554 | } | ||
| 555 | |||
| 556 | #if !defined(PETSC_HAVE_MPIUNI) | ||
| 557 | 702 | static PetscErrorCode DSSynchronize_GNHEP(DS ds,PetscScalar eigr[],PetscScalar eigi[]) | |
| 558 | { | ||
| 559 | 702 | PetscInt ld=ds->ld,l=ds->l,k; | |
| 560 | 702 | PetscMPIInt n,rank,off=0,size,ldn; | |
| 561 | 702 | PetscScalar *A,*B,*Q,*Z; | |
| 562 | |||
| 563 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
702 | PetscFunctionBegin; |
| 564 | 702 | k = 2*(ds->n-l)*ld; | |
| 565 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
702 | if (ds->state>DS_STATE_RAW) k += 2*(ds->n-l)*ld; |
| 566 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
702 | if (eigr) k += (ds->n-l); |
| 567 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
702 | if (eigi) k += (ds->n-l); |
| 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.
|
702 | PetscCall(DSAllocateWork_Private(ds,k,0,0)); |
| 569 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
702 | PetscCall(PetscMPIIntCast(k*sizeof(PetscScalar),&size)); |
| 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.
|
702 | PetscCall(PetscMPIIntCast(ds->n-l,&n)); |
| 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.
|
702 | PetscCall(PetscMPIIntCast(ld*(ds->n-l),&ldn)); |
| 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.
|
702 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_A],&A)); |
| 573 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
702 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_B],&B)); |
| 574 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
702 | if (ds->state>DS_STATE_RAW) { |
| 575 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
702 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Q],&Q)); |
| 576 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
702 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_Z],&Z)); |
| 577 | } | ||
| 578 |
14/28✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
702 | PetscCallMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)ds),&rank)); |
| 579 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
702 | if (!rank) { |
| 580 |
14/28✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
351 | PetscCallMPI(MPI_Pack(A+l*ld,ldn,MPIU_SCALAR,ds->work,size,&off,PetscObjectComm((PetscObject)ds))); |
| 581 |
14/28✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
351 | PetscCallMPI(MPI_Pack(B+l*ld,ldn,MPIU_SCALAR,ds->work,size,&off,PetscObjectComm((PetscObject)ds))); |
| 582 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
351 | if (ds->state>DS_STATE_RAW) { |
| 583 |
14/28✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
351 | PetscCallMPI(MPI_Pack(Q+l*ld,ldn,MPIU_SCALAR,ds->work,size,&off,PetscObjectComm((PetscObject)ds))); |
| 584 |
14/28✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
351 | PetscCallMPI(MPI_Pack(Z+l*ld,ldn,MPIU_SCALAR,ds->work,size,&off,PetscObjectComm((PetscObject)ds))); |
| 585 | } | ||
| 586 |
15/30✓ 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 taken 8 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.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
351 | if (eigr) PetscCallMPI(MPI_Pack(eigr+l,n,MPIU_SCALAR,ds->work,size,&off,PetscObjectComm((PetscObject)ds))); |
| 587 | #if !defined(PETSC_USE_COMPLEX) | ||
| 588 |
15/30✓ 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 taken 4 times.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
142 | if (eigi) PetscCallMPI(MPI_Pack(eigi+l,n,MPIU_SCALAR,ds->work,size,&off,PetscObjectComm((PetscObject)ds))); |
| 589 | #endif | ||
| 590 | } | ||
| 591 |
15/30✓ 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 taken 8 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.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
1404 | PetscCallMPI(MPI_Bcast(ds->work,size,MPI_BYTE,0,PetscObjectComm((PetscObject)ds))); |
| 592 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
702 | if (rank) { |
| 593 |
14/28✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
351 | PetscCallMPI(MPI_Unpack(ds->work,size,&off,A+l*ld,ldn,MPIU_SCALAR,PetscObjectComm((PetscObject)ds))); |
| 594 |
14/28✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
351 | PetscCallMPI(MPI_Unpack(ds->work,size,&off,B+l*ld,ldn,MPIU_SCALAR,PetscObjectComm((PetscObject)ds))); |
| 595 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
351 | if (ds->state>DS_STATE_RAW) { |
| 596 |
14/28✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
351 | PetscCallMPI(MPI_Unpack(ds->work,size,&off,Q+l*ld,ldn,MPIU_SCALAR,PetscObjectComm((PetscObject)ds))); |
| 597 |
14/28✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 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.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
351 | PetscCallMPI(MPI_Unpack(ds->work,size,&off,Z+l*ld,ldn,MPIU_SCALAR,PetscObjectComm((PetscObject)ds))); |
| 598 | } | ||
| 599 |
15/30✓ 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 taken 8 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.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
351 | if (eigr) PetscCallMPI(MPI_Unpack(ds->work,size,&off,eigr+l,n,MPIU_SCALAR,PetscObjectComm((PetscObject)ds))); |
| 600 | #if !defined(PETSC_USE_COMPLEX) | ||
| 601 |
15/30✓ 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 taken 4 times.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 times.
✓ Branch 14 taken 1 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 1 times.
✓ Branch 18 taken 1 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 1 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 1 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 1 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
142 | if (eigi) PetscCallMPI(MPI_Unpack(ds->work,size,&off,eigi+l,n,MPIU_SCALAR,PetscObjectComm((PetscObject)ds))); |
| 602 | #endif | ||
| 603 | } | ||
| 604 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
702 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_A],&A)); |
| 605 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
702 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_B],&B)); |
| 606 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
702 | if (ds->state>DS_STATE_RAW) { |
| 607 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
702 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Q],&Q)); |
| 608 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
702 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_Z],&Z)); |
| 609 | } | ||
| 610 |
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.
|
138 | PetscFunctionReturn(PETSC_SUCCESS); |
| 611 | } | ||
| 612 | #endif | ||
| 613 | |||
| 614 | 55 | static PetscErrorCode DSTruncate_GNHEP(DS ds,PetscInt n,PetscBool trim) | |
| 615 | { | ||
| 616 | 55 | PetscInt i,ld=ds->ld,l=ds->l; | |
| 617 | 55 | PetscScalar *A,*B; | |
| 618 | |||
| 619 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
55 | PetscFunctionBegin; |
| 620 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
55 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_A],&A)); |
| 621 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
55 | PetscCall(MatDenseGetArray(ds->omat[DS_MAT_B],&B)); |
| 622 | #if defined(PETSC_USE_DEBUG) | ||
| 623 | /* make sure diagonal 2x2 block is not broken */ | ||
| 624 |
5/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
11 | PetscCheck(ds->state<DS_STATE_CONDENSED || n==0 || n==ds->n || (A[n+(n-1)*ld]==0.0 && B[n+(n-1)*ld]==0.0),PETSC_COMM_SELF,PETSC_ERR_ARG_WRONG,"The given size would break a 2x2 block, call DSGetTruncateSize() first"); |
| 625 | #endif | ||
| 626 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
55 | if (trim) { |
| 627 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
30 | if (ds->extrarow) { /* clean extra row */ |
| 628 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
520 | for (i=l;i<ds->n;i++) A[ds->n+i*ld] = 0.0; |
| 629 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
520 | for (i=l;i<ds->n;i++) B[ds->n+i*ld] = 0.0; |
| 630 | } | ||
| 631 | 30 | ds->l = 0; | |
| 632 | 30 | ds->k = 0; | |
| 633 | 30 | ds->n = n; | |
| 634 | 30 | ds->t = ds->n; /* truncated length equal to the new dimension */ | |
| 635 | } else { | ||
| 636 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
25 | if (ds->extrarow && ds->k==ds->n) { |
| 637 | /* copy entries of extra row to the new position, then clean last row */ | ||
| 638 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
225 | for (i=l;i<n;i++) A[n+i*ld] = A[ds->n+i*ld]; |
| 639 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
425 | for (i=l;i<ds->n;i++) A[ds->n+i*ld] = 0.0; |
| 640 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
225 | for (i=l;i<n;i++) B[n+i*ld] = B[ds->n+i*ld]; |
| 641 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
425 | for (i=l;i<ds->n;i++) B[ds->n+i*ld] = 0.0; |
| 642 | } | ||
| 643 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
25 | ds->k = (ds->extrarow)? n: 0; |
| 644 | 25 | ds->t = ds->n; /* truncated length equal to previous dimension */ | |
| 645 | 25 | ds->n = n; | |
| 646 | } | ||
| 647 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
55 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_A],&A)); |
| 648 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
55 | PetscCall(MatDenseRestoreArray(ds->omat[DS_MAT_B],&B)); |
| 649 |
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.
|
11 | PetscFunctionReturn(PETSC_SUCCESS); |
| 650 | } | ||
| 651 | |||
| 652 | /*MC | ||
| 653 | DSGNHEP - Dense Generalized Non-Hermitian Eigenvalue Problem. | ||
| 654 | |||
| 655 | Notes: | ||
| 656 | The problem is expressed as $AX = BX\Lambda$, where $(A,B)$ is the input | ||
| 657 | matrix pencil. $\Lambda$ is a diagonal matrix whose diagonal elements are the | ||
| 658 | arguments of `DSSolve()`. After solve, $(A,B)$ is overwritten with the | ||
| 659 | generalized (real) Schur form $(S,T) = (Z^*AQ,Z^*BQ)$, with the first | ||
| 660 | matrix being upper quasi-triangular and the second one triangular. | ||
| 661 | |||
| 662 | Used DS matrices: | ||
| 663 | + `DS_MAT_A` - first problem matrix | ||
| 664 | . `DS_MAT_B` - second problem matrix | ||
| 665 | . `DS_MAT_Q` - first orthogonal/unitary transformation that reduces to | ||
| 666 | generalized (real) Schur form | ||
| 667 | - `DS_MAT_Z` - second orthogonal/unitary transformation that reduces to | ||
| 668 | generalized (real) Schur form | ||
| 669 | |||
| 670 | Implemented methods: | ||
| 671 | + 0 - QZ iteration (`_gges`) | ||
| 672 | - 1 - blocked QZ iteration (`_gges3`, if available) | ||
| 673 | |||
| 674 | Level: beginner | ||
| 675 | |||
| 676 | .seealso: [](sec:ds), `DSCreate()`, `DSSetType()`, `DSType` | ||
| 677 | M*/ | ||
| 678 | 336 | SLEPC_EXTERN PetscErrorCode DSCreate_GNHEP(DS ds) | |
| 679 | { | ||
| 680 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
336 | PetscFunctionBegin; |
| 681 | 336 | ds->ops->allocate = DSAllocate_GNHEP; | |
| 682 | 336 | ds->ops->view = DSView_GNHEP; | |
| 683 | 336 | ds->ops->vectors = DSVectors_GNHEP; | |
| 684 | 336 | ds->ops->solve[0] = DSSolve_GNHEP; | |
| 685 | #if !defined(SLEPC_MISSING_LAPACK_GGES3) | ||
| 686 | 336 | ds->ops->solve[1] = DSSolve_GNHEP; | |
| 687 | #endif | ||
| 688 | 336 | ds->ops->sort = DSSort_GNHEP; | |
| 689 | #if !defined(PETSC_HAVE_MPIUNI) | ||
| 690 | 336 | ds->ops->synchronize = DSSynchronize_GNHEP; | |
| 691 | #endif | ||
| 692 | 336 | ds->ops->gettruncatesize = DSGetTruncateSize_Default; | |
| 693 | 336 | ds->ops->truncate = DSTruncate_GNHEP; | |
| 694 | 336 | ds->ops->update = DSUpdateExtraRow_GNHEP; | |
| 695 |
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.
|
336 | PetscFunctionReturn(PETSC_SUCCESS); |
| 696 | } | ||
| 697 |