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 | ST interface routines, callable by users | ||
12 | */ | ||
13 | |||
14 | #include <slepc/private/stimpl.h> /*I "slepcst.h" I*/ | ||
15 | |||
16 | 1136321 | PetscErrorCode STApply_Generic(ST st,Vec x,Vec y) | |
17 | { | ||
18 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1136321 | PetscFunctionBegin; |
19 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
1136321 | if (st->M && st->P) { |
20 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258482 | PetscCall(MatMult(st->M,x,st->work[0])); |
21 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
258482 | PetscCall(STMatSolve(st,st->work[0],y)); |
22 |
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.
|
877839 | } else if (st->M) PetscCall(MatMult(st->M,x,y)); |
23 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
182140 | else PetscCall(STMatSolve(st,x,y)); |
24 |
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.
|
222835 | PetscFunctionReturn(PETSC_SUCCESS); |
25 | } | ||
26 | |||
27 | /*@ | ||
28 | STApply - Applies the spectral transformation operator to a vector, for | ||
29 | instance (A - sB)^-1 B in the case of the shift-and-invert transformation | ||
30 | and generalized eigenproblem. | ||
31 | |||
32 | Collective | ||
33 | |||
34 | Input Parameters: | ||
35 | + st - the spectral transformation context | ||
36 | - x - input vector | ||
37 | |||
38 | Output Parameter: | ||
39 | . y - output vector | ||
40 | |||
41 | Level: developer | ||
42 | |||
43 | .seealso: STApplyTranspose(), STApplyHermitianTranspose() | ||
44 | @*/ | ||
45 | 576849 | PetscErrorCode STApply(ST st,Vec x,Vec y) | |
46 | { | ||
47 | 576849 | Mat Op; | |
48 | |||
49 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
576849 | PetscFunctionBegin; |
50 |
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.
|
576849 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
51 |
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.
|
576849 | PetscValidHeaderSpecific(x,VEC_CLASSID,2); |
52 |
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.
|
576849 | PetscValidHeaderSpecific(y,VEC_CLASSID,3); |
53 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
576849 | PetscValidType(st,1); |
54 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
576849 | STCheckMatrices(st,1); |
55 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
576849 | PetscCheck(x!=y,PetscObjectComm((PetscObject)st),PETSC_ERR_ARG_IDN,"x and y must be different vectors"); |
56 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
576849 | PetscCall(VecSetErrorIfLocked(y,3)); |
57 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
576849 | PetscCall(STGetOperator_Private(st,&Op)); |
58 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
576849 | PetscCall(MatMult(Op,x,y)); |
59 |
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.
|
115729 | PetscFunctionReturn(PETSC_SUCCESS); |
60 | } | ||
61 | |||
62 | 51721 | PetscErrorCode STApplyMat_Generic(ST st,Mat B,Mat C) | |
63 | { | ||
64 | 51721 | Mat work; | |
65 | |||
66 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
51721 | PetscFunctionBegin; |
67 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
51721 | if (st->M && st->P) { |
68 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20422 | PetscCall(MatMatMult(st->M,B,MAT_INITIAL_MATRIX,PETSC_DEFAULT,&work)); |
69 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20422 | PetscCall(STMatMatSolve(st,work,C)); |
70 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20422 | PetscCall(MatDestroy(&work)); |
71 |
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.
|
31299 | } else if (st->M) PetscCall(MatMatMult(st->M,B,MAT_REUSE_MATRIX,PETSC_DEFAULT,&C)); |
72 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
15827 | else PetscCall(STMatMatSolve(st,B,C)); |
73 |
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.
|
10231 | PetscFunctionReturn(PETSC_SUCCESS); |
74 | } | ||
75 | |||
76 | /*@ | ||
77 | STApplyMat - Applies the spectral transformation operator to a matrix, for | ||
78 | instance (A - sB)^-1 B in the case of the shift-and-invert transformation | ||
79 | and generalized eigenproblem. | ||
80 | |||
81 | Collective | ||
82 | |||
83 | Input Parameters: | ||
84 | + st - the spectral transformation context | ||
85 | - X - input matrix | ||
86 | |||
87 | Output Parameter: | ||
88 | . Y - output matrix | ||
89 | |||
90 | Level: developer | ||
91 | |||
92 | .seealso: STApply() | ||
93 | @*/ | ||
94 | 15172 | PetscErrorCode STApplyMat(ST st,Mat X,Mat Y) | |
95 | { | ||
96 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
15172 | PetscFunctionBegin; |
97 |
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.
|
15172 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
98 |
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.
|
15172 | PetscValidHeaderSpecific(X,MAT_CLASSID,2); |
99 |
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.
|
15172 | PetscValidHeaderSpecific(Y,MAT_CLASSID,3); |
100 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
15172 | PetscValidType(st,1); |
101 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
15172 | STCheckMatrices(st,1); |
102 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
15172 | PetscCheck(X!=Y,PetscObjectComm((PetscObject)st),PETSC_ERR_ARG_IDN,"X and Y must be different matrices"); |
103 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
15172 | PetscUseTypeMethod(st,applymat,X,Y); |
104 |
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.
|
3125 | PetscFunctionReturn(PETSC_SUCCESS); |
105 | } | ||
106 | |||
107 | 8202 | PetscErrorCode STApplyTranspose_Generic(ST st,Vec x,Vec y) | |
108 | { | ||
109 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
8202 | PetscFunctionBegin; |
110 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
8202 | if (st->M && st->P) { |
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.
|
1785 | PetscCall(STMatSolveTranspose(st,x,st->work[0])); |
112 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1785 | PetscCall(MatMultTranspose(st->M,st->work[0],y)); |
113 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 5 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.
|
6417 | } else if (st->M) PetscCall(MatMultTranspose(st->M,x,y)); |
114 |
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.
|
2574 | else PetscCall(STMatSolveTranspose(st,x,y)); |
115 |
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.
|
1582 | PetscFunctionReturn(PETSC_SUCCESS); |
116 | } | ||
117 | |||
118 | /*@ | ||
119 | STApplyTranspose - Applies the transpose of the operator to a vector, for | ||
120 | instance B^T(A - sB)^-T in the case of the shift-and-invert transformation | ||
121 | and generalized eigenproblem. | ||
122 | |||
123 | Collective | ||
124 | |||
125 | Input Parameters: | ||
126 | + st - the spectral transformation context | ||
127 | - x - input vector | ||
128 | |||
129 | Output Parameter: | ||
130 | . y - output vector | ||
131 | |||
132 | Level: developer | ||
133 | |||
134 | .seealso: STApply(), STApplyHermitianTranspose() | ||
135 | @*/ | ||
136 | 90 | PetscErrorCode STApplyTranspose(ST st,Vec x,Vec y) | |
137 | { | ||
138 | 90 | Mat Op; | |
139 | |||
140 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
90 | PetscFunctionBegin; |
141 |
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.
|
90 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
142 |
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.
|
90 | PetscValidHeaderSpecific(x,VEC_CLASSID,2); |
143 |
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.
|
90 | PetscValidHeaderSpecific(y,VEC_CLASSID,3); |
144 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
90 | PetscValidType(st,1); |
145 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
90 | STCheckMatrices(st,1); |
146 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
90 | PetscCheck(x!=y,PetscObjectComm((PetscObject)st),PETSC_ERR_ARG_IDN,"x and y must be different vectors"); |
147 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
90 | PetscCall(VecSetErrorIfLocked(y,3)); |
148 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
90 | PetscCall(STGetOperator_Private(st,&Op)); |
149 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
90 | PetscCall(MatMultTranspose(Op,x,y)); |
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.
|
18 | PetscFunctionReturn(PETSC_SUCCESS); |
151 | } | ||
152 | |||
153 | 7068 | PetscErrorCode STApplyHermitianTranspose_Generic(ST st,Vec x,Vec y) | |
154 | { | ||
155 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
7068 | PetscFunctionBegin; |
156 |
4/4✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 5 times.
✓ Branch 3 taken 5 times.
|
7068 | if (st->M && st->P) { |
157 |
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.
|
870 | PetscCall(STMatSolveHermitianTranspose(st,x,st->work[0])); |
158 |
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.
|
870 | PetscCall(MatMultHermitianTranspose(st->M,st->work[0],y)); |
159 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
6198 | } else if (st->M) PetscCall(MatMultHermitianTranspose(st->M,x,y)); |
160 |
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.
|
2548 | else PetscCall(STMatSolveHermitianTranspose(st,x,y)); |
161 |
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.
|
1514 | PetscFunctionReturn(PETSC_SUCCESS); |
162 | } | ||
163 | |||
164 | /*@ | ||
165 | STApplyHermitianTranspose - Applies the hermitian-transpose of the operator | ||
166 | to a vector, for instance B^H(A - sB)^-H in the case of the shift-and-invert | ||
167 | transformation and generalized eigenproblem. | ||
168 | |||
169 | Collective | ||
170 | |||
171 | Input Parameters: | ||
172 | + st - the spectral transformation context | ||
173 | - x - input vector | ||
174 | |||
175 | Output Parameter: | ||
176 | . y - output vector | ||
177 | |||
178 | Note: | ||
179 | Currently implemented via STApplyTranspose() with appropriate conjugation. | ||
180 | |||
181 | Level: developer | ||
182 | |||
183 | .seealso: STApply(), STApplyTranspose() | ||
184 | @*/ | ||
185 | 4635 | PetscErrorCode STApplyHermitianTranspose(ST st,Vec x,Vec y) | |
186 | { | ||
187 | 4635 | Mat Op; | |
188 | |||
189 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
4635 | PetscFunctionBegin; |
190 |
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.
|
4635 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
191 |
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.
|
4635 | PetscValidHeaderSpecific(x,VEC_CLASSID,2); |
192 |
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.
|
4635 | PetscValidHeaderSpecific(y,VEC_CLASSID,3); |
193 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
4635 | PetscValidType(st,1); |
194 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
4635 | STCheckMatrices(st,1); |
195 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
4635 | PetscCheck(x!=y,PetscObjectComm((PetscObject)st),PETSC_ERR_ARG_IDN,"x and y must be different vectors"); |
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.
|
4635 | PetscCall(VecSetErrorIfLocked(y,3)); |
197 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4635 | PetscCall(STGetOperator_Private(st,&Op)); |
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.
|
4635 | PetscCall(MatMultHermitianTranspose(Op,x,y)); |
199 |
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.
|
923 | PetscFunctionReturn(PETSC_SUCCESS); |
200 | } | ||
201 | |||
202 | /*@ | ||
203 | STGetBilinearForm - Returns the matrix used in the bilinear form with a | ||
204 | generalized problem with semi-definite B. | ||
205 | |||
206 | Logically Collective | ||
207 | |||
208 | Input Parameters: | ||
209 | . st - the spectral transformation context | ||
210 | |||
211 | Output Parameter: | ||
212 | . B - output matrix | ||
213 | |||
214 | Notes: | ||
215 | The output matrix B must be destroyed after use. It will be NULL in | ||
216 | case of standard eigenproblems. | ||
217 | |||
218 | Level: developer | ||
219 | |||
220 | .seealso: BVSetMatrix() | ||
221 | @*/ | ||
222 | 1513 | PetscErrorCode STGetBilinearForm(ST st,Mat *B) | |
223 | { | ||
224 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1513 | PetscFunctionBegin; |
225 |
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.
|
1513 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
226 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1513 | PetscValidType(st,1); |
227 |
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.
|
1513 | PetscAssertPointer(B,2); |
228 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1513 | STCheckMatrices(st,1); |
229 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
1513 | PetscUseTypeMethod(st,getbilinearform,B); |
230 |
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.
|
293 | PetscFunctionReturn(PETSC_SUCCESS); |
231 | } | ||
232 | |||
233 | 1428 | PetscErrorCode STGetBilinearForm_Default(ST st,Mat *B) | |
234 | { | ||
235 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1428 | PetscFunctionBegin; |
236 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
1428 | if (st->nmat==1) *B = NULL; |
237 | else { | ||
238 | 1428 | *B = st->A[1]; | |
239 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1428 | PetscCall(PetscObjectReference((PetscObject)*B)); |
240 | } | ||
241 |
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.
|
276 | PetscFunctionReturn(PETSC_SUCCESS); |
242 | } | ||
243 | |||
244 | 1245175 | static PetscErrorCode MatMult_STOperator(Mat Op,Vec x,Vec y) | |
245 | { | ||
246 | 1245175 | ST st; | |
247 | |||
248 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1245175 | PetscFunctionBegin; |
249 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1245175 | PetscCall(MatShellGetContext(Op,&st)); |
250 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1245175 | PetscCall(STSetUp(st)); |
251 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1245175 | PetscCall(PetscLogEventBegin(ST_Apply,st,x,y,0)); |
252 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1245175 | if (st->D) { /* with balancing */ |
253 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
7045 | PetscCall(VecPointwiseDivide(st->wb,x,st->D)); |
254 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
7045 | PetscUseTypeMethod(st,apply,st->wb,y); |
255 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
7045 | PetscCall(VecPointwiseMult(y,y,st->D)); |
256 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
1238130 | } else PetscUseTypeMethod(st,apply,x,y); |
257 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1245175 | PetscCall(PetscLogEventEnd(ST_Apply,st,x,y,0)); |
258 |
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.
|
243947 | PetscFunctionReturn(PETSC_SUCCESS); |
259 | } | ||
260 | |||
261 | 8622 | static PetscErrorCode MatMultTranspose_STOperator(Mat Op,Vec x,Vec y) | |
262 | { | ||
263 | 8622 | ST st; | |
264 | |||
265 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
8622 | PetscFunctionBegin; |
266 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8622 | PetscCall(MatShellGetContext(Op,&st)); |
267 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8622 | PetscCall(STSetUp(st)); |
268 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8622 | PetscCall(PetscLogEventBegin(ST_ApplyTranspose,st,x,y,0)); |
269 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 10 times.
|
8622 | if (st->D) { /* with balancing */ |
270 |
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.
|
250 | PetscCall(VecPointwiseMult(st->wb,x,st->D)); |
271 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 4 times.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
250 | PetscUseTypeMethod(st,applytrans,st->wb,y); |
272 |
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.
|
250 | PetscCall(VecPointwiseDivide(y,y,st->D)); |
273 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
8372 | } else PetscUseTypeMethod(st,applytrans,x,y); |
274 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8622 | PetscCall(PetscLogEventEnd(ST_ApplyTranspose,st,x,y,0)); |
275 |
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.
|
1658 | PetscFunctionReturn(PETSC_SUCCESS); |
276 | } | ||
277 | |||
278 | #if defined(PETSC_USE_COMPLEX) | ||
279 | 7528 | static PetscErrorCode MatMultHermitianTranspose_STOperator(Mat Op,Vec x,Vec y) | |
280 | { | ||
281 | 7528 | ST st; | |
282 | |||
283 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
7528 | PetscFunctionBegin; |
284 |
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.
|
7528 | PetscCall(MatShellGetContext(Op,&st)); |
285 |
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.
|
7528 | PetscCall(STSetUp(st)); |
286 |
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.
|
7528 | PetscCall(PetscLogEventBegin(ST_ApplyHermitianTranspose,st,x,y,0)); |
287 |
1/2✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
|
7528 | if (st->ops->applyhermtrans) { |
288 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
7528 | if (st->D) { /* with balancing */ |
289 |
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.
|
250 | PetscCall(VecConjugate(st->D)); |
290 |
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.
|
250 | PetscCall(VecPointwiseMult(st->wb,x,st->D)); |
291 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 4 times.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
250 | PetscUseTypeMethod(st,applyhermtrans,st->wb,y); |
292 |
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.
|
250 | PetscCall(VecPointwiseDivide(y,y,st->D)); |
293 |
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.
|
250 | PetscCall(VecConjugate(st->D)); |
294 |
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.
|
7278 | } else PetscUseTypeMethod(st,applyhermtrans,x,y); |
295 | } else { | ||
296 | ✗ | if (!st->wht) PetscCall(MatCreateVecs(st->A[0],&st->wht,NULL)); | |
297 | ✗ | PetscCall(VecCopy(x,st->wht)); | |
298 | ✗ | PetscCall(VecConjugate(st->wht)); | |
299 | ✗ | if (st->D) { /* with balancing */ | |
300 | ✗ | PetscCall(VecPointwiseMult(st->wb,st->wht,st->D)); | |
301 | ✗ | PetscUseTypeMethod(st,applytrans,st->wb,y); | |
302 | ✗ | PetscCall(VecPointwiseDivide(y,y,st->D)); | |
303 | ✗ | } else PetscUseTypeMethod(st,applytrans,st->wht,y); | |
304 | ✗ | PetscCall(VecConjugate(y)); | |
305 | } | ||
306 |
4/6✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
7528 | PetscCall(PetscLogEventEnd(ST_ApplyHermitianTranspose,st,x,y,0)); |
307 |
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.
|
1590 | PetscFunctionReturn(PETSC_SUCCESS); |
308 | } | ||
309 | #endif | ||
310 | |||
311 | 36549 | static PetscErrorCode MatMatMult_STOperator(Mat Op,Mat B,Mat C,void *ctx) | |
312 | { | ||
313 | 36549 | ST st; | |
314 | |||
315 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
36549 | PetscFunctionBegin; |
316 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
36549 | PetscCall(MatShellGetContext(Op,&st)); |
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.
|
36549 | PetscCall(STSetUp(st)); |
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.
|
36549 | PetscCall(PetscLogEventBegin(ST_Apply,st,B,C,0)); |
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.
|
36549 | PetscCall(STApplyMat_Generic(st,B,C)); |
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.
|
36549 | PetscCall(PetscLogEventEnd(ST_Apply,st,B,C,0)); |
321 |
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.
|
7106 | PetscFunctionReturn(PETSC_SUCCESS); |
322 | } | ||
323 | |||
324 | 632483 | PetscErrorCode STGetOperator_Private(ST st,Mat *Op) | |
325 | { | ||
326 | 632483 | PetscInt m,n,M,N; | |
327 | 632483 | Vec v; | |
328 | 632483 | VecType vtype; | |
329 | |||
330 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
632483 | PetscFunctionBegin; |
331 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
632483 | if (!st->Op) { |
332 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5647 | if (Op) *Op = NULL; |
333 | /* create the shell matrix */ | ||
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.
|
5647 | PetscCall(MatGetLocalSize(st->A[0],&m,&n)); |
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.
|
5647 | PetscCall(MatGetSize(st->A[0],&M,&N)); |
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.
|
5647 | PetscCall(MatCreateShell(PetscObjectComm((PetscObject)st),m,n,M,N,st,&st->Op)); |
337 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
5647 | PetscCall(MatShellSetOperation(st->Op,MATOP_MULT,(PetscErrorCodeFn*)MatMult_STOperator)); |
338 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
5647 | PetscCall(MatShellSetOperation(st->Op,MATOP_MULT_TRANSPOSE,(PetscErrorCodeFn*)MatMultTranspose_STOperator)); |
339 | #if defined(PETSC_USE_COMPLEX) | ||
340 |
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.
|
2738 | PetscCall(MatShellSetOperation(st->Op,MATOP_MULT_HERMITIAN_TRANSPOSE,(PetscErrorCodeFn*)MatMultHermitianTranspose_STOperator)); |
341 | #else | ||
342 |
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.
|
2909 | PetscCall(MatShellSetOperation(st->Op,MATOP_MULT_HERMITIAN_TRANSPOSE,(PetscErrorCodeFn*)MatMultTranspose_STOperator)); |
343 | #endif | ||
344 |
3/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
5647 | if (!st->D && st->ops->apply==STApply_Generic) { |
345 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4982 | PetscCall(MatShellSetMatProductOperation(st->Op,MATPRODUCT_AB,NULL,MatMatMult_STOperator,NULL,MATDENSE,MATDENSE)); |
346 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4982 | PetscCall(MatShellSetMatProductOperation(st->Op,MATPRODUCT_AB,NULL,MatMatMult_STOperator,NULL,MATDENSECUDA,MATDENSECUDA)); |
347 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4982 | PetscCall(MatShellSetMatProductOperation(st->Op,MATPRODUCT_AB,NULL,MatMatMult_STOperator,NULL,MATDENSEHIP,MATDENSEHIP)); |
348 | } | ||
349 | /* make sure the shell matrix generates a vector of the same type as the problem matrices */ | ||
350 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
5647 | PetscCall(MatCreateVecs(st->A[0],&v,NULL)); |
351 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
5647 | PetscCall(VecGetType(v,&vtype)); |
352 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
5647 | PetscCall(MatShellSetVecType(st->Op,vtype)); |
353 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
5647 | PetscCall(VecDestroy(&v)); |
354 | /* build the operator matrices */ | ||
355 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
5647 | PetscCall(STComputeOperator(st)); |
356 | } | ||
357 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
632483 | if (Op) *Op = st->Op; |
358 |
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.
|
126480 | PetscFunctionReturn(PETSC_SUCCESS); |
359 | } | ||
360 | |||
361 | /*@ | ||
362 | STGetOperator - Returns a shell matrix that represents the operator of the | ||
363 | spectral transformation. | ||
364 | |||
365 | Collective | ||
366 | |||
367 | Input Parameter: | ||
368 | . st - the spectral transformation context | ||
369 | |||
370 | Output Parameter: | ||
371 | . Op - operator matrix | ||
372 | |||
373 | Notes: | ||
374 | The operator is defined in linear eigenproblems only, not in polynomial ones, | ||
375 | so the call will fail if more than 2 matrices were passed in STSetMatrices(). | ||
376 | |||
377 | The returned shell matrix is essentially a wrapper to the STApply() and | ||
378 | STApplyTranspose() operations. The operator can often be expressed as | ||
379 | |||
380 | $ Op = D*inv(K)*M*inv(D) | ||
381 | |||
382 | where D is the balancing matrix, and M and K are two matrices corresponding | ||
383 | to the numerator and denominator for spectral transformations that represent | ||
384 | a rational matrix function. In the case of STSHELL, the inner part inv(K)*M | ||
385 | is replaced by the user-provided operation from STShellSetApply(). | ||
386 | |||
387 | The preconditioner matrix K typically depends on the value of the shift, and | ||
388 | its inverse is handled via an internal KSP object. Normal usage does not | ||
389 | require explicitly calling STGetOperator(), but it can be used to force the | ||
390 | creation of K and M, and then K is passed to the KSP. This is useful for | ||
391 | setting options associated with the PCFactor (to set MUMPS options, for instance). | ||
392 | |||
393 | The returned matrix must NOT be destroyed by the user. Instead, when no | ||
394 | longer needed it must be returned with STRestoreOperator(). In particular, | ||
395 | this is required before modifying the ST matrices or the shift. | ||
396 | |||
397 | A NULL pointer can be passed in Op in case the matrix is not required but we | ||
398 | want to force its creation. In this case, STRestoreOperator() should not be | ||
399 | called. | ||
400 | |||
401 | Level: advanced | ||
402 | |||
403 | .seealso: STApply(), STApplyTranspose(), STSetBalanceMatrix(), STShellSetApply(), | ||
404 | STGetKSP(), STSetShift(), STRestoreOperator(), STSetMatrices() | ||
405 | @*/ | ||
406 | 50909 | PetscErrorCode STGetOperator(ST st,Mat *Op) | |
407 | { | ||
408 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
50909 | PetscFunctionBegin; |
409 |
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.
|
50909 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
410 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
50909 | PetscValidType(st,1); |
411 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
50909 | STCheckMatrices(st,1); |
412 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
50909 | STCheckNotSeized(st,1); |
413 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
50909 | PetscCheck(st->nmat<=2,PetscObjectComm((PetscObject)st),PETSC_ERR_ARG_WRONGSTATE,"The operator is not defined in polynomial eigenproblems"); |
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.
|
50909 | PetscCall(STGetOperator_Private(st,Op)); |
415 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
50909 | if (Op) st->opseized = PETSC_TRUE; |
416 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
9810 | PetscFunctionReturn(PETSC_SUCCESS); |
417 | } | ||
418 | |||
419 | /*@ | ||
420 | STRestoreOperator - Restore the previously seized operator matrix. | ||
421 | |||
422 | Logically Collective | ||
423 | |||
424 | Input Parameters: | ||
425 | + st - the spectral transformation context | ||
426 | - Op - operator matrix | ||
427 | |||
428 | Notes: | ||
429 | The arguments must match the corresponding call to STGetOperator(). | ||
430 | |||
431 | Level: advanced | ||
432 | |||
433 | .seealso: STGetOperator() | ||
434 | @*/ | ||
435 | 50584 | PetscErrorCode STRestoreOperator(ST st,Mat *Op) | |
436 | { | ||
437 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
50584 | PetscFunctionBegin; |
438 |
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.
|
50584 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
439 |
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.
|
50584 | PetscAssertPointer(Op,2); |
440 |
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.
|
50584 | PetscValidHeaderSpecific(*Op,MAT_CLASSID,2); |
441 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
50584 | PetscCheck(st->opseized,PetscObjectComm((PetscObject)st),PETSC_ERR_ARG_WRONGSTATE,"Must be called after STGetOperator()"); |
442 | 50584 | *Op = NULL; | |
443 | 50584 | st->opseized = PETSC_FALSE; | |
444 |
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.
|
50584 | PetscFunctionReturn(PETSC_SUCCESS); |
445 | } | ||
446 | |||
447 | /* | ||
448 | STComputeOperator - Computes the matrices that constitute the operator | ||
449 | |||
450 | Op = D*inv(K)*M*inv(D). | ||
451 | |||
452 | K and M are computed here (D is user-provided) from the system matrices | ||
453 | and the shift sigma (whenever these are changed, this function recomputes | ||
454 | K and M). This is used only in linear eigenproblems (nmat<3). | ||
455 | |||
456 | K is the "preconditioner matrix": it is the denominator in rational operators, | ||
457 | e.g. (A-sigma*B) in shift-and-invert. In non-rational transformations such | ||
458 | as STFILTER, K=NULL which means identity. After computing K, it is passed to | ||
459 | the internal KSP object via KSPSetOperators. | ||
460 | |||
461 | M is the numerator in rational operators. If unused it is set to NULL (e.g. | ||
462 | in STPRECOND). | ||
463 | |||
464 | STSHELL does not compute anything here, but sets the flag as if it was ready. | ||
465 | */ | ||
466 | 14382 | PetscErrorCode STComputeOperator(ST st) | |
467 | { | ||
468 | 14382 | PC pc; | |
469 | |||
470 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
14382 | PetscFunctionBegin; |
471 |
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.
|
14382 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
472 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
14382 | PetscValidType(st,1); |
473 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
14382 | if (!st->opready && st->ops->computeoperator) { |
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.
|
8547 | PetscCall(PetscInfo(st,"Building the operator matrices\n")); |
475 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
8547 | STCheckMatrices(st,1); |
476 |
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.
|
8547 | if (!st->T) PetscCall(PetscCalloc1(PetscMax(2,st->nmat),&st->T)); |
477 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8547 | PetscCall(PetscLogEventBegin(ST_ComputeOperator,st,0,0,0)); |
478 |
5/10✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
8547 | PetscUseTypeMethod(st,computeoperator); |
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.
|
8547 | PetscCall(PetscLogEventEnd(ST_ComputeOperator,st,0,0,0)); |
480 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
8547 | if (st->usesksp) { |
481 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
4379 | if (!st->ksp) PetscCall(STGetKSP(st,&st->ksp)); |
482 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4379 | if (st->P) { |
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.
|
4037 | PetscCall(STSetDefaultKSP(st)); |
484 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
4037 | PetscCall(ST_KSPSetOperators(st,st->P,st->Pmat?st->Pmat:st->P)); |
485 | } else { | ||
486 | /* STPRECOND defaults to PCNONE if st->P is empty */ | ||
487 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
342 | PetscCall(KSPGetPC(st->ksp,&pc)); |
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.
|
342 | PetscCall(PCSetType(pc,PCNONE)); |
489 | } | ||
490 | } | ||
491 | } | ||
492 | 14382 | st->opready = PETSC_TRUE; | |
493 |
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.
|
14382 | PetscFunctionReturn(PETSC_SUCCESS); |
494 | } | ||
495 | |||
496 | /*@ | ||
497 | STSetUp - Prepares for the use of a spectral transformation. | ||
498 | |||
499 | Collective | ||
500 | |||
501 | Input Parameter: | ||
502 | . st - the spectral transformation context | ||
503 | |||
504 | Level: advanced | ||
505 | |||
506 | .seealso: STCreate(), STApply(), STDestroy() | ||
507 | @*/ | ||
508 | 1311697 | PetscErrorCode STSetUp(ST st) | |
509 | { | ||
510 | 1311697 | PetscInt i,n,k; | |
511 | |||
512 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1311697 | PetscFunctionBegin; |
513 |
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.
|
1311697 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
514 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1311697 | PetscValidType(st,1); |
515 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1311697 | STCheckMatrices(st,1); |
516 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
|
1311697 | switch (st->state) { |
517 | 10465 | case ST_STATE_INITIAL: | |
518 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10465 | PetscCall(PetscInfo(st,"Setting up new ST\n")); |
519 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
10465 | if (!((PetscObject)st)->type_name) PetscCall(STSetType(st,STSHIFT)); |
520 | break; | ||
521 | 254839 | case ST_STATE_SETUP: | |
522 |
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.
|
254839 | PetscFunctionReturn(PETSC_SUCCESS); |
523 | 533 | case ST_STATE_UPDATED: | |
524 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
533 | PetscCall(PetscInfo(st,"Setting up updated ST\n")); |
525 | break; | ||
526 | } | ||
527 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10998 | PetscCall(PetscLogEventBegin(ST_SetUp,st,0,0,0)); |
528 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
10998 | if (st->state!=ST_STATE_UPDATED) { |
529 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
10465 | if (!(st->nmat<3 && st->opready)) { |
530 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
10200 | if (st->T) { |
531 |
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.
|
2760 | for (i=0;i<PetscMax(2,st->nmat);i++) PetscCall(MatDestroy(&st->T[i])); |
532 | } | ||
533 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10200 | PetscCall(MatDestroy(&st->P)); |
534 | } | ||
535 | } | ||
536 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
10998 | if (st->D) { |
537 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
130 | PetscCall(MatGetLocalSize(st->A[0],NULL,&n)); |
538 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
130 | PetscCall(VecGetLocalSize(st->D,&k)); |
539 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
130 | PetscCheck(n==k,PetscObjectComm((PetscObject)st),PETSC_ERR_ARG_SIZ,"Balance matrix has wrong dimension %" PetscInt_FMT " (should be %" PetscInt_FMT ")",k,n); |
540 |
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.
|
130 | if (!st->wb) PetscCall(VecDuplicate(st->D,&st->wb)); |
541 | } | ||
542 |
8/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
10998 | if (st->nmat<3 && st->transform) PetscCall(STComputeOperator(st)); |
543 | else { | ||
544 |
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.
|
2263 | if (!st->T) PetscCall(PetscCalloc1(PetscMax(2,st->nmat),&st->T)); |
545 | } | ||
546 |
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.
|
10998 | PetscTryTypeMethod(st,setup); |
547 | 10998 | st->state = ST_STATE_SETUP; | |
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.
|
10998 | PetscCall(PetscLogEventEnd(ST_SetUp,st,0,0,0)); |
549 |
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.
|
2132 | PetscFunctionReturn(PETSC_SUCCESS); |
550 | } | ||
551 | |||
552 | /* | ||
553 | Computes coefficients for the transformed polynomial, | ||
554 | and stores the result in argument S. | ||
555 | |||
556 | alpha - value of the parameter of the transformed polynomial | ||
557 | beta - value of the previous shift (only used in inplace mode) | ||
558 | k - index of first matrix included in the computation | ||
559 | coeffs - coefficients of the expansion | ||
560 | initial - true if this is the first time | ||
561 | precond - whether the preconditioner matrix must be computed | ||
562 | */ | ||
563 | 16004 | PetscErrorCode STMatMAXPY_Private(ST st,PetscScalar alpha,PetscScalar beta,PetscInt k,PetscScalar *coeffs,PetscBool initial,PetscBool precond,Mat *S) | |
564 | { | ||
565 | 16004 | PetscInt *matIdx=NULL,nmat,i,ini=-1; | |
566 | 16004 | PetscScalar t=1.0,ta,gamma; | |
567 | 16004 | PetscBool nz=PETSC_FALSE; | |
568 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
16004 | Mat *A=precond?st->Psplit:st->A; |
569 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
16004 | MatStructure str=precond?st->strp:st->str; |
570 | |||
571 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
16004 | PetscFunctionBegin; |
572 | 16004 | nmat = st->nmat-k; | |
573 |
3/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
16004 | switch (st->matmode) { |
574 | 240 | case ST_MATMODE_INPLACE: | |
575 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
240 | PetscCheck(st->nmat<=2,PetscObjectComm((PetscObject)st),PETSC_ERR_SUP,"ST_MATMODE_INPLACE not supported for polynomial eigenproblems"); |
576 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
240 | PetscCheck(!precond,PetscObjectComm((PetscObject)st),PETSC_ERR_SUP,"ST_MATMODE_INPLACE not supported for split preconditioner"); |
577 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
240 | if (initial) { |
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.
|
135 | PetscCall(PetscObjectReference((PetscObject)A[0])); |
579 | 135 | *S = A[0]; | |
580 | 135 | gamma = alpha; | |
581 | 105 | } else gamma = alpha-beta; | |
582 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
240 | if (gamma != 0.0) { |
583 |
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.
|
195 | if (st->nmat>1) PetscCall(MatAXPY(*S,gamma,A[1],str)); |
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.
|
145 | else PetscCall(MatShift(*S,gamma)); |
585 | } | ||
586 | break; | ||
587 | 1090 | case ST_MATMODE_SHELL: | |
588 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1090 | PetscCheck(!precond,PetscObjectComm((PetscObject)st),PETSC_ERR_SUP,"ST_MATMODE_SHELL not supported for split preconditioner"); |
589 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1090 | if (initial) { |
590 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
875 | if (st->nmat>2) { |
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.
|
100 | PetscCall(PetscMalloc1(nmat,&matIdx)); |
592 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
390 | for (i=0;i<nmat;i++) matIdx[i] = k+i; |
593 | } | ||
594 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
875 | PetscCall(STMatShellCreate(st,alpha,nmat,matIdx,coeffs,S)); |
595 |
7/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
875 | if (st->nmat>2) PetscCall(PetscFree(matIdx)); |
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.
|
215 | } else PetscCall(STMatShellShift(*S,alpha)); |
597 | break; | ||
598 | 14674 | case ST_MATMODE_COPY: | |
599 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
14674 | if (coeffs) { |
600 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
5766 | for (i=0;i<nmat && ini==-1;i++) { |
601 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
3372 | if (coeffs[i]!=0.0) ini = i; |
602 | 978 | else t *= alpha; | |
603 | } | ||
604 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
2394 | if (coeffs[ini] != 1.0) nz = PETSC_TRUE; |
605 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
4489 | for (i=ini+1;i<nmat&&!nz;i++) if (coeffs[i]!=0.0) nz = PETSC_TRUE; |
606 | } else { nz = PETSC_TRUE; ini = 0; } | ||
607 |
5/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
14674 | if ((alpha == 0.0 || !nz) && t==1.0) { |
608 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
7045 | PetscCall(PetscObjectReference((PetscObject)A[k+ini])); |
609 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
7045 | PetscCall(MatDestroy(S)); |
610 | 7045 | *S = A[k+ini]; | |
611 | } else { | ||
612 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
7629 | if (*S && *S!=A[k+ini]) { |
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.
|
5263 | PetscCall(MatSetOption(*S,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_FALSE)); |
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.
|
5263 | PetscCall(MatCopy(A[k+ini],*S,DIFFERENT_NONZERO_PATTERN)); |
615 | } else { | ||
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.
|
2366 | PetscCall(MatDestroy(S)); |
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.
|
2366 | PetscCall(MatDuplicate(A[k+ini],MAT_COPY_VALUES,S)); |
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.
|
2366 | PetscCall(MatSetOption(*S,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_FALSE)); |
619 | } | ||
620 |
3/10✓ 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.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
|
7629 | if (coeffs && coeffs[ini]!=1.0) PetscCall(MatScale(*S,coeffs[ini])); |
621 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
17778 | for (i=ini+k+1;i<PetscMax(2,st->nmat);i++) { |
622 | 10149 | t *= alpha; | |
623 | 10149 | ta = t; | |
624 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
10149 | if (coeffs) ta *= coeffs[i-k]; |
625 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
10149 | if (ta!=0.0) { |
626 |
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.
|
10139 | if (st->nmat>1) PetscCall(MatAXPY(*S,ta,A[i],str)); |
627 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10149 | else PetscCall(MatShift(*S,ta)); |
628 | } | ||
629 | } | ||
630 | } | ||
631 | } | ||
632 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
16004 | PetscCall(MatSetOption(*S,MAT_SYMMETRIC,st->asymm)); |
633 |
9/10✓ Branch 0 taken 6 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 3 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✓ Branch 5 taken 3 times.
✓ Branch 6 taken 1 times.
✓ Branch 7 taken 1 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 1 times.
|
19223 | PetscCall(MatSetOption(*S,MAT_HERMITIAN,(PetscImaginaryPart(st->sigma)==0.0)?st->aherm:PETSC_FALSE)); |
634 |
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.
|
3147 | PetscFunctionReturn(PETSC_SUCCESS); |
635 | } | ||
636 | |||
637 | /* | ||
638 | Computes the values of the coefficients required by STMatMAXPY_Private | ||
639 | for the case of monomial basis. | ||
640 | */ | ||
641 | 419 | PetscErrorCode STCoeffs_Monomial(ST st, PetscScalar *coeffs) | |
642 | { | ||
643 | 419 | PetscInt k,i,ini,inip; | |
644 | |||
645 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
419 | PetscFunctionBegin; |
646 | /* Compute binomial coefficients */ | ||
647 | 419 | ini = (st->nmat*(st->nmat-1))/2; | |
648 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1776 | for (i=0;i<st->nmat;i++) coeffs[ini+i]=1.0; |
649 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1357 | for (k=st->nmat-1;k>=1;k--) { |
650 | 938 | inip = ini+1; | |
651 | 938 | ini = (k*(k-1))/2; | |
652 | 938 | coeffs[ini] = 1.0; | |
653 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1557 | for (i=1;i<k;i++) coeffs[ini+i] = coeffs[ini+i-1]+coeffs[inip+i-1]; |
654 | } | ||
655 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
419 | PetscFunctionReturn(PETSC_SUCCESS); |
656 | } | ||
657 | |||
658 | /*@ | ||
659 | STPostSolve - Optional post-solve phase, intended for any actions that must | ||
660 | be performed on the ST object after the eigensolver has finished. | ||
661 | |||
662 | Collective | ||
663 | |||
664 | Input Parameters: | ||
665 | . st - the spectral transformation context | ||
666 | |||
667 | Level: developer | ||
668 | |||
669 | .seealso: EPSSolve() | ||
670 | @*/ | ||
671 | 11373 | PetscErrorCode STPostSolve(ST st) | |
672 | { | ||
673 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
11373 | PetscFunctionBegin; |
674 |
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.
|
11373 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
675 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
11373 | PetscValidType(st,1); |
676 |
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.
|
11373 | PetscTryTypeMethod(st,postsolve); |
677 |
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.
|
2198 | PetscFunctionReturn(PETSC_SUCCESS); |
678 | } | ||
679 | |||
680 | /*@ | ||
681 | STBackTransform - Back-transformation phase, intended for | ||
682 | spectral transformations which require to transform the computed | ||
683 | eigenvalues back to the original eigenvalue problem. | ||
684 | |||
685 | Not Collective | ||
686 | |||
687 | Input Parameters: | ||
688 | + st - the spectral transformation context | ||
689 | . n - number of eigenvalues | ||
690 | . eigr - real part of a computed eigenvalues | ||
691 | - eigi - imaginary part of a computed eigenvalues | ||
692 | |||
693 | Level: developer | ||
694 | |||
695 | .seealso: STIsInjective() | ||
696 | @*/ | ||
697 | 19508030 | PetscErrorCode STBackTransform(ST st,PetscInt n,PetscScalar* eigr,PetscScalar* eigi) | |
698 | { | ||
699 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
19508030 | PetscFunctionBegin; |
700 |
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.
|
19508030 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
701 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
19508030 | PetscValidType(st,1); |
702 |
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.
|
19508030 | PetscTryTypeMethod(st,backtransform,n,eigr,eigi); |
703 |
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.
|
3903134 | PetscFunctionReturn(PETSC_SUCCESS); |
704 | } | ||
705 | |||
706 | /*@ | ||
707 | STIsInjective - Ask if this spectral transformation is injective or not | ||
708 | (that is, if it corresponds to a one-to-one mapping). If not, then it | ||
709 | does not make sense to call STBackTransform(). | ||
710 | |||
711 | Not Collective | ||
712 | |||
713 | Input Parameter: | ||
714 | . st - the spectral transformation context | ||
715 | |||
716 | Output Parameter: | ||
717 | . is - the answer | ||
718 | |||
719 | Level: developer | ||
720 | |||
721 | .seealso: STBackTransform() | ||
722 | @*/ | ||
723 | 7425 | PetscErrorCode STIsInjective(ST st,PetscBool* is) | |
724 | { | ||
725 | 7425 | PetscBool shell; | |
726 | |||
727 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
7425 | PetscFunctionBegin; |
728 |
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.
|
7425 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
729 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
7425 | PetscValidType(st,1); |
730 |
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.
|
7425 | PetscAssertPointer(is,2); |
731 | |||
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.
|
7425 | PetscCall(PetscObjectTypeCompare((PetscObject)st,STSHELL,&shell)); |
733 |
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.
|
7425 | if (shell) PetscCall(STIsInjective_Shell(st,is)); |
734 | 7094 | else *is = st->ops->backtransform? PETSC_TRUE: PETSC_FALSE; | |
735 |
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.
|
1402 | PetscFunctionReturn(PETSC_SUCCESS); |
736 | } | ||
737 | |||
738 | /*@ | ||
739 | STMatSetUp - Build the preconditioner matrix used in STMatSolve(). | ||
740 | |||
741 | Collective | ||
742 | |||
743 | Input Parameters: | ||
744 | + st - the spectral transformation context | ||
745 | . sigma - the shift | ||
746 | - coeffs - the coefficients (may be NULL) | ||
747 | |||
748 | Note: | ||
749 | This function is not intended to be called by end users, but by SLEPc | ||
750 | solvers that use ST. It builds matrix st->P as follows, then calls KSPSetUp(). | ||
751 | .vb | ||
752 | If (coeffs) st->P = Sum_{i=0..nmat-1} coeffs[i]*sigma^i*A_i | ||
753 | else st->P = Sum_{i=0..nmat-1} sigma^i*A_i | ||
754 | .ve | ||
755 | |||
756 | Level: developer | ||
757 | |||
758 | .seealso: STMatSolve() | ||
759 | @*/ | ||
760 | 1526 | PetscErrorCode STMatSetUp(ST st,PetscScalar sigma,PetscScalar *coeffs) | |
761 | { | ||
762 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1526 | PetscFunctionBegin; |
763 |
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.
|
1526 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
764 |
30/68✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✓ 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 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✓ Branch 22 taken 2 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✓ Branch 26 taken 2 times.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✓ Branch 30 taken 2 times.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✓ Branch 33 taken 2 times.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✓ Branch 36 taken 2 times.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✓ Branch 39 taken 2 times.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 2 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 46 not taken.
✓ Branch 47 taken 2 times.
✓ Branch 48 taken 2 times.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 51 taken 2 times.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✓ Branch 54 taken 2 times.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✓ Branch 57 taken 2 times.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 60 taken 2 times.
✗ Branch 61 not taken.
✓ Branch 62 taken 2 times.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✓ Branch 65 taken 2 times.
✗ Branch 66 not taken.
✗ Branch 67 not taken.
|
1526 | PetscValidLogicalCollectiveScalar(st,sigma,2); |
765 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1526 | STCheckMatrices(st,1); |
766 | |||
767 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1526 | PetscCall(PetscLogEventBegin(ST_MatSetUp,st,0,0,0)); |
768 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1526 | PetscCall(STMatMAXPY_Private(st,sigma,0.0,0,coeffs,PETSC_TRUE,PETSC_FALSE,&st->P)); |
769 |
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.
|
1526 | if (st->Psplit) PetscCall(STMatMAXPY_Private(st,sigma,0.0,0,coeffs,PETSC_TRUE,PETSC_TRUE,&st->Pmat)); |
770 |
7/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
1526 | PetscCall(ST_KSPSetOperators(st,st->P,st->Pmat?st->Pmat:st->P)); |
771 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1526 | PetscCall(KSPSetUp(st->ksp)); |
772 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1526 | PetscCall(PetscLogEventEnd(ST_MatSetUp,st,0,0,0)); |
773 |
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.
|
298 | PetscFunctionReturn(PETSC_SUCCESS); |
774 | } | ||
775 | |||
776 | /*@ | ||
777 | STSetWorkVecs - Sets a number of work vectors into the ST object. | ||
778 | |||
779 | Collective | ||
780 | |||
781 | Input Parameters: | ||
782 | + st - the spectral transformation context | ||
783 | - nw - number of work vectors to allocate | ||
784 | |||
785 | Developer Notes: | ||
786 | This is SLEPC_EXTERN because it may be required by shell STs. | ||
787 | |||
788 | Level: developer | ||
789 | |||
790 | .seealso: STMatCreateVecs() | ||
791 | @*/ | ||
792 | 4005 | PetscErrorCode STSetWorkVecs(ST st,PetscInt nw) | |
793 | { | ||
794 | 4005 | PetscInt i; | |
795 | |||
796 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
4005 | PetscFunctionBegin; |
797 |
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.
|
4005 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
798 |
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.
|
4005 | PetscValidLogicalCollectiveInt(st,nw,2); |
799 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
4005 | PetscCheck(nw>0,PetscObjectComm((PetscObject)st),PETSC_ERR_ARG_OUTOFRANGE,"nw must be > 0: nw = %" PetscInt_FMT,nw); |
800 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4005 | if (st->nwork < nw) { |
801 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
3785 | PetscCall(VecDestroyVecs(st->nwork,&st->work)); |
802 | 3785 | st->nwork = nw; | |
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.
|
3785 | PetscCall(PetscMalloc1(nw,&st->work)); |
804 |
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.
|
8012 | for (i=0;i<nw;i++) PetscCall(STMatCreateVecs(st,&st->work[i],NULL)); |
805 | } | ||
806 |
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.
|
776 | PetscFunctionReturn(PETSC_SUCCESS); |
807 | } | ||
808 |