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 | #include <slepc/private/slepcimpl.h> /*I "slepcsys.h" I*/ | ||
12 | |||
13 | /* | ||
14 | Internal functions used to register monitors. | ||
15 | */ | ||
16 | 74603 | PetscErrorCode SlepcMonitorMakeKey_Internal(const char name[],PetscViewerType vtype,PetscViewerFormat format,char key[]) | |
17 | { | ||
18 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
74603 | PetscFunctionBegin; |
19 |
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.
|
74603 | PetscCall(PetscStrncpy(key,name,PETSC_MAX_PATH_LEN)); |
20 |
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.
|
74603 | PetscCall(PetscStrlcat(key,":",PETSC_MAX_PATH_LEN)); |
21 |
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.
|
74603 | PetscCall(PetscStrlcat(key,vtype,PETSC_MAX_PATH_LEN)); |
22 |
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.
|
74603 | PetscCall(PetscStrlcat(key,":",PETSC_MAX_PATH_LEN)); |
23 |
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.
|
74603 | PetscCall(PetscStrlcat(key,PetscViewerFormats[format],PETSC_MAX_PATH_LEN)); |
24 |
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.
|
14462 | PetscFunctionReturn(PETSC_SUCCESS); |
25 | } | ||
26 | |||
27 | 145 | PetscErrorCode PetscViewerAndFormatCreate_Internal(PetscViewer viewer,PetscViewerFormat format,void *ctx,PetscViewerAndFormat **vf) | |
28 | { | ||
29 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
145 | PetscFunctionBegin; |
30 |
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.
|
145 | PetscCall(PetscViewerAndFormatCreate(viewer,format,vf)); |
31 | 145 | (*vf)->data = ctx; | |
32 |
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.
|
145 | PetscFunctionReturn(PETSC_SUCCESS); |
33 | } | ||
34 | |||
35 | /* | ||
36 | Given n vectors in V, this function gets references of them into W. | ||
37 | If m<0 then some previous non-processed vectors remain in W and must be freed. | ||
38 | */ | ||
39 | 3663 | PetscErrorCode SlepcBasisReference_Private(PetscInt n,Vec *V,PetscInt *m,Vec **W) | |
40 | { | ||
41 | 3663 | PetscInt i; | |
42 | |||
43 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3663 | PetscFunctionBegin; |
44 |
7/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
|
7652 | for (i=0;i<n;i++) PetscCall(PetscObjectReference((PetscObject)V[i])); |
45 |
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.
|
3663 | PetscCall(SlepcBasisDestroy_Private(m,W)); |
46 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 8 times.
|
3663 | if (n>0) { |
47 |
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.
|
3633 | PetscCall(PetscMalloc1(n,W)); |
48 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
7622 | for (i=0;i<n;i++) (*W)[i] = V[i]; |
49 | 3633 | *m = -n; | |
50 | } | ||
51 |
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.
|
675 | PetscFunctionReturn(PETSC_SUCCESS); |
52 | } | ||
53 | |||
54 | /* | ||
55 | Destroys a set of vectors. | ||
56 | A negative value of m indicates that W contains vectors to be destroyed. | ||
57 | */ | ||
58 | 36295 | PetscErrorCode SlepcBasisDestroy_Private(PetscInt *m,Vec **W) | |
59 | { | ||
60 | 36295 | PetscInt i; | |
61 | |||
62 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
36295 | PetscFunctionBegin; |
63 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
36295 | if (*m<0) { |
64 |
7/8✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 10 times.
✓ Branch 3 taken 8 times.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✓ Branch 6 taken 2 times.
✓ Branch 7 taken 2 times.
|
7622 | for (i=0;i<-(*m);i++) PetscCall(VecDestroy(&(*W)[i])); |
65 |
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.
|
3633 | PetscCall(PetscFree(*W)); |
66 | } | ||
67 | 36295 | *m = 0; | |
68 |
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.
|
36295 | PetscFunctionReturn(PETSC_SUCCESS); |
69 | } | ||
70 | |||
71 | /*@C | ||
72 | SlepcSNPrintfScalar - Prints a PetscScalar variable to a string of | ||
73 | given length. | ||
74 | |||
75 | Not Collective | ||
76 | |||
77 | Input Parameters: | ||
78 | + str - the string to print to | ||
79 | . len - the length of str | ||
80 | . val - scalar value to be printed | ||
81 | - exp - to be used within an expression, print leading sign and parentheses | ||
82 | in case of nonzero imaginary part | ||
83 | |||
84 | Level: developer | ||
85 | |||
86 | .seealso: PetscSNPrintf() | ||
87 | @*/ | ||
88 | 3184 | PetscErrorCode SlepcSNPrintfScalar(char *str,size_t len,PetscScalar val,PetscBool exp) | |
89 | { | ||
90 | #if defined(PETSC_USE_COMPLEX) | ||
91 | 1687 | PetscReal re,im; | |
92 | #endif | ||
93 | |||
94 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
3184 | PetscFunctionBegin; |
95 | #if !defined(PETSC_USE_COMPLEX) | ||
96 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
1497 | if (exp) PetscCall(PetscSNPrintf(str,len,"%+g",(double)val)); |
97 |
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.
|
777 | else PetscCall(PetscSNPrintf(str,len,"%g",(double)val)); |
98 | #else | ||
99 | 1687 | re = PetscRealPart(val); | |
100 | 1687 | im = PetscImaginaryPart(val); | |
101 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
|
1687 | if (im!=0.0) { |
102 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 5 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
84 | if (exp) PetscCall(PetscSNPrintf(str,len,"+(%g%+gi)",(double)re,(double)im)); |
103 |
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.
|
84 | else PetscCall(PetscSNPrintf(str,len,"%g%+gi",(double)re,(double)im)); |
104 | } else { | ||
105 |
6/8✓ Branch 0 taken 5 times.
✓ Branch 1 taken 5 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 4 times.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
1603 | if (exp) PetscCall(PetscSNPrintf(str,len,"%+g",(double)re)); |
106 |
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.
|
812 | else PetscCall(PetscSNPrintf(str,len,"%g",(double)re)); |
107 | } | ||
108 | #endif | ||
109 |
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.
|
562 | PetscFunctionReturn(PETSC_SUCCESS); |
110 | } | ||
111 | |||
112 | /*@ | ||
113 | SlepcHasExternalPackage - Determine whether SLEPc has been configured with the | ||
114 | given package. | ||
115 | |||
116 | Not Collective | ||
117 | |||
118 | Input Parameter: | ||
119 | . pkg - external package name | ||
120 | |||
121 | Output Parameter: | ||
122 | . has - PETSC_TRUE if SLEPc is configured with the given package, else PETSC_FALSE | ||
123 | |||
124 | Level: intermediate | ||
125 | |||
126 | Notes: | ||
127 | This is basically an alternative for SLEPC_HAVE_XXX whenever a preprocessor macro | ||
128 | is not available/desirable, e.g. in Python. | ||
129 | |||
130 | The external package name pkg is e.g. "arpack", "primme". | ||
131 | It should correspond to the name listed in ./configure --help | ||
132 | |||
133 | The lookup is case insensitive, i.e. looking for "ARPACK" or "arpack" is the same. | ||
134 | |||
135 | .seealso: EPSType, SVDType | ||
136 | @*/ | ||
137 | 20 | PetscErrorCode SlepcHasExternalPackage(const char pkg[], PetscBool *has) | |
138 | { | ||
139 | 20 | char pkgstr[128],*loc; | |
140 | 20 | size_t cnt; | |
141 | |||
142 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
20 | PetscFunctionBegin; |
143 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(PetscSNPrintfCount(pkgstr,sizeof(pkgstr),":%s:",&cnt,pkg)); |
144 |
1/4✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
|
20 | PetscCheck(cnt<sizeof(pkgstr),PETSC_COMM_SELF,PETSC_ERR_SUP,"Package name is too long: \"%s\"",pkg); |
145 |
3/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(PetscStrtolower(pkgstr)); |
146 | #if defined(SLEPC_HAVE_PACKAGES) | ||
147 |
3/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
20 | PetscCall(PetscStrstr(SLEPC_HAVE_PACKAGES,pkgstr,&loc)); |
148 | #else | ||
149 | #error "SLEPC_HAVE_PACKAGES macro undefined. Please reconfigure" | ||
150 | #endif | ||
151 | 20 | *has = loc? PETSC_TRUE: PETSC_FALSE; | |
152 |
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); |
153 | } | ||
154 | |||
155 | /* | ||
156 | SlepcDebugViewMatrix - prints an array as a matrix, to be used from within a debugger. | ||
157 | Output can be pasted to Matlab. | ||
158 | |||
159 | nrows, ncols: size of printed matrix | ||
160 | Xr, Xi: array to be printed (Xi not referenced in complex scalars) | ||
161 | ldx: leading dimension | ||
162 | s: name of Matlab variable | ||
163 | filename: optionally write output to a file | ||
164 | */ | ||
165 | #if defined(PETSC_USE_DEBUG) | ||
166 | 2 | PetscErrorCode SlepcDebugViewMatrix(PetscInt nrows,PetscInt ncols,PetscScalar *Xr,PetscScalar *Xi,PetscInt ldx,const char *s,const char *filename) | |
167 | { | ||
168 | 2 | PetscInt i,j; | |
169 | 2 | PetscViewer viewer; | |
170 | |||
171 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | PetscFunctionBegin; |
172 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
2 | if (filename) PetscCall(PetscViewerASCIIOpen(PETSC_COMM_WORLD,filename,&viewer)); |
173 |
3/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2 | else PetscCall(PetscViewerASCIIGetStdout(PETSC_COMM_WORLD,&viewer)); |
174 |
3/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2 | PetscCall(PetscViewerASCIIPrintf(viewer,"%s = [\n",s)); |
175 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
|
6 | for (i=0;i<nrows;i++) { |
176 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
|
16 | for (j=0;j<ncols;j++) { |
177 | #if defined(PETSC_USE_COMPLEX) | ||
178 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1 times.
|
6 | PetscCall(PetscViewerASCIIPrintf(viewer,"%.18g+%.18gi ",(double)PetscRealPart(Xr[i+j*ldx]),(double)PetscImaginaryPart(Xr[i+j*ldx]))); |
179 | #else | ||
180 |
4/8✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 1 times.
|
6 | if (Xi) PetscCall(PetscViewerASCIIPrintf(viewer,"%.18g+%.18gi ",(double)Xr[i+j*ldx],(double)Xi[i+j*ldx])); |
181 |
0/6✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
6 | else PetscCall(PetscViewerASCIIPrintf(viewer,"%.18g ",(double)Xr[i+j*ldx])); |
182 | #endif | ||
183 | } | ||
184 |
3/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
4 | PetscCall(PetscViewerASCIIPrintf(viewer,"\n")); |
185 | } | ||
186 |
3/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2 | PetscCall(PetscViewerASCIIPrintf(viewer,"];\n")); |
187 |
1/8✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
|
2 | if (filename) PetscCall(PetscViewerDestroy(&viewer)); |
188 |
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); |
189 | } | ||
190 | #endif | ||
191 | |||
192 | /* | ||
193 | SlepcDebugSetMatlabStdout - sets Matlab format in stdout, to be used from within a debugger. | ||
194 | */ | ||
195 | #if defined(PETSC_USE_DEBUG) && !defined(PETSC_CLANG_STATIC_ANALYZER) | ||
196 | ✗ | PETSC_UNUSED PetscErrorCode SlepcDebugSetMatlabStdout(void) | |
197 | { | ||
198 | ✗ | PetscViewer viewer; | |
199 | |||
200 | ✗ | PetscFunctionBegin; | |
201 | ✗ | PetscCall(PetscViewerASCIIGetStdout(PETSC_COMM_WORLD,&viewer)); | |
202 | ✗ | PetscCall(PetscViewerPushFormat(viewer,PETSC_VIEWER_ASCII_MATLAB)); | |
203 | ✗ | PetscFunctionReturn(PETSC_SUCCESS); | |
204 | } | ||
205 | #endif | ||
206 |