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 LME routines | ||
12 | */ | ||
13 | |||
14 | #include <slepc/private/lmeimpl.h> /*I "slepclme.h" I*/ | ||
15 | |||
16 | /* Logging support */ | ||
17 | PetscClassId LME_CLASSID = 0; | ||
18 | PetscLogEvent LME_SetUp = 0,LME_Solve = 0,LME_ComputeError = 0; | ||
19 | |||
20 | /* List of registered LME routines */ | ||
21 | PetscFunctionList LMEList = NULL; | ||
22 | PetscBool LMERegisterAllCalled = PETSC_FALSE; | ||
23 | |||
24 | /* List of registered LME monitors */ | ||
25 | PetscFunctionList LMEMonitorList = NULL; | ||
26 | PetscFunctionList LMEMonitorCreateList = NULL; | ||
27 | PetscFunctionList LMEMonitorDestroyList = NULL; | ||
28 | PetscBool LMEMonitorRegisterAllCalled = PETSC_FALSE; | ||
29 | |||
30 | /*@ | ||
31 | LMEView - Prints the LME data structure. | ||
32 | |||
33 | Collective | ||
34 | |||
35 | Input Parameters: | ||
36 | + lme - the linear matrix equation solver context | ||
37 | - viewer - optional visualization context | ||
38 | |||
39 | Options Database Key: | ||
40 | . -lme_view - Calls LMEView() at end of LMESolve() | ||
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: LMECreate() | ||
56 | @*/ | ||
57 | 20 | PetscErrorCode LMEView(LME lme,PetscViewer viewer) | |
58 | { | ||
59 | 20 | PetscBool isascii; | |
60 | |||
61 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | 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.
|
20 | PetscValidHeaderSpecific(lme,LME_CLASSID,1); |
63 |
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.
|
20 | if (!viewer) PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)lme),&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.
|
20 | 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.
|
20 | PetscCheckSameComm(lme,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.
|
20 | PetscCall(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isascii)); |
68 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
20 | 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.
|
20 | PetscCall(PetscObjectPrintClassNamePrefixType((PetscObject)lme,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.
|
20 | 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.
|
20 | PetscTryTypeMethod(lme,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.
|
20 | 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.
|
20 | PetscCall(PetscViewerASCIIPrintf(viewer," equation type: %s\n",LMEProblemTypes[lme->problem_type])); |
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.
|
20 | PetscCall(PetscViewerASCIIPrintf(viewer," number of column vectors (ncv): %" PetscInt_FMT "\n",lme->ncv)); |
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.
|
20 | PetscCall(PetscViewerASCIIPrintf(viewer," maximum number of iterations: %" PetscInt_FMT "\n",lme->max_it)); |
76 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(PetscViewerASCIIPrintf(viewer," tolerance: %g\n",(double)lme->tol)); |
77 | ✗ | } else PetscTryTypeMethod(lme,view,viewer); | |
78 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(PetscViewerPushFormat(viewer,PETSC_VIEWER_ASCII_INFO)); |
79 |
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.
|
20 | if (!lme->V) PetscCall(LMEGetBV(lme,&lme->V)); |
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.
|
20 | PetscCall(BVView(lme->V,viewer)); |
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.
|
20 | PetscCall(PetscViewerPopFormat(viewer)); |
82 |
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); |
83 | } | ||
84 | |||
85 | /*@ | ||
86 | LMEViewFromOptions - View from options | ||
87 | |||
88 | Collective | ||
89 | |||
90 | Input Parameters: | ||
91 | + lme - the linear matrix equation context | ||
92 | . obj - optional object | ||
93 | - name - command line option | ||
94 | |||
95 | Level: intermediate | ||
96 | |||
97 | .seealso: LMEView(), LMECreate() | ||
98 | @*/ | ||
99 | 994 | PetscErrorCode LMEViewFromOptions(LME lme,PetscObject obj,const char name[]) | |
100 | { | ||
101 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
994 | PetscFunctionBegin; |
102 |
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.
|
994 | PetscValidHeaderSpecific(lme,LME_CLASSID,1); |
103 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
994 | PetscCall(PetscObjectViewFromOptions((PetscObject)lme,obj,name)); |
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.
|
142 | PetscFunctionReturn(PETSC_SUCCESS); |
105 | } | ||
106 | /*@ | ||
107 | LMEConvergedReasonView - Displays the reason an LME solve converged or diverged. | ||
108 | |||
109 | Collective | ||
110 | |||
111 | Input Parameters: | ||
112 | + lme - the linear matrix equation context | ||
113 | - viewer - the viewer to display the reason | ||
114 | |||
115 | Options Database Keys: | ||
116 | . -lme_converged_reason - print reason for convergence, and number of iterations | ||
117 | |||
118 | Note: | ||
119 | To change the format of the output call PetscViewerPushFormat(viewer,format) before | ||
120 | this call. Use PETSC_VIEWER_DEFAULT for the default, use PETSC_VIEWER_FAILED to only | ||
121 | display a reason if it fails. The latter can be set in the command line with | ||
122 | -lme_converged_reason ::failed | ||
123 | |||
124 | Level: intermediate | ||
125 | |||
126 | .seealso: LMESetTolerances(), LMEGetIterationNumber(), LMEConvergedReasonViewFromOptions() | ||
127 | @*/ | ||
128 | 10 | PetscErrorCode LMEConvergedReasonView(LME lme,PetscViewer viewer) | |
129 | { | ||
130 | 10 | PetscBool isAscii; | |
131 | 10 | PetscViewerFormat format; | |
132 | |||
133 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBegin; |
134 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
10 | if (!viewer) viewer = PETSC_VIEWER_STDOUT_(PetscObjectComm((PetscObject)lme)); |
135 |
4/6✓ Branch 0 taken 2 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(PetscObjectTypeCompare((PetscObject)viewer,PETSCVIEWERASCII,&isAscii)); |
136 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
10 | if (isAscii) { |
137 |
4/6✓ Branch 0 taken 2 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(PetscViewerGetFormat(viewer,&format)); |
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.
|
10 | PetscCall(PetscViewerASCIIAddTab(viewer,((PetscObject)lme)->tablevel)); |
139 |
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.
|
10 | if (lme->reason > 0 && format != PETSC_VIEWER_FAILED) PetscCall(PetscViewerASCIIPrintf(viewer,"%s Linear matrix equation solve converged due to %s; iterations %" PetscInt_FMT "\n",((PetscObject)lme)->prefix?((PetscObject)lme)->prefix:"",LMEConvergedReasons[lme->reason],lme->its)); |
140 | ✗ | else if (lme->reason <= 0) PetscCall(PetscViewerASCIIPrintf(viewer,"%s Linear matrix equation solve did not converge due to %s; iterations %" PetscInt_FMT "\n",((PetscObject)lme)->prefix?((PetscObject)lme)->prefix:"",LMEConvergedReasons[lme->reason],lme->its)); | |
141 |
4/6✓ Branch 0 taken 2 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(PetscViewerASCIISubtractTab(viewer,((PetscObject)lme)->tablevel)); |
142 | } | ||
143 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
2 | PetscFunctionReturn(PETSC_SUCCESS); |
144 | } | ||
145 | |||
146 | /*@ | ||
147 | LMEConvergedReasonViewFromOptions - Processes command line options to determine if/how | ||
148 | the LME converged reason is to be viewed. | ||
149 | |||
150 | Collective | ||
151 | |||
152 | Input Parameter: | ||
153 | . lme - the linear matrix equation context | ||
154 | |||
155 | Level: developer | ||
156 | |||
157 | .seealso: LMEConvergedReasonView() | ||
158 | @*/ | ||
159 | 497 | PetscErrorCode LMEConvergedReasonViewFromOptions(LME lme) | |
160 | { | ||
161 | 497 | PetscViewer viewer; | |
162 | 497 | PetscBool flg; | |
163 | 497 | static PetscBool incall = PETSC_FALSE; | |
164 | 497 | PetscViewerFormat format; | |
165 | |||
166 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
497 | PetscFunctionBegin; |
167 |
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.
|
497 | if (incall) PetscFunctionReturn(PETSC_SUCCESS); |
168 | 497 | incall = PETSC_TRUE; | |
169 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
497 | PetscCall(PetscOptionsCreateViewer(PetscObjectComm((PetscObject)lme),((PetscObject)lme)->options,((PetscObject)lme)->prefix,"-lme_converged_reason",&viewer,&format,&flg)); |
170 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
497 | if (flg) { |
171 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
10 | PetscCall(PetscViewerPushFormat(viewer,format)); |
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.
|
10 | PetscCall(LMEConvergedReasonView(lme,viewer)); |
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.
|
10 | PetscCall(PetscViewerPopFormat(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.
|
10 | PetscCall(PetscViewerDestroy(&viewer)); |
175 | } | ||
176 | 497 | incall = PETSC_FALSE; | |
177 |
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.
|
497 | PetscFunctionReturn(PETSC_SUCCESS); |
178 | } | ||
179 | |||
180 | /*@ | ||
181 | LMECreate - Creates the default LME context. | ||
182 | |||
183 | Collective | ||
184 | |||
185 | Input Parameter: | ||
186 | . comm - MPI communicator | ||
187 | |||
188 | Output Parameter: | ||
189 | . outlme - location to put the LME context | ||
190 | |||
191 | Note: | ||
192 | The default LME type is LMEKRYLOV | ||
193 | |||
194 | Level: beginner | ||
195 | |||
196 | .seealso: LMESetUp(), LMESolve(), LMEDestroy(), LME | ||
197 | @*/ | ||
198 | 200 | PetscErrorCode LMECreate(MPI_Comm comm,LME *outlme) | |
199 | { | ||
200 | 200 | LME lme; | |
201 | |||
202 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
200 | PetscFunctionBegin; |
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.
|
200 | PetscAssertPointer(outlme,2); |
204 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
200 | PetscCall(LMEInitializePackage()); |
205 |
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.
|
200 | PetscCall(SlepcHeaderCreate(lme,LME_CLASSID,"LME","Linear Matrix Equation","LME",comm,LMEDestroy,LMEView)); |
206 | |||
207 | 200 | lme->A = NULL; | |
208 | 200 | lme->B = NULL; | |
209 | 200 | lme->D = NULL; | |
210 | 200 | lme->E = NULL; | |
211 | 200 | lme->C = NULL; | |
212 | 200 | lme->X = NULL; | |
213 | 200 | lme->problem_type = LME_LYAPUNOV; | |
214 | 200 | lme->max_it = PETSC_DETERMINE; | |
215 | 200 | lme->ncv = PETSC_DETERMINE; | |
216 | 200 | lme->tol = PETSC_DETERMINE; | |
217 | 200 | lme->errorifnotconverged = PETSC_FALSE; | |
218 | |||
219 | 200 | lme->numbermonitors = 0; | |
220 | |||
221 | 200 | lme->V = NULL; | |
222 | 200 | lme->nwork = 0; | |
223 | 200 | lme->work = NULL; | |
224 | 200 | lme->data = NULL; | |
225 | |||
226 | 200 | lme->its = 0; | |
227 | 200 | lme->errest = 0; | |
228 | 200 | lme->setupcalled = 0; | |
229 | 200 | lme->reason = LME_CONVERGED_ITERATING; | |
230 | |||
231 | 200 | *outlme = lme; | |
232 |
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.
|
200 | PetscFunctionReturn(PETSC_SUCCESS); |
233 | } | ||
234 | |||
235 | /*@ | ||
236 | LMESetType - Selects the particular solver to be used in the LME object. | ||
237 | |||
238 | Logically Collective | ||
239 | |||
240 | Input Parameters: | ||
241 | + lme - the linear matrix equation context | ||
242 | - type - a known method | ||
243 | |||
244 | Options Database Key: | ||
245 | . -lme_type <method> - Sets the method; use -help for a list | ||
246 | of available methods | ||
247 | |||
248 | Notes: | ||
249 | See "slepc/include/slepclme.h" for available methods. The default | ||
250 | is LMEKRYLOV | ||
251 | |||
252 | Normally, it is best to use the LMESetFromOptions() command and | ||
253 | then set the LME type from the options database rather than by using | ||
254 | this routine. Using the options database provides the user with | ||
255 | maximum flexibility in evaluating the different available methods. | ||
256 | The LMESetType() routine is provided for those situations where it | ||
257 | is necessary to set the iterative solver independently of the command | ||
258 | line or options database. | ||
259 | |||
260 | Level: intermediate | ||
261 | |||
262 | .seealso: LMEType | ||
263 | @*/ | ||
264 | 99 | PetscErrorCode LMESetType(LME lme,LMEType type) | |
265 | { | ||
266 | 99 | PetscErrorCode (*r)(LME); | |
267 | 99 | PetscBool match; | |
268 | |||
269 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
99 | PetscFunctionBegin; |
270 |
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.
|
99 | PetscValidHeaderSpecific(lme,LME_CLASSID,1); |
271 |
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.
|
99 | PetscAssertPointer(type,2); |
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.
|
99 | PetscCall(PetscObjectTypeCompare((PetscObject)lme,type,&match)); |
274 |
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.
|
99 | if (match) PetscFunctionReturn(PETSC_SUCCESS); |
275 | |||
276 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
99 | PetscCall(PetscFunctionListFind(LMEList,type,&r)); |
277 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
99 | PetscCheck(r,PetscObjectComm((PetscObject)lme),PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown LME type given: %s",type); |
278 | |||
279 |
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.
|
99 | PetscTryTypeMethod(lme,destroy); |
280 |
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.
|
99 | PetscCall(PetscMemzero(lme->ops,sizeof(struct _LMEOps))); |
281 | |||
282 | 99 | lme->setupcalled = 0; | |
283 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
99 | PetscCall(PetscObjectChangeTypeName((PetscObject)lme,type)); |
284 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
99 | PetscCall((*r)(lme)); |
285 |
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.
|
16 | PetscFunctionReturn(PETSC_SUCCESS); |
286 | } | ||
287 | |||
288 | /*@ | ||
289 | LMEGetType - Gets the LME type as a string from the LME object. | ||
290 | |||
291 | Not Collective | ||
292 | |||
293 | Input Parameter: | ||
294 | . lme - the linear matrix equation context | ||
295 | |||
296 | Output Parameter: | ||
297 | . type - name of LME method | ||
298 | |||
299 | Level: intermediate | ||
300 | |||
301 | .seealso: LMESetType() | ||
302 | @*/ | ||
303 | 44 | PetscErrorCode LMEGetType(LME lme,LMEType *type) | |
304 | { | ||
305 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
44 | PetscFunctionBegin; |
306 |
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(lme,LME_CLASSID,1); |
307 |
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); |
308 | 44 | *type = ((PetscObject)lme)->type_name; | |
309 |
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); |
310 | } | ||
311 | |||
312 | /*@C | ||
313 | LMERegister - Adds a method to the linear matrix equation solver package. | ||
314 | |||
315 | Not Collective | ||
316 | |||
317 | Input Parameters: | ||
318 | + name - name of a new user-defined solver | ||
319 | - function - routine to create the solver context | ||
320 | |||
321 | Notes: | ||
322 | LMERegister() may be called multiple times to add several user-defined solvers. | ||
323 | |||
324 | Example Usage: | ||
325 | .vb | ||
326 | LMERegister("my_solver",MySolverCreate); | ||
327 | .ve | ||
328 | |||
329 | Then, your solver can be chosen with the procedural interface via | ||
330 | $ LMESetType(lme,"my_solver") | ||
331 | or at runtime via the option | ||
332 | $ -lme_type my_solver | ||
333 | |||
334 | Level: advanced | ||
335 | |||
336 | .seealso: LMERegisterAll() | ||
337 | @*/ | ||
338 | 138 | PetscErrorCode LMERegister(const char *name,PetscErrorCode (*function)(LME)) | |
339 | { | ||
340 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
138 | PetscFunctionBegin; |
341 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
138 | PetscCall(LMEInitializePackage()); |
342 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
138 | PetscCall(PetscFunctionListAdd(&LMEList,name,function)); |
343 |
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); |
344 | } | ||
345 | |||
346 | /*@C | ||
347 | LMEMonitorRegister - Registers an LME monitor routine that may be accessed with LMEMonitorSetFromOptions(). | ||
348 | |||
349 | Not Collective | ||
350 | |||
351 | Input Parameters: | ||
352 | + name - name of a new monitor routine | ||
353 | . vtype - a PetscViewerType for the output | ||
354 | . format - a PetscViewerFormat for the output | ||
355 | . monitor - monitor routine, see LMEMonitorRegisterFn | ||
356 | . create - creation routine, or NULL | ||
357 | - destroy - destruction routine, or NULL | ||
358 | |||
359 | Notes: | ||
360 | LMEMonitorRegister() may be called multiple times to add several user-defined monitors. | ||
361 | |||
362 | The calling sequence for the given function matches the calling sequence of LMEMonitorFn | ||
363 | functions passed to LMEMonitorSet() with the additional requirement that its final argument | ||
364 | be a PetscViewerAndFormat. | ||
365 | |||
366 | Example Usage: | ||
367 | .vb | ||
368 | LMEMonitorRegister("my_monitor",PETSCVIEWERASCII,PETSC_VIEWER_ASCII_INFO_DETAIL,MyMonitor,NULL,NULL); | ||
369 | .ve | ||
370 | |||
371 | Then, your monitor can be chosen with the procedural interface via | ||
372 | $ LMEMonitorSetFromOptions(lme,"-lme_monitor_my_monitor","my_monitor",NULL) | ||
373 | or at runtime via the option | ||
374 | $ -lme_monitor_my_monitor | ||
375 | |||
376 | Level: advanced | ||
377 | |||
378 | .seealso: LMEMonitorSet(), LMEMonitorRegisterAll() | ||
379 | @*/ | ||
380 | 276 | PetscErrorCode LMEMonitorRegister(const char name[],PetscViewerType vtype,PetscViewerFormat format,LMEMonitorRegisterFn *monitor,LMEMonitorRegisterCreateFn *create,LMEMonitorRegisterDestroyFn *destroy) | |
381 | { | ||
382 | 276 | char key[PETSC_MAX_PATH_LEN]; | |
383 | |||
384 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
276 | PetscFunctionBegin; |
385 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
276 | PetscCall(LMEInitializePackage()); |
386 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
276 | PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key)); |
387 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
276 | PetscCall(PetscFunctionListAdd(&LMEMonitorList,key,monitor)); |
388 |
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.
|
276 | if (create) PetscCall(PetscFunctionListAdd(&LMEMonitorCreateList,key,create)); |
389 |
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.
|
276 | if (destroy) PetscCall(PetscFunctionListAdd(&LMEMonitorDestroyList,key,destroy)); |
390 |
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.
|
40 | PetscFunctionReturn(PETSC_SUCCESS); |
391 | } | ||
392 | |||
393 | /*@ | ||
394 | LMEReset - Resets the LME context to the initial state (prior to setup) | ||
395 | and destroys any allocated Vecs and Mats. | ||
396 | |||
397 | Collective | ||
398 | |||
399 | Input Parameter: | ||
400 | . lme - linear matrix equation context obtained from LMECreate() | ||
401 | |||
402 | Level: advanced | ||
403 | |||
404 | .seealso: LMEDestroy() | ||
405 | @*/ | ||
406 | 200 | PetscErrorCode LMEReset(LME lme) | |
407 | { | ||
408 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
200 | PetscFunctionBegin; |
409 |
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.
|
200 | if (lme) PetscValidHeaderSpecific(lme,LME_CLASSID,1); |
410 |
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.
|
190 | if (!lme) PetscFunctionReturn(PETSC_SUCCESS); |
411 |
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.
|
200 | PetscTryTypeMethod(lme,reset); |
412 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
200 | PetscCall(MatDestroy(&lme->A)); |
413 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
200 | PetscCall(MatDestroy(&lme->B)); |
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.
|
200 | PetscCall(MatDestroy(&lme->D)); |
415 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
200 | PetscCall(MatDestroy(&lme->E)); |
416 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
200 | PetscCall(MatDestroy(&lme->C)); |
417 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
200 | PetscCall(MatDestroy(&lme->X)); |
418 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
200 | PetscCall(BVDestroy(&lme->V)); |
419 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
200 | PetscCall(VecDestroyVecs(lme->nwork,&lme->work)); |
420 | 200 | lme->nwork = 0; | |
421 | 200 | lme->setupcalled = 0; | |
422 |
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.
|
200 | PetscFunctionReturn(PETSC_SUCCESS); |
423 | } | ||
424 | |||
425 | /*@ | ||
426 | LMEDestroy - Destroys the LME context. | ||
427 | |||
428 | Collective | ||
429 | |||
430 | Input Parameter: | ||
431 | . lme - linear matrix equation context obtained from LMECreate() | ||
432 | |||
433 | Level: beginner | ||
434 | |||
435 | .seealso: LMECreate(), LMESetUp(), LMESolve() | ||
436 | @*/ | ||
437 | 221 | PetscErrorCode LMEDestroy(LME *lme) | |
438 | { | ||
439 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
221 | PetscFunctionBegin; |
440 |
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.
|
221 | if (!*lme) PetscFunctionReturn(PETSC_SUCCESS); |
441 |
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.
|
221 | PetscValidHeaderSpecific(*lme,LME_CLASSID,1); |
442 |
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.
|
221 | if (--((PetscObject)*lme)->refct > 0) { *lme = NULL; PetscFunctionReturn(PETSC_SUCCESS); } |
443 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
200 | PetscCall(LMEReset(*lme)); |
444 |
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.
|
200 | PetscTryTypeMethod(*lme,destroy); |
445 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
200 | PetscCall(LMEMonitorCancel(*lme)); |
446 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
200 | PetscCall(PetscHeaderDestroy(lme)); |
447 |
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); |
448 | } | ||
449 | |||
450 | /*@ | ||
451 | LMESetBV - Associates a basis vectors object to the linear matrix equation solver. | ||
452 | |||
453 | Collective | ||
454 | |||
455 | Input Parameters: | ||
456 | + lme - linear matrix equation context obtained from LMECreate() | ||
457 | - bv - the basis vectors object | ||
458 | |||
459 | Note: | ||
460 | Use LMEGetBV() to retrieve the basis vectors context (for example, | ||
461 | to free it at the end of the computations). | ||
462 | |||
463 | Level: advanced | ||
464 | |||
465 | .seealso: LMEGetBV() | ||
466 | @*/ | ||
467 | ✗ | PetscErrorCode LMESetBV(LME lme,BV bv) | |
468 | { | ||
469 | ✗ | PetscFunctionBegin; | |
470 | ✗ | PetscValidHeaderSpecific(lme,LME_CLASSID,1); | |
471 | ✗ | PetscValidHeaderSpecific(bv,BV_CLASSID,2); | |
472 | ✗ | PetscCheckSameComm(lme,1,bv,2); | |
473 | ✗ | PetscCall(PetscObjectReference((PetscObject)bv)); | |
474 | ✗ | PetscCall(BVDestroy(&lme->V)); | |
475 | ✗ | lme->V = bv; | |
476 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
477 | } | ||
478 | |||
479 | /*@ | ||
480 | LMEGetBV - Obtain the basis vectors object associated to the matrix | ||
481 | function solver. | ||
482 | |||
483 | Not Collective | ||
484 | |||
485 | Input Parameters: | ||
486 | . lme - linear matrix equation context obtained from LMECreate() | ||
487 | |||
488 | Output Parameter: | ||
489 | . bv - basis vectors context | ||
490 | |||
491 | Level: advanced | ||
492 | |||
493 | .seealso: LMESetBV() | ||
494 | @*/ | ||
495 | 99 | PetscErrorCode LMEGetBV(LME lme,BV *bv) | |
496 | { | ||
497 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
99 | PetscFunctionBegin; |
498 |
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.
|
99 | PetscValidHeaderSpecific(lme,LME_CLASSID,1); |
499 |
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.
|
99 | PetscAssertPointer(bv,2); |
500 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
99 | if (!lme->V) { |
501 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
99 | PetscCall(BVCreate(PetscObjectComm((PetscObject)lme),&lme->V)); |
502 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
99 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)lme->V,(PetscObject)lme,0)); |
503 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
99 | PetscCall(PetscObjectSetOptions((PetscObject)lme->V,((PetscObject)lme)->options)); |
504 | } | ||
505 | 99 | *bv = lme->V; | |
506 |
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.
|
99 | PetscFunctionReturn(PETSC_SUCCESS); |
507 | } | ||
508 |