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 |