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 SVD routines | ||
12 | */ | ||
13 | |||
14 | #include <slepc/private/svdimpl.h> /*I "slepcsvd.h" I*/ | ||
15 | |||
16 | /* Logging support */ | ||
17 | PetscClassId SVD_CLASSID = 0; | ||
18 | PetscLogEvent SVD_SetUp = 0,SVD_Solve = 0; | ||
19 | |||
20 | /* List of registered SVD routines */ | ||
21 | PetscFunctionList SVDList = NULL; | ||
22 | PetscBool SVDRegisterAllCalled = PETSC_FALSE; | ||
23 | |||
24 | /* List of registered SVD monitors */ | ||
25 | PetscFunctionList SVDMonitorList = NULL; | ||
26 | PetscFunctionList SVDMonitorCreateList = NULL; | ||
27 | PetscFunctionList SVDMonitorDestroyList = NULL; | ||
28 | PetscBool SVDMonitorRegisterAllCalled = PETSC_FALSE; | ||
29 | |||
30 | /*@ | ||
31 | SVDCreate - Creates the default SVD context. | ||
32 | |||
33 | Collective | ||
34 | |||
35 | Input Parameter: | ||
36 | . comm - MPI communicator | ||
37 | |||
38 | Output Parameter: | ||
39 | . outsvd - location to put the SVD context | ||
40 | |||
41 | Note: | ||
42 | The default SVD type is SVDCROSS | ||
43 | |||
44 | Level: beginner | ||
45 | |||
46 | .seealso: SVDSetUp(), SVDSolve(), SVDDestroy(), SVD | ||
47 | @*/ | ||
48 | 2388 | PetscErrorCode SVDCreate(MPI_Comm comm,SVD *outsvd) | |
49 | { | ||
50 | 2388 | SVD svd; | |
51 | |||
52 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2388 | PetscFunctionBegin; |
53 |
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.
|
2388 | PetscAssertPointer(outsvd,2); |
54 |
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.
|
2388 | PetscCall(SVDInitializePackage()); |
55 |
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.
|
2388 | PetscCall(SlepcHeaderCreate(svd,SVD_CLASSID,"SVD","Singular Value Decomposition","SVD",comm,SVDDestroy,SVDView)); |
56 | |||
57 | 2388 | svd->OP = NULL; | |
58 | 2388 | svd->OPb = NULL; | |
59 | 2388 | svd->omega = NULL; | |
60 | 2388 | svd->max_it = PETSC_DETERMINE; | |
61 | 2388 | svd->nsv = 0; | |
62 | 2388 | svd->ncv = PETSC_DETERMINE; | |
63 | 2388 | svd->mpd = PETSC_DETERMINE; | |
64 | 2388 | svd->nini = 0; | |
65 | 2388 | svd->ninil = 0; | |
66 | 2388 | svd->tol = PETSC_DETERMINE; | |
67 | 2388 | svd->thres = 0.0; | |
68 | 2388 | svd->threlative = PETSC_FALSE; | |
69 | 2388 | svd->conv = (SVDConv)-1; | |
70 | 2388 | svd->stop = SVD_STOP_BASIC; | |
71 | 2388 | svd->which = SVD_LARGEST; | |
72 | 2388 | svd->problem_type = (SVDProblemType)0; | |
73 | 2388 | svd->impltrans = PETSC_FALSE; | |
74 | 2388 | svd->trackall = PETSC_FALSE; | |
75 | |||
76 | 2388 | svd->converged = NULL; | |
77 | 2388 | svd->convergeduser = NULL; | |
78 | 2388 | svd->convergeddestroy = NULL; | |
79 | 2388 | svd->stopping = SVDStoppingBasic; | |
80 | 2388 | svd->stoppinguser = NULL; | |
81 | 2388 | svd->stoppingdestroy = NULL; | |
82 | 2388 | svd->convergedctx = NULL; | |
83 | 2388 | svd->stoppingctx = NULL; | |
84 | 2388 | svd->numbermonitors = 0; | |
85 | |||
86 | 2388 | svd->ds = NULL; | |
87 | 2388 | svd->U = NULL; | |
88 | 2388 | svd->V = NULL; | |
89 | 2388 | svd->A = NULL; | |
90 | 2388 | svd->B = NULL; | |
91 | 2388 | svd->AT = NULL; | |
92 | 2388 | svd->BT = NULL; | |
93 | 2388 | svd->IS = NULL; | |
94 | 2388 | svd->ISL = NULL; | |
95 | 2388 | svd->sigma = NULL; | |
96 | 2388 | svd->errest = NULL; | |
97 | 2388 | svd->sign = NULL; | |
98 | 2388 | svd->perm = NULL; | |
99 | 2388 | svd->nworkl = 0; | |
100 | 2388 | svd->nworkr = 0; | |
101 | 2388 | svd->workl = NULL; | |
102 | 2388 | svd->workr = NULL; | |
103 | 2388 | svd->data = NULL; | |
104 | |||
105 | 2388 | svd->state = SVD_STATE_INITIAL; | |
106 | 2388 | svd->nconv = 0; | |
107 | 2388 | svd->its = 0; | |
108 | 2388 | svd->leftbasis = PETSC_FALSE; | |
109 | 2388 | svd->swapped = PETSC_FALSE; | |
110 | 2388 | svd->expltrans = PETSC_FALSE; | |
111 | 2388 | svd->nrma = 0.0; | |
112 | 2388 | svd->nrmb = 0.0; | |
113 | 2388 | svd->isgeneralized = PETSC_FALSE; | |
114 | 2388 | svd->reason = SVD_CONVERGED_ITERATING; | |
115 | |||
116 |
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.
|
2388 | PetscCall(PetscNew(&svd->sc)); |
117 | 2388 | *outsvd = svd; | |
118 |
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.
|
2388 | PetscFunctionReturn(PETSC_SUCCESS); |
119 | } | ||
120 | |||
121 | /*@ | ||
122 | SVDReset - Resets the SVD context to the initial state (prior to setup) | ||
123 | and destroys any allocated Vecs and Mats. | ||
124 | |||
125 | Collective | ||
126 | |||
127 | Input Parameter: | ||
128 | . svd - singular value solver context obtained from SVDCreate() | ||
129 | |||
130 | Level: advanced | ||
131 | |||
132 | .seealso: SVDDestroy() | ||
133 | @*/ | ||
134 | 2448 | PetscErrorCode SVDReset(SVD svd) | |
135 | { | ||
136 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2448 | PetscFunctionBegin; |
137 |
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.
|
2448 | if (svd) PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
138 |
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.
|
2199 | if (!svd) PetscFunctionReturn(PETSC_SUCCESS); |
139 |
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.
|
2448 | PetscTryTypeMethod(svd,reset); |
140 |
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.
|
2448 | PetscCall(MatDestroy(&svd->OP)); |
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.
|
2448 | PetscCall(MatDestroy(&svd->OPb)); |
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.
|
2448 | PetscCall(VecDestroy(&svd->omega)); |
143 |
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.
|
2448 | PetscCall(MatDestroy(&svd->A)); |
144 |
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.
|
2448 | PetscCall(MatDestroy(&svd->B)); |
145 |
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.
|
2448 | PetscCall(MatDestroy(&svd->AT)); |
146 |
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.
|
2448 | PetscCall(MatDestroy(&svd->BT)); |
147 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2448 | PetscCall(BVDestroy(&svd->U)); |
148 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2448 | PetscCall(BVDestroy(&svd->V)); |
149 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2448 | PetscCall(VecDestroyVecs(svd->nworkl,&svd->workl)); |
150 | 2448 | svd->nworkl = 0; | |
151 |
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.
|
2448 | PetscCall(VecDestroyVecs(svd->nworkr,&svd->workr)); |
152 | 2448 | svd->nworkr = 0; | |
153 | 2448 | svd->swapped = PETSC_FALSE; | |
154 | 2448 | svd->state = SVD_STATE_INITIAL; | |
155 |
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.
|
2448 | PetscFunctionReturn(PETSC_SUCCESS); |
156 | } | ||
157 | |||
158 | /*@ | ||
159 | SVDDestroy - Destroys the SVD context. | ||
160 | |||
161 | Collective | ||
162 | |||
163 | Input Parameter: | ||
164 | . svd - singular value solver context obtained from SVDCreate() | ||
165 | |||
166 | Level: beginner | ||
167 | |||
168 | .seealso: SVDCreate(), SVDSetUp(), SVDSolve() | ||
169 | @*/ | ||
170 | 2409 | PetscErrorCode SVDDestroy(SVD *svd) | |
171 | { | ||
172 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2409 | PetscFunctionBegin; |
173 |
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.
|
2409 | if (!*svd) PetscFunctionReturn(PETSC_SUCCESS); |
174 |
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.
|
2409 | PetscValidHeaderSpecific(*svd,SVD_CLASSID,1); |
175 |
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.
|
2409 | if (--((PetscObject)*svd)->refct > 0) { *svd = NULL; PetscFunctionReturn(PETSC_SUCCESS); } |
176 |
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.
|
2388 | PetscCall(SVDReset(*svd)); |
177 |
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.
|
2388 | PetscTryTypeMethod(*svd,destroy); |
178 |
6/8✓ Branch 0 taken 10 times.
✓ Branch 1 taken 2 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.
|
2388 | if ((*svd)->sigma) PetscCall(PetscFree3((*svd)->sigma,(*svd)->perm,(*svd)->errest)); |
179 |
7/10✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
|
2388 | if ((*svd)->sign) PetscCall(PetscFree((*svd)->sign)); |
180 |
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.
|
2388 | PetscCall(DSDestroy(&(*svd)->ds)); |
181 |
5/8✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
2388 | PetscCall(PetscFree((*svd)->sc)); |
182 | /* just in case the initial vectors have not been used */ | ||
183 |
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.
|
2388 | PetscCall(SlepcBasisDestroy_Private(&(*svd)->nini,&(*svd)->IS)); |
184 |
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.
|
2388 | PetscCall(SlepcBasisDestroy_Private(&(*svd)->ninil,&(*svd)->ISL)); |
185 |
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.
|
2388 | if ((*svd)->convergeddestroy) PetscCall((*(*svd)->convergeddestroy)(&(*svd)->convergedctx)); |
186 |
6/8✓ Branch 0 taken 8 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 6 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
|
2388 | if ((*svd)->stoppingdestroy) PetscCall((*(*svd)->stoppingdestroy)(&(*svd)->stoppingctx)); |
187 |
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.
|
2388 | PetscCall(SVDMonitorCancel(*svd)); |
188 |
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.
|
2388 | PetscCall(PetscHeaderDestroy(svd)); |
189 |
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.
|
453 | PetscFunctionReturn(PETSC_SUCCESS); |
190 | } | ||
191 | |||
192 | /*@ | ||
193 | SVDSetType - Selects the particular solver to be used in the SVD object. | ||
194 | |||
195 | Logically Collective | ||
196 | |||
197 | Input Parameters: | ||
198 | + svd - the singular value solver context | ||
199 | - type - a known method | ||
200 | |||
201 | Options Database Key: | ||
202 | . -svd_type <method> - Sets the method; use -help for a list | ||
203 | of available methods | ||
204 | |||
205 | Notes: | ||
206 | See "slepc/include/slepcsvd.h" for available methods. The default | ||
207 | is SVDCROSS. | ||
208 | |||
209 | Normally, it is best to use the SVDSetFromOptions() command and | ||
210 | then set the SVD type from the options database rather than by using | ||
211 | this routine. Using the options database provides the user with | ||
212 | maximum flexibility in evaluating the different available methods. | ||
213 | The SVDSetType() routine is provided for those situations where it | ||
214 | is necessary to set the iterative solver independently of the command | ||
215 | line or options database. | ||
216 | |||
217 | Level: intermediate | ||
218 | |||
219 | .seealso: SVDType | ||
220 | @*/ | ||
221 | 2319 | PetscErrorCode SVDSetType(SVD svd,SVDType type) | |
222 | { | ||
223 | 2319 | PetscErrorCode (*r)(SVD); | |
224 | 2319 | PetscBool match; | |
225 | |||
226 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2319 | PetscFunctionBegin; |
227 |
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.
|
2319 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
228 |
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.
|
2319 | PetscAssertPointer(type,2); |
229 | |||
230 |
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.
|
2319 | PetscCall(PetscObjectTypeCompare((PetscObject)svd,type,&match)); |
231 |
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.
|
2319 | if (match) PetscFunctionReturn(PETSC_SUCCESS); |
232 | |||
233 |
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.
|
2319 | PetscCall(PetscFunctionListFind(SVDList,type,&r)); |
234 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
2319 | PetscCheck(r,PetscObjectComm((PetscObject)svd),PETSC_ERR_ARG_UNKNOWN_TYPE,"Unknown SVD type given: %s",type); |
235 | |||
236 |
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.
|
2319 | PetscTryTypeMethod(svd,destroy); |
237 |
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.
|
2319 | PetscCall(PetscMemzero(svd->ops,sizeof(struct _SVDOps))); |
238 | |||
239 | 2319 | svd->state = SVD_STATE_INITIAL; | |
240 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2319 | PetscCall(PetscObjectChangeTypeName((PetscObject)svd,type)); |
241 |
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.
|
2319 | PetscCall((*r)(svd)); |
242 |
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.
|
455 | PetscFunctionReturn(PETSC_SUCCESS); |
243 | } | ||
244 | |||
245 | /*@ | ||
246 | SVDGetType - Gets the SVD type as a string from the SVD object. | ||
247 | |||
248 | Not Collective | ||
249 | |||
250 | Input Parameter: | ||
251 | . svd - the singular value solver context | ||
252 | |||
253 | Output Parameter: | ||
254 | . type - name of SVD method | ||
255 | |||
256 | Level: intermediate | ||
257 | |||
258 | .seealso: SVDSetType() | ||
259 | @*/ | ||
260 | 582 | PetscErrorCode SVDGetType(SVD svd,SVDType *type) | |
261 | { | ||
262 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
582 | PetscFunctionBegin; |
263 |
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.
|
582 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
264 |
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.
|
582 | PetscAssertPointer(type,2); |
265 | 582 | *type = ((PetscObject)svd)->type_name; | |
266 |
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.
|
582 | PetscFunctionReturn(PETSC_SUCCESS); |
267 | } | ||
268 | |||
269 | /*@C | ||
270 | SVDRegister - Adds a method to the singular value solver package. | ||
271 | |||
272 | Not Collective | ||
273 | |||
274 | Input Parameters: | ||
275 | + name - name of a new user-defined solver | ||
276 | - function - routine to create the solver context | ||
277 | |||
278 | Notes: | ||
279 | SVDRegister() may be called multiple times to add several user-defined solvers. | ||
280 | |||
281 | Example Usage: | ||
282 | .vb | ||
283 | SVDRegister("my_solver",MySolverCreate); | ||
284 | .ve | ||
285 | |||
286 | Then, your solver can be chosen with the procedural interface via | ||
287 | $ SVDSetType(svd,"my_solver") | ||
288 | or at runtime via the option | ||
289 | $ -svd_type my_solver | ||
290 | |||
291 | Level: advanced | ||
292 | |||
293 | .seealso: SVDRegisterAll() | ||
294 | @*/ | ||
295 | 16888 | PetscErrorCode SVDRegister(const char *name,PetscErrorCode (*function)(SVD)) | |
296 | { | ||
297 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
16888 | PetscFunctionBegin; |
298 |
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.
|
16888 | PetscCall(SVDInitializePackage()); |
299 |
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.
|
16888 | PetscCall(PetscFunctionListAdd(&SVDList,name,function)); |
300 |
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.
|
3185 | PetscFunctionReturn(PETSC_SUCCESS); |
301 | } | ||
302 | |||
303 | /*@C | ||
304 | SVDMonitorRegister - Registers an SVD monitor routine that may be accessed with SVDMonitorSetFromOptions(). | ||
305 | |||
306 | Not Collective | ||
307 | |||
308 | Input Parameters: | ||
309 | + name - name of a new monitor routine | ||
310 | . vtype - a PetscViewerType for the output | ||
311 | . format - a PetscViewerFormat for the output | ||
312 | . monitor - monitor routine, see SVDMonitorRegisterFn | ||
313 | . create - creation routine, or NULL | ||
314 | - destroy - destruction routine, or NULL | ||
315 | |||
316 | Notes: | ||
317 | SVDMonitorRegister() may be called multiple times to add several user-defined monitors. | ||
318 | |||
319 | The calling sequence for the given function matches the calling sequence of SVDMonitorFn | ||
320 | functions passed to SVDMonitorSet() with the additional requirement that its final argument | ||
321 | be a PetscViewerAndFormat. | ||
322 | |||
323 | Example Usage: | ||
324 | .vb | ||
325 | SVDMonitorRegister("my_monitor",PETSCVIEWERASCII,PETSC_VIEWER_ASCII_INFO_DETAIL,MyMonitor,NULL,NULL); | ||
326 | .ve | ||
327 | |||
328 | Then, your monitor can be chosen with the procedural interface via | ||
329 | $ SVDMonitorSetFromOptions(svd,"-svd_monitor_my_monitor","my_monitor",NULL) | ||
330 | or at runtime via the option | ||
331 | $ -svd_monitor_my_monitor | ||
332 | |||
333 | Level: advanced | ||
334 | |||
335 | .seealso: SVDMonitorSet(), SVDMonitorRegisterAll() | ||
336 | @*/ | ||
337 | 16282 | PetscErrorCode SVDMonitorRegister(const char name[],PetscViewerType vtype,PetscViewerFormat format,SVDMonitorRegisterFn *monitor,SVDMonitorRegisterCreateFn *create,SVDMonitorRegisterDestroyFn *destroy) | |
338 | { | ||
339 | 16282 | char key[PETSC_MAX_PATH_LEN]; | |
340 | |||
341 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
16282 | PetscFunctionBegin; |
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.
|
16282 | PetscCall(SVDInitializePackage()); |
343 |
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.
|
16282 | PetscCall(SlepcMonitorMakeKey_Internal(name,vtype,format,key)); |
344 |
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.
|
16282 | PetscCall(PetscFunctionListAdd(&SVDMonitorList,key,monitor)); |
345 |
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.
|
16282 | if (create) PetscCall(PetscFunctionListAdd(&SVDMonitorCreateList,key,create)); |
346 |
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.
|
16282 | if (destroy) PetscCall(PetscFunctionListAdd(&SVDMonitorDestroyList,key,destroy)); |
347 |
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.
|
3185 | PetscFunctionReturn(PETSC_SUCCESS); |
348 | } | ||
349 | |||
350 | /*@ | ||
351 | SVDSetBV - Associates basis vectors objects to the singular value solver. | ||
352 | |||
353 | Collective | ||
354 | |||
355 | Input Parameters: | ||
356 | + svd - singular value solver context obtained from SVDCreate() | ||
357 | . V - the basis vectors object for right singular vectors | ||
358 | - U - the basis vectors object for left singular vectors | ||
359 | |||
360 | Note: | ||
361 | Use SVDGetBV() to retrieve the basis vectors contexts (for example, | ||
362 | to free them at the end of the computations). | ||
363 | |||
364 | Level: advanced | ||
365 | |||
366 | .seealso: SVDGetBV() | ||
367 | @*/ | ||
368 | 30 | PetscErrorCode SVDSetBV(SVD svd,BV V,BV U) | |
369 | { | ||
370 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
30 | PetscFunctionBegin; |
371 |
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.
|
30 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
372 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
30 | if (V) { |
373 |
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.
|
30 | PetscValidHeaderSpecific(V,BV_CLASSID,2); |
374 |
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.
|
30 | PetscCheckSameComm(svd,1,V,2); |
375 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(PetscObjectReference((PetscObject)V)); |
376 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
30 | PetscCall(BVDestroy(&svd->V)); |
377 | 30 | svd->V = V; | |
378 | } | ||
379 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
30 | if (U) { |
380 |
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.
|
30 | PetscValidHeaderSpecific(U,BV_CLASSID,3); |
381 |
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.
|
30 | PetscCheckSameComm(svd,1,U,3); |
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.
|
30 | PetscCall(PetscObjectReference((PetscObject)U)); |
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.
|
30 | PetscCall(BVDestroy(&svd->U)); |
384 | 30 | svd->U = U; | |
385 | } | ||
386 |
6/12✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
|
6 | PetscFunctionReturn(PETSC_SUCCESS); |
387 | } | ||
388 | |||
389 | /*@ | ||
390 | SVDGetBV - Obtain the basis vectors objects associated to the singular | ||
391 | value solver object. | ||
392 | |||
393 | Not Collective | ||
394 | |||
395 | Input Parameter: | ||
396 | . svd - singular value solver context obtained from SVDCreate() | ||
397 | |||
398 | Output Parameters: | ||
399 | + V - basis vectors context for right singular vectors | ||
400 | - U - basis vectors context for left singular vectors | ||
401 | |||
402 | Level: advanced | ||
403 | |||
404 | .seealso: SVDSetBV() | ||
405 | @*/ | ||
406 | 4627 | PetscErrorCode SVDGetBV(SVD svd,BV *V,BV *U) | |
407 | { | ||
408 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
4627 | PetscFunctionBegin; |
409 |
3/16✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
|
4627 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
410 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4627 | if (V) { |
411 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
2327 | if (!svd->V) { |
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.
|
2327 | PetscCall(BVCreate(PetscObjectComm((PetscObject)svd),&svd->V)); |
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.
|
2327 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->V,(PetscObject)svd,0)); |
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.
|
2327 | PetscCall(PetscObjectSetOptions((PetscObject)svd->V,((PetscObject)svd)->options)); |
415 | } | ||
416 | 2327 | *V = svd->V; | |
417 | } | ||
418 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4627 | if (U) { |
419 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
2307 | if (!svd->U) { |
420 |
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.
|
2307 | PetscCall(BVCreate(PetscObjectComm((PetscObject)svd),&svd->U)); |
421 |
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.
|
2307 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->U,(PetscObject)svd,0)); |
422 |
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.
|
2307 | PetscCall(PetscObjectSetOptions((PetscObject)svd->U,((PetscObject)svd)->options)); |
423 | } | ||
424 | 2307 | *U = svd->U; | |
425 | } | ||
426 |
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.
|
914 | PetscFunctionReturn(PETSC_SUCCESS); |
427 | } | ||
428 | |||
429 | /*@ | ||
430 | SVDSetDS - Associates a direct solver object to the singular value solver. | ||
431 | |||
432 | Collective | ||
433 | |||
434 | Input Parameters: | ||
435 | + svd - singular value solver context obtained from SVDCreate() | ||
436 | - ds - the direct solver object | ||
437 | |||
438 | Note: | ||
439 | Use SVDGetDS() to retrieve the direct solver context (for example, | ||
440 | to free it at the end of the computations). | ||
441 | |||
442 | Level: advanced | ||
443 | |||
444 | .seealso: SVDGetDS() | ||
445 | @*/ | ||
446 | ✗ | PetscErrorCode SVDSetDS(SVD svd,DS ds) | |
447 | { | ||
448 | ✗ | PetscFunctionBegin; | |
449 | ✗ | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); | |
450 | ✗ | PetscValidHeaderSpecific(ds,DS_CLASSID,2); | |
451 | ✗ | PetscCheckSameComm(svd,1,ds,2); | |
452 | ✗ | PetscCall(PetscObjectReference((PetscObject)ds)); | |
453 | ✗ | PetscCall(DSDestroy(&svd->ds)); | |
454 | ✗ | svd->ds = ds; | |
455 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
456 | } | ||
457 | |||
458 | /*@ | ||
459 | SVDGetDS - Obtain the direct solver object associated to the singular value | ||
460 | solver object. | ||
461 | |||
462 | Not Collective | ||
463 | |||
464 | Input Parameters: | ||
465 | . svd - singular value solver context obtained from SVDCreate() | ||
466 | |||
467 | Output Parameter: | ||
468 | . ds - direct solver context | ||
469 | |||
470 | Level: advanced | ||
471 | |||
472 | .seealso: SVDSetDS() | ||
473 | @*/ | ||
474 | 2297 | PetscErrorCode SVDGetDS(SVD svd,DS *ds) | |
475 | { | ||
476 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2297 | PetscFunctionBegin; |
477 |
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.
|
2297 | PetscValidHeaderSpecific(svd,SVD_CLASSID,1); |
478 |
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.
|
2297 | PetscAssertPointer(ds,2); |
479 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
2297 | if (!svd->ds) { |
480 |
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.
|
2297 | PetscCall(DSCreate(PetscObjectComm((PetscObject)svd),&svd->ds)); |
481 |
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.
|
2297 | PetscCall(PetscObjectIncrementTabLevel((PetscObject)svd->ds,(PetscObject)svd,0)); |
482 |
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.
|
2297 | PetscCall(PetscObjectSetOptions((PetscObject)svd->ds,((PetscObject)svd)->options)); |
483 | } | ||
484 | 2297 | *ds = svd->ds; | |
485 |
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.
|
2297 | PetscFunctionReturn(PETSC_SUCCESS); |
486 | } | ||
487 |