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 | Basic MFN routines | ||
12 | */ | ||
13 | |||
14 | #include <slepc/private/mfnimpl.h> /*I "slepcmfn.h" I*/ | ||
15 | |||
16 | /* Logging support */ | ||
17 | PetscClassId MFN_CLASSID = 0; | ||
18 | PetscLogEvent MFN_SetUp = 0,MFN_Solve = 0; | ||
19 | |||
20 | /* List of registered MFN routines */ | ||
21 | PetscFunctionList MFNList = NULL; | ||
22 | PetscBool MFNRegisterAllCalled = PETSC_FALSE; | ||
23 | |||
24 | /* List of registered MFN monitors */ | ||
25 | PetscFunctionList MFNMonitorList = NULL; | ||
26 | PetscFunctionList MFNMonitorCreateList = NULL; | ||
27 | PetscFunctionList MFNMonitorDestroyList = NULL; | ||
28 | PetscBool MFNMonitorRegisterAllCalled = PETSC_FALSE; | ||
29 | |||
30 | /*@ | ||
31 | MFNView - Prints the MFN data structure. | ||
32 | |||
33 | Collective | ||
34 | |||
35 | Input Parameters: | ||
36 | + mfn - the matrix function solver context | ||
37 | - viewer - optional visualization context | ||
38 | |||
39 | Options Database Key: | ||
40 | . -mfn_view - Calls MFNView() at end of MFNSolve() | ||
41 | |||
42 | Note: | ||
43 | The available visualization contexts include | ||
44 | + PETSC_VIEWER_STDOUT_SELF - standard output (default) | ||
45 | - PETSC_VIEWER_STDOUT_WORLD - synchronized standard | ||
46 | output where only the first processor opens | ||
47 | the file. All other processors send their | ||
48 | data to the first processor to print. | ||
49 | |||
50 | The user can open an alternative visualization context with | ||
51 | PetscViewerASCIIOpen() - output to a specified file. | ||
52 | |||
53 | Level: beginner | ||
54 | |||
55 | .seealso: MFNCreate() | ||
56 | @*/ | ||
57 | 28 | PetscErrorCode MFNView(MFN mfn,PetscViewer viewer) | |
58 | { | ||
59 | 28 | PetscBool isascii; | |
60 | |||
61 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
28 | PetscFunctionBegin; |
62 |
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.
|
28 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
63 |
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.
|
28 | if (!viewer) PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)mfn),&viewer)); |
64 |
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.
|
28 | PetscValidHeaderSpecific(viewer,PETSC_VIEWER_CLASSID,2); |
65 |
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.
|
28 | PetscCheckSameComm(mfn,1,viewer,2); |
66 | |||
67 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
68 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
28 | if (isascii) { |
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.
|
28 | PetscCall(PetscObjectPrintClassNamePrefixType((PetscObject)mfn,viewer)); |
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.
|
28 | PetscCall(PetscViewerASCIIPushTab(viewer)); |
71 |
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.
|
28 | PetscTryTypeMethod(mfn,view,viewer); |
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.
|
28 | PetscCall(PetscViewerASCIIPopTab(viewer)); |
73 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscViewerASCIIPrintf(viewer," number of column vectors (ncv): %" PetscInt_FMT "\n",mfn->ncv)); |
74 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscViewerASCIIPrintf(viewer," maximum number of iterations: %" PetscInt_FMT "\n",mfn->max_it)); |
75 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscViewerASCIIPrintf(viewer," tolerance: %g\n",(double)mfn->tol)); |
76 | ✗ | } else PetscTryTypeMethod(mfn,view,viewer); | |
77 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscViewerPushFormat(viewer,PETSC_VIEWER_ASCII_INFO)); |
78 |
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.
|
28 | if (!mfn->V) PetscCall(MFNGetFN(mfn,&mfn->fn)); |
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.
|
28 | PetscCall(FNView(mfn->fn,viewer)); |
80 |
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.
|
28 | if (!mfn->V) PetscCall(MFNGetBV(mfn,&mfn->V)); |
81 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(BVView(mfn->V,viewer)); |
82 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
28 | PetscCall(PetscViewerPopFormat(viewer)); |
83 |
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.
|
5 | PetscFunctionReturn(PETSC_SUCCESS); |
84 | } | ||
85 | |||
86 | /*@ | ||
87 | MFNViewFromOptions - View from options | ||
88 | |||
89 | Collective | ||
90 | |||
91 | Input Parameters: | ||
92 | + mfn - the matrix function context | ||
93 | . obj - optional object | ||
94 | - name - command line option | ||
95 | |||
96 | Level: intermediate | ||
97 | |||
98 | .seealso: MFNView(), MFNCreate() | ||
99 | @*/ | ||
100 | 2096 | PetscErrorCode MFNViewFromOptions(MFN mfn,PetscObject obj,const char name[]) | |
101 | { | ||
102 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2096 | PetscFunctionBegin; |
103 |
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.
|
2096 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
104 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2096 | PetscCall(PetscObjectViewFromOptions((PetscObject)mfn,obj,name)); |
105 |
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.
|
410 | PetscFunctionReturn(PETSC_SUCCESS); |
106 | } | ||
107 | /*@ | ||
108 | MFNConvergedReasonView - Displays the reason an MFN solve converged or diverged. | ||
109 | |||
110 | Collective | ||
111 | |||
112 | Input Parameters: | ||
113 | + mfn - the matrix function context | ||
114 | - viewer - the viewer to display the reason | ||
115 | |||
116 | Options Database Keys: | ||
117 | . -mfn_converged_reason - print reason for convergence, and number of iterations | ||
118 | |||
119 | Note: | ||
120 | To change the format of the output call PetscViewerPushFormat(viewer,format) before | ||
121 | this call. Use PETSC_VIEWER_DEFAULT for the default, use PETSC_VIEWER_FAILED to only | ||
122 | display a reason if it fails. The latter can be set in the command line with | ||
123 | -mfn_converged_reason ::failed | ||
124 | |||
125 | Level: intermediate | ||
126 | |||
127 | .seealso: MFNSetTolerances(), MFNGetIterationNumber(), MFNConvergedReasonViewFromOptions() | ||
128 | @*/ | ||
129 | 18 | PetscErrorCode MFNConvergedReasonView(MFN mfn,PetscViewer viewer) | |
130 | { | ||
131 | 18 | PetscBool isAscii; | |
132 | 18 | PetscViewerFormat format; | |
133 | |||
134 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
18 | PetscFunctionBegin; |
135 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
18 | if (!viewer) viewer = PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)mfn)); |
136 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
18 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isAscii)); |
137 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
18 | if (isAscii) { |
138 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
18 | PetscCall(PetscViewerGetFormat(viewer,&format)); |
139 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
18 | PetscCall(PetscViewerASCIIAddTab(viewer,((PetscObject)mfn)->tablevel)); |
140 |
8/12✓ 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 taken 8 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
18 | if (mfn->reason > 0 && format != PETSC_VIEWER_FAILED) PetscCall(PetscViewerASCIIPrintf(viewer,"%s Matrix function solve converged due to %s; iterations %" PetscInt_FMT "\n",((PetscObject)mfn)->prefix?((PetscObject)mfn)->prefix:"",MFNConvergedReasons[mfn->reason],mfn->its)); |
141 | ✗ | else if (mfn->reason <= 0) PetscCall(PetscViewerASCIIPrintf(viewer,"%s Matrix function solve did not converge due to %s; iterations %" PetscInt_FMT "\n",((PetscObject)mfn)->prefix?((PetscObject)mfn)->prefix:"",MFNConvergedReasons[mfn->reason],mfn->its)); | |
142 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
18 | PetscCall(PetscViewerASCIISubtractTab(viewer,((PetscObject)mfn)->tablevel)); |
143 | } | ||
144 |
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.
|
3 | PetscFunctionReturn(PETSC_SUCCESS); |
145 | } | ||
146 | |||
147 | /*@ | ||
148 | MFNConvergedReasonViewFromOptions - Processes command line options to determine if/how | ||
149 | the MFN converged reason is to be viewed. | ||
150 | |||
151 | Collective | ||
152 | |||
153 | Input Parameter: | ||
154 | . mfn - the matrix function context | ||
155 | |||
156 | Level: developer | ||
157 | |||
158 | .seealso: MFNConvergedReasonView() | ||
159 | @*/ | ||
160 | 1048 | PetscErrorCode MFNConvergedReasonViewFromOptions(MFN mfn) | |
161 | { | ||
162 | 1048 | PetscViewer viewer; | |
163 | 1048 | PetscBool flg; | |
164 | 1048 | static PetscBool incall = PETSC_FALSE; | |
165 | 1048 | PetscViewerFormat format; | |
166 | |||
167 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
1048 | PetscFunctionBegin; |
168 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
1048 | if (incall) PetscFunctionReturn(PETSC_SUCCESS); |
169 | 1048 | incall = PETSC_TRUE; | |
170 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
1048 | PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)mfn),((PetscObject)mfn)->options,((PetscObject)mfn)->prefix,"-mfn_converged_reason",&viewer,&format,&flg)); |
171 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
1048 | if (flg) { |
172 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
18 | PetscCall(PetscViewerPushFormat(viewer,format)); |
173 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
18 | PetscCall(MFNConvergedReasonView(mfn,viewer)); |
174 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
18 | PetscCall(PetscViewerPopFormat(viewer)); |
175 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
18 | PetscCall(PetscViewerDestroy(&viewer)); |
176 | } | ||
177 | 1048 | incall = PETSC_FALSE; | |
178 |
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.
|
1048 | PetscFunctionReturn(PETSC_SUCCESS); |
179 | } | ||
180 | |||
181 | /*@ | ||
182 | MFNCreate - Creates the default MFN context. | ||
183 | |||
184 | Collective | ||
185 | |||
186 | Input Parameter: | ||
187 | . comm - MPI communicator | ||
188 | |||
189 | Output Parameter: | ||
190 | . outmfn - location to put the MFN context | ||
191 | |||
192 | Note: | ||
193 | The default MFN type is MFNKRYLOV | ||
194 | |||
195 | Level: beginner | ||
196 | |||
197 | .seealso: MFNSetUp(), MFNSolve(), MFNDestroy(), MFN | ||
198 | @*/ | ||
199 | 295 | PetscErrorCode MFNCreate(MPI_Comm comm,MFN *outmfn) | |
200 | { | ||
201 | 295 | MFN mfn; | |
202 | |||
203 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
295 | PetscFunctionBegin; |
204 |
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.
|
295 | PetscAssertPointer(outmfn,2); |
205 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
295 | PetscCall(MFNInitializePackage()); |
206 |
7/12✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
295 | PetscCall(SlepcHeaderCreate(mfn,MFN_CLASSID,"MFN","Matrix Function","MFN",comm,MFNDestroy,MFNView)); |
207 | |||
208 | 295 | mfn->A = NULL; | |
209 | 295 | mfn->fn = NULL; | |
210 | 295 | mfn->max_it = PETSC_DETERMINE; | |
211 | 295 | mfn->ncv = PETSC_DETERMINE; | |
212 | 295 | mfn->tol = PETSC_DETERMINE; | |
213 | 295 | mfn->errorifnotconverged = PETSC_FALSE; | |
214 | |||
215 | 295 | mfn->numbermonitors = 0; | |
216 | |||
217 | 295 | mfn->V = NULL; | |
218 | 295 | mfn->nwork = 0; | |
219 | 295 | mfn->work = NULL; | |
220 | 295 | mfn->data = NULL; | |
221 | |||
222 | 295 | mfn->its = 0; | |
223 | 295 | mfn->nv = 0; | |
224 | 295 | mfn->errest = 0; | |
225 | 295 | mfn->setupcalled = 0; | |
226 | 295 | mfn->reason = MFN_CONVERGED_ITERATING; | |
227 | |||
228 | 295 | *outmfn = mfn; | |
229 |
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.
|
295 | PetscFunctionReturn(PETSC_SUCCESS); |
230 | } | ||
231 | |||
232 | /*@ | ||
233 | MFNSetType - Selects the particular solver to be used in the MFN object. | ||
234 | |||
235 | Logically Collective | ||
236 | |||
237 | Input Parameters: | ||
238 | + mfn - the matrix function context | ||
239 | - type - a known method | ||
240 | |||
241 | Options Database Key: | ||
242 | . -mfn_type <method> - Sets the method; use -help for a list | ||
243 | of available methods | ||
244 | |||
245 | Notes: | ||
246 | See "slepc/include/slepcmfn.h" for available methods. The default | ||
247 | is MFNKRYLOV | ||
248 | |||
249 | Normally, it is best to use the MFNSetFromOptions() command and | ||
250 | then set the MFN type from the options database rather than by using | ||
251 | this routine. Using the options database provides the user with | ||
252 | maximum flexibility in evaluating the different available methods. | ||
253 | The MFNSetType() routine is provided for those situations where it | ||
254 | is necessary to set the iterative solver independently of the command | ||
255 | line or options database. | ||
256 | |||
257 | Level: intermediate | ||
258 | |||
259 | .seealso: MFNType | ||
260 | @*/ | ||
261 | 214 | PetscErrorCode MFNSetType(MFN mfn,MFNType type) | |
262 | { | ||
263 | 214 | PetscErrorCode (*r)(MFN); | |
264 | 214 | PetscBool match; | |
265 | |||
266 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
214 | PetscFunctionBegin; |
267 |
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.
|
214 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
268 |
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.
|
214 | PetscAssertPointer(type,2); |
269 | |||
270 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
214 | PetscCall(PetscObjectTypeCompare((PetscObject)mfn,type,&match)); |
271 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
214 | if (match) PetscFunctionReturn(PETSC_SUCCESS); |
272 | |||
273 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
214 | PetscCall(PetscFunctionListFind(MFNList,type,&r)); |
274 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
214 | PetscCheck(r,PetscObjectComm((PetscObject)mfn),PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown MFN type given: %s",type); |
275 | |||
276 |
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.
|
214 | PetscTryTypeMethod(mfn,destroy); |
277 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
214 | PetscCall(PetscMemzero(mfn->ops,sizeof(struct _MFNOps))); |
278 | |||
279 | 214 | mfn->setupcalled = 0; | |
280 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
214 | PetscCall(PetscObjectChangeTypeName((PetscObject)mfn,type)); |
281 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
214 | PetscCall((*r)(mfn)); |
282 |
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.
|
37 | PetscFunctionReturn(PETSC_SUCCESS); |
283 | } | ||
284 | |||
285 | /*@ | ||
286 | MFNGetType - Gets the MFN type as a string from the MFN object. | ||
287 | |||
288 | Not Collective | ||
289 | |||
290 | Input Parameter: | ||
291 | . mfn - the matrix function context | ||
292 | |||
293 | Output Parameter: | ||
294 | . type - name of MFN method | ||
295 | |||
296 | Level: intermediate | ||
297 | |||
298 | .seealso: MFNSetType() | ||
299 | @*/ | ||
300 | 44 | PetscErrorCode MFNGetType(MFN mfn,MFNType *type) | |
301 | { | ||
302 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
44 | PetscFunctionBegin; |
303 |
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.
|
44 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
304 |
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.
|
44 | PetscAssertPointer(type,2); |
305 | 44 | *type = ((PetscObject)mfn)->type_name; | |
306 |
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.
|
44 | PetscFunctionReturn(PETSC_SUCCESS); |
307 | } | ||
308 | |||
309 | /*@C | ||
310 | MFNRegister - Adds a method to the matrix function solver package. | ||
311 | |||
312 | Not Collective | ||
313 | |||
314 | Input Parameters: | ||
315 | + name - name of a new user-defined solver | ||
316 | - function - routine to create the solver context | ||
317 | |||
318 | Notes: | ||
319 | MFNRegister() may be called multiple times to add several user-defined solvers. | ||
320 | |||
321 | Example Usage: | ||
322 | .vb | ||
323 | MFNRegister("my_solver",MySolverCreate); | ||
324 | .ve | ||
325 | |||
326 | Then, your solver can be chosen with the procedural interface via | ||
327 | $ MFNSetType(mfn,"my_solver") | ||
328 | or at runtime via the option | ||
329 | $ -mfn_type my_solver | ||
330 | |||
331 | Level: advanced | ||
332 | |||
333 | .seealso: MFNRegisterAll() | ||
334 | @*/ | ||
335 | 426 | PetscErrorCode MFNRegister(const char *name,PetscErrorCode (*function)(MFN)) | |
336 | { | ||
337 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
426 | PetscFunctionBegin; |
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.
|
426 | PetscCall(MFNInitializePackage()); |
339 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
426 | PetscCall(PetscFunctionListAdd(&MFNList,name,function)); |
340 |
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.
|
66 | PetscFunctionReturn(PETSC_SUCCESS); |
341 | } | ||
342 | |||
343 | /*@C | ||
344 | MFNMonitorRegister - Registers an MFN monitor routine that may be accessed with MFNMonitorSetFromOptions(). | ||
345 | |||
346 | Not Collective | ||
347 | |||
348 | Input Parameters: | ||
349 | + name - name of a new monitor routine | ||
350 | . vtype - a PetscViewerType for the output | ||
351 | . format - a PetscViewerFormat for the output | ||
352 | . monitor - monitor routine, see MFNMonitorRegisterFn | ||
353 | . create - creation routine, or NULL | ||
354 | - destroy - destruction routine, or NULL | ||
355 | |||
356 | Notes: | ||
357 | MFNMonitorRegister() may be called multiple times to add several user-defined monitors. | ||
358 | |||
359 | The calling sequence for the given function matches the calling sequence of MFNMonitorFn | ||
360 | functions passed to MFNMonitorSet() with the additional requirement that its final argument | ||
361 | be a PetscViewerAndFormat. | ||
362 | |||
363 | Example Usage: | ||
364 | .vb | ||
365 | MFNMonitorRegister("my_monitor",PETSCVIEWERASCII,PETSC_VIEWER_ASCII_INFO_DETAIL,MyMonitor,NULL,NULL); | ||
366 | .ve | ||
367 | |||
368 | Then, your monitor can be chosen with the procedural interface via | ||
369 | $ MFNMonitorSetFromOptions(mfn,"-mfn_monitor_my_monitor","my_monitor",NULL) | ||
370 | or at runtime via the option | ||
371 | $ -mfn_monitor_my_monitor | ||
372 | |||
373 | Level: advanced | ||
374 | |||
375 | .seealso: MFNMonitorSet(), MFNMonitorRegisterAll() | ||
376 | @*/ | ||
377 | 426 | PetscErrorCode MFNMonitorRegister(const char name[],PetscViewerType vtype,PetscViewerFormat format,MFNMonitorRegisterFn *monitor,MFNMonitorRegisterCreateFn *create,MFNMonitorRegisterDestroyFn *destroy) | |
378 | { | ||
379 | 426 | char key[PETSC_MAX_PATH_LEN]; | |
380 | |||
381 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
426 | PetscFunctionBegin; |
382 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
426 | PetscCall(MFNInitializePackage()); |
383 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
426 | PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key)); |
384 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
426 | PetscCall(PetscFunctionListAdd(&MFNMonitorList,key,monitor)); |
385 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
426 | if (create) PetscCall(PetscFunctionListAdd(&MFNMonitorCreateList,key,create)); |
386 |
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.
|
426 | if (destroy) PetscCall(PetscFunctionListAdd(&MFNMonitorDestroyList,key,destroy)); |
387 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
66 | PetscFunctionReturn(PETSC_SUCCESS); |
388 | } | ||
389 | |||
390 | /*@ | ||
391 | MFNReset - Resets the MFN context to the initial state (prior to setup) | ||
392 | and destroys any allocated Vecs and Mats. | ||
393 | |||
394 | Collective | ||
395 | |||
396 | Input Parameter: | ||
397 | . mfn - matrix function context obtained from MFNCreate() | ||
398 | |||
399 | Level: advanced | ||
400 | |||
401 | .seealso: MFNDestroy() | ||
402 | @*/ | ||
403 | 295 | PetscErrorCode MFNReset(MFN mfn) | |
404 | { | ||
405 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
295 | PetscFunctionBegin; |
406 |
3/14✓ 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 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
295 | if (mfn) PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
407 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
277 | if (!mfn) PetscFunctionReturn(PETSC_SUCCESS); |
408 |
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.
|
295 | PetscTryTypeMethod(mfn,reset); |
409 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
295 | PetscCall(MatDestroy(&mfn->A)); |
410 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
295 | PetscCall(BVDestroy(&mfn->V)); |
411 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
295 | PetscCall(VecDestroyVecs(mfn->nwork,&mfn->work)); |
412 | 295 | mfn->nwork = 0; | |
413 | 295 | mfn->setupcalled = 0; | |
414 |
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.
|
295 | PetscFunctionReturn(PETSC_SUCCESS); |
415 | } | ||
416 | |||
417 | /*@ | ||
418 | MFNDestroy - Destroys the MFN context. | ||
419 | |||
420 | Collective | ||
421 | |||
422 | Input Parameter: | ||
423 | . mfn - matrix function context obtained from MFNCreate() | ||
424 | |||
425 | Level: beginner | ||
426 | |||
427 | .seealso: MFNCreate(), MFNSetUp(), MFNSolve() | ||
428 | @*/ | ||
429 | 316 | PetscErrorCode MFNDestroy(MFN *mfn) | |
430 | { | ||
431 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
316 | PetscFunctionBegin; |
432 |
2/14✓ Branch 0 taken 8 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
316 | if (!*mfn) PetscFunctionReturn(PETSC_SUCCESS); |
433 |
2/12✗ 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 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
316 | PetscValidHeaderSpecific(*mfn,MFN_CLASSID,1); |
434 |
2/14✓ Branch 0 taken 2 times.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
|
316 | if (--((PetscObject)*mfn)->refct > 0) { *mfn = NULL; PetscFunctionReturn(PETSC_SUCCESS); } |
435 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
295 | PetscCall(MFNReset(*mfn)); |
436 |
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.
|
295 | PetscTryTypeMethod(*mfn,destroy); |
437 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
295 | PetscCall(FNDestroy(&(*mfn)->fn)); |
438 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
295 | PetscCall(MatDestroy(&(*mfn)->AT)); |
439 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
295 | PetscCall(MFNMonitorCancel(*mfn)); |
440 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
295 | PetscCall(PetscHeaderDestroy(mfn)); |
441 |
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.
|
35 | PetscFunctionReturn(PETSC_SUCCESS); |
442 | } | ||
443 | |||
444 | /*@ | ||
445 | MFNSetBV - Associates a basis vectors object to the matrix function solver. | ||
446 | |||
447 | Collective | ||
448 | |||
449 | Input Parameters: | ||
450 | + mfn - matrix function context obtained from MFNCreate() | ||
451 | - bv - the basis vectors object | ||
452 | |||
453 | Note: | ||
454 | Use MFNGetBV() to retrieve the basis vectors context (for example, | ||
455 | to free it at the end of the computations). | ||
456 | |||
457 | Level: advanced | ||
458 | |||
459 | .seealso: MFNGetBV() | ||
460 | @*/ | ||
461 | 8 | PetscErrorCode MFNSetBV(MFN mfn,BV bv) | |
462 | { | ||
463 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
8 | PetscFunctionBegin; |
464 |
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.
|
8 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
465 |
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.
|
8 | PetscValidHeaderSpecific(bv,BV_CLASSID,2); |
466 |
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.
|
8 | PetscCheckSameComm(mfn,1,bv,2); |
467 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8 | PetscCall(PetscObjectReference((PetscObject)bv)); |
468 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 6 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
8 | PetscCall(BVDestroy(&mfn->V)); |
469 | 8 | mfn->V = bv; | |
470 |
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.
|
8 | PetscFunctionReturn(PETSC_SUCCESS); |
471 | } | ||
472 | |||
473 | /*@ | ||
474 | MFNGetBV - Obtain the basis vectors object associated to the matrix | ||
475 | function solver. | ||
476 | |||
477 | Not Collective | ||
478 | |||
479 | Input Parameters: | ||
480 | . mfn - matrix function context obtained from MFNCreate() | ||
481 | |||
482 | Output Parameter: | ||
483 | . bv - basis vectors context | ||
484 | |||
485 | Level: advanced | ||
486 | |||
487 | .seealso: MFNSetBV() | ||
488 | @*/ | ||
489 | 196 | PetscErrorCode MFNGetBV(MFN mfn,BV *bv) | |
490 | { | ||
491 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
196 | PetscFunctionBegin; |
492 |
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.
|
196 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
493 |
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.
|
196 | PetscAssertPointer(bv,2); |
494 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
196 | if (!mfn->V) { |
495 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
196 | PetscCall(BVCreate(PetscObjectComm((PetscObject)mfn),&mfn->V)); |
496 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
196 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)mfn->V,(PetscObject)mfn,0)); |
497 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
196 | PetscCall(PetscObjectSetOptions((PetscObject)mfn->V,((PetscObject)mfn)->options)); |
498 | } | ||
499 | 196 | *bv = mfn->V; | |
500 |
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.
|
196 | PetscFunctionReturn(PETSC_SUCCESS); |
501 | } | ||
502 | |||
503 | /*@ | ||
504 | MFNSetFN - Specifies the function to be computed. | ||
505 | |||
506 | Collective | ||
507 | |||
508 | Input Parameters: | ||
509 | + mfn - matrix function context obtained from MFNCreate() | ||
510 | - fn - the math function object | ||
511 | |||
512 | Note: | ||
513 | Use MFNGetFN() to retrieve the math function context (for example, | ||
514 | to free it at the end of the computations). | ||
515 | |||
516 | Level: beginner | ||
517 | |||
518 | .seealso: MFNGetFN() | ||
519 | @*/ | ||
520 | 48 | PetscErrorCode MFNSetFN(MFN mfn,FN fn) | |
521 | { | ||
522 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
48 | PetscFunctionBegin; |
523 |
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.
|
48 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
524 |
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.
|
48 | PetscValidHeaderSpecific(fn,FN_CLASSID,2); |
525 |
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.
|
48 | PetscCheckSameComm(mfn,1,fn,2); |
526 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
48 | PetscCall(PetscObjectReference((PetscObject)fn)); |
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.
|
48 | PetscCall(FNDestroy(&mfn->fn)); |
528 | 48 | mfn->fn = fn; | |
529 |
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.
|
48 | PetscFunctionReturn(PETSC_SUCCESS); |
530 | } | ||
531 | |||
532 | /*@ | ||
533 | MFNGetFN - Obtain the math function object associated to the MFN object. | ||
534 | |||
535 | Not Collective | ||
536 | |||
537 | Input Parameters: | ||
538 | . mfn - matrix function context obtained from MFNCreate() | ||
539 | |||
540 | Output Parameter: | ||
541 | . fn - math function context | ||
542 | |||
543 | Level: beginner | ||
544 | |||
545 | .seealso: MFNSetFN() | ||
546 | @*/ | ||
547 | 6046 | PetscErrorCode MFNGetFN(MFN mfn,FN *fn) | |
548 | { | ||
549 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
6046 | PetscFunctionBegin; |
550 |
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.
|
6046 | PetscValidHeaderSpecific(mfn,MFN_CLASSID,1); |
551 |
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.
|
6046 | PetscAssertPointer(fn,2); |
552 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
6046 | if (!mfn->fn) { |
553 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(FNCreate(PetscObjectComm((PetscObject)mfn),&mfn->fn)); |
554 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)mfn->fn,(PetscObject)mfn,0)); |
555 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
156 | PetscCall(PetscObjectSetOptions((PetscObject)mfn->fn,((PetscObject)mfn)->options)); |
556 | } | ||
557 | 6046 | *fn = mfn->fn; | |
558 |
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.
|
6046 | PetscFunctionReturn(PETSC_SUCCESS); |
559 | } | ||
560 |