GCC Code Coverage Report


Directory: ./
File: src/sys/classes/ds/interface/dsops.c
Date: 2025-10-04 04:19:13
Exec Total Coverage
Lines: 374 377 99.2%
Functions: 27 27 100.0%
Branches: 1157 2610 44.3%

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 DS operations: DSSolve(), DSVectors(), etc
12 */
13
14 #include <slepc/private/dsimpl.h> /*I "slepcds.h" I*/
15
16 /*@
17 DSGetLeadingDimension - Returns the leading dimension of the allocated
18 matrices.
19
20 Not Collective
21
22 Input Parameter:
23 . ds - the direct solver context
24
25 Output Parameter:
26 . ld - leading dimension (maximum allowed dimension for the matrices)
27
28 Level: advanced
29
30 .seealso: DSAllocate(), DSSetDimensions()
31 @*/
32 364494 PetscErrorCode DSGetLeadingDimension(DS ds,PetscInt *ld)
33 {
34
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
364494 PetscFunctionBegin;
35
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.
364494 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
36
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.
364494 PetscAssertPointer(ld,2);
37 364494 *ld = ds->ld;
38
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.
364494 PetscFunctionReturn(PETSC_SUCCESS);
39 }
40
41 /*@
42 DSSetState - Change the state of the DS object.
43
44 Logically Collective
45
46 Input Parameters:
47 + ds - the direct solver context
48 - state - the new state
49
50 Notes:
51 The state indicates that the dense system is in an initial state (raw),
52 in an intermediate state (such as tridiagonal, Hessenberg or
53 Hessenberg-triangular), in a condensed state (such as diagonal, Schur or
54 generalized Schur), or in a truncated state.
55
56 This function is normally used to return to the raw state when the
57 condensed structure is destroyed.
58
59 Level: advanced
60
61 .seealso: DSGetState()
62 @*/
63 221733 PetscErrorCode DSSetState(DS ds,DSStateType state)
64 {
65
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
221733 PetscFunctionBegin;
66
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.
221733 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
67
27/62
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
221733 PetscValidLogicalCollectiveEnum(ds,state,2);
68
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
221733 switch (state) {
69 221733 case DS_STATE_RAW:
70 case DS_STATE_INTERMEDIATE:
71 case DS_STATE_CONDENSED:
72 case DS_STATE_TRUNCATED:
73
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.
221733 if (ds->state!=state) PetscCall(PetscInfo(ds,"State has changed from %s to %s\n",DSStateTypes[ds->state],DSStateTypes[state]));
74 221733 ds->state = state;
75 221733 break;
76 default:
77 SETERRQ(PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_WRONG,"Wrong state");
78 }
79
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.
221733 PetscFunctionReturn(PETSC_SUCCESS);
80 }
81
82 /*@
83 DSGetState - Returns the current state.
84
85 Not Collective
86
87 Input Parameter:
88 . ds - the direct solver context
89
90 Output Parameter:
91 . state - current state
92
93 Level: advanced
94
95 .seealso: DSSetState()
96 @*/
97 20 PetscErrorCode DSGetState(DS ds,DSStateType *state)
98 {
99
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
20 PetscFunctionBegin;
100
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(ds,DS_CLASSID,1);
101
2/8
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
20 PetscAssertPointer(state,2);
102 20 *state = ds->state;
103
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);
104 }
105
106 /*@
107 DSSetDimensions - Resize the matrices in the DS object.
108
109 Logically Collective
110
111 Input Parameters:
112 + ds - the direct solver context
113 . n - the new size
114 . l - number of locked (inactive) leading columns
115 - k - intermediate dimension (e.g., position of arrow)
116
117 Notes:
118 The internal arrays are not reallocated.
119
120 Some DS types have additional dimensions, e.g. the number of columns
121 in DSSVD. For these, you should call a specific interface function.
122
123 Use PETSC_CURRENT to leave any of the values unchanged. Use PETSC_DETERMINE
124 to set n to the leading dimension, l to the minimum value (0), and k to n/2.
125
126 Level: intermediate
127
128 .seealso: DSGetDimensions(), DSAllocate(), DSSVDSetDimensions()
129 @*/
130 297120 PetscErrorCode DSSetDimensions(DS ds,PetscInt n,PetscInt l,PetscInt k)
131 {
132 297120 PetscInt on,ol,ok;
133 297120 PetscBool issvd;
134
135
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
297120 PetscFunctionBegin;
136
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.
297120 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
137
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
297120 DSCheckAlloc(ds,1);
138
27/62
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
297120 PetscValidLogicalCollectiveInt(ds,n,2);
139
27/62
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
297120 PetscValidLogicalCollectiveInt(ds,l,3);
140
27/62
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
297120 PetscValidLogicalCollectiveInt(ds,k,4);
141 297120 on = ds->n; ol = ds->l; ok = ds->k;
142
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
297120 if (n == PETSC_DETERMINE) {
143
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
1417 ds->n = ds->extrarow? ds->ld-1: ds->ld;
144
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
295703 } else if (n != PETSC_CURRENT) {
145
2/6
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
295703 PetscCheck(n>=0 && n<=ds->ld,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of n. Must be between 0 and ld");
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.
295703 PetscCall(PetscObjectTypeCompareAny((PetscObject)ds,&issvd,DSSVD,DSGSVD,"")); /* SVD and GSVD have extra column instead of extra row */
147
5/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 10 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
295703 PetscCheck(!ds->extrarow || n<ds->ld || issvd,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"A value of n equal to ld leaves no room for extra row");
148 295703 ds->n = n;
149 }
150 297120 ds->t = ds->n; /* truncated length equal to the new dimension */
151
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
297120 if (l == PETSC_DETERMINE) {
152 4927 ds->l = 0;
153
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
292193 } else if (l != PETSC_CURRENT) {
154
2/6
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
292193 PetscCheck(l>=0 && l<=ds->n,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of l. Must be between 0 and n");
155 292193 ds->l = l;
156 }
157
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
297120 if (k == PETSC_DETERMINE) {
158 14431 ds->k = ds->n/2;
159
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
282689 } else if (k != PETSC_CURRENT) {
160
1/6
✗ 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.
282689 PetscCheck(k>=0 || k<=ds->n,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of k. Must be between 0 and n");
161 282689 ds->k = k;
162 }
163
10/12
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 8 times.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✗ Branch 10 not taken.
✓ Branch 11 taken 2 times.
297120 if (on!=ds->n || ol!=ds->l || ok!=ds->k) PetscCall(PetscInfo(ds,"New dimensions are: n=%" PetscInt_FMT ", l=%" PetscInt_FMT ", k=%" PetscInt_FMT "\n",ds->n,ds->l,ds->k));
164
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.
57217 PetscFunctionReturn(PETSC_SUCCESS);
165 }
166
167 /*@
168 DSGetDimensions - Returns the current dimensions.
169
170 Not Collective
171
172 Input Parameter:
173 . ds - the direct solver context
174
175 Output Parameters:
176 + n - the current size
177 . l - number of locked (inactive) leading columns
178 . k - intermediate dimension (e.g., position of arrow)
179 - t - truncated length
180
181 Note:
182 The t parameter makes sense only if DSTruncate() has been called.
183 Otherwise its value equals n.
184
185 Some DS types have additional dimensions, e.g. the number of columns
186 in DSSVD. For these, you should call a specific interface function.
187
188 Level: intermediate
189
190 .seealso: DSSetDimensions(), DSTruncate(), DSSVDGetDimensions()
191 @*/
192 196513 PetscErrorCode DSGetDimensions(DS ds,PetscInt *n,PetscInt *l,PetscInt *k,PetscInt *t)
193 {
194
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
196513 PetscFunctionBegin;
195
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.
196513 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
196
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
196513 DSCheckAlloc(ds,1);
197
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
196513 if (n) *n = ds->n;
198
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
196513 if (l) *l = ds->l;
199
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
196513 if (k) *k = ds->k;
200
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
196513 if (t) *t = ds->t;
201
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.
196513 PetscFunctionReturn(PETSC_SUCCESS);
202 }
203
204 /*@
205 DSTruncate - Truncates the system represented in the DS object.
206
207 Logically Collective
208
209 Input Parameters:
210 + ds - the direct solver context
211 . n - the new size
212 - trim - a flag to indicate if the factorization must be trimmed
213
214 Note:
215 The new size is set to n. Note that in some cases the new size could
216 be n+1 or n-1 to avoid breaking a 2x2 diagonal block (e.g. in real
217 Schur form). In cases where the extra row is meaningful, the first
218 n elements are kept as the extra row for the new system.
219
220 If the flag trim is turned on, it resets the locked and intermediate
221 dimensions to zero, see DSSetDimensions(), and sets the state to RAW.
222 It also cleans the extra row if being used.
223
224 The typical usage of trim=true is to truncate the Schur decomposition
225 at the end of a Krylov iteration. In this case, the state must be
226 changed to RAW so that DSVectors() computes eigenvectors from scratch.
227
228 Level: advanced
229
230 .seealso: DSSetDimensions(), DSSetExtraRow(), DSStateType
231 @*/
232 79093 PetscErrorCode DSTruncate(DS ds,PetscInt n,PetscBool trim)
233 {
234 79093 DSStateType old;
235
236
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
79093 PetscFunctionBegin;
237
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.
79093 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
238
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
79093 PetscValidType(ds,1);
239
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
79093 DSCheckAlloc(ds,1);
240
27/62
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
79093 PetscValidLogicalCollectiveInt(ds,n,2);
241
27/62
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
79093 PetscValidLogicalCollectiveBool(ds,trim,3);
242
2/6
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
79093 PetscCheck(n>=ds->l && n<=ds->n,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"Illegal value of n (%" PetscInt_FMT "). Must be between l (%" PetscInt_FMT ") and n (%" PetscInt_FMT ")",n,ds->l,ds->n);
243
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.
79093 PetscCall(PetscLogEventBegin(DS_Other,ds,0,0,0));
244
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.
79093 PetscCall(PetscFPTrapPush(PETSC_FP_TRAP_OFF));
245
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
79093 PetscUseTypeMethod(ds,truncate,n,trim);
246
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.
79093 PetscCall(PetscFPTrapPop());
247
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.
79093 PetscCall(PetscLogEventEnd(DS_Other,ds,0,0,0));
248
7/8
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 times.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 2 times.
150091 PetscCall(PetscInfo(ds,"Decomposition %s to size n=%" PetscInt_FMT "\n",trim?"trimmed":"truncated",ds->n));
249 79093 old = ds->state;
250
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
79093 ds->state = trim? DS_STATE_RAW: DS_STATE_TRUNCATED;
251
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.
79093 if (old!=ds->state) PetscCall(PetscInfo(ds,"State has changed from %s to %s\n",DSStateTypes[old],DSStateTypes[ds->state]));
252
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
79093 PetscCall(PetscObjectStateIncrease((PetscObject)ds));
253
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.
79093 PetscFunctionReturn(PETSC_SUCCESS);
254 }
255
256 /*@
257 DSMatGetSize - Returns the numbers of rows and columns of one of the DS matrices.
258
259 Not Collective
260
261 Input Parameters:
262 + ds - the direct solver context
263 - t - the requested matrix
264
265 Output Parameters:
266 + n - the number of rows
267 - m - the number of columns
268
269 Note:
270 This is equivalent to MatGetSize() on a matrix obtained with DSGetMat().
271
272 Level: developer
273
274 .seealso: DSSetDimensions(), DSGetMat()
275 @*/
276 584165 PetscErrorCode DSMatGetSize(DS ds,DSMatType t,PetscInt *m,PetscInt *n)
277 {
278 584165 PetscInt rows,cols;
279
280
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
584165 PetscFunctionBegin;
281
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.
584165 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
282
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
584165 PetscValidType(ds,1);
283
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.
584165 DSCheckValidMat(ds,t,2);
284
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.
584165 if (ds->ops->matgetsize) PetscUseTypeMethod(ds,matgetsize,t,&rows,&cols);
285 else {
286
4/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
448238 if (ds->state==DS_STATE_TRUNCATED && t>=DS_MAT_Q) rows = ds->t;
287
4/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
397668 else rows = (t==DS_MAT_A && ds->extrarow)? ds->n+1: ds->n;
288
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
448238 if (t==DS_MAT_T) cols = PetscDefined(USE_COMPLEX)? 2: 3;
289
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
424843 else if (t==DS_MAT_D) cols = 1;
290 413650 else cols = ds->n;
291 }
292
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
584165 if (m) *m = rows;
293
1/2
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
584165 if (n) *n = cols;
294
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.
113366 PetscFunctionReturn(PETSC_SUCCESS);
295 }
296
297 /*@
298 DSMatIsHermitian - Checks if one of the DS matrices is known to be Hermitian.
299
300 Not Collective
301
302 Input Parameters:
303 + ds - the direct solver context
304 - t - the requested matrix
305
306 Output Parameter:
307 . flg - the Hermitian flag
308
309 Note:
310 Does not check the matrix values directly. The flag is set according to the
311 problem structure. For instance, in DSHEP matrix A is Hermitian.
312
313 Level: developer
314
315 .seealso: DSGetMat()
316 @*/
317 583865 PetscErrorCode DSMatIsHermitian(DS ds,DSMatType t,PetscBool *flg)
318 {
319
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
583865 PetscFunctionBegin;
320
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.
583865 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
321
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
583865 PetscValidType(ds,1);
322
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.
583865 DSCheckValidMat(ds,t,2);
323
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.
583865 PetscAssertPointer(flg,3);
324 583865 *flg = PETSC_FALSE;
325
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.
583865 PetscTryTypeMethod(ds,hermitian,t,flg);
326
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.
113306 PetscFunctionReturn(PETSC_SUCCESS);
327 }
328
329 18706 PetscErrorCode DSGetTruncateSize_Default(DS ds,PetscInt l,PetscInt n,PetscInt *k)
330 {
331 #if !defined(PETSC_USE_COMPLEX)
332 9274 PetscScalar val;
333 #endif
334
335
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
18706 PetscFunctionBegin;
336 #if !defined(PETSC_USE_COMPLEX)
337
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
9274 PetscCall(MatGetValue(ds->omat[DS_MAT_A],l+(*k),l+(*k)-1,&val));
338
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
9274 if (val != 0.0) {
339
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
2261 if (l+(*k)<n-1) (*k)++;
340 else (*k)--;
341 }
342 #endif
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.
11155 PetscFunctionReturn(PETSC_SUCCESS);
344 }
345
346 /*@
347 DSGetTruncateSize - Gets the correct size to be used in DSTruncate()
348 to avoid breaking a 2x2 block.
349
350 Not Collective
351
352 Input Parameters:
353 + ds - the direct solver context
354 . l - the size of the locked part (set to 0 to use ds->l)
355 - n - the total matrix size (set to 0 to use ds->n)
356
357 Output Parameter:
358 . k - the wanted truncation size (possibly modified)
359
360 Notes:
361 This should be called before DSTruncate() to make sure that the truncation
362 does not break a 2x2 block corresponding to a complex conjugate eigenvalue.
363
364 The total size is n (either user-provided or ds->n if 0 is passed). The
365 size where the truncation is intended is equal to l+k (where l can be
366 equal to the locked size ds->l if set to 0). Then if there is a 2x2 block
367 at the l+k limit, the value of k is increased (or decreased) by 1.
368
369 Level: advanced
370
371 .seealso: DSTruncate(), DSSetDimensions()
372 @*/
373 29497 PetscErrorCode DSGetTruncateSize(DS ds,PetscInt l,PetscInt n,PetscInt *k)
374 {
375
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
29497 PetscFunctionBegin;
376
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.
29497 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
377
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
29497 DSCheckAlloc(ds,1);
378
27/62
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
29497 PetscValidLogicalCollectiveInt(ds,l,2);
379
27/62
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
29497 PetscValidLogicalCollectiveInt(ds,n,3);
380
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.
29497 PetscAssertPointer(k,4);
381
9/14
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 10 times.
✓ Branch 7 taken 8 times.
✗ Branch 8 not taken.
✓ Branch 9 taken 10 times.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 2 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
29497 PetscUseTypeMethod(ds,gettruncatesize,l?l:ds->l,n?n:ds->n,k);
382
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.
5689 PetscFunctionReturn(PETSC_SUCCESS);
383 }
384
385 /*@
386 DSGetMat - Returns a sequential dense Mat object containing the requested
387 matrix.
388
389 Not Collective
390
391 Input Parameters:
392 + ds - the direct solver context
393 - m - the requested matrix
394
395 Output Parameter:
396 . A - Mat object
397
398 Notes:
399 The returned Mat has sizes equal to the current DS dimensions (nxm),
400 and contains the values that would be obtained with DSGetArray()
401 (not DSGetArrayReal()). If the DS was truncated, then the number of rows
402 is equal to the dimension prior to truncation, see DSTruncate().
403 The communicator is always PETSC_COMM_SELF.
404
405 It is implemented with MatDenseGetSubMatrix(), and when no longer needed
406 the user must call DSRestoreMat() which will invoke MatDenseRestoreSubMatrix().
407
408 For matrices DS_MAT_T and DS_MAT_D, this function will return a Mat object
409 that cannot be used directly for computations, since it uses compact storage
410 (three and one diagonals for T and D, respectively). In complex scalars, the
411 internal array stores real values, so it is sufficient with 2 columns for T.
412
413 Level: advanced
414
415 .seealso: DSRestoreMat(), DSSetDimensions(), DSGetArray(), DSGetArrayReal(), DSTruncate()
416 @*/
417 583865 PetscErrorCode DSGetMat(DS ds,DSMatType m,Mat *A)
418 {
419 583865 PetscInt rows=0,cols=0;
420 583865 PetscBool flg;
421
422
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
583865 PetscFunctionBegin;
423
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.
583865 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
424
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
583865 DSCheckAlloc(ds,1);
425
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.
583865 DSCheckValidMat(ds,m,2);
426
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.
583865 PetscAssertPointer(A,3);
427
428
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.
583865 PetscCall(DSMatGetSize(ds,m,&rows,&cols));
429
2/6
✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 10 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
583865 PetscCheck(rows && cols,PetscObjectComm((PetscObject)ds),PETSC_ERR_ORDER,"Must call DSSetDimensions() first");
430
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.
583865 PetscCall(MatDenseGetSubMatrix(ds->omat[m],0,rows,0,cols,A));
431
432 /* set Hermitian flag */
433
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.
583865 PetscCall(DSMatIsHermitian(ds,m,&flg));
434
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.
583865 PetscCall(MatSetOption(*A,MAT_SYMMETRIC,flg));
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.
583865 PetscCall(MatSetOption(*A,MAT_HERMITIAN,flg));
436
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.
113306 PetscFunctionReturn(PETSC_SUCCESS);
437 }
438
439 /*@
440 DSRestoreMat - Restores the matrix after DSGetMat() was called.
441
442 Not Collective
443
444 Input Parameters:
445 + ds - the direct solver context
446 . m - the requested matrix
447 - A - the fetched Mat object
448
449 Note:
450 A call to this function must match a previous call of DSGetMat().
451
452 Level: advanced
453
454 .seealso: DSGetMat(), DSRestoreArray(), DSRestoreArrayReal()
455 @*/
456 583865 PetscErrorCode DSRestoreMat(DS ds,DSMatType m,Mat *A)
457 {
458
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
583865 PetscFunctionBegin;
459
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.
583865 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
460
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
583865 DSCheckAlloc(ds,1);
461
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.
583865 DSCheckValidMat(ds,m,2);
462
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.
583865 PetscAssertPointer(A,3);
463
464
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.
583865 PetscCall(MatDenseRestoreSubMatrix(ds->omat[m],A));
465
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
583865 PetscCall(PetscObjectStateIncrease((PetscObject)ds));
466
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.
583865 PetscFunctionReturn(PETSC_SUCCESS);
467 }
468
469 /*@
470 DSGetMatAndColumn - Returns a sequential dense Mat object containing the requested
471 matrix and one of its columns as a Vec.
472
473 Not Collective
474
475 Input Parameters:
476 + ds - the direct solver context
477 . m - the requested matrix
478 - col - the requested column
479
480 Output Parameters:
481 + A - Mat object
482 - v - Vec object (the column)
483
484 Notes:
485 This calls DSGetMat() and then it extracts the selected column.
486 The user must call DSRestoreMatAndColumn() to recover the original state.
487 For matrices DS_MAT_T and DS_MAT_D, in complex scalars this function implies
488 copying from real values stored internally to scalar values in the Vec.
489
490 Level: advanced
491
492 .seealso: DSRestoreMatAndColumn(), DSGetMat()
493 @*/
494 13685 PetscErrorCode DSGetMatAndColumn(DS ds,DSMatType m,PetscInt col,Mat *A,Vec *v)
495 {
496
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
13685 PetscFunctionBegin;
497
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.
13685 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
498
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
13685 DSCheckAlloc(ds,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.
13685 DSCheckValidMat(ds,m,2);
500
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.
13685 PetscAssertPointer(A,4);
501
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.
13685 PetscAssertPointer(v,5);
502
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.
13685 PetscCall(DSGetMat(ds,m,A));
504
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
13685 if (PetscDefined(USE_COMPLEX) && (m==DS_MAT_T || m==DS_MAT_D)) {
505 2232 const PetscScalar *as;
506 2232 PetscScalar *vs;
507 2232 PetscReal *ar;
508 2232 PetscInt i,n,lda;
509
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(MatCreateVecs(*A,NULL,v));
510
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(VecGetSize(*v,&n));
511
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(MatDenseGetLDA(*A,&lda));
512
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(MatDenseGetArrayRead(*A,&as));
513
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(VecGetArrayWrite(*v,&vs));
514 2232 ar = (PetscReal*)as;
515
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
36131 for (i=0;i<n;i++) vs[i] = ar[i+col*lda];
516
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(VecRestoreArrayWrite(*v,&vs));
517
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(MatDenseRestoreArrayRead(*A,&as));
518
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
11453 } else PetscCall(MatDenseGetColumnVec(*A,col,v));
519
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.
2719 PetscFunctionReturn(PETSC_SUCCESS);
520 }
521
522 /*@
523 DSRestoreMatAndColumn - Restores the matrix and vector after DSGetMatAndColumn()
524 was called.
525
526 Not Collective
527
528 Input Parameters:
529 + ds - the direct solver context
530 . m - the requested matrix
531 . col - the requested column
532 . A - the fetched Mat object
533 - v - the fetched Vec object
534
535 Note:
536 A call to this function must match a previous call of DSGetMatAndColumn().
537
538 Level: advanced
539
540 .seealso: DSGetMatAndColumn(), DSRestoreMat()
541 @*/
542 13685 PetscErrorCode DSRestoreMatAndColumn(DS ds,DSMatType m,PetscInt col,Mat *A,Vec *v)
543 {
544
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
13685 PetscFunctionBegin;
545
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.
13685 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
546
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
13685 DSCheckAlloc(ds,1);
547
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.
13685 DSCheckValidMat(ds,m,2);
548
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.
13685 PetscAssertPointer(A,4);
549
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.
13685 PetscAssertPointer(v,5);
550
551
1/2
✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
13685 if (PetscDefined(USE_COMPLEX) && (m==DS_MAT_T || m==DS_MAT_D)) {
552 2232 const PetscScalar *vs;
553 2232 PetscScalar *as;
554 2232 PetscReal *ar;
555 2232 PetscInt i,n,lda;
556
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(VecGetSize(*v,&n));
557
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(MatDenseGetLDA(*A,&lda));
558
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(MatDenseGetArray(*A,&as));
559
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(VecGetArrayRead(*v,&vs));
560 2232 ar = (PetscReal*)as;
561
2/2
✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
36131 for (i=0;i<n;i++) ar[i+col*lda] = PetscRealPart(vs[i]);
562
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(VecRestoreArrayRead(*v,&vs));
563
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(MatDenseRestoreArray(*A,&as));
564
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
2232 PetscCall(VecDestroy(v));
565
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
11453 } else PetscCall(MatDenseRestoreColumnVec(*A,col,v));
566
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.
13685 PetscCall(DSRestoreMat(ds,m,A));
567
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.
2719 PetscFunctionReturn(PETSC_SUCCESS);
568 }
569
570 /*@C
571 DSGetArray - Returns a pointer to the internal array of one of the
572 matrices. You MUST call DSRestoreArray() when you no longer
573 need to access the array.
574
575 Not Collective
576
577 Input Parameters:
578 + ds - the direct solver context
579 - m - the requested matrix
580
581 Output Parameter:
582 . a - pointer to the values
583
584 Note:
585 To get read-only access, use DSGetMat() followed by MatDenseGetArrayRead().
586
587 Level: advanced
588
589 .seealso: DSRestoreArray(), DSGetArrayReal()
590 @*/
591 628830 PetscErrorCode DSGetArray(DS ds,DSMatType m,PetscScalar *a[])
592 {
593
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
628830 PetscFunctionBegin;
594
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.
628830 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
595
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
628830 DSCheckAlloc(ds,1);
596
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.
628830 DSCheckValidMat(ds,m,2);
597
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.
628830 PetscAssertPointer(a,3);
598
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.
628830 PetscCall(MatDenseGetArray(ds->omat[m],a));
599
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.
125816 PetscFunctionReturn(PETSC_SUCCESS);
600 }
601
602 /*@C
603 DSRestoreArray - Restores the matrix after DSGetArray() was called.
604
605 Not Collective
606
607 Input Parameters:
608 + ds - the direct solver context
609 . m - the requested matrix
610 - a - pointer to the values
611
612 Level: advanced
613
614 .seealso: DSGetArray(), DSGetArrayReal()
615 @*/
616 627761 PetscErrorCode DSRestoreArray(DS ds,DSMatType m,PetscScalar *a[])
617 {
618
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
627761 PetscFunctionBegin;
619
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.
627761 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
620
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
627761 DSCheckAlloc(ds,1);
621
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.
627761 DSCheckValidMat(ds,m,2);
622
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.
627761 PetscAssertPointer(a,3);
623
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.
627761 PetscCall(MatDenseRestoreArray(ds->omat[m],a));
624
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
627761 PetscCall(PetscObjectStateIncrease((PetscObject)ds));
625
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.
627761 PetscFunctionReturn(PETSC_SUCCESS);
626 }
627
628 /*@C
629 DSGetArrayReal - Returns a real pointer to the internal array of T or D.
630 You MUST call DSRestoreArrayReal() when you no longer need to access the array.
631
632 Not Collective
633
634 Input Parameters:
635 + ds - the direct solver context
636 - m - the requested matrix
637
638 Output Parameter:
639 . a - pointer to the values
640
641 Note:
642 This function can be used only for DS_MAT_T and DS_MAT_D. These matrices always
643 store real values, even in complex scalars, that is why the returned pointer is
644 PetscReal.
645
646 Level: advanced
647
648 .seealso: DSRestoreArrayReal(), DSGetArray()
649 @*/
650 936202 PetscErrorCode DSGetArrayReal(DS ds,DSMatType m,PetscReal *a[])
651 {
652 #if defined(PETSC_USE_COMPLEX)
653 365741 PetscScalar *as;
654 #endif
655
656
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
936202 PetscFunctionBegin;
657
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.
936202 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
658
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
936202 DSCheckAlloc(ds,1);
659
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.
936202 DSCheckValidMatReal(ds,m,2);
660
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.
936202 PetscAssertPointer(a,3);
661 #if defined(PETSC_USE_COMPLEX)
662
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
365741 PetscCall(MatDenseGetArray(ds->omat[m],&as));
663 365741 *a = (PetscReal*)as;
664 #else
665
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
570461 PetscCall(MatDenseGetArray(ds->omat[m],a));
666 #endif
667
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.
473946 PetscFunctionReturn(PETSC_SUCCESS);
668 }
669
670 /*@C
671 DSRestoreArrayReal - Restores the matrix after DSGetArrayReal() was called.
672
673 Not Collective
674
675 Input Parameters:
676 + ds - the direct solver context
677 . m - the requested matrix
678 - a - pointer to the values
679
680 Level: advanced
681
682 .seealso: DSGetArrayReal(), DSGetArray()
683 @*/
684 936196 PetscErrorCode DSRestoreArrayReal(DS ds,DSMatType m,PetscReal *a[])
685 {
686 #if defined(PETSC_USE_COMPLEX)
687 365735 PetscScalar *as;
688 #endif
689
690
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
936196 PetscFunctionBegin;
691
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.
936196 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
692
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
936196 DSCheckAlloc(ds,1);
693
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.
936196 DSCheckValidMatReal(ds,m,2);
694
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.
936196 PetscAssertPointer(a,3);
695 #if defined(PETSC_USE_COMPLEX)
696
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
365735 PetscCall(MatDenseRestoreArray(ds->omat[m],&as));
697 365735 *a = NULL;
698 #else
699
4/6
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
570461 PetscCall(MatDenseRestoreArray(ds->omat[m],a));
700 #endif
701
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
936196 PetscCall(PetscObjectStateIncrease((PetscObject)ds));
702
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.
936196 PetscFunctionReturn(PETSC_SUCCESS);
703 }
704
705 /*@
706 DSSolve - Solves the problem.
707
708 Logically Collective
709
710 Input Parameters:
711 + ds - the direct solver context
712 . eigr - array to store the computed eigenvalues (real part)
713 - eigi - array to store the computed eigenvalues (imaginary part)
714
715 Note:
716 This call brings the dense system to condensed form. No ordering
717 of the eigenvalues is enforced (for this, call DSSort() afterwards).
718
719 Level: intermediate
720
721 .seealso: DSSort(), DSStateType
722 @*/
723 221779 PetscErrorCode DSSolve(DS ds,PetscScalar eigr[],PetscScalar eigi[])
724 {
725
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
221779 PetscFunctionBegin;
726
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.
221779 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
727
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
221779 PetscValidType(ds,1);
728
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
221779 DSCheckAlloc(ds,1);
729
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.
221779 PetscAssertPointer(eigr,2);
730
8/14
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
221779 if (ds->state>=DS_STATE_CONDENSED) PetscFunctionReturn(PETSC_SUCCESS);
731
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
221515 PetscCheck(ds->ops->solve[ds->method],PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_OUTOFRANGE,"The specified method number does not exist for this DS");
732
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.
221515 PetscCall(PetscInfo(ds,"Starting solve with problem sizes: n=%" PetscInt_FMT ", l=%" PetscInt_FMT ", k=%" PetscInt_FMT "\n",ds->n,ds->l,ds->k));
733
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.
221515 PetscCall(PetscLogEventBegin(DS_Solve,ds,0,0,0));
734
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.
221515 PetscCall(PetscFPTrapPush(PETSC_FP_TRAP_OFF));
735
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
221515 PetscUseTypeMethod(ds,solve[ds->method],eigr,eigi);
736
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.
221515 PetscCall(PetscFPTrapPop());
737
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.
221515 PetscCall(PetscLogEventEnd(DS_Solve,ds,0,0,0));
738
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.
221515 PetscCall(PetscInfo(ds,"State has changed from %s to CONDENSED\n",DSStateTypes[ds->state]));
739 221515 ds->state = DS_STATE_CONDENSED;
740
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
221515 PetscCall(PetscObjectStateIncrease((PetscObject)ds));
741
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.
221515 PetscFunctionReturn(PETSC_SUCCESS);
742 }
743
744 /*@
745 DSSort - Sorts the result of DSSolve() according to a given sorting
746 criterion.
747
748 Logically Collective
749
750 Input Parameters:
751 + ds - the direct solver context
752 . rr - (optional) array containing auxiliary values (real part)
753 - ri - (optional) array containing auxiliary values (imaginary part)
754
755 Input/Output Parameters:
756 + eigr - array containing the computed eigenvalues (real part)
757 . eigi - array containing the computed eigenvalues (imaginary part)
758 - k - (optional) number of elements in the leading group
759
760 Notes:
761 This routine sorts the arrays provided in eigr and eigi, and also
762 sorts the dense system stored inside ds (assumed to be in condensed form).
763 The sorting criterion is specified with DSSetSlepcSC().
764
765 If arrays rr and ri are provided, then a (partial) reordering based on these
766 values rather than on the eigenvalues is performed. In symmetric problems
767 a total order is obtained (parameter k is ignored), but otherwise the result
768 is sorted only partially. In this latter case, it is only guaranteed that
769 all the first k elements satisfy the comparison with any of the last n-k
770 elements. The output value of parameter k is the final number of elements in
771 the first set.
772
773 Level: intermediate
774
775 .seealso: DSSolve(), DSSetSlepcSC(), DSSortWithPermutation()
776 @*/
777 302383 PetscErrorCode DSSort(DS ds,PetscScalar eigr[],PetscScalar eigi[],PetscScalar rr[],PetscScalar ri[],PetscInt *k)
778 {
779 302383 PetscInt i;
780
781
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
302383 PetscFunctionBegin;
782
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.
302383 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
783
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
302383 PetscValidType(ds,1);
784
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
302383 DSCheckSolved(ds,1);
785
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.
302383 PetscAssertPointer(eigr,2);
786
3/6
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
302383 if (rr) PetscAssertPointer(rr,4);
787
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
302383 PetscCheck(ds->state<DS_STATE_TRUNCATED,PetscObjectComm((PetscObject)ds),PETSC_ERR_ORDER,"Cannot sort a truncated DS");
788
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
302383 PetscCheck(ds->sc,PetscObjectComm((PetscObject)ds),PETSC_ERR_ORDER,"Must provide a sorting criterion first");
789
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
302383 PetscCheck(!k || rr,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_WRONG,"Argument k can only be used together with rr");
790
791
2/2
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
4469616 for (i=0;i<ds->n;i++) ds->perm[i] = i; /* initialize to trivial permutation */
792
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.
302383 PetscCall(PetscLogEventBegin(DS_Other,ds,0,0,0));
793
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.
302383 PetscCall(PetscFPTrapPush(PETSC_FP_TRAP_OFF));
794
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
302383 PetscUseTypeMethod(ds,sort,eigr,eigi,rr,ri,k);
795
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.
302383 PetscCall(PetscFPTrapPop());
796
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.
302383 PetscCall(PetscLogEventEnd(DS_Other,ds,0,0,0));
797
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
302383 PetscCall(PetscObjectStateIncrease((PetscObject)ds));
798
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.
302383 PetscCall(PetscInfo(ds,"Finished sorting\n"));
799
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.
58290 PetscFunctionReturn(PETSC_SUCCESS);
800 }
801
802 /*@
803 DSSortWithPermutation - Reorders the result of DSSolve() according to a given
804 permutation.
805
806 Logically Collective
807
808 Input Parameters:
809 + ds - the direct solver context
810 - perm - permutation that indicates the new ordering
811
812 Input/Output Parameters:
813 + eigr - array with the reordered eigenvalues (real part)
814 - eigi - array with the reordered eigenvalues (imaginary part)
815
816 Notes:
817 This routine reorders the arrays provided in eigr and eigi, and also the dense
818 system stored inside ds (assumed to be in condensed form). There is no sorting
819 criterion, as opposed to DSSort(). Instead, the new ordering is given in argument perm.
820
821 Level: advanced
822
823 .seealso: DSSolve(), DSSort()
824 @*/
825 10 PetscErrorCode DSSortWithPermutation(DS ds,PetscInt perm[],PetscScalar eigr[],PetscScalar eigi[])
826 {
827
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
10 PetscFunctionBegin;
828
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.
10 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
829
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
10 PetscValidType(ds,1);
830
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
10 DSCheckSolved(ds,1);
831
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.
10 PetscAssertPointer(perm,2);
832
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.
10 PetscAssertPointer(eigr,3);
833
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
10 PetscCheck(ds->state<DS_STATE_TRUNCATED,PetscObjectComm((PetscObject)ds),PETSC_ERR_ORDER,"Cannot sort a truncated DS");
834
835
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(PetscLogEventBegin(DS_Other,ds,0,0,0));
836
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(PetscFPTrapPush(PETSC_FP_TRAP_OFF));
837
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
10 PetscUseTypeMethod(ds,sortperm,perm,eigr,eigi);
838
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(PetscFPTrapPop());
839
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(PetscLogEventEnd(DS_Other,ds,0,0,0));
840
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
10 PetscCall(PetscObjectStateIncrease((PetscObject)ds));
841
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(PetscInfo(ds,"Finished sorting\n"));
842
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);
843 }
844
845 /*@
846 DSSynchronize - Make sure that all processes have the same data, performing
847 communication if necessary.
848
849 Collective
850
851 Input Parameter:
852 . ds - the direct solver context
853
854 Input/Output Parameters:
855 + eigr - (optional) array with the computed eigenvalues (real part)
856 - eigi - (optional) array with the computed eigenvalues (imaginary part)
857
858 Notes:
859 When the DS has been created with a communicator with more than one process,
860 the internal data, especially the computed matrices, may diverge in the
861 different processes. This happens when using multithreaded BLAS and may
862 cause numerical issues in some ill-conditioned problems. This function
863 performs the necessary communication among the processes so that the
864 internal data is exactly equal in all of them.
865
866 Depending on the parallel mode as set with DSSetParallel(), this function
867 will either do nothing or synchronize the matrices computed by DSSolve()
868 and DSSort(). The arguments eigr and eigi are typically those used in the
869 calls to DSSolve() and DSSort().
870
871 Level: developer
872
873 .seealso: DSSetParallel(), DSSolve(), DSSort()
874 @*/
875 219011 PetscErrorCode DSSynchronize(DS ds,PetscScalar eigr[],PetscScalar eigi[])
876 {
877 219011 PetscMPIInt size;
878
879
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
219011 PetscFunctionBegin;
880
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.
219011 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
881
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
219011 PetscValidType(ds,1);
882
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
219011 DSCheckAlloc(ds,1);
883
14/28
✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 8 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.
✓ 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.
219011 PetscCallMPI(MPI_Comm_size(PetscObjectComm((PetscObject)ds),&size));
884
4/4
✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 10 times.
219011 if (size>1 && ds->pmode==DS_PARALLEL_SYNCHRONIZED) {
885
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.
3464 PetscCall(PetscLogEventBegin(DS_Synchronize,ds,0,0,0));
886
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
3464 PetscUseTypeMethod(ds,synchronize,eigr,eigi);
887
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.
3464 PetscCall(PetscLogEventEnd(DS_Synchronize,ds,0,0,0));
888
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
3464 PetscCall(PetscObjectStateIncrease((PetscObject)ds));
889
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.
3464 PetscCall(PetscInfo(ds,"Synchronization completed (%s)\n",DSParallelTypes[ds->pmode]));
890 }
891
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.
42086 PetscFunctionReturn(PETSC_SUCCESS);
892 }
893
894 /*@
895 DSVectors - Compute vectors associated to the dense system such
896 as eigenvectors.
897
898 Logically Collective
899
900 Input Parameters:
901 + ds - the direct solver context
902 - mat - the matrix, used to indicate which vectors are required
903
904 Input/Output Parameter:
905 . j - (optional) index of vector to be computed
906
907 Output Parameter:
908 . rnorm - (optional) computed residual norm
909
910 Notes:
911 Allowed values for mat are DS_MAT_X, DS_MAT_Y, DS_MAT_U and DS_MAT_V, to
912 compute right or left eigenvectors, or left or right singular vectors,
913 respectively.
914
915 If NULL is passed in argument j then all vectors are computed,
916 otherwise j indicates which vector must be computed. In real non-symmetric
917 problems, on exit the index j will be incremented when a complex conjugate
918 pair is found.
919
920 This function can be invoked after the dense problem has been solved,
921 to get the residual norm estimate of the associated Ritz pair. In that
922 case, the relevant information is returned in rnorm.
923
924 For computing eigenvectors, LAPACK's _trevc is used so the matrix must
925 be in (quasi-)triangular form, or call DSSolve() first.
926
927 Level: intermediate
928
929 .seealso: DSSolve()
930 @*/
931 473473 PetscErrorCode DSVectors(DS ds,DSMatType mat,PetscInt *j,PetscReal *rnorm)
932 {
933
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
473473 PetscFunctionBegin;
934
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.
473473 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
935
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
473473 PetscValidType(ds,1);
936
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
473473 DSCheckAlloc(ds,1);
937
27/62
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 2 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 2 times.
✓ Branch 16 taken 2 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 2 times.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✓ Branch 24 taken 2 times.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✓ Branch 28 taken 2 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 2 times.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
✓ Branch 34 taken 2 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 2 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 40 not taken.
✓ Branch 41 taken 2 times.
✗ Branch 42 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✓ Branch 45 taken 2 times.
✓ Branch 46 taken 2 times.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 2 times.
✓ Branch 50 taken 2 times.
✗ Branch 51 not taken.
✓ Branch 52 taken 2 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 2 times.
✗ Branch 56 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✓ Branch 59 taken 2 times.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
473473 PetscValidLogicalCollectiveEnum(ds,mat,2);
938
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
473473 PetscCheck(mat<DS_NUM_MAT,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_WRONG,"Invalid matrix");
939
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
473473 PetscCheck(!rnorm || j,PetscObjectComm((PetscObject)ds),PETSC_ERR_ORDER,"Must give a value of j");
940
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.
473473 if (!ds->omat[mat]) PetscCall(DSAllocateMat_Private(ds,mat));
941
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.
473473 if (!j) PetscCall(PetscInfo(ds,"Computing all vectors on %s\n",DSMatName[mat]));
942
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.
473473 PetscCall(PetscLogEventBegin(DS_Vectors,ds,0,0,0));
943
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.
473473 PetscCall(PetscFPTrapPush(PETSC_FP_TRAP_OFF));
944
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
473473 PetscUseTypeMethod(ds,vectors,mat,j,rnorm);
945
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.
473473 PetscCall(PetscFPTrapPop());
946
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.
473473 PetscCall(PetscLogEventEnd(DS_Vectors,ds,0,0,0));
947
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
473473 PetscCall(PetscObjectStateIncrease((PetscObject)ds));
948
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.
473473 PetscFunctionReturn(PETSC_SUCCESS);
949 }
950
951 /*@
952 DSUpdateExtraRow - Performs all necessary operations so that the extra
953 row gets up-to-date after a call to DSSolve().
954
955 Logically Collective
956
957 Input Parameters:
958 . ds - the direct solver context
959
960 Level: advanced
961
962 .seealso: DSSolve(), DSSetExtraRow()
963 @*/
964 94969 PetscErrorCode DSUpdateExtraRow(DS ds)
965 {
966
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
94969 PetscFunctionBegin;
967
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.
94969 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
968
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
94969 PetscValidType(ds,1);
969
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
94969 DSCheckAlloc(ds,1);
970
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
94969 PetscCheck(ds->extrarow,PetscObjectComm((PetscObject)ds),PETSC_ERR_ARG_WRONGSTATE,"Should have called DSSetExtraRow");
971
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.
94969 PetscCall(PetscInfo(ds,"Updating extra row\n"));
972
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.
94969 PetscCall(PetscLogEventBegin(DS_Other,ds,0,0,0));
973
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.
94969 PetscCall(PetscFPTrapPush(PETSC_FP_TRAP_OFF));
974
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
94969 PetscUseTypeMethod(ds,update);
975
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.
94969 PetscCall(PetscFPTrapPop());
976
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.
94969 PetscCall(PetscLogEventEnd(DS_Other,ds,0,0,0));
977
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.
17719 PetscFunctionReturn(PETSC_SUCCESS);
978 }
979
980 /*@
981 DSCond - Compute the condition number.
982
983 Logically Collective
984
985 Input Parameters:
986 + ds - the direct solver context
987 - cond - the computed condition number
988
989 Notes:
990 In standard eigenvalue problems, returns the inf-norm condition number of the first
991 matrix, computed as cond(A) = norm(A)*norm(inv(A)).
992
993 In GSVD problems, returns the maximum of cond(A) and cond(B), where cond(.) is
994 computed as the ratio of the largest and smallest singular values.
995
996 Does not take into account the extra row.
997
998 Level: advanced
999
1000 .seealso: DSSolve(), DSSetExtraRow()
1001 @*/
1002 1972 PetscErrorCode DSCond(DS ds,PetscReal *cond)
1003 {
1004
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
1972 PetscFunctionBegin;
1005
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.
1972 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
1006
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1972 PetscValidType(ds,1);
1007
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
1972 DSCheckAlloc(ds,1);
1008
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.
1972 PetscAssertPointer(cond,2);
1009
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.
1972 PetscCall(PetscLogEventBegin(DS_Other,ds,0,0,0));
1010
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.
1972 PetscCall(PetscFPTrapPush(PETSC_FP_TRAP_OFF));
1011
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
1972 PetscUseTypeMethod(ds,cond,cond);
1012
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.
1972 PetscCall(PetscFPTrapPop());
1013
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.
1972 PetscCall(PetscLogEventEnd(DS_Other,ds,0,0,0));
1014
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.
1972 PetscCall(PetscInfo(ds,"Computed condition number = %g\n",(double)*cond));
1015
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.
366 PetscFunctionReturn(PETSC_SUCCESS);
1016 }
1017
1018 /*@
1019 DSTranslateHarmonic - Computes a translation of the dense system.
1020
1021 Logically Collective
1022
1023 Input Parameters:
1024 + ds - the direct solver context
1025 . tau - the translation amount
1026 . beta - last component of vector b
1027 - recover - boolean flag to indicate whether to recover or not
1028
1029 Output Parameters:
1030 + g - the computed vector (optional)
1031 - gamma - scale factor (optional)
1032
1033 Notes:
1034 This function is intended for use in the context of Krylov methods only.
1035 It computes a translation of a Krylov decomposition in order to extract
1036 eigenpair approximations by harmonic Rayleigh-Ritz.
1037 The matrix is updated as A + g*b' where g = (A-tau*eye(n))'\b and
1038 vector b is assumed to be beta*e_n^T.
1039
1040 The gamma factor is defined as sqrt(1+g'*g) and can be interpreted as
1041 the factor by which the residual of the Krylov decomposition is scaled.
1042
1043 If the recover flag is activated, the computed translation undoes the
1044 translation done previously. In that case, parameter tau is ignored.
1045
1046 Level: developer
1047
1048 .seealso: DSTranslateRKS()
1049 @*/
1050 995 PetscErrorCode DSTranslateHarmonic(DS ds,PetscScalar tau,PetscReal beta,PetscBool recover,PetscScalar *g,PetscReal *gamma)
1051 {
1052
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
995 PetscFunctionBegin;
1053
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.
995 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
1054
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
995 PetscValidType(ds,1);
1055
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
995 DSCheckAlloc(ds,1);
1056
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.
995 if (recover) PetscCall(PetscInfo(ds,"Undoing the translation\n"));
1057
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.
722 else PetscCall(PetscInfo(ds,"Computing the translation\n"));
1058
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.
995 PetscCall(PetscLogEventBegin(DS_Other,ds,0,0,0));
1059
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.
995 PetscCall(PetscFPTrapPush(PETSC_FP_TRAP_OFF));
1060
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
995 PetscUseTypeMethod(ds,transharm,tau,beta,recover,g,gamma);
1061
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.
995 PetscCall(PetscFPTrapPop());
1062
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.
995 PetscCall(PetscLogEventEnd(DS_Other,ds,0,0,0));
1063 995 ds->state = DS_STATE_RAW;
1064
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
995 PetscCall(PetscObjectStateIncrease((PetscObject)ds));
1065
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.
995 PetscFunctionReturn(PETSC_SUCCESS);
1066 }
1067
1068 /*@
1069 DSTranslateRKS - Computes a modification of the dense system corresponding
1070 to an update of the shift in a rational Krylov method.
1071
1072 Logically Collective
1073
1074 Input Parameters:
1075 + ds - the direct solver context
1076 - alpha - the translation amount
1077
1078 Notes:
1079 This function is intended for use in the context of Krylov methods only.
1080 It takes the leading (k+1,k) submatrix of A, containing the truncated
1081 Rayleigh quotient of a Krylov-Schur relation computed from a shift
1082 sigma1 and transforms it to obtain a Krylov relation as if computed
1083 from a different shift sigma2. The new matrix is computed as
1084 1.0/alpha*(eye(k)-Q*inv(R)), where [Q,R]=qr(eye(k)-alpha*A) and
1085 alpha = sigma1-sigma2.
1086
1087 Matrix Q is placed in DS_MAT_Q so that it can be used to update the
1088 Krylov basis.
1089
1090 Level: developer
1091
1092 .seealso: DSTranslateHarmonic()
1093 @*/
1094 124 PetscErrorCode DSTranslateRKS(DS ds,PetscScalar alpha)
1095 {
1096
1/2
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
124 PetscFunctionBegin;
1097
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.
124 PetscValidHeaderSpecific(ds,DS_CLASSID,1);
1098
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
124 PetscValidType(ds,1);
1099
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
124 DSCheckAlloc(ds,1);
1100
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.
124 PetscCall(PetscInfo(ds,"Translating with alpha=%g\n",(double)PetscRealPart(alpha)));
1101
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.
124 PetscCall(DSSetCompact(ds,PETSC_FALSE));
1102
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.
124 PetscCall(PetscLogEventBegin(DS_Other,ds,0,0,0));
1103
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.
124 PetscCall(PetscFPTrapPush(PETSC_FP_TRAP_OFF));
1104
5/10
✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 8 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✓ Branch 9 taken 2 times.
124 PetscUseTypeMethod(ds,transrks,alpha);
1105
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.
124 PetscCall(PetscFPTrapPop());
1106
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.
124 PetscCall(PetscLogEventEnd(DS_Other,ds,0,0,0));
1107 124 ds->state = DS_STATE_RAW;
1108
2/4
✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
124 PetscCall(PetscObjectStateIncrease((PetscObject)ds));
1109
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.
124 PetscFunctionReturn(PETSC_SUCCESS);
1110 }
1111