Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
3 | SLEPc - Scalable Library for Eigenvalue Problem Computations | ||
4 | Copyright (c) 2002-, Universitat Politecnica de Valencia, Spain | ||
5 | |||
6 | This file is part of SLEPc. | ||
7 | SLEPc is distributed under a 2-clause BSD license (see LICENSE). | ||
8 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
9 | */ | ||
10 | /* | ||
11 | SLEPc singular value solver: "cyclic" | ||
12 | |||
13 | Method: Uses a Hermitian eigensolver for H(A) = [ 0 A ; A^T 0 ] | ||
14 | */ | ||
15 | |||
16 | #include <slepc/private/svdimpl.h> /*I "slepcsvd.h" I*/ | ||
17 | #include <slepc/private/bvimpl.h> | ||
18 | #include "cyclic.h" | ||
19 | |||
20 | 91112 | static PetscErrorCode MatMult_Cyclic(Mat B,Vec x,Vec y) | |
21 | { | ||
22 | 91112 | SVD_CYCLIC_SHELL *ctx; | |
23 | 91112 | const PetscScalar *px; | |
24 | 91112 | PetscScalar *py; | |
25 | 91112 | PetscInt m; | |
26 | |||
27 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
91112 | PetscFunctionBegin; |
28 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
91112 | PetscCall(MatShellGetContext(B,&ctx)); |
29 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
91112 | PetscCall(MatGetLocalSize(ctx->A,&m,NULL)); |
30 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
91112 | PetscCall(VecGetArrayRead(x,&px)); |
31 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
91112 | PetscCall(VecGetArrayWrite(y,&py)); |
32 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
91112 | PetscCall(VecPlaceArray(ctx->x1,px)); |
33 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
91112 | PetscCall(VecPlaceArray(ctx->x2,px+m)); |
34 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
91112 | PetscCall(VecPlaceArray(ctx->y1,py)); |
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.
|
91112 | PetscCall(VecPlaceArray(ctx->y2,py+m)); |
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.
|
91112 | PetscCall(MatMult(ctx->A,ctx->x2,ctx->y1)); |
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.
|
91112 | PetscCall(MatMult(ctx->AT,ctx->x1,ctx->y2)); |
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.
|
91112 | PetscCall(VecResetArray(ctx->x1)); |
39 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
91112 | PetscCall(VecResetArray(ctx->x2)); |
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.
|
91112 | PetscCall(VecResetArray(ctx->y1)); |
41 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
91112 | PetscCall(VecResetArray(ctx->y2)); |
42 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
91112 | PetscCall(VecRestoreArrayRead(x,&px)); |
43 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
91112 | PetscCall(VecRestoreArrayWrite(y,&py)); |
44 |
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.
|
18480 | PetscFunctionReturn(PETSC_SUCCESS); |
45 | } | ||
46 | |||
47 | ✗ | static PetscErrorCode MatGetDiagonal_Cyclic(Mat B,Vec diag) | |
48 | { | ||
49 | ✗ | PetscFunctionBegin; | |
50 | ✗ | PetscCall(VecSet(diag,0.0)); | |
51 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
52 | } | ||
53 | |||
54 | 286 | static PetscErrorCode MatDestroy_Cyclic(Mat B) | |
55 | { | ||
56 | 286 | SVD_CYCLIC_SHELL *ctx; | |
57 | |||
58 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
286 | PetscFunctionBegin; |
59 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
286 | PetscCall(MatShellGetContext(B,&ctx)); |
60 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
286 | PetscCall(VecDestroy(&ctx->x1)); |
61 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
286 | PetscCall(VecDestroy(&ctx->x2)); |
62 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
286 | PetscCall(VecDestroy(&ctx->y1)); |
63 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
286 | PetscCall(VecDestroy(&ctx->y2)); |
64 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 10 times.
|
286 | if (ctx->misaligned) { |
65 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
6 | PetscCall(VecDestroy(&ctx->wx2)); |
66 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
6 | PetscCall(VecDestroy(&ctx->wy2)); |
67 | } | ||
68 |
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.
|
286 | PetscCall(PetscFree(ctx)); |
69 |
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.
|
56 | PetscFunctionReturn(PETSC_SUCCESS); |
70 | } | ||
71 | |||
72 | /* | ||
73 | Builds cyclic matrix C = | 0 A | | ||
74 | | AT 0 | | ||
75 | */ | ||
76 | 455 | static PetscErrorCode SVDCyclicGetCyclicMat(SVD svd,Mat A,Mat AT,Mat *C) | |
77 | { | ||
78 | 455 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
79 | 455 | SVD_CYCLIC_SHELL *ctx; | |
80 | 455 | PetscInt i,M,N,m,n,Istart,Iend; | |
81 | 455 | VecType vtype; | |
82 | 455 | Mat Zm,Zn; | |
83 | #if defined(PETSC_HAVE_CUDA) || defined(PETSC_HAVE_HIP) | ||
84 | 184 | PetscBool gpu; | |
85 | 184 | const PetscInt *ranges; | |
86 | 184 | PetscMPIInt size; | |
87 | #endif | ||
88 | |||
89 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
455 | PetscFunctionBegin; |
90 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
455 | PetscCall(MatGetSize(A,&M,&N)); |
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.
|
455 | PetscCall(MatGetLocalSize(A,&m,&n)); |
92 | |||
93 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
455 | if (cyclic->explicitmatrix) { |
94 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
169 | PetscCheck(svd->expltrans,PetscObjectComm((PetscObject)svd),PETSC_ERR_SUP,"Cannot use explicit cyclic matrix with implicit transpose"); |
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.
|
169 | PetscCall(MatCreate(PetscObjectComm((PetscObject)svd),&Zm)); |
96 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatSetSizes(Zm,m,m,M,M)); |
97 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatSetFromOptions(Zm)); |
98 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatGetOwnershipRange(Zm,&Istart,&Iend)); |
99 |
7/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
|
20542 | for (i=Istart;i<Iend;i++) PetscCall(MatSetValue(Zm,i,i,0.0,INSERT_VALUES)); |
100 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatAssemblyBegin(Zm,MAT_FINAL_ASSEMBLY)); |
101 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatAssemblyEnd(Zm,MAT_FINAL_ASSEMBLY)); |
102 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatCreate(PetscObjectComm((PetscObject)svd),&Zn)); |
103 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatSetSizes(Zn,n,n,N,N)); |
104 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatSetFromOptions(Zn)); |
105 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatGetOwnershipRange(Zn,&Istart,&Iend)); |
106 |
7/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
|
11933 | for (i=Istart;i<Iend;i++) PetscCall(MatSetValue(Zn,i,i,0.0,INSERT_VALUES)); |
107 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatAssemblyBegin(Zn,MAT_FINAL_ASSEMBLY)); |
108 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatAssemblyEnd(Zn,MAT_FINAL_ASSEMBLY)); |
109 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatCreateTile(1.0,Zm,1.0,A,1.0,AT,1.0,Zn,C)); |
110 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatDestroy(&Zm)); |
111 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
169 | PetscCall(MatDestroy(&Zn)); |
112 | } else { | ||
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.
|
286 | PetscCall(PetscNew(&ctx)); |
114 | 286 | ctx->A = A; | |
115 | 286 | ctx->AT = AT; | |
116 | 286 | ctx->swapped = svd->swapped; | |
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.
|
286 | PetscCall(MatCreateVecsEmpty(A,&ctx->x2,&ctx->x1)); |
118 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
286 | PetscCall(MatCreateVecsEmpty(A,&ctx->y2,&ctx->y1)); |
119 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
286 | PetscCall(MatCreateShell(PetscObjectComm((PetscObject)svd),m+n,m+n,M+N,M+N,ctx,C)); |
120 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
286 | PetscCall(MatShellSetOperation(*C,MATOP_GET_DIAGONAL,(PetscErrorCodeFn*)MatGetDiagonal_Cyclic)); |
121 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
286 | PetscCall(MatShellSetOperation(*C,MATOP_DESTROY,(PetscErrorCodeFn*)MatDestroy_Cyclic)); |
122 | #if defined(PETSC_HAVE_CUDA) | ||
123 |
3/4✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
|
105 | PetscCall(PetscObjectTypeCompareAny((PetscObject)(svd->swapped?AT:A),&gpu,MATSEQAIJCUSPARSE,MATMPIAIJCUSPARSE,"")); |
124 |
3/4✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
|
57 | if (gpu) PetscCall(MatShellSetOperation(*C,MATOP_MULT,(PetscErrorCodeFn*)MatMult_Cyclic_CUDA)); |
125 | else | ||
126 | #elif defined(PETSC_HAVE_HIP) | ||
127 |
3/4✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
|
105 | PetscCall(PetscObjectTypeCompareAny((PetscObject)(svd->swapped?AT:A),&gpu,MATSEQAIJHIPSPARSE,MATMPIAIJHIPSPARSE,"")); |
128 |
3/4✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
|
57 | if (gpu) PetscCall(MatShellSetOperation(*C,MATOP_MULT,(PetscErrorCodeFn*)MatMult_Cyclic_HIP)); |
129 | else | ||
130 | #endif | ||
131 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
274 | PetscCall(MatShellSetOperation(*C,MATOP_MULT,(PetscErrorCodeFn*)MatMult_Cyclic)); |
132 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
286 | PetscCall(MatGetVecType(A,&vtype)); |
133 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
286 | PetscCall(MatSetVecType(*C,vtype)); |
134 | #if defined(PETSC_HAVE_CUDA) || defined(PETSC_HAVE_HIP) | ||
135 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 4 times.
|
114 | if (gpu) { |
136 | /* check alignment of bottom block */ | ||
137 |
2/6✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
12 | PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)ctx->x1),&size)); |
138 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
|
12 | PetscCall(VecGetOwnershipRanges(ctx->x1,&ranges)); |
139 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 2 times.
|
18 | for (i=0;i<size;i++) { |
140 | 12 | ctx->misaligned = (((ranges[i+1]-ranges[i])*sizeof(PetscScalar))%16)? PETSC_TRUE: PETSC_FALSE; | |
141 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
12 | if (ctx->misaligned) break; |
142 | } | ||
143 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
|
12 | if (ctx->misaligned) { /* create work vectors for MatMult */ |
144 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
6 | PetscCall(VecDuplicate(ctx->x2,&ctx->wx2)); |
145 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
6 | PetscCall(VecDuplicate(ctx->y2,&ctx->wy2)); |
146 | } | ||
147 | } | ||
148 | #endif | ||
149 | } | ||
150 |
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.
|
89 | PetscFunctionReturn(PETSC_SUCCESS); |
151 | } | ||
152 | |||
153 | 71423 | static PetscErrorCode MatMult_ECross(Mat B,Vec x,Vec y) | |
154 | { | ||
155 | 71423 | SVD_CYCLIC_SHELL *ctx; | |
156 | 71423 | const PetscScalar *px; | |
157 | 71423 | PetscScalar *py; | |
158 | 71423 | PetscInt mn,m,n; | |
159 | |||
160 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
71423 | PetscFunctionBegin; |
161 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71423 | PetscCall(MatShellGetContext(B,&ctx)); |
162 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71423 | PetscCall(MatGetLocalSize(ctx->A,NULL,&n)); |
163 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71423 | PetscCall(VecGetLocalSize(y,&mn)); |
164 | 71423 | m = mn-n; | |
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.
|
71423 | PetscCall(VecGetArrayRead(x,&px)); |
166 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71423 | PetscCall(VecGetArrayWrite(y,&py)); |
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.
|
71423 | PetscCall(VecPlaceArray(ctx->x1,px)); |
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.
|
71423 | PetscCall(VecPlaceArray(ctx->x2,px+m)); |
169 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71423 | PetscCall(VecPlaceArray(ctx->y1,py)); |
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.
|
71423 | PetscCall(VecPlaceArray(ctx->y2,py+m)); |
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.
|
71423 | PetscCall(VecCopy(ctx->x1,ctx->y1)); |
172 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71423 | PetscCall(MatMult(ctx->A,ctx->x2,ctx->w)); |
173 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71423 | PetscCall(MatMult(ctx->AT,ctx->w,ctx->y2)); |
174 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71423 | PetscCall(VecResetArray(ctx->x1)); |
175 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71423 | PetscCall(VecResetArray(ctx->x2)); |
176 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71423 | PetscCall(VecResetArray(ctx->y1)); |
177 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71423 | PetscCall(VecResetArray(ctx->y2)); |
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.
|
71423 | PetscCall(VecRestoreArrayRead(x,&px)); |
179 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71423 | PetscCall(VecRestoreArrayWrite(y,&py)); |
180 |
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.
|
14284 | PetscFunctionReturn(PETSC_SUCCESS); |
181 | } | ||
182 | |||
183 | 63 | static PetscErrorCode MatGetDiagonal_ECross(Mat B,Vec d) | |
184 | { | ||
185 | 63 | SVD_CYCLIC_SHELL *ctx; | |
186 | 63 | PetscScalar *pd; | |
187 | 63 | PetscMPIInt len; | |
188 | 63 | PetscInt mn,m,n,N,i,j,start,end,ncols; | |
189 | 63 | PetscScalar *work1,*work2,*diag; | |
190 | 63 | const PetscInt *cols; | |
191 | 63 | const PetscScalar *vals; | |
192 | |||
193 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
63 | PetscFunctionBegin; |
194 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(MatShellGetContext(B,&ctx)); |
195 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(MatGetLocalSize(ctx->A,NULL,&n)); |
196 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecGetLocalSize(d,&mn)); |
197 | 63 | m = mn-n; | |
198 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecGetArrayWrite(d,&pd)); |
199 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecPlaceArray(ctx->y1,pd)); |
200 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecSet(ctx->y1,1.0)); |
201 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecResetArray(ctx->y1)); |
202 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecPlaceArray(ctx->y2,pd+m)); |
203 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
63 | if (!ctx->diag) { |
204 | /* compute diagonal from rows and store in ctx->diag */ | ||
205 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecDuplicate(ctx->y2,&ctx->diag)); |
206 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(MatGetSize(ctx->A,NULL,&N)); |
207 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(PetscCalloc2(N,&work1,N,&work2)); |
208 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
63 | if (ctx->swapped) { |
209 | ✗ | PetscCall(MatGetOwnershipRange(ctx->AT,&start,&end)); | |
210 | ✗ | for (i=start;i<end;i++) { | |
211 | ✗ | PetscCall(MatGetRow(ctx->AT,i,&ncols,NULL,&vals)); | |
212 | ✗ | for (j=0;j<ncols;j++) work1[i] += vals[j]*vals[j]; | |
213 | ✗ | PetscCall(MatRestoreRow(ctx->AT,i,&ncols,NULL,&vals)); | |
214 | } | ||
215 | } else { | ||
216 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(MatGetOwnershipRange(ctx->A,&start,&end)); |
217 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1416 | for (i=start;i<end;i++) { |
218 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1353 | PetscCall(MatGetRow(ctx->A,i,&ncols,&cols,&vals)); |
219 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
9548 | for (j=0;j<ncols;j++) work1[cols[j]] += vals[j]*vals[j]; |
220 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1353 | PetscCall(MatRestoreRow(ctx->A,i,&ncols,&cols,&vals)); |
221 | } | ||
222 | } | ||
223 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(PetscMPIIntCast(N,&len)); |
224 |
28/58✓ 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 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
|
63 | PetscCallMPI(MPIU_Allreduce(work1,work2,len,MPIU_SCALAR,MPIU_SUM,PetscObjectComm((PetscObject)B))); |
225 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecGetOwnershipRange(ctx->diag,&start,&end)); |
226 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecGetArrayWrite(ctx->diag,&diag)); |
227 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1273 | for (i=start;i<end;i++) diag[i-start] = work2[i]; |
228 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecRestoreArrayWrite(ctx->diag,&diag)); |
229 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(PetscFree2(work1,work2)); |
230 | } | ||
231 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecCopy(ctx->diag,ctx->y2)); |
232 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecResetArray(ctx->y2)); |
233 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecRestoreArrayWrite(d,&pd)); |
234 |
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); |
235 | } | ||
236 | |||
237 | 63 | static PetscErrorCode MatDestroy_ECross(Mat B) | |
238 | { | ||
239 | 63 | SVD_CYCLIC_SHELL *ctx; | |
240 | |||
241 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
63 | PetscFunctionBegin; |
242 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(MatShellGetContext(B,&ctx)); |
243 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecDestroy(&ctx->x1)); |
244 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecDestroy(&ctx->x2)); |
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.
|
63 | PetscCall(VecDestroy(&ctx->y1)); |
246 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecDestroy(&ctx->y2)); |
247 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecDestroy(&ctx->diag)); |
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.
|
63 | PetscCall(VecDestroy(&ctx->w)); |
249 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 10 times.
|
63 | if (ctx->misaligned) { |
250 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
4 | PetscCall(VecDestroy(&ctx->wx2)); |
251 |
1/6✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
4 | PetscCall(VecDestroy(&ctx->wy2)); |
252 | } | ||
253 |
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.
|
63 | PetscCall(PetscFree(ctx)); |
254 |
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); |
255 | } | ||
256 | |||
257 | /* | ||
258 | Builds extended cross product matrix C = | I_m 0 | | ||
259 | | 0 AT*A | | ||
260 | t is an auxiliary Vec used to take the dimensions of the upper block | ||
261 | */ | ||
262 | 134 | static PetscErrorCode SVDCyclicGetECrossMat(SVD svd,Mat A,Mat AT,Mat *C,Vec t) | |
263 | { | ||
264 | 134 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
265 | 134 | SVD_CYCLIC_SHELL *ctx; | |
266 | 134 | PetscInt i,M,N,m,n,Istart,Iend; | |
267 | 134 | VecType vtype; | |
268 | 134 | Mat Id,Zm,Zn,ATA; | |
269 | #if defined(PETSC_HAVE_CUDA) || defined(PETSC_HAVE_HIP) | ||
270 | 62 | PetscBool gpu; | |
271 | 62 | const PetscInt *ranges; | |
272 | 62 | PetscMPIInt size; | |
273 | #endif | ||
274 | |||
275 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
134 | PetscFunctionBegin; |
276 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(MatGetSize(A,NULL,&N)); |
277 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(MatGetLocalSize(A,NULL,&n)); |
278 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(VecGetSize(t,&M)); |
279 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(VecGetLocalSize(t,&m)); |
280 | |||
281 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
134 | if (cyclic->explicitmatrix) { |
282 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
71 | PetscCheck(svd->expltrans,PetscObjectComm((PetscObject)svd),PETSC_ERR_SUP,"Cannot use explicit cyclic matrix with implicit transpose"); |
283 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatCreateConstantDiagonal(PetscObjectComm((PetscObject)svd),m,m,M,M,1.0,&Id)); |
284 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatCreate(PetscObjectComm((PetscObject)svd),&Zm)); |
285 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatSetSizes(Zm,m,n,M,N)); |
286 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatSetFromOptions(Zm)); |
287 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatGetOwnershipRange(Zm,&Istart,&Iend)); |
288 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4218 | for (i=Istart;i<Iend;i++) { |
289 |
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.
|
4147 | if (i<N) PetscCall(MatSetValue(Zm,i,i,0.0,INSERT_VALUES)); |
290 | } | ||
291 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatAssemblyBegin(Zm,MAT_FINAL_ASSEMBLY)); |
292 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatAssemblyEnd(Zm,MAT_FINAL_ASSEMBLY)); |
293 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatCreate(PetscObjectComm((PetscObject)svd),&Zn)); |
294 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatSetSizes(Zn,n,m,N,M)); |
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.
|
71 | PetscCall(MatSetFromOptions(Zn)); |
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.
|
71 | PetscCall(MatGetOwnershipRange(Zn,&Istart,&Iend)); |
297 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4363 | for (i=Istart;i<Iend;i++) { |
298 |
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.
|
4292 | if (i<m) PetscCall(MatSetValue(Zn,i,i,0.0,INSERT_VALUES)); |
299 | } | ||
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.
|
71 | PetscCall(MatAssemblyBegin(Zn,MAT_FINAL_ASSEMBLY)); |
301 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatAssemblyEnd(Zn,MAT_FINAL_ASSEMBLY)); |
302 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatProductCreate(AT,A,NULL,&ATA)); |
303 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatProductSetType(ATA,MATPRODUCT_AB)); |
304 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatProductSetFromOptions(ATA)); |
305 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatProductSymbolic(ATA)); |
306 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatProductNumeric(ATA)); |
307 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatCreateTile(1.0,Id,1.0,Zm,1.0,Zn,1.0,ATA,C)); |
308 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatDestroy(&Id)); |
309 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatDestroy(&Zm)); |
310 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatDestroy(&Zn)); |
311 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
71 | PetscCall(MatDestroy(&ATA)); |
312 | } else { | ||
313 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(PetscNew(&ctx)); |
314 | 63 | ctx->A = A; | |
315 | 63 | ctx->AT = AT; | |
316 | 63 | ctx->swapped = svd->swapped; | |
317 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecDuplicateEmpty(t,&ctx->x1)); |
318 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(VecDuplicateEmpty(t,&ctx->y1)); |
319 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(MatCreateVecsEmpty(A,&ctx->x2,NULL)); |
320 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(MatCreateVecsEmpty(A,&ctx->y2,NULL)); |
321 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(MatCreateVecs(A,NULL,&ctx->w)); |
322 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(MatCreateShell(PetscObjectComm((PetscObject)svd),m+n,m+n,M+N,M+N,ctx,C)); |
323 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(MatShellSetOperation(*C,MATOP_GET_DIAGONAL,(PetscErrorCodeFn*)MatGetDiagonal_ECross)); |
324 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(MatShellSetOperation(*C,MATOP_DESTROY,(PetscErrorCodeFn*)MatDestroy_ECross)); |
325 | #if defined(PETSC_HAVE_CUDA) | ||
326 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
|
30 | PetscCall(PetscObjectTypeCompareAny((PetscObject)(svd->swapped?AT:A),&gpu,MATSEQAIJCUSPARSE,MATMPIAIJCUSPARSE,"")); |
327 |
3/4✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
|
15 | if (gpu) PetscCall(MatShellSetOperation(*C,MATOP_MULT,(PetscErrorCodeFn*)MatMult_ECross_CUDA)); |
328 | else | ||
329 | #elif defined(PETSC_HAVE_HIP) | ||
330 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
|
30 | PetscCall(PetscObjectTypeCompareAny((PetscObject)(svd->swapped?AT:A),&gpu,MATSEQAIJHIPSPARSE,MATMPIAIJHIPSPARSE,"")); |
331 |
3/4✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
|
15 | if (gpu) PetscCall(MatShellSetOperation(*C,MATOP_MULT,(PetscErrorCodeFn*)MatMult_ECross_HIP)); |
332 | else | ||
333 | #endif | ||
334 |
4/6✓ Branch 0 taken 2 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(MatShellSetOperation(*C,MATOP_MULT,(PetscErrorCodeFn*)MatMult_ECross)); |
335 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(MatGetVecType(A,&vtype)); |
336 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
63 | PetscCall(MatSetVecType(*C,vtype)); |
337 | #if defined(PETSC_HAVE_CUDA) || defined(PETSC_HAVE_HIP) | ||
338 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 4 times.
|
30 | if (gpu) { |
339 | /* check alignment of bottom block */ | ||
340 |
2/6✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 4 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
8 | PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)ctx->x1),&size)); |
341 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
|
8 | PetscCall(VecGetOwnershipRanges(ctx->x1,&ranges)); |
342 |
2/2✓ Branch 0 taken 4 times.
✓ Branch 1 taken 2 times.
|
12 | for (i=0;i<size;i++) { |
343 | 8 | ctx->misaligned = (((ranges[i+1]-ranges[i])*sizeof(PetscScalar))%16)? PETSC_TRUE: PETSC_FALSE; | |
344 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
8 | if (ctx->misaligned) break; |
345 | } | ||
346 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
|
8 | if (ctx->misaligned) { /* create work vectors for MatMult */ |
347 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
4 | PetscCall(VecDuplicate(ctx->x2,&ctx->wx2)); |
348 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
4 | PetscCall(VecDuplicate(ctx->y2,&ctx->wy2)); |
349 | } | ||
350 | } | ||
351 | #endif | ||
352 | } | ||
353 |
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.
|
24 | PetscFunctionReturn(PETSC_SUCCESS); |
354 | } | ||
355 | |||
356 | /* Convergence test relative to the norm of R (used in GSVD only) */ | ||
357 | 1749 | static PetscErrorCode EPSConv_Cyclic(EPS eps,PetscScalar eigr,PetscScalar eigi,PetscReal res,PetscReal *errest,void *ctx) | |
358 | { | ||
359 | 1749 | SVD svd = (SVD)ctx; | |
360 | |||
361 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1749 | PetscFunctionBegin; |
362 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1749 | *errest = res/PetscMax(svd->nrma,svd->nrmb); |
363 |
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.
|
1749 | PetscFunctionReturn(PETSC_SUCCESS); |
364 | } | ||
365 | |||
366 | 455 | static PetscErrorCode SVDSetUp_Cyclic(SVD svd) | |
367 | { | ||
368 | 455 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
369 | 455 | PetscInt M,N,m,n,p,k,i,isl,offset,nev,ncv,mpd,maxit; | |
370 | 455 | PetscReal tol; | |
371 | 455 | const PetscScalar *isa,*oa; | |
372 | 455 | PetscScalar *va; | |
373 | 455 | EPSProblemType ptype; | |
374 | 455 | PetscBool trackall,issinv; | |
375 | 455 | Vec v,t; | |
376 | 455 | ST st; | |
377 | 455 | Mat Omega; | |
378 | 455 | MatType Atype; | |
379 | |||
380 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
455 | PetscFunctionBegin; |
381 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
455 | if (svd->nsv==0) svd->nsv = 1; |
382 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
455 | PetscCall(MatGetSize(svd->A,&M,&N)); |
383 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
455 | PetscCall(MatGetLocalSize(svd->A,&m,&n)); |
384 |
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.
|
455 | if (!cyclic->eps) PetscCall(SVDCyclicGetEPS(svd,&cyclic->eps)); |
385 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
455 | PetscCall(MatDestroy(&cyclic->C)); |
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.
|
455 | PetscCall(MatDestroy(&cyclic->D)); |
387 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
455 | if (svd->isgeneralized) { |
388 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
|
134 | if (svd->which==SVD_SMALLEST) { /* alternative pencil */ |
389 |
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.
|
20 | PetscCall(MatCreateVecs(svd->B,NULL,&t)); |
390 |
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.
|
20 | PetscCall(SVDCyclicGetCyclicMat(svd,svd->B,svd->BT,&cyclic->C)); |
391 |
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.
|
20 | PetscCall(SVDCyclicGetECrossMat(svd,svd->A,svd->AT,&cyclic->D,t)); |
392 | } else { | ||
393 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
114 | PetscCall(MatCreateVecs(svd->A,NULL,&t)); |
394 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
114 | PetscCall(SVDCyclicGetCyclicMat(svd,svd->A,svd->AT,&cyclic->C)); |
395 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
114 | PetscCall(SVDCyclicGetECrossMat(svd,svd->B,svd->BT,&cyclic->D,t)); |
396 | } | ||
397 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(VecDestroy(&t)); |
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.
|
134 | PetscCall(EPSSetOperators(cyclic->eps,cyclic->C,cyclic->D)); |
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.
|
134 | PetscCall(EPSGetProblemType(cyclic->eps,&ptype)); |
400 |
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.
|
134 | if (!ptype) PetscCall(EPSSetProblemType(cyclic->eps,EPS_GHEP)); |
401 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
321 | } else if (svd->ishyperbolic) { |
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.
|
59 | PetscCall(SVDCyclicGetCyclicMat(svd,svd->A,svd->AT,&cyclic->C)); |
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.
|
59 | PetscCall(MatCreateVecs(cyclic->C,&v,NULL)); |
404 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(VecSet(v,1.0)); |
405 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(VecGetArrayRead(svd->omega,&oa)); |
406 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(VecGetArray(v,&va)); |
407 |
6/8✓ Branch 0 taken 6 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
59 | if (svd->swapped) PetscCall(PetscArraycpy(va+m,oa,n)); |
408 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
47 | else PetscCall(PetscArraycpy(va,oa,m)); |
409 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(VecRestoreArrayRead(svd->omega,&oa)); |
410 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(VecRestoreArray(v,&va)); |
411 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(MatGetType(svd->OP,&Atype)); |
412 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(MatCreate(PetscObjectComm((PetscObject)svd),&Omega)); |
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.
|
59 | PetscCall(MatSetSizes(Omega,m+n,m+n,M+N,M+N)); |
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.
|
59 | PetscCall(MatSetType(Omega,Atype)); |
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.
|
59 | PetscCall(MatDiagonalSet(Omega,v,INSERT_VALUES)); |
416 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(EPSSetOperators(cyclic->eps,cyclic->C,Omega)); |
417 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(EPSSetProblemType(cyclic->eps,EPS_GHIEP)); |
418 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(MatDestroy(&Omega)); |
419 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(VecDestroy(&v)); |
420 | } else { | ||
421 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
262 | PetscCall(SVDCyclicGetCyclicMat(svd,svd->A,svd->AT,&cyclic->C)); |
422 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
262 | PetscCall(EPSSetOperators(cyclic->eps,cyclic->C,NULL)); |
423 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
262 | PetscCall(EPSSetProblemType(cyclic->eps,EPS_HEP)); |
424 | } | ||
425 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
455 | if (!cyclic->usereps) { |
426 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
441 | if (svd->which == SVD_LARGEST) { |
427 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
396 | PetscCall(EPSGetST(cyclic->eps,&st)); |
428 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
396 | PetscCall(PetscObjectTypeCompare((PetscObject)st,STSINVERT,&issinv)); |
429 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
396 | if (issinv) PetscCall(EPSSetWhichEigenpairs(cyclic->eps,EPS_TARGET_MAGNITUDE)); |
430 |
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.
|
388 | else if (svd->ishyperbolic) PetscCall(EPSSetWhichEigenpairs(cyclic->eps,EPS_LARGEST_MAGNITUDE)); |
431 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
334 | else PetscCall(EPSSetWhichEigenpairs(cyclic->eps,EPS_LARGEST_REAL)); |
432 | } else { | ||
433 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
|
45 | if (svd->isgeneralized) { /* computes sigma^{-1} via alternative pencil */ |
434 |
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.
|
20 | PetscCall(EPSSetWhichEigenpairs(cyclic->eps,EPS_LARGEST_REAL)); |
435 | } else { | ||
436 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
25 | if (svd->ishyperbolic) PetscCall(EPSSetWhichEigenpairs(cyclic->eps,EPS_TARGET_MAGNITUDE)); |
437 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | else PetscCall(EPSSetEigenvalueComparison(cyclic->eps,SlepcCompareSmallestPosReal,NULL)); |
438 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
25 | PetscCall(EPSSetTarget(cyclic->eps,0.0)); |
439 | } | ||
440 | } | ||
441 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
441 | PetscCall(EPSGetDimensions(cyclic->eps,&nev,&ncv,&mpd)); |
442 |
3/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
441 | PetscCheck(nev==1 || nev>=2*svd->nsv,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_WRONG,"The number of requested eigenvalues %" PetscInt_FMT " must be at least 2*%" PetscInt_FMT,nev,svd->nsv); |
443 | 441 | nev = PetscMax(nev,2*svd->nsv); | |
444 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
441 | if (ncv==PETSC_DETERMINE && svd->ncv!=PETSC_DETERMINE) ncv = PetscMax(3*svd->nsv,svd->ncv); |
445 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
441 | if (mpd==PETSC_DETERMINE && svd->mpd!=PETSC_DETERMINE) mpd = svd->mpd; |
446 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
441 | PetscCall(EPSSetDimensions(cyclic->eps,nev,ncv,mpd)); |
447 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
441 | PetscCall(EPSGetTolerances(cyclic->eps,&tol,&maxit)); |
448 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
497 | if (tol==(PetscReal)PETSC_DETERMINE) tol = svd->tol==(PetscReal)PETSC_DETERMINE? SLEPC_DEFAULT_TOL/10.0: svd->tol; |
449 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
441 | if (maxit==PETSC_DETERMINE) maxit = svd->max_it; |
450 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
441 | PetscCall(EPSSetTolerances(cyclic->eps,tol,maxit)); |
451 |
3/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
441 | switch (svd->conv) { |
452 | 36 | case SVD_CONV_ABS: | |
453 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
36 | PetscCall(EPSSetConvergenceTest(cyclic->eps,EPS_CONV_ABS));break; |
454 | 271 | case SVD_CONV_REL: | |
455 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
271 | PetscCall(EPSSetConvergenceTest(cyclic->eps,EPS_CONV_REL));break; |
456 | 134 | case SVD_CONV_NORM: | |
457 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
134 | if (svd->isgeneralized) { |
458 |
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.
|
134 | if (!svd->nrma) PetscCall(MatNorm(svd->OP,NORM_INFINITY,&svd->nrma)); |
459 |
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.
|
134 | if (!svd->nrmb) PetscCall(MatNorm(svd->OPb,NORM_INFINITY,&svd->nrmb)); |
460 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(EPSSetConvergenceTestFunction(cyclic->eps,EPSConv_Cyclic,svd,NULL)); |
461 | } else { | ||
462 | ✗ | PetscCall(EPSSetConvergenceTest(cyclic->eps,EPS_CONV_NORM));break; | |
463 | } | ||
464 | break; | ||
465 | ✗ | case SVD_CONV_MAXIT: | |
466 | ✗ | SETERRQ(PetscObjectComm((PetscObject)svd),PETSC_ERR_SUP,"Maxit convergence test not supported in this solver"); | |
467 | ✗ | case SVD_CONV_USER: | |
468 | ✗ | SETERRQ(PetscObjectComm((PetscObject)svd),PETSC_ERR_SUP,"User-defined convergence test not supported in this solver"); | |
469 | } | ||
470 | 2 | } | |
471 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
455 | SVDCheckUnsupported(svd,SVD_FEATURE_STOPPING); |
472 | /* Transfer the trackall option from svd to eps */ | ||
473 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
455 | PetscCall(SVDGetTrackAll(svd,&trackall)); |
474 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
455 | PetscCall(EPSSetTrackAll(cyclic->eps,trackall)); |
475 | /* Transfer the initial subspace from svd to eps */ | ||
476 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
455 | if (svd->nini<0 || svd->ninil<0) { |
477 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
96 | for (i=0;i<-PetscMin(svd->nini,svd->ninil);i++) { |
478 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
48 | PetscCall(MatCreateVecs(cyclic->C,&v,NULL)); |
479 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
48 | PetscCall(VecGetArrayWrite(v,&va)); |
480 |
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.
|
48 | if (svd->isgeneralized) PetscCall(MatGetLocalSize(svd->B,&p,NULL)); |
481 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
48 | k = (svd->isgeneralized && svd->which==SVD_SMALLEST)? p: m; /* size of upper block row */ |
482 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
48 | if (i<-svd->ninil) { |
483 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
48 | PetscCall(VecGetArrayRead(svd->ISL[i],&isa)); |
484 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
48 | if (svd->isgeneralized) { |
485 |
4/6✓ Branch 0 taken 2 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(VecGetLocalSize(svd->ISL[i],&isl)); |
486 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
10 | PetscCheck(isl==m+p,PetscObjectComm((PetscObject)svd),PETSC_ERR_SUP,"Size mismatch for left initial vector"); |
487 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | offset = (svd->which==SVD_SMALLEST)? m: 0; |
488 |
4/6✓ Branch 0 taken 2 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(PetscArraycpy(va,isa+offset,k)); |
489 | } else { | ||
490 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
38 | PetscCall(VecGetLocalSize(svd->ISL[i],&isl)); |
491 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
38 | PetscCheck(isl==k,PetscObjectComm((PetscObject)svd),PETSC_ERR_SUP,"Size mismatch for left initial vector"); |
492 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
38 | PetscCall(PetscArraycpy(va,isa,k)); |
493 | } | ||
494 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
48 | PetscCall(VecRestoreArrayRead(svd->IS[i],&isa)); |
495 | ✗ | } else PetscCall(PetscArrayzero(&va,k)); | |
496 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
48 | if (i<-svd->nini) { |
497 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
48 | PetscCall(VecGetLocalSize(svd->IS[i],&isl)); |
498 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
48 | PetscCheck(isl==n,PetscObjectComm((PetscObject)svd),PETSC_ERR_SUP,"Size mismatch for right initial vector"); |
499 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
48 | PetscCall(VecGetArrayRead(svd->IS[i],&isa)); |
500 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
48 | PetscCall(PetscArraycpy(va+k,isa,n)); |
501 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
48 | PetscCall(VecRestoreArrayRead(svd->IS[i],&isa)); |
502 | ✗ | } else PetscCall(PetscArrayzero(va+k,n)); | |
503 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
48 | PetscCall(VecRestoreArrayWrite(v,&va)); |
504 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
48 | PetscCall(VecDestroy(&svd->IS[i])); |
505 | 48 | svd->IS[i] = v; | |
506 | } | ||
507 | 48 | svd->nini = PetscMin(svd->nini,svd->ninil); | |
508 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
48 | PetscCall(EPSSetInitialSpace(cyclic->eps,-svd->nini,svd->IS)); |
509 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
48 | PetscCall(SlepcBasisDestroy_Private(&svd->nini,&svd->IS)); |
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.
|
48 | PetscCall(SlepcBasisDestroy_Private(&svd->ninil,&svd->ISL)); |
511 | } | ||
512 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
455 | PetscCall(EPSSetUp(cyclic->eps)); |
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.
|
455 | PetscCall(EPSGetDimensions(cyclic->eps,NULL,&svd->ncv,&svd->mpd)); |
514 | 455 | svd->ncv = PetscMin(svd->ncv,PetscMin(M,N)); | |
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.
|
455 | PetscCall(EPSGetTolerances(cyclic->eps,NULL,&svd->max_it)); |
516 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
455 | if (svd->tol==(PetscReal)PETSC_DETERMINE) svd->tol = SLEPC_DEFAULT_TOL; |
517 | |||
518 | 455 | svd->leftbasis = PETSC_TRUE; | |
519 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
455 | PetscCall(SVDAllocateSolution(svd,0)); |
520 |
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.
|
89 | PetscFunctionReturn(PETSC_SUCCESS); |
521 | } | ||
522 | |||
523 | 309812 | static PetscErrorCode SVDCyclicCheckEigenvalue(SVD svd,PetscScalar er,PetscScalar ei,PetscReal *sigma,PetscBool *isreal) | |
524 | { | ||
525 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
309812 | PetscFunctionBegin; |
526 |
4/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 5 times.
|
309812 | if (svd->ishyperbolic && PetscDefined(USE_COMPLEX) && PetscAbsReal(PetscImaginaryPart(er))>10*PetscAbsReal(PetscRealPart(er))) { |
527 | 704 | *sigma = PetscImaginaryPart(er); | |
528 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
|
704 | if (isreal) *isreal = PETSC_FALSE; |
529 |
4/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
309108 | } else if (svd->ishyperbolic && !PetscDefined(USE_COMPLEX) && PetscAbsScalar(ei)>10*PetscAbsScalar(er)) { |
530 | 13638 | *sigma = PetscRealPart(ei); | |
531 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 5 times.
|
13638 | if (isreal) *isreal = PETSC_FALSE; |
532 | } else { | ||
533 | 295470 | *sigma = PetscRealPart(er); | |
534 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
295470 | if (isreal) *isreal = PETSC_TRUE; |
535 | } | ||
536 |
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.
|
309812 | PetscFunctionReturn(PETSC_SUCCESS); |
537 | } | ||
538 | |||
539 | 455 | static PetscErrorCode SVDSolve_Cyclic(SVD svd) | |
540 | { | ||
541 | 455 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
542 | 455 | PetscInt i,j,nconv; | |
543 | 455 | PetscScalar er,ei; | |
544 | 455 | PetscReal sigma; | |
545 | |||
546 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
455 | PetscFunctionBegin; |
547 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
455 | PetscCall(EPSSolve(cyclic->eps)); |
548 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
455 | PetscCall(EPSGetConverged(cyclic->eps,&nconv)); |
549 | 455 | nconv = PetscMin(nconv,svd->ncv); | |
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.
|
455 | PetscCall(EPSGetIterationNumber(cyclic->eps,&svd->its)); |
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.
|
455 | PetscCall(EPSGetConvergedReason(cyclic->eps,(EPSConvergedReason*)&svd->reason)); |
552 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5642 | for (i=0,j=0;i<nconv;i++) { |
553 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
5187 | PetscCall(EPSGetEigenvalue(cyclic->eps,i,&er,&ei)); |
554 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
5187 | PetscCall(SVDCyclicCheckEigenvalue(svd,er,ei,&sigma,NULL)); |
555 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5187 | if (sigma>0.0) { |
556 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 10 times.
|
3909 | if (svd->isgeneralized && svd->which==SVD_SMALLEST) svd->sigma[j] = 1.0/sigma; |
557 | 3789 | else svd->sigma[j] = sigma; | |
558 | 3909 | j++; | |
559 | } | ||
560 | } | ||
561 | 455 | svd->nconv = j; | |
562 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
455 | PetscFunctionReturn(PETSC_SUCCESS); |
563 | } | ||
564 | |||
565 | 222 | static PetscErrorCode SVDComputeVectors_Cyclic_Standard(SVD svd) | |
566 | { | ||
567 | 222 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
568 | 222 | PetscInt i,j,m,nconv; | |
569 | 222 | PetscScalar er,ei; | |
570 | 222 | PetscReal sigma; | |
571 | 222 | const PetscScalar *px; | |
572 | 222 | Vec x,x1,x2; | |
573 | |||
574 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
222 | PetscFunctionBegin; |
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.
|
222 | PetscCall(MatCreateVecs(cyclic->C,&x,NULL)); |
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.
|
222 | PetscCall(MatGetLocalSize(svd->A,&m,NULL)); |
577 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
222 | PetscCall(MatCreateVecsEmpty(svd->A,&x2,&x1)); |
578 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
222 | PetscCall(EPSGetConverged(cyclic->eps,&nconv)); |
579 | 222 | nconv = PetscMin(nconv,svd->ncv); | |
580 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1816 | for (i=0,j=0;i<nconv;i++) { |
581 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1594 | PetscCall(EPSGetEigenpair(cyclic->eps,i,&er,&ei,x,NULL)); |
582 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1594 | PetscCall(SVDCyclicCheckEigenvalue(svd,er,ei,&sigma,NULL)); |
583 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
1594 | if (sigma<0.0) continue; |
584 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1594 | PetscCall(VecGetArrayRead(x,&px)); |
585 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1594 | PetscCall(VecPlaceArray(x1,px)); |
586 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1594 | PetscCall(VecPlaceArray(x2,px+m)); |
587 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1594 | PetscCall(BVInsertVec(svd->U,j,x1)); |
588 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1594 | PetscCall(BVScaleColumn(svd->U,j,PETSC_SQRT2)); |
589 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1594 | PetscCall(BVInsertVec(svd->V,j,x2)); |
590 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1594 | PetscCall(BVScaleColumn(svd->V,j,PETSC_SQRT2)); |
591 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1594 | PetscCall(VecResetArray(x1)); |
592 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1594 | PetscCall(VecResetArray(x2)); |
593 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1594 | PetscCall(VecRestoreArrayRead(x,&px)); |
594 | 1594 | j++; | |
595 | } | ||
596 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
222 | PetscCall(VecDestroy(&x)); |
597 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
222 | PetscCall(VecDestroy(&x1)); |
598 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
222 | PetscCall(VecDestroy(&x2)); |
599 |
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.
|
42 | PetscFunctionReturn(PETSC_SUCCESS); |
600 | } | ||
601 | |||
602 | 134 | static PetscErrorCode SVDComputeVectors_Cyclic_Generalized(SVD svd) | |
603 | { | ||
604 | 134 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
605 | 134 | PetscInt i,j,m,p,nconv; | |
606 | 134 | PetscScalar *dst,er,ei; | |
607 | 134 | PetscReal sigma; | |
608 | 134 | const PetscScalar *src,*px; | |
609 | 134 | Vec u,v,x,x1,x2,uv; | |
610 | |||
611 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
134 | PetscFunctionBegin; |
612 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(MatGetLocalSize(svd->A,&m,NULL)); |
613 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(MatGetLocalSize(svd->B,&p,NULL)); |
614 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(MatCreateVecs(cyclic->C,&x,NULL)); |
615 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
134 | if (svd->which==SVD_SMALLEST) PetscCall(MatCreateVecsEmpty(svd->B,&x1,&x2)); |
616 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
114 | else PetscCall(MatCreateVecsEmpty(svd->A,&x2,&x1)); |
617 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(MatCreateVecs(svd->A,NULL,&u)); |
618 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(MatCreateVecs(svd->B,NULL,&v)); |
619 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(EPSGetConverged(cyclic->eps,&nconv)); |
620 | 134 | nconv = PetscMin(nconv,svd->ncv); | |
621 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1045 | for (i=0,j=0;i<nconv;i++) { |
622 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
911 | PetscCall(EPSGetEigenpair(cyclic->eps,i,&er,&ei,x,NULL)); |
623 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
911 | PetscCall(SVDCyclicCheckEigenvalue(svd,er,ei,&sigma,NULL)); |
624 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
911 | if (sigma<0.0) continue; |
625 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
|
911 | if (svd->which==SVD_SMALLEST) { |
626 | /* evec_i = 1/sqrt(2)*[ v_i; w_i ], w_i = x_i/c_i */ | ||
627 |
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.
|
120 | PetscCall(VecGetArrayRead(x,&px)); |
628 |
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.
|
120 | PetscCall(VecPlaceArray(x2,px)); |
629 |
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.
|
120 | PetscCall(VecPlaceArray(x1,px+p)); |
630 |
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.
|
120 | PetscCall(VecCopy(x2,v)); |
631 |
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.
|
120 | PetscCall(VecScale(v,PETSC_SQRT2)); /* v_i = sqrt(2)*evec_i_1 */ |
632 |
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.
|
120 | PetscCall(VecScale(x1,PETSC_SQRT2)); /* w_i = sqrt(2)*evec_i_2 */ |
633 |
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.
|
120 | PetscCall(MatMult(svd->A,x1,u)); /* A*w_i = u_i */ |
634 |
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.
|
120 | PetscCall(VecScale(x1,1.0/PetscSqrtScalar(1.0+sigma*sigma))); /* x_i = w_i*c_i */ |
635 |
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.
|
120 | PetscCall(BVInsertVec(svd->V,j,x1)); |
636 |
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.
|
120 | PetscCall(VecResetArray(x2)); |
637 |
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.
|
120 | PetscCall(VecResetArray(x1)); |
638 |
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.
|
120 | PetscCall(VecRestoreArrayRead(x,&px)); |
639 | } else { | ||
640 | /* evec_i = 1/sqrt(2)*[ u_i; w_i ], w_i = x_i/s_i */ | ||
641 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
791 | PetscCall(VecGetArrayRead(x,&px)); |
642 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
791 | PetscCall(VecPlaceArray(x1,px)); |
643 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
791 | PetscCall(VecPlaceArray(x2,px+m)); |
644 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
791 | PetscCall(VecCopy(x1,u)); |
645 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
791 | PetscCall(VecScale(u,PETSC_SQRT2)); /* u_i = sqrt(2)*evec_i_1 */ |
646 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
791 | PetscCall(VecScale(x2,PETSC_SQRT2)); /* w_i = sqrt(2)*evec_i_2 */ |
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.
|
791 | PetscCall(MatMult(svd->B,x2,v)); /* B*w_i = v_i */ |
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.
|
791 | PetscCall(VecScale(x2,1.0/PetscSqrtScalar(1.0+sigma*sigma))); /* x_i = w_i*s_i */ |
649 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
791 | PetscCall(BVInsertVec(svd->V,j,x2)); |
650 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
791 | PetscCall(VecResetArray(x1)); |
651 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
791 | PetscCall(VecResetArray(x2)); |
652 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
791 | PetscCall(VecRestoreArrayRead(x,&px)); |
653 | } | ||
654 | /* copy [u;v] to U[j] */ | ||
655 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
911 | PetscCall(BVGetColumn(svd->U,j,&uv)); |
656 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
911 | PetscCall(VecGetArrayWrite(uv,&dst)); |
657 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
911 | PetscCall(VecGetArrayRead(u,&src)); |
658 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
911 | PetscCall(PetscArraycpy(dst,src,m)); |
659 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
911 | PetscCall(VecRestoreArrayRead(u,&src)); |
660 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
911 | PetscCall(VecGetArrayRead(v,&src)); |
661 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
911 | PetscCall(PetscArraycpy(dst+m,src,p)); |
662 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
911 | PetscCall(VecRestoreArrayRead(v,&src)); |
663 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
911 | PetscCall(VecRestoreArrayWrite(uv,&dst)); |
664 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
911 | PetscCall(BVRestoreColumn(svd->U,j,&uv)); |
665 | 911 | j++; | |
666 | } | ||
667 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(VecDestroy(&x)); |
668 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(VecDestroy(&x1)); |
669 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(VecDestroy(&x2)); |
670 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(VecDestroy(&u)); |
671 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(VecDestroy(&v)); |
672 |
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.
|
24 | PetscFunctionReturn(PETSC_SUCCESS); |
673 | } | ||
674 | |||
675 | #if defined(PETSC_USE_COMPLEX) | ||
676 | /* VecMaxAbs: returns the entry of x that has max(abs(x(i))), using w as a workspace vector */ | ||
677 | 12 | static PetscErrorCode VecMaxAbs(Vec x,Vec w,PetscScalar *v) | |
678 | { | ||
679 | 12 | PetscMPIInt size,rank,root; | |
680 | 12 | const PetscScalar *xx; | |
681 | 12 | const PetscInt *ranges; | |
682 | 12 | PetscReal val; | |
683 | 12 | PetscInt p; | |
684 | |||
685 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
12 | PetscFunctionBegin; |
686 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
12 | PetscCall(VecCopy(x,w)); |
687 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
12 | PetscCall(VecAbs(w)); |
688 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
12 | PetscCall(VecMax(w,&p,&val)); |
689 |
14/28✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ 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 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.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
12 | PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)x),&size)); |
690 |
14/28✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ 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 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.
✗ Branch 24 not taken.
✓ Branch 25 taken 1 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
|
12 | PetscCallMPI(MPI_Comm_rank(PetscObjectComm((PetscObject)x),&rank)); |
691 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
12 | PetscCall(VecGetOwnershipRanges(x,&ranges)); |
692 |
3/6✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
|
12 | for (root=0;root<size;root++) if (p>=ranges[root] && p<ranges[root+1]) break; |
693 |
1/2✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
|
12 | if (rank==root) { |
694 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
12 | PetscCall(VecGetArrayRead(x,&xx)); |
695 | 12 | *v = xx[p-ranges[root]]; | |
696 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
12 | PetscCall(VecRestoreArrayRead(x,&xx)); |
697 | } | ||
698 |
15/30✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 2 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.
|
24 | PetscCallMPI(MPI_Bcast(v,1,MPIU_SCALAR,root,PetscObjectComm((PetscObject)x))); |
699 |
6/12✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 1 times.
|
4 | PetscFunctionReturn(PETSC_SUCCESS); |
700 | } | ||
701 | #endif | ||
702 | |||
703 | 59 | static PetscErrorCode SVDComputeVectors_Cyclic_Hyperbolic(SVD svd) | |
704 | { | ||
705 | 59 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
706 | 59 | PetscInt i,j,m,n,nconv; | |
707 | 59 | PetscScalar er,ei; | |
708 | 59 | PetscReal sigma,nrm; | |
709 | 59 | PetscBool isreal; | |
710 | 59 | const PetscScalar *px; | |
711 | 59 | Vec u,x,xi=NULL,x1,x2,x1i=NULL,x2i; | |
712 | 59 | BV U=NULL,V=NULL; | |
713 | #if !defined(PETSC_USE_COMPLEX) | ||
714 | 32 | const PetscScalar *pxi; | |
715 | 32 | PetscReal nrmr,nrmi; | |
716 | #else | ||
717 | 27 | PetscScalar alpha; | |
718 | #endif | ||
719 | |||
720 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
59 | PetscFunctionBegin; |
721 |
6/8✓ 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 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
59 | PetscCall(MatCreateVecs(cyclic->C,&x,svd->ishyperbolic?&xi:NULL)); |
722 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(MatGetLocalSize(svd->A,&m,NULL)); |
723 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(MatCreateVecsEmpty(svd->OP,&x2,&x1)); |
724 | #if defined(PETSC_USE_COMPLEX) | ||
725 |
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.
|
27 | PetscCall(MatCreateVecs(svd->OP,&x2i,&x1i)); |
726 | #else | ||
727 |
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.
|
32 | PetscCall(MatCreateVecsEmpty(svd->OP,&x2i,&x1i)); |
728 | #endif | ||
729 | /* set-up Omega-normalization of U */ | ||
730 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 10 times.
|
59 | U = svd->swapped? svd->V: svd->U; |
731 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 10 times.
|
59 | V = svd->swapped? svd->U: svd->V; |
732 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(BVGetSizes(U,&n,NULL,NULL)); |
733 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(BV_SetMatrixDiagonal(U,svd->omega,svd->A)); |
734 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(EPSGetConverged(cyclic->eps,&nconv)); |
735 | 59 | nconv = PetscMin(nconv,svd->ncv); | |
736 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2626 | for (i=0,j=0;i<nconv;i++) { |
737 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2567 | PetscCall(EPSGetEigenpair(cyclic->eps,i,&er,&ei,x,xi)); |
738 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2567 | PetscCall(SVDCyclicCheckEigenvalue(svd,er,ei,&sigma,&isreal)); |
739 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
2567 | if (sigma<0.0) continue; |
740 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1289 | PetscCall(VecGetArrayRead(x,&px)); |
741 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 10 times.
|
1289 | if (svd->swapped) { |
742 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
79 | PetscCall(VecPlaceArray(x2,px)); |
743 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
79 | PetscCall(VecPlaceArray(x1,px+m)); |
744 | } else { | ||
745 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1210 | PetscCall(VecPlaceArray(x1,px)); |
746 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1210 | PetscCall(VecPlaceArray(x2,px+n)); |
747 | } | ||
748 | #if defined(PETSC_USE_COMPLEX) | ||
749 |
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.
|
605 | PetscCall(BVInsertVec(U,j,x1)); |
750 |
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.
|
605 | PetscCall(BVInsertVec(V,j,x2)); |
751 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 5 times.
|
605 | if (!isreal) { |
752 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
12 | PetscCall(VecMaxAbs(x1,x1i,&alpha)); |
753 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
12 | PetscCall(BVScaleColumn(U,j,PetscAbsScalar(alpha)/alpha)); |
754 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
12 | PetscCall(BVScaleColumn(V,j,PetscAbsScalar(alpha)/(alpha*PETSC_i))); |
755 | } | ||
756 | #else | ||
757 |
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.
|
684 | PetscCall(VecGetArrayRead(xi,&pxi)); |
758 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 5 times.
|
684 | if (svd->swapped) { |
759 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
37 | PetscCall(VecPlaceArray(x2i,pxi)); |
760 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
37 | PetscCall(VecPlaceArray(x1i,pxi+m)); |
761 | } else { | ||
762 |
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.
|
647 | PetscCall(VecPlaceArray(x1i,pxi)); |
763 |
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.
|
647 | PetscCall(VecPlaceArray(x2i,pxi+n)); |
764 | } | ||
765 |
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.
|
684 | PetscCall(VecNorm(x2,NORM_2,&nrmr)); |
766 |
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.
|
684 | PetscCall(VecNorm(x2i,NORM_2,&nrmi)); |
767 |
2/2✓ Branch 0 taken 3 times.
✓ Branch 1 taken 5 times.
|
684 | if (nrmi>nrmr) { |
768 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 3 times.
|
8 | if (isreal) { |
769 | ✗ | PetscCall(BVInsertVec(U,j,x1i)); | |
770 | ✗ | PetscCall(BVInsertVec(V,j,x2i)); | |
771 | } else { | ||
772 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
8 | PetscCall(BVInsertVec(U,j,x1)); |
773 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
8 | PetscCall(BVInsertVec(V,j,x2i)); |
774 | } | ||
775 | } else { | ||
776 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 2 times.
|
676 | if (isreal) { |
777 |
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.
|
672 | PetscCall(BVInsertVec(U,j,x1)); |
778 |
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.
|
672 | PetscCall(BVInsertVec(V,j,x2)); |
779 | } else { | ||
780 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
4 | PetscCall(BVInsertVec(U,j,x1i)); |
781 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
4 | PetscCall(BVScaleColumn(U,j,-1.0)); |
782 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
4 | PetscCall(BVInsertVec(V,j,x2)); |
783 | } | ||
784 | } | ||
785 |
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.
|
684 | PetscCall(VecResetArray(x1i)); |
786 |
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.
|
684 | PetscCall(VecResetArray(x2i)); |
787 |
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.
|
684 | PetscCall(VecRestoreArrayRead(xi,&pxi)); |
788 | #endif | ||
789 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1289 | PetscCall(VecResetArray(x1)); |
790 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1289 | PetscCall(VecResetArray(x2)); |
791 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1289 | PetscCall(VecRestoreArrayRead(x,&px)); |
792 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1289 | PetscCall(BVGetColumn(U,j,&u)); |
793 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1289 | PetscCall(VecPointwiseMult(u,u,svd->omega)); |
794 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1289 | PetscCall(BVRestoreColumn(U,j,&u)); |
795 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1289 | PetscCall(BVNormColumn(U,j,NORM_2,&nrm)); |
796 |
7/8✓ Branch 0 taken 6 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.
|
1289 | PetscCall(BVScaleColumn(U,j,1.0/PetscAbs(nrm))); |
797 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
|
1289 | svd->sign[j] = PetscSign(nrm); |
798 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1289 | PetscCall(BVNormColumn(V,j,NORM_2,&nrm)); |
799 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1289 | PetscCall(BVScaleColumn(V,j,1.0/nrm)); |
800 | 1289 | j++; | |
801 | } | ||
802 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(VecDestroy(&x)); |
803 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(VecDestroy(&x1)); |
804 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(VecDestroy(&x2)); |
805 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(VecDestroy(&xi)); |
806 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(VecDestroy(&x1i)); |
807 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(VecDestroy(&x2i)); |
808 |
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.
|
15 | PetscFunctionReturn(PETSC_SUCCESS); |
809 | } | ||
810 | |||
811 | 415 | static PetscErrorCode SVDComputeVectors_Cyclic(SVD svd) | |
812 | { | ||
813 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
415 | PetscFunctionBegin; |
814 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
415 | switch (svd->problem_type) { |
815 | 222 | case SVD_STANDARD: | |
816 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
222 | PetscCall(SVDComputeVectors_Cyclic_Standard(svd)); |
817 | break; | ||
818 | 134 | case SVD_GENERALIZED: | |
819 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
134 | PetscCall(SVDComputeVectors_Cyclic_Generalized(svd)); |
820 | break; | ||
821 | 59 | case SVD_HYPERBOLIC: | |
822 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
59 | PetscCall(SVDComputeVectors_Cyclic_Hyperbolic(svd)); |
823 | break; | ||
824 | ✗ | default: | |
825 | ✗ | SETERRQ(PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_WRONG,"Unknown singular value problem type"); | |
826 | } | ||
827 |
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.
|
81 | PetscFunctionReturn(PETSC_SUCCESS); |
828 | } | ||
829 | |||
830 | 11587 | static PetscErrorCode EPSMonitor_Cyclic(EPS eps,PetscInt its,PetscInt nconv,PetscScalar *eigr,PetscScalar *eigi,PetscReal *errest,PetscInt nest,void *ctx) | |
831 | { | ||
832 | 11587 | PetscInt i,j; | |
833 | 11587 | SVD svd = (SVD)ctx; | |
834 | 11587 | PetscScalar er,ei; | |
835 | 11587 | PetscReal sigma; | |
836 | 11587 | ST st; | |
837 | |||
838 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
11587 | PetscFunctionBegin; |
839 | 11587 | nconv = 0; | |
840 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11587 | PetscCall(EPSGetST(eps,&st)); |
841 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
311140 | for (i=0,j=0;i<PetscMin(nest,svd->ncv);i++) { |
842 | 299553 | er = eigr[i]; ei = eigi[i]; | |
843 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
299553 | PetscCall(STBackTransform(st,1,&er,&ei)); |
844 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
299553 | PetscCall(SVDCyclicCheckEigenvalue(svd,er,ei,&sigma,NULL)); |
845 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
299553 | if (sigma>0.0) { |
846 | 153241 | svd->sigma[j] = sigma; | |
847 | 153241 | svd->errest[j] = errest[i]; | |
848 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
153241 | if (errest[i] && errest[i] < svd->tol) nconv++; |
849 | 153241 | j++; | |
850 | } | ||
851 | } | ||
852 | 11587 | nest = j; | |
853 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
11587 | PetscCall(SVDMonitor(svd,its,nconv,svd->sigma,svd->errest,nest)); |
854 |
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.
|
2283 | PetscFunctionReturn(PETSC_SUCCESS); |
855 | } | ||
856 | |||
857 | 327 | static PetscErrorCode SVDSetFromOptions_Cyclic(SVD svd,PetscOptionItems PetscOptionsObject) | |
858 | { | ||
859 | 327 | PetscBool set,val; | |
860 | 327 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
861 | 327 | ST st; | |
862 | |||
863 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
327 | PetscFunctionBegin; |
864 |
1/12✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
327 | PetscOptionsHeadBegin(PetscOptionsObject,"SVD Cyclic Options"); |
865 | |||
866 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
327 | PetscCall(PetscOptionsBool("-svd_cyclic_explicitmatrix","Use cyclic explicit matrix","SVDCyclicSetExplicitMatrix",cyclic->explicitmatrix,&val,&set)); |
867 |
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.
|
327 | if (set) PetscCall(SVDCyclicSetExplicitMatrix(svd,val)); |
868 | |||
869 |
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.
|
327 | PetscOptionsHeadEnd(); |
870 | |||
871 |
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.
|
327 | if (!cyclic->eps) PetscCall(SVDCyclicGetEPS(svd,&cyclic->eps)); |
872 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
327 | if (!cyclic->explicitmatrix && !cyclic->usereps) { |
873 | /* use as default an ST with shell matrix and Jacobi */ | ||
874 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
192 | PetscCall(EPSGetST(cyclic->eps,&st)); |
875 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
192 | PetscCall(STSetMatMode(st,ST_MATMODE_SHELL)); |
876 | } | ||
877 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
327 | PetscCall(EPSSetFromOptions(cyclic->eps)); |
878 |
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.
|
65 | PetscFunctionReturn(PETSC_SUCCESS); |
879 | } | ||
880 | |||
881 | 206 | static PetscErrorCode SVDCyclicSetExplicitMatrix_Cyclic(SVD svd,PetscBool explicitmat) | |
882 | { | ||
883 | 206 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
884 | |||
885 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
206 | PetscFunctionBegin; |
886 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
206 | if (cyclic->explicitmatrix != explicitmat) { |
887 | 135 | cyclic->explicitmatrix = explicitmat; | |
888 | 135 | svd->state = SVD_STATE_INITIAL; | |
889 | } | ||
890 |
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.
|
206 | PetscFunctionReturn(PETSC_SUCCESS); |
891 | } | ||
892 | |||
893 | /*@ | ||
894 | SVDCyclicSetExplicitMatrix - Indicate if the eigensolver operator | ||
895 | H(A) = [ 0 A ; A^T 0 ] must be computed explicitly. | ||
896 | |||
897 | Logically Collective | ||
898 | |||
899 | Input Parameters: | ||
900 | + svd - singular value solver | ||
901 | - explicitmat - boolean flag indicating if H(A) is built explicitly | ||
902 | |||
903 | Options Database Key: | ||
904 | . -svd_cyclic_explicitmatrix <boolean> - Indicates the boolean flag | ||
905 | |||
906 | Level: advanced | ||
907 | |||
908 | .seealso: SVDCyclicGetExplicitMatrix() | ||
909 | @*/ | ||
910 | 206 | PetscErrorCode SVDCyclicSetExplicitMatrix(SVD svd,PetscBool explicitmat) | |
911 | { | ||
912 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
206 | PetscFunctionBegin; |
913 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
206 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
914 |
27/62✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
|
206 | PetscValidLogicalCollectiveBool(svd,explicitmat,2); |
915 |
8/14✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 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.
|
206 | PetscTryMethod(svd,"SVDCyclicSetExplicitMatrix_C",(SVD,PetscBool),(svd,explicitmat)); |
916 |
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.
|
206 | PetscFunctionReturn(PETSC_SUCCESS); |
917 | } | ||
918 | |||
919 | 14 | static PetscErrorCode SVDCyclicGetExplicitMatrix_Cyclic(SVD svd,PetscBool *explicitmat) | |
920 | { | ||
921 | 14 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
922 | |||
923 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
14 | PetscFunctionBegin; |
924 | 14 | *explicitmat = cyclic->explicitmatrix; | |
925 |
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.
|
14 | PetscFunctionReturn(PETSC_SUCCESS); |
926 | } | ||
927 | |||
928 | /*@ | ||
929 | SVDCyclicGetExplicitMatrix - Returns the flag indicating if H(A) is built explicitly. | ||
930 | |||
931 | Not Collective | ||
932 | |||
933 | Input Parameter: | ||
934 | . svd - singular value solver | ||
935 | |||
936 | Output Parameter: | ||
937 | . explicitmat - the mode flag | ||
938 | |||
939 | Level: advanced | ||
940 | |||
941 | .seealso: SVDCyclicSetExplicitMatrix() | ||
942 | @*/ | ||
943 | 14 | PetscErrorCode SVDCyclicGetExplicitMatrix(SVD svd,PetscBool *explicitmat) | |
944 | { | ||
945 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
14 | PetscFunctionBegin; |
946 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
14 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
947 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
14 | PetscAssertPointer(explicitmat,2); |
948 |
9/16✓ 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 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
|
14 | PetscUseMethod(svd,"SVDCyclicGetExplicitMatrix_C",(SVD,PetscBool*),(svd,explicitmat)); |
949 |
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.
|
14 | PetscFunctionReturn(PETSC_SUCCESS); |
950 | } | ||
951 | |||
952 | 14 | static PetscErrorCode SVDCyclicSetEPS_Cyclic(SVD svd,EPS eps) | |
953 | { | ||
954 | 14 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
955 | |||
956 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
14 | PetscFunctionBegin; |
957 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
14 | PetscCall(PetscObjectReference((PetscObject)eps)); |
958 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
14 | PetscCall(EPSDestroy(&cyclic->eps)); |
959 | 14 | cyclic->eps = eps; | |
960 | 14 | cyclic->usereps = PETSC_TRUE; | |
961 | 14 | svd->state = SVD_STATE_INITIAL; | |
962 |
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.
|
14 | PetscFunctionReturn(PETSC_SUCCESS); |
963 | } | ||
964 | |||
965 | /*@ | ||
966 | SVDCyclicSetEPS - Associate an eigensolver object (EPS) to the | ||
967 | singular value solver. | ||
968 | |||
969 | Collective | ||
970 | |||
971 | Input Parameters: | ||
972 | + svd - singular value solver | ||
973 | - eps - the eigensolver object | ||
974 | |||
975 | Level: advanced | ||
976 | |||
977 | .seealso: SVDCyclicGetEPS() | ||
978 | @*/ | ||
979 | 14 | PetscErrorCode SVDCyclicSetEPS(SVD svd,EPS eps) | |
980 | { | ||
981 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
14 | PetscFunctionBegin; |
982 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
14 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
983 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
14 | PetscValidHeaderSpecific(eps,EPS_CLASSID,2); |
984 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
14 | PetscCheckSameComm(svd,1,eps,2); |
985 |
8/14✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 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.
|
14 | PetscTryMethod(svd,"SVDCyclicSetEPS_C",(SVD,EPS),(svd,eps)); |
986 |
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.
|
14 | PetscFunctionReturn(PETSC_SUCCESS); |
987 | } | ||
988 | |||
989 | 333 | static PetscErrorCode SVDCyclicGetEPS_Cyclic(SVD svd,EPS *eps) | |
990 | { | ||
991 | 333 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
992 | |||
993 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
333 | PetscFunctionBegin; |
994 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
333 | if (!cyclic->eps) { |
995 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
333 | PetscCall(EPSCreate(PetscObjectComm((PetscObject)svd),&cyclic->eps)); |
996 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
333 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)cyclic->eps,(PetscObject)svd,1)); |
997 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
333 | PetscCall(EPSSetOptionsPrefix(cyclic->eps,((PetscObject)svd)->prefix)); |
998 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
333 | PetscCall(EPSAppendOptionsPrefix(cyclic->eps,"svd_cyclic_")); |
999 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
333 | PetscCall(PetscObjectSetOptions((PetscObject)cyclic->eps,((PetscObject)svd)->options)); |
1000 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
333 | PetscCall(EPSSetWhichEigenpairs(cyclic->eps,EPS_LARGEST_REAL)); |
1001 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
333 | PetscCall(EPSMonitorSet(cyclic->eps,EPSMonitor_Cyclic,svd,NULL)); |
1002 | } | ||
1003 | 333 | *eps = cyclic->eps; | |
1004 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
333 | PetscFunctionReturn(PETSC_SUCCESS); |
1005 | } | ||
1006 | |||
1007 | /*@ | ||
1008 | SVDCyclicGetEPS - Retrieve the eigensolver object (EPS) associated | ||
1009 | to the singular value solver. | ||
1010 | |||
1011 | Collective | ||
1012 | |||
1013 | Input Parameter: | ||
1014 | . svd - singular value solver | ||
1015 | |||
1016 | Output Parameter: | ||
1017 | . eps - the eigensolver object | ||
1018 | |||
1019 | Level: advanced | ||
1020 | |||
1021 | .seealso: SVDCyclicSetEPS() | ||
1022 | @*/ | ||
1023 | 333 | PetscErrorCode SVDCyclicGetEPS(SVD svd,EPS *eps) | |
1024 | { | ||
1025 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
333 | PetscFunctionBegin; |
1026 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
333 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
1027 |
2/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
333 | PetscAssertPointer(eps,2); |
1028 |
9/16✓ 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 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 10 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
|
333 | PetscUseMethod(svd,"SVDCyclicGetEPS_C",(SVD,EPS*),(svd,eps)); |
1029 |
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.
|
333 | PetscFunctionReturn(PETSC_SUCCESS); |
1030 | } | ||
1031 | |||
1032 | 8 | static PetscErrorCode SVDView_Cyclic(SVD svd,PetscViewer viewer) | |
1033 | { | ||
1034 | 8 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
1035 | 8 | PetscBool isascii; | |
1036 | |||
1037 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
8 | PetscFunctionBegin; |
1038 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
1039 |
1/2✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
|
8 | if (isascii) { |
1040 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 8 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.
|
8 | if (!cyclic->eps) PetscCall(SVDCyclicGetEPS(svd,&cyclic->eps)); |
1041 |
6/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
8 | PetscCall(PetscViewerASCIIPrintf(viewer," %s matrix\n",cyclic->explicitmatrix?"explicit":"implicit")); |
1042 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8 | PetscCall(PetscViewerASCIIPushTab(viewer)); |
1043 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8 | PetscCall(EPSView(cyclic->eps,viewer)); |
1044 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8 | PetscCall(PetscViewerASCIIPopTab(viewer)); |
1045 | } | ||
1046 |
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.
|
2 | PetscFunctionReturn(PETSC_SUCCESS); |
1047 | } | ||
1048 | |||
1049 | 357 | static PetscErrorCode SVDReset_Cyclic(SVD svd) | |
1050 | { | ||
1051 | 357 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
1052 | |||
1053 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
357 | PetscFunctionBegin; |
1054 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
357 | PetscCall(EPSReset(cyclic->eps)); |
1055 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
357 | PetscCall(MatDestroy(&cyclic->C)); |
1056 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
357 | PetscCall(MatDestroy(&cyclic->D)); |
1057 |
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.
|
71 | PetscFunctionReturn(PETSC_SUCCESS); |
1058 | } | ||
1059 | |||
1060 | 347 | static PetscErrorCode SVDDestroy_Cyclic(SVD svd) | |
1061 | { | ||
1062 | 347 | SVD_CYCLIC *cyclic = (SVD_CYCLIC*)svd->data; | |
1063 | |||
1064 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
347 | PetscFunctionBegin; |
1065 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
347 | PetscCall(EPSDestroy(&cyclic->eps)); |
1066 |
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.
|
347 | PetscCall(PetscFree(svd->data)); |
1067 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
347 | PetscCall(PetscObjectComposeFunction((PetscObject)svd,"SVDCyclicSetEPS_C",NULL)); |
1068 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
347 | PetscCall(PetscObjectComposeFunction((PetscObject)svd,"SVDCyclicGetEPS_C",NULL)); |
1069 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
347 | PetscCall(PetscObjectComposeFunction((PetscObject)svd,"SVDCyclicSetExplicitMatrix_C",NULL)); |
1070 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
347 | PetscCall(PetscObjectComposeFunction((PetscObject)svd,"SVDCyclicGetExplicitMatrix_C",NULL)); |
1071 |
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.
|
69 | PetscFunctionReturn(PETSC_SUCCESS); |
1072 | } | ||
1073 | |||
1074 | 347 | SLEPC_EXTERN PetscErrorCode SVDCreate_Cyclic(SVD svd) | |
1075 | { | ||
1076 | 347 | SVD_CYCLIC *cyclic; | |
1077 | |||
1078 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
347 | PetscFunctionBegin; |
1079 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
347 | PetscCall(PetscNew(&cyclic)); |
1080 | 347 | svd->data = (void*)cyclic; | |
1081 | 347 | svd->ops->solve = SVDSolve_Cyclic; | |
1082 | 347 | svd->ops->solveg = SVDSolve_Cyclic; | |
1083 | 347 | svd->ops->solveh = SVDSolve_Cyclic; | |
1084 | 347 | svd->ops->setup = SVDSetUp_Cyclic; | |
1085 | 347 | svd->ops->setfromoptions = SVDSetFromOptions_Cyclic; | |
1086 | 347 | svd->ops->destroy = SVDDestroy_Cyclic; | |
1087 | 347 | svd->ops->reset = SVDReset_Cyclic; | |
1088 | 347 | svd->ops->view = SVDView_Cyclic; | |
1089 | 347 | svd->ops->computevectors = SVDComputeVectors_Cyclic; | |
1090 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
347 | PetscCall(PetscObjectComposeFunction((PetscObject)svd,"SVDCyclicSetEPS_C",SVDCyclicSetEPS_Cyclic)); |
1091 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
347 | PetscCall(PetscObjectComposeFunction((PetscObject)svd,"SVDCyclicGetEPS_C",SVDCyclicGetEPS_Cyclic)); |
1092 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
347 | PetscCall(PetscObjectComposeFunction((PetscObject)svd,"SVDCyclicSetExplicitMatrix_C",SVDCyclicSetExplicitMatrix_Cyclic)); |
1093 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
347 | PetscCall(PetscObjectComposeFunction((PetscObject)svd,"SVDCyclicGetExplicitMatrix_C",SVDCyclicGetExplicitMatrix_Cyclic)); |
1094 |
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.
|
69 | PetscFunctionReturn(PETSC_SUCCESS); |
1095 | } | ||
1096 |