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 | Implements the ST class for preconditioned eigenvalue methods | ||
12 | */ | ||
13 | |||
14 | #include <slepc/private/stimpl.h> /*I "slepcst.h" I*/ | ||
15 | |||
16 | typedef struct { | ||
17 | PetscBool ksphasmat; /* the KSP must have the same matrix as PC */ | ||
18 | } ST_PRECOND; | ||
19 | |||
20 | 2851 | static PetscErrorCode STSetDefaultKSP_Precond(ST st) | |
21 | { | ||
22 | 2851 | PC pc; | |
23 | 2851 | PCType pctype; | |
24 | 2851 | PetscBool t0,t1; | |
25 | |||
26 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2851 | PetscFunctionBegin; |
27 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2851 | PetscCall(KSPGetPC(st->ksp,&pc)); |
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.
|
2851 | PetscCall(PCGetType(pc,&pctype)); |
29 |
5/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✗ Branch 5 not taken.
|
2851 | if (!pctype && st->A && st->A[0]) { |
30 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
990 | if (st->matmode == ST_MATMODE_SHELL) PetscCall(PCSetType(pc,PCJACOBI)); |
31 | else { | ||
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.
|
970 | PetscCall(MatHasOperation(st->A[0],MATOP_DUPLICATE,&t0)); |
33 |
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.
|
970 | if (st->nmat>1) PetscCall(MatHasOperation(st->A[0],MATOP_AXPY,&t1)); |
34 | 724 | else t1 = PETSC_TRUE; | |
35 |
7/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
970 | PetscCall(PCSetType(pc,(t0 && t1)?PCBJACOBI:PCNONE)); |
36 | } | ||
37 | } | ||
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.
|
2851 | PetscCall(KSPSetErrorIfNotConverged(st->ksp,PETSC_FALSE)); |
39 |
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.
|
591 | PetscFunctionReturn(PETSC_SUCCESS); |
40 | } | ||
41 | |||
42 | 1990 | static PetscErrorCode STPostSolve_Precond(ST st) | |
43 | { | ||
44 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1990 | PetscFunctionBegin; |
45 |
4/8✓ 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 taken 10 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
1990 | if (st->matmode == ST_MATMODE_INPLACE && !(st->Pmat || (PetscAbsScalar(st->sigma)>=PETSC_MAX_REAL && st->nmat>1))) { |
46 |
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.
|
10 | if (st->nmat>1) PetscCall(MatAXPY(st->A[0],st->sigma,st->A[1],st->str)); |
47 |
4/6✓ Branch 0 taken 2 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 | else PetscCall(MatShift(st->A[0],st->sigma)); |
48 | 10 | st->Astate[0] = ((PetscObject)st->A[0])->state; | |
49 | 10 | st->state = ST_STATE_INITIAL; | |
50 | 10 | st->opready = PETSC_FALSE; | |
51 | } | ||
52 |
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.
|
408 | PetscFunctionReturn(PETSC_SUCCESS); |
53 | } | ||
54 | |||
55 | /* | ||
56 | Operator (precond): | ||
57 | Op P M | ||
58 | if nmat=1: --- A-sI NULL | ||
59 | if nmat=2: --- A-sB NULL | ||
60 | */ | ||
61 | 1727 | static PetscErrorCode STComputeOperator_Precond(ST st) | |
62 | { | ||
63 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1727 | PetscFunctionBegin; |
64 | /* if the user did not set the shift, use the target value */ | ||
65 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1727 | if (!st->sigma_set) st->sigma = st->defsigma; |
66 | 1727 | st->M = NULL; | |
67 | |||
68 | /* build custom preconditioner from the split matrices */ | ||
69 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1727 | if (st->Psplit) { |
70 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
30 | if (!(PetscAbsScalar(st->sigma) < PETSC_MAX_REAL) && st->nmat>1) { |
71 | ✗ | PetscCall(PetscObjectReference((PetscObject)st->Psplit[0])); | |
72 | ✗ | PetscCall(MatDestroy(&st->Pmat)); | |
73 | ✗ | st->Pmat = st->Psplit[0]; | |
74 |
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.
|
30 | } else if (PetscAbsScalar(st->sigma)<PETSC_MAX_REAL) PetscCall(STMatMAXPY_Private(st,-st->sigma,0.0,0,NULL,PETSC_TRUE,PETSC_TRUE,&st->Pmat)); |
75 | } | ||
76 | |||
77 | /* P = A-sigma*B */ | ||
78 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1727 | if (st->Pmat) { |
79 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
210 | PetscCall(PetscObjectReference((PetscObject)st->Pmat)); |
80 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
210 | PetscCall(MatDestroy(&st->P)); |
81 | 210 | st->P = st->Pmat; | |
82 | } else { | ||
83 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1517 | PetscCall(PetscObjectReference((PetscObject)st->A[1])); |
84 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1517 | PetscCall(MatDestroy(&st->T[0])); |
85 | 1517 | st->T[0] = st->A[1]; | |
86 |
4/4✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
|
1517 | if (!(PetscAbsScalar(st->sigma) < PETSC_MAX_REAL) && st->nmat>1) { |
87 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
92 | PetscCall(PetscObjectReference((PetscObject)st->T[0])); |
88 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
92 | PetscCall(MatDestroy(&st->P)); |
89 | 92 | st->P = st->T[0]; | |
90 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1425 | } else if (PetscAbsScalar(st->sigma)<PETSC_MAX_REAL) { |
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.
|
1083 | PetscCall(STMatMAXPY_Private(st,-st->sigma,0.0,0,NULL,PetscNot(st->state==ST_STATE_UPDATED),PETSC_FALSE,&st->T[1])); |
92 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1083 | PetscCall(PetscObjectReference((PetscObject)st->T[1])); |
93 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1083 | PetscCall(MatDestroy(&st->P)); |
94 | 1083 | st->P = st->T[1]; | |
95 | } | ||
96 | } | ||
97 |
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.
|
357 | PetscFunctionReturn(PETSC_SUCCESS); |
98 | } | ||
99 | |||
100 | 1842 | static PetscErrorCode STSetUp_Precond(ST st) | |
101 | { | ||
102 | 1842 | ST_PRECOND *ctx = (ST_PRECOND*)st->data; | |
103 | |||
104 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1842 | PetscFunctionBegin; |
105 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1842 | if (st->P) { |
106 |
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.
|
2148 | PetscCall(ST_KSPSetOperators(st,ctx->ksphasmat?st->P:NULL,st->P)); |
107 | /* NOTE: we do not call KSPSetUp() here because some eigensolvers such as JD require a lazy setup */ | ||
108 | } | ||
109 |
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.
|
380 | PetscFunctionReturn(PETSC_SUCCESS); |
110 | } | ||
111 | |||
112 | 30 | static PetscErrorCode STSetShift_Precond(ST st,PetscScalar newshift) | |
113 | { | ||
114 | 30 | ST_PRECOND *ctx = (ST_PRECOND*)st->data; | |
115 | |||
116 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
30 | PetscFunctionBegin; |
117 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
30 | if (st->Psplit) { /* update custom preconditioner from the split matrices */ |
118 | ✗ | if (PetscAbsScalar(st->sigma)<PETSC_MAX_REAL || st->nmat==1) PetscCall(STMatMAXPY_Private(st,-st->sigma,0.0,0,NULL,PETSC_FALSE,PETSC_TRUE,&st->Pmat)); | |
119 | } | ||
120 |
2/4✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
|
30 | if (st->transform && !st->Pmat) { |
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.
|
30 | PetscCall(STMatMAXPY_Private(st,-newshift,-st->sigma,0,NULL,PETSC_FALSE,PETSC_FALSE,&st->T[1])); |
122 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
30 | if (st->P!=st->T[1]) { |
123 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PetscObjectReference((PetscObject)st->T[1])); |
124 |
4/6✓ Branch 0 taken 2 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(MatDestroy(&st->P)); |
125 | 10 | st->P = st->T[1]; | |
126 | } | ||
127 | } | ||
128 |
6/10✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ 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.
|
60 | if (st->P) PetscCall(ST_KSPSetOperators(st,ctx->ksphasmat?st->P:NULL,st->P)); |
129 |
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.
|
6 | PetscFunctionReturn(PETSC_SUCCESS); |
130 | } | ||
131 | |||
132 | 1276 | static PetscErrorCode STPrecondSetKSPHasMat_Precond(ST st,PetscBool ksphasmat) | |
133 | { | ||
134 | 1276 | ST_PRECOND *ctx = (ST_PRECOND*)st->data; | |
135 | |||
136 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1276 | PetscFunctionBegin; |
137 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1276 | if (ctx->ksphasmat != ksphasmat) { |
138 | 777 | ctx->ksphasmat = ksphasmat; | |
139 | 777 | st->state = ST_STATE_INITIAL; | |
140 | } | ||
141 |
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.
|
1276 | PetscFunctionReturn(PETSC_SUCCESS); |
142 | } | ||
143 | |||
144 | /*@ | ||
145 | STPrecondSetKSPHasMat - Sets a flag indicating that during STSetUp the coefficient | ||
146 | matrix of the KSP linear solver (A) must be set to be the same matrix as the | ||
147 | preconditioner (P). | ||
148 | |||
149 | Collective | ||
150 | |||
151 | Input Parameters: | ||
152 | + st - the spectral transformation context | ||
153 | - ksphasmat - the flag | ||
154 | |||
155 | Notes: | ||
156 | Often, the preconditioner matrix is used only in the PC object, but | ||
157 | in some solvers this matrix must be provided also as the A-matrix in | ||
158 | the KSP object. | ||
159 | |||
160 | Level: developer | ||
161 | |||
162 | .seealso: STPrecondGetKSPHasMat(), STSetShift() | ||
163 | @*/ | ||
164 | 1296 | PetscErrorCode STPrecondSetKSPHasMat(ST st,PetscBool ksphasmat) | |
165 | { | ||
166 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1296 | PetscFunctionBegin; |
167 |
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.
|
1296 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
168 |
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.
|
1296 | PetscValidLogicalCollectiveBool(st,ksphasmat,2); |
169 |
10/14✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
✓ Branch 8 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.
|
1296 | PetscTryMethod(st,"STPrecondSetKSPHasMat_C",(ST,PetscBool),(st,ksphasmat)); |
170 |
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.
|
1296 | PetscFunctionReturn(PETSC_SUCCESS); |
171 | } | ||
172 | |||
173 | 20 | static PetscErrorCode STPrecondGetKSPHasMat_Precond(ST st,PetscBool *ksphasmat) | |
174 | { | ||
175 | 20 | ST_PRECOND *ctx = (ST_PRECOND*)st->data; | |
176 | |||
177 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
178 | 20 | *ksphasmat = ctx->ksphasmat; | |
179 |
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.
|
20 | PetscFunctionReturn(PETSC_SUCCESS); |
180 | } | ||
181 | |||
182 | /*@ | ||
183 | STPrecondGetKSPHasMat - Returns the flag indicating if the coefficient | ||
184 | matrix of the KSP linear system (A) is set to be the same matrix as the | ||
185 | preconditioner (P). | ||
186 | |||
187 | Not Collective | ||
188 | |||
189 | Input Parameter: | ||
190 | . st - the spectral transformation context | ||
191 | |||
192 | Output Parameter: | ||
193 | . ksphasmat - the flag | ||
194 | |||
195 | Level: developer | ||
196 | |||
197 | .seealso: STPrecondSetKSPHasMat(), STSetShift() | ||
198 | @*/ | ||
199 | 20 | PetscErrorCode STPrecondGetKSPHasMat(ST st,PetscBool *ksphasmat) | |
200 | { | ||
201 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
202 |
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.
|
20 | PetscValidHeaderSpecific(st,ST_CLASSID,1); |
203 |
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.
|
20 | PetscAssertPointer(ksphasmat,2); |
204 |
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.
|
20 | PetscUseMethod(st,"STPrecondGetKSPHasMat_C",(ST,PetscBool*),(st,ksphasmat)); |
205 |
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.
|
20 | PetscFunctionReturn(PETSC_SUCCESS); |
206 | } | ||
207 | |||
208 | 1522 | static PetscErrorCode STDestroy_Precond(ST st) | |
209 | { | ||
210 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1522 | PetscFunctionBegin; |
211 |
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.
|
1522 | PetscCall(PetscFree(st->data)); |
212 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1522 | PetscCall(PetscObjectComposeFunction((PetscObject)st,"STPrecondGetKSPHasMat_C",NULL)); |
213 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1522 | PetscCall(PetscObjectComposeFunction((PetscObject)st,"STPrecondSetKSPHasMat_C",NULL)); |
214 |
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.
|
316 | PetscFunctionReturn(PETSC_SUCCESS); |
215 | } | ||
216 | |||
217 | 1522 | SLEPC_EXTERN PetscErrorCode STCreate_Precond(ST st) | |
218 | { | ||
219 | 1522 | ST_PRECOND *ctx; | |
220 | |||
221 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1522 | PetscFunctionBegin; |
222 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1522 | PetscCall(PetscNew(&ctx)); |
223 | 1522 | st->data = (void*)ctx; | |
224 | |||
225 | 1522 | st->usesksp = PETSC_TRUE; | |
226 | |||
227 | 1522 | st->ops->apply = STApply_Generic; | |
228 | 1522 | st->ops->applymat = STApplyMat_Generic; | |
229 | 1522 | st->ops->applytrans = STApplyTranspose_Generic; | |
230 | 1522 | st->ops->applyhermtrans = STApplyHermitianTranspose_Generic; | |
231 | 1522 | st->ops->setshift = STSetShift_Precond; | |
232 | 1522 | st->ops->getbilinearform = STGetBilinearForm_Default; | |
233 | 1522 | st->ops->setup = STSetUp_Precond; | |
234 | 1522 | st->ops->computeoperator = STComputeOperator_Precond; | |
235 | 1522 | st->ops->postsolve = STPostSolve_Precond; | |
236 | 1522 | st->ops->destroy = STDestroy_Precond; | |
237 | 1522 | st->ops->setdefaultksp = STSetDefaultKSP_Precond; | |
238 | |||
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.
|
1522 | PetscCall(PetscObjectComposeFunction((PetscObject)st,"STPrecondGetKSPHasMat_C",STPrecondGetKSPHasMat_Precond)); |
240 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1522 | PetscCall(PetscObjectComposeFunction((PetscObject)st,"STPrecondSetKSPHasMat_C",STPrecondSetKSPHasMat_Precond)); |
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.
|
316 | PetscFunctionReturn(PETSC_SUCCESS); |
242 | } | ||
243 |