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 | MFN routines related to the solution process | ||
12 | */ | ||
13 | |||
14 | #include <slepc/private/mfnimpl.h> /*I "slepcmfn.h" I*/ | ||
15 | |||
16 | 1048 | static PetscErrorCode MFNSolve_Private(MFN mfn,Vec b,Vec x) | |
17 | { | ||
18 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1048 | PetscFunctionBegin; |
19 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1048 | PetscCall(VecSetErrorIfLocked(x,3)); |
20 | |||
21 | /* call setup */ | ||
22 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1048 | PetscCall(MFNSetUp(mfn)); |
23 | 1048 | mfn->its = 0; | |
24 | |||
25 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1048 | PetscCall(MFNViewFromOptions(mfn,NULL,"-mfn_view_pre")); |
26 | |||
27 | /* check nonzero right-hand side */ | ||
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.
|
1048 | PetscCall(VecNorm(b,NORM_2,&mfn->bnorm)); |
29 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1048 | PetscCheck(mfn->bnorm,PetscObjectComm((PetscObject)mfn),PETSC_ERR_ARG_WRONG,"Cannot pass a zero b vector to MFNSolve()"); |
30 | |||
31 | /* call solver */ | ||
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.
|
1048 | PetscCall(PetscLogEventBegin(MFN_Solve,mfn,b,x,0)); |
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.
|
1048 | if (b!=x) PetscCall(VecLockReadPush(b)); |
34 |
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.
|
1048 | PetscUseTypeMethod(mfn,solve,b,x); |
35 |
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.
|
1048 | if (b!=x) PetscCall(VecLockReadPop(b)); |
36 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1048 | PetscCall(PetscLogEventEnd(MFN_Solve,mfn,b,x,0)); |
37 | |||
38 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
1048 | PetscCheck(mfn->reason,PetscObjectComm((PetscObject)mfn),PETSC_ERR_PLIB,"Internal error, solver returned without setting converged reason"); |
39 | |||
40 |
3/6✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
1048 | PetscCheck(!mfn->errorifnotconverged || mfn->reason>=0,PetscObjectComm((PetscObject)mfn),PETSC_ERR_NOT_CONVERGED,"MFNSolve has not converged"); |
41 | |||
42 | /* various viewers */ | ||
43 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1048 | PetscCall(MFNViewFromOptions(mfn,NULL,"-mfn_view")); |
44 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1048 | PetscCall(MFNConvergedReasonViewFromOptions(mfn)); |
45 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1048 | PetscCall(MatViewFromOptions(mfn->A,(PetscObject)mfn,"-mfn_view_mat")); |
46 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1048 | PetscCall(VecViewFromOptions(b,(PetscObject)mfn,"-mfn_view_rhs")); |
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.
|
1048 | PetscCall(VecViewFromOptions(x,(PetscObject)mfn,"-mfn_view_solution")); |
48 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
205 | PetscFunctionReturn(PETSC_SUCCESS); |
49 | } | ||
50 | |||
51 | /*@ | ||
52 | MFNSolve - Solves the matrix function problem. Given a vector b, the | ||
53 | vector x = f(A)*b is returned. | ||
54 | |||
55 | Collective | ||
56 | |||
57 | Input Parameters: | ||
58 | + mfn - matrix function context obtained from MFNCreate() | ||
59 | - b - the right hand side vector | ||
60 | |||
61 | Output Parameter: | ||
62 | . x - the solution (this may be the same vector as b, then b will be | ||
63 | overwritten with the answer) | ||
64 | |||
65 | Options Database Keys: | ||
66 | + -mfn_view - print information about the solver used | ||
67 | . -mfn_view_mat binary - save the matrix to the default binary viewer | ||
68 | . -mfn_view_rhs binary - save right hand side vector to the default binary viewer | ||
69 | . -mfn_view_solution binary - save computed solution vector to the default binary viewer | ||
70 | - -mfn_converged_reason - print reason for convergence, and number of iterations | ||
71 | |||
72 | Notes: | ||
73 | The matrix A is specified with MFNSetOperator(). | ||
74 | The function f is specified with MFNSetFN(). | ||
75 | |||
76 | Level: beginner | ||
77 | |||
78 | .seealso: MFNCreate(), MFNSetUp(), MFNDestroy(), MFNSetTolerances(), | ||
79 | MFNSetOperator(), MFNSetFN() | ||
80 | @*/ | ||
81 | 1036 | PetscErrorCode MFNSolve(MFN mfn,Vec b,Vec x) | |
82 | { | ||
83 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1036 | PetscFunctionBegin; |
84 |
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.
|
1036 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
85 |
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.
|
1036 | PetscValidHeaderSpecific(b,VEC_CLASSID,2); |
86 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
1036 | PetscCheckSameComm(mfn,1,b,2); |
87 |
5/18✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
|
1036 | if (b!=x) PetscValidHeaderSpecific(x,VEC_CLASSID,3); |
88 |
15/34✓ Branch 0 taken 2 times.
✓ 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 not taken.
✓ Branch 13 taken 2 times.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
|
1036 | if (b!=x) PetscCheckSameComm(mfn,1,x,3); |
89 | 1036 | mfn->transpose_solve = PETSC_FALSE; | |
90 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1036 | PetscCall(MFNSolve_Private(mfn,b,x)); |
91 |
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.
|
201 | PetscFunctionReturn(PETSC_SUCCESS); |
92 | } | ||
93 | |||
94 | /*@ | ||
95 | MFNSolveTranspose - Solves the transpose matrix function problem. Given a vector b, | ||
96 | the vector x = f(A^T)*b is returned. | ||
97 | |||
98 | Collective | ||
99 | |||
100 | Input Parameters: | ||
101 | + mfn - matrix function context obtained from MFNCreate() | ||
102 | - b - the right hand side vector | ||
103 | |||
104 | Output Parameter: | ||
105 | . x - the solution (this may be the same vector as b, then b will be | ||
106 | overwritten with the answer) | ||
107 | |||
108 | Note: | ||
109 | See available options at MFNSolve(). | ||
110 | |||
111 | Level: beginner | ||
112 | |||
113 | .seealso: MFNSolve() | ||
114 | @*/ | ||
115 | 12 | PetscErrorCode MFNSolveTranspose(MFN mfn,Vec b,Vec x) | |
116 | { | ||
117 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
12 | PetscFunctionBegin; |
118 |
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.
|
12 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
119 |
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.
|
12 | PetscValidHeaderSpecific(b,VEC_CLASSID,2); |
120 |
13/32✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✓ Branch 12 taken 2 times.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✓ Branch 21 taken 2 times.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 2 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✓ Branch 29 taken 2 times.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
|
12 | PetscCheckSameComm(mfn,1,b,2); |
121 |
4/18✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
|
12 | if (b!=x) PetscValidHeaderSpecific(x,VEC_CLASSID,3); |
122 |
14/34✓ 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 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
|
12 | if (b!=x) PetscCheckSameComm(mfn,1,x,3); |
123 | 12 | mfn->transpose_solve = PETSC_TRUE; | |
124 |
5/8✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
12 | if (!mfn->AT) PetscCall(MatCreateTranspose(mfn->A,&mfn->AT)); |
125 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
12 | PetscCall(MFNSolve_Private(mfn,b,x)); |
126 |
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.
|
4 | PetscFunctionReturn(PETSC_SUCCESS); |
127 | } | ||
128 | |||
129 | /*@ | ||
130 | MFNGetIterationNumber - Gets the current iteration number. If the | ||
131 | call to MFNSolve() is complete, then it returns the number of iterations | ||
132 | carried out by the solution method. | ||
133 | |||
134 | Not Collective | ||
135 | |||
136 | Input Parameter: | ||
137 | . mfn - the matrix function context | ||
138 | |||
139 | Output Parameter: | ||
140 | . its - number of iterations | ||
141 | |||
142 | Note: | ||
143 | During the i-th iteration this call returns i-1. If MFNSolve() is | ||
144 | complete, then parameter "its" contains either the iteration number at | ||
145 | which convergence was successfully reached, or failure was detected. | ||
146 | Call MFNGetConvergedReason() to determine if the solver converged or | ||
147 | failed and why. | ||
148 | |||
149 | Level: intermediate | ||
150 | |||
151 | .seealso: MFNGetConvergedReason(), MFNSetTolerances() | ||
152 | @*/ | ||
153 | 102 | PetscErrorCode MFNGetIterationNumber(MFN mfn,PetscInt *its) | |
154 | { | ||
155 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
102 | PetscFunctionBegin; |
156 |
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.
|
102 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
157 |
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.
|
102 | PetscAssertPointer(its,2); |
158 | 102 | *its = mfn->its; | |
159 |
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.
|
102 | PetscFunctionReturn(PETSC_SUCCESS); |
160 | } | ||
161 | |||
162 | /*@ | ||
163 | MFNGetConvergedReason - Gets the reason why the MFNSolve() iteration was | ||
164 | stopped. | ||
165 | |||
166 | Not Collective | ||
167 | |||
168 | Input Parameter: | ||
169 | . mfn - the matrix function context | ||
170 | |||
171 | Output Parameter: | ||
172 | . reason - negative value indicates diverged, positive value converged | ||
173 | |||
174 | Notes: | ||
175 | |||
176 | Possible values for reason are | ||
177 | + MFN_CONVERGED_TOL - converged up to tolerance | ||
178 | . MFN_CONVERGED_ITS - solver completed the requested number of steps | ||
179 | . MFN_DIVERGED_ITS - required more than max_it iterations to reach convergence | ||
180 | - MFN_DIVERGED_BREAKDOWN - generic breakdown in method | ||
181 | |||
182 | Can only be called after the call to MFNSolve() is complete. | ||
183 | |||
184 | Basic solvers (e.g. unrestarted Krylov iterations) cannot determine if the | ||
185 | computation is accurate up to the requested tolerance. In that case, the | ||
186 | converged reason is set to MFN_CONVERGED_ITS if the requested number of steps | ||
187 | (for instance, the ncv value in unrestarted Krylov methods) have been | ||
188 | completed successfully. | ||
189 | |||
190 | Level: intermediate | ||
191 | |||
192 | .seealso: MFNSetTolerances(), MFNSolve(), MFNConvergedReason, MFNSetErrorIfNotConverged() | ||
193 | @*/ | ||
194 | 132 | PetscErrorCode MFNGetConvergedReason(MFN mfn,MFNConvergedReason *reason) | |
195 | { | ||
196 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
132 | PetscFunctionBegin; |
197 |
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.
|
132 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
198 |
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.
|
132 | PetscAssertPointer(reason,2); |
199 | 132 | *reason = mfn->reason; | |
200 |
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.
|
132 | PetscFunctionReturn(PETSC_SUCCESS); |
201 | } | ||
202 |