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 | static char help[] = "Simple 1-D nonlinear eigenproblem.\n\n" | ||
12 | "The command line options are:\n" | ||
13 | " -n <n>, where <n> = number of grid subdivisions.\n" | ||
14 | " -draw_sol, to draw the computed solution.\n\n"; | ||
15 | |||
16 | /* | ||
17 | Solve 1-D PDE | ||
18 | -u'' = lambda*u | ||
19 | on [0,1] subject to | ||
20 | u(0)=0, u'(1)=u(1)*lambda*kappa/(kappa-lambda) | ||
21 | */ | ||
22 | |||
23 | #include <slepcnep.h> | ||
24 | |||
25 | /* | ||
26 | User-defined routines | ||
27 | */ | ||
28 | PetscErrorCode FormInitialGuess(Vec); | ||
29 | PetscErrorCode FormFunction(NEP,PetscScalar,Mat,Mat,void*); | ||
30 | PetscErrorCode FormJacobian(NEP,PetscScalar,Mat,void*); | ||
31 | PetscErrorCode CheckSolution(PetscScalar,Vec,PetscReal*,void*); | ||
32 | PetscErrorCode FixSign(Vec); | ||
33 | |||
34 | /* | ||
35 | User-defined application context | ||
36 | */ | ||
37 | typedef struct { | ||
38 | PetscScalar kappa; /* ratio between stiffness of spring and attached mass */ | ||
39 | PetscReal h; /* mesh spacing */ | ||
40 | } ApplicationCtx; | ||
41 | |||
42 | 50 | int main(int argc,char **argv) | |
43 | { | ||
44 | 50 | NEP nep; /* nonlinear eigensolver context */ | |
45 | 50 | Vec x; /* eigenvector */ | |
46 | 50 | PetscScalar lambda; /* eigenvalue */ | |
47 | 50 | Mat F,J; /* Function and Jacobian matrices */ | |
48 | 50 | ApplicationCtx ctx; /* user-defined context */ | |
49 | 50 | NEPType type; | |
50 | 50 | PetscInt n=128,nev,i,its,maxit,nconv; | |
51 | 50 | PetscReal re,im,tol,norm,error; | |
52 | 50 | PetscBool draw_sol=PETSC_FALSE; | |
53 | |||
54 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
50 | PetscFunctionBeginUser; |
55 |
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.
|
50 | PetscCall(SlepcInitialize(&argc,&argv,NULL,help)); |
56 |
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.
|
50 | PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL)); |
57 |
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.
|
50 | PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\n1-D Nonlinear Eigenproblem, n=%" PetscInt_FMT "\n\n",n)); |
58 | 50 | ctx.h = 1.0/(PetscReal)n; | |
59 | 50 | ctx.kappa = 1.0; | |
60 |
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.
|
50 | PetscCall(PetscOptionsGetBool(NULL,NULL,"-draw_sol",&draw_sol,NULL)); |
61 | |||
62 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
63 | Create nonlinear eigensolver context | ||
64 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ | ||
65 | |||
66 |
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.
|
50 | PetscCall(NEPCreate(PETSC_COMM_WORLD,&nep)); |
67 | |||
68 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
69 | Create matrix data structure; set Function evaluation routine | ||
70 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ | ||
71 | |||
72 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(MatCreate(PETSC_COMM_WORLD,&F)); |
73 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(MatSetSizes(F,PETSC_DECIDE,PETSC_DECIDE,n,n)); |
74 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(MatSetFromOptions(F)); |
75 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(MatSeqAIJSetPreallocation(F,3,NULL)); |
76 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(MatMPIAIJSetPreallocation(F,3,NULL,1,NULL)); |
77 | |||
78 | /* | ||
79 | Set Function matrix data structure and default Function evaluation | ||
80 | routine | ||
81 | */ | ||
82 |
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.
|
50 | PetscCall(NEPSetFunction(nep,F,F,FormFunction,&ctx)); |
83 | |||
84 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
85 | Create matrix data structure; set Jacobian evaluation routine | ||
86 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ | ||
87 | |||
88 |
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.
|
50 | PetscCall(MatCreate(PETSC_COMM_WORLD,&J)); |
89 |
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.
|
50 | PetscCall(MatSetSizes(J,PETSC_DECIDE,PETSC_DECIDE,n,n)); |
90 |
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.
|
50 | PetscCall(MatSetFromOptions(J)); |
91 |
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.
|
50 | PetscCall(MatSeqAIJSetPreallocation(J,3,NULL)); |
92 |
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.
|
50 | PetscCall(MatMPIAIJSetPreallocation(J,3,NULL,1,NULL)); |
93 | |||
94 | /* | ||
95 | Set Jacobian matrix data structure and default Jacobian evaluation | ||
96 | routine | ||
97 | */ | ||
98 |
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.
|
50 | PetscCall(NEPSetJacobian(nep,J,FormJacobian,&ctx)); |
99 | |||
100 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
101 | Customize nonlinear solver; set runtime options | ||
102 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ | ||
103 | |||
104 |
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.
|
50 | PetscCall(NEPSetTolerances(nep,1e-9,PETSC_CURRENT)); |
105 |
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.
|
50 | PetscCall(NEPSetDimensions(nep,1,PETSC_DETERMINE,PETSC_DETERMINE)); |
106 | |||
107 | /* | ||
108 | Set solver parameters at runtime | ||
109 | */ | ||
110 |
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.
|
50 | PetscCall(NEPSetFromOptions(nep)); |
111 | |||
112 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
113 | Initialize application | ||
114 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ | ||
115 | |||
116 | /* | ||
117 | Evaluate initial guess | ||
118 | */ | ||
119 |
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.
|
50 | PetscCall(MatCreateVecs(F,&x,NULL)); |
120 |
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.
|
50 | PetscCall(FormInitialGuess(x)); |
121 |
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.
|
50 | PetscCall(NEPSetInitialSpace(nep,1,&x)); |
122 | |||
123 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
124 | Solve the eigensystem | ||
125 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ | ||
126 | |||
127 |
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.
|
50 | PetscCall(NEPSolve(nep)); |
128 |
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.
|
50 | PetscCall(NEPGetIterationNumber(nep,&its)); |
129 |
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.
|
50 | PetscCall(PetscPrintf(PETSC_COMM_WORLD," Number of NEP iterations = %" PetscInt_FMT "\n\n",its)); |
130 | |||
131 | /* | ||
132 | Optional: Get some information from the solver and display it | ||
133 | */ | ||
134 |
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.
|
50 | PetscCall(NEPGetType(nep,&type)); |
135 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(PetscPrintf(PETSC_COMM_WORLD," Solution method: %s\n",type)); |
136 |
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.
|
50 | PetscCall(NEPGetDimensions(nep,&nev,NULL,NULL)); |
137 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(PetscPrintf(PETSC_COMM_WORLD," Number of requested eigenvalues: %" PetscInt_FMT "\n",nev)); |
138 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(NEPGetTolerances(nep,&tol,&maxit)); |
139 |
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.
|
50 | PetscCall(PetscPrintf(PETSC_COMM_WORLD," Stopping condition: tol=%g, maxit=%" PetscInt_FMT "\n",(double)tol,maxit)); |
140 | |||
141 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
142 | Display solution and clean up | ||
143 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ | ||
144 | |||
145 | /* | ||
146 | Get number of converged approximate eigenpairs | ||
147 | */ | ||
148 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(NEPGetConverged(nep,&nconv)); |
149 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(PetscPrintf(PETSC_COMM_WORLD," Number of converged approximate eigenpairs: %" PetscInt_FMT "\n\n",nconv)); |
150 | |||
151 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
50 | if (nconv>0) { |
152 | /* | ||
153 | Display eigenvalues and relative errors | ||
154 | */ | ||
155 |
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.
|
50 | PetscCall(PetscPrintf(PETSC_COMM_WORLD, |
156 | " k ||T(k)x|| error\n" | ||
157 | " ----------------- ------------------ ------------------\n")); | ||
158 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
200 | for (i=0;i<nconv;i++) { |
159 | /* | ||
160 | Get converged eigenpairs (in this example they are always real) | ||
161 | */ | ||
162 |
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.
|
150 | PetscCall(NEPGetEigenpair(nep,i,&lambda,NULL,x,NULL)); |
163 |
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.
|
150 | PetscCall(FixSign(x)); |
164 | /* | ||
165 | Compute residual norm and error | ||
166 | */ | ||
167 |
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.
|
150 | PetscCall(NEPComputeError(nep,i,NEP_ERROR_RELATIVE,&norm)); |
168 |
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.
|
150 | PetscCall(CheckSolution(lambda,x,&error,&ctx)); |
169 | |||
170 | #if defined(PETSC_USE_COMPLEX) | ||
171 | 75 | re = PetscRealPart(lambda); | |
172 | 75 | im = PetscImaginaryPart(lambda); | |
173 | #else | ||
174 | 75 | re = lambda; | |
175 | 75 | im = 0.0; | |
176 | #endif | ||
177 |
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.
|
150 | if (im!=0.0) PetscCall(PetscPrintf(PETSC_COMM_WORLD," %9f%+9fi %12g %12g\n",(double)re,(double)im,(double)norm,(double)error)); |
178 |
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.
|
85 | else PetscCall(PetscPrintf(PETSC_COMM_WORLD," %12f %12g %12g\n",(double)re,(double)norm,(double)error)); |
179 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
150 | if (draw_sol) { |
180 | ✗ | PetscCall(PetscViewerDrawSetPause(PETSC_VIEWER_DRAW_WORLD,-1)); | |
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.
|
150 | PetscCall(VecView(x,PETSC_VIEWER_DRAW_WORLD)); |
182 | } | ||
183 | } | ||
184 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\n")); |
185 | } | ||
186 | |||
187 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(NEPDestroy(&nep)); |
188 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
50 | PetscCall(MatDestroy(&F)); |
189 |
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.
|
50 | PetscCall(MatDestroy(&J)); |
190 |
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.
|
50 | PetscCall(VecDestroy(&x)); |
191 |
3/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
|
50 | PetscCall(SlepcFinalize()); |
192 | return 0; | ||
193 | } | ||
194 | |||
195 | /* ------------------------------------------------------------------- */ | ||
196 | /* | ||
197 | FormInitialGuess - Computes initial guess. | ||
198 | |||
199 | Input/Output Parameter: | ||
200 | . x - the solution vector | ||
201 | */ | ||
202 | 50 | PetscErrorCode FormInitialGuess(Vec x) | |
203 | { | ||
204 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
50 | PetscFunctionBeginUser; |
205 |
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.
|
50 | PetscCall(VecSet(x,1.0)); |
206 |
5/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 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
10 | PetscFunctionReturn(PETSC_SUCCESS); |
207 | } | ||
208 | |||
209 | /* ------------------------------------------------------------------- */ | ||
210 | /* | ||
211 | FormFunction - Computes Function matrix T(lambda) | ||
212 | |||
213 | Input Parameters: | ||
214 | . nep - the NEP context | ||
215 | . lambda - the scalar argument | ||
216 | . ctx - optional user-defined context, as set by NEPSetFunction() | ||
217 | |||
218 | Output Parameters: | ||
219 | . fun - Function matrix | ||
220 | . B - optionally different preconditioning matrix | ||
221 | */ | ||
222 | 4160 | PetscErrorCode FormFunction(NEP nep,PetscScalar lambda,Mat fun,Mat B,void *ctx) | |
223 | { | ||
224 | 4160 | ApplicationCtx *user = (ApplicationCtx*)ctx; | |
225 | 4160 | PetscScalar A[3],c,d; | |
226 | 4160 | PetscReal h; | |
227 | 4160 | PetscInt i,n,j[3],Istart,Iend; | |
228 | 4160 | PetscBool FirstBlock=PETSC_FALSE,LastBlock=PETSC_FALSE; | |
229 | |||
230 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
4160 | PetscFunctionBeginUser; |
231 | /* | ||
232 | Compute Function entries and insert into matrix | ||
233 | */ | ||
234 |
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.
|
4160 | PetscCall(MatGetSize(fun,&n,NULL)); |
235 |
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.
|
4160 | PetscCall(MatGetOwnershipRange(fun,&Istart,&Iend)); |
236 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
4160 | if (Istart==0) FirstBlock=PETSC_TRUE; |
237 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
4160 | if (Iend==n) LastBlock=PETSC_TRUE; |
238 | 4160 | h = user->h; | |
239 | 4160 | c = user->kappa/(lambda-user->kappa); | |
240 | 4160 | d = n; | |
241 | |||
242 | /* | ||
243 | Interior grid points | ||
244 | */ | ||
245 |
4/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
|
623040 | for (i=(FirstBlock? Istart+1: Istart);i<(LastBlock? Iend-1: Iend);i++) { |
246 | 618880 | j[0] = i-1; j[1] = i; j[2] = i+1; | |
247 | 618880 | A[0] = A[2] = -d-lambda*h/6.0; A[1] = 2.0*(d-lambda*h/3.0); | |
248 |
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.
|
618880 | PetscCall(MatSetValues(fun,1,&i,3,j,A,INSERT_VALUES)); |
249 | } | ||
250 | |||
251 | /* | ||
252 | Boundary points | ||
253 | */ | ||
254 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
4160 | if (FirstBlock) { |
255 | 4160 | i = 0; | |
256 | 4160 | j[0] = 0; j[1] = 1; | |
257 | 4160 | A[0] = 2.0*(d-lambda*h/3.0); A[1] = -d-lambda*h/6.0; | |
258 |
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.
|
4160 | PetscCall(MatSetValues(fun,1,&i,2,j,A,INSERT_VALUES)); |
259 | } | ||
260 | |||
261 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
4160 | if (LastBlock) { |
262 | 4160 | i = n-1; | |
263 | 4160 | j[0] = n-2; j[1] = n-1; | |
264 | 4160 | A[0] = -d-lambda*h/6.0; A[1] = d-lambda*h/3.0+lambda*c; | |
265 |
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.
|
4160 | PetscCall(MatSetValues(fun,1,&i,2,j,A,INSERT_VALUES)); |
266 | } | ||
267 | |||
268 | /* | ||
269 | Assemble matrix | ||
270 | */ | ||
271 |
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.
|
4160 | PetscCall(MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY)); |
272 |
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.
|
4160 | PetscCall(MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY)); |
273 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 10 times.
|
4160 | if (fun != B) { |
274 | ✗ | PetscCall(MatAssemblyBegin(fun,MAT_FINAL_ASSEMBLY)); | |
275 | ✗ | PetscCall(MatAssemblyEnd(fun,MAT_FINAL_ASSEMBLY)); | |
276 | } | ||
277 |
5/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 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
832 | PetscFunctionReturn(PETSC_SUCCESS); |
278 | } | ||
279 | |||
280 | /* ------------------------------------------------------------------- */ | ||
281 | /* | ||
282 | FormJacobian - Computes Jacobian matrix T'(lambda) | ||
283 | |||
284 | Input Parameters: | ||
285 | . nep - the NEP context | ||
286 | . lambda - the scalar argument | ||
287 | . ctx - optional user-defined context, as set by NEPSetJacobian() | ||
288 | |||
289 | Output Parameters: | ||
290 | . jac - Jacobian matrix | ||
291 | */ | ||
292 | 800 | PetscErrorCode FormJacobian(NEP nep,PetscScalar lambda,Mat jac,void *ctx) | |
293 | { | ||
294 | 800 | ApplicationCtx *user = (ApplicationCtx*)ctx; | |
295 | 800 | PetscScalar A[3],c; | |
296 | 800 | PetscReal h; | |
297 | 800 | PetscInt i,n,j[3],Istart,Iend; | |
298 | 800 | PetscBool FirstBlock=PETSC_FALSE,LastBlock=PETSC_FALSE; | |
299 | |||
300 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
800 | PetscFunctionBeginUser; |
301 | /* | ||
302 | Compute Jacobian entries and insert into matrix | ||
303 | */ | ||
304 |
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.
|
800 | PetscCall(MatGetSize(jac,&n,NULL)); |
305 |
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.
|
800 | PetscCall(MatGetOwnershipRange(jac,&Istart,&Iend)); |
306 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
800 | if (Istart==0) FirstBlock=PETSC_TRUE; |
307 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
800 | if (Iend==n) LastBlock=PETSC_TRUE; |
308 | 800 | h = user->h; | |
309 | 800 | c = user->kappa/(lambda-user->kappa); | |
310 | |||
311 | /* | ||
312 | Interior grid points | ||
313 | */ | ||
314 |
4/6✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 10 times.
✓ Branch 5 taken 10 times.
|
189920 | for (i=(FirstBlock? Istart+1: Istart);i<(LastBlock? Iend-1: Iend);i++) { |
315 | 189120 | j[0] = i-1; j[1] = i; j[2] = i+1; | |
316 | 189120 | A[0] = A[2] = -h/6.0; A[1] = -2.0*h/3.0; | |
317 |
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.
|
189120 | PetscCall(MatSetValues(jac,1,&i,3,j,A,INSERT_VALUES)); |
318 | } | ||
319 | |||
320 | /* | ||
321 | Boundary points | ||
322 | */ | ||
323 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
800 | if (FirstBlock) { |
324 | 800 | i = 0; | |
325 | 800 | j[0] = 0; j[1] = 1; | |
326 | 800 | A[0] = -2.0*h/3.0; A[1] = -h/6.0; | |
327 |
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.
|
800 | PetscCall(MatSetValues(jac,1,&i,2,j,A,INSERT_VALUES)); |
328 | } | ||
329 | |||
330 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
800 | if (LastBlock) { |
331 | 800 | i = n-1; | |
332 | 800 | j[0] = n-2; j[1] = n-1; | |
333 | 800 | A[0] = -h/6.0; A[1] = -h/3.0-c*c; | |
334 |
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.
|
800 | PetscCall(MatSetValues(jac,1,&i,2,j,A,INSERT_VALUES)); |
335 | } | ||
336 | |||
337 | /* | ||
338 | Assemble matrix | ||
339 | */ | ||
340 |
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.
|
800 | PetscCall(MatAssemblyBegin(jac,MAT_FINAL_ASSEMBLY)); |
341 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
800 | PetscCall(MatAssemblyEnd(jac,MAT_FINAL_ASSEMBLY)); |
342 |
5/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 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
160 | PetscFunctionReturn(PETSC_SUCCESS); |
343 | } | ||
344 | |||
345 | /* ------------------------------------------------------------------- */ | ||
346 | /* | ||
347 | CheckSolution - Given a computed solution (lambda,x) check if it | ||
348 | satisfies the analytic solution. | ||
349 | |||
350 | Input Parameters: | ||
351 | + lambda - the computed eigenvalue | ||
352 | - y - the computed eigenvector | ||
353 | |||
354 | Output Parameter: | ||
355 | . error - norm of difference between the computed and exact eigenvector | ||
356 | */ | ||
357 | 150 | PetscErrorCode CheckSolution(PetscScalar lambda,Vec y,PetscReal *error,void *ctx) | |
358 | { | ||
359 | 150 | PetscScalar *uu; | |
360 | 150 | PetscInt i,n,Istart,Iend; | |
361 | 150 | PetscReal nu,x; | |
362 | 150 | Vec u; | |
363 | 150 | ApplicationCtx *user = (ApplicationCtx*)ctx; | |
364 | |||
365 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
150 | PetscFunctionBeginUser; |
366 | 150 | nu = PetscSqrtReal(PetscRealPart(lambda)); | |
367 |
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.
|
150 | PetscCall(VecDuplicate(y,&u)); |
368 |
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.
|
150 | PetscCall(VecGetSize(u,&n)); |
369 |
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.
|
150 | PetscCall(VecGetOwnershipRange(y,&Istart,&Iend)); |
370 |
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.
|
150 | PetscCall(VecGetArray(u,&uu)); |
371 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
21910 | for (i=Istart;i<Iend;i++) { |
372 | 21760 | x = (i+1)*user->h; | |
373 | 21760 | uu[i-Istart] = PetscSinReal(nu*x); | |
374 | } | ||
375 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
150 | PetscCall(VecRestoreArray(u,&uu)); |
376 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
150 | PetscCall(VecNormalize(u,NULL)); |
377 |
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.
|
150 | PetscCall(VecAXPY(u,-1.0,y)); |
378 |
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.
|
150 | PetscCall(VecNorm(u,NORM_2,error)); |
379 |
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.
|
150 | PetscCall(VecDestroy(&u)); |
380 |
5/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 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
30 | PetscFunctionReturn(PETSC_SUCCESS); |
381 | } | ||
382 | |||
383 | /* ------------------------------------------------------------------- */ | ||
384 | /* | ||
385 | FixSign - Force the eigenfunction to be real and positive, since | ||
386 | some eigensolvers may return the eigenvector multiplied by a | ||
387 | complex number of modulus one. | ||
388 | |||
389 | Input/Output Parameter: | ||
390 | . x - the computed vector | ||
391 | */ | ||
392 | 150 | PetscErrorCode FixSign(Vec x) | |
393 | { | ||
394 | 150 | PetscMPIInt rank; | |
395 | 150 | PetscScalar sign=0.0; | |
396 | 150 | const PetscScalar *xx; | |
397 | |||
398 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
150 | PetscFunctionBeginUser; |
399 |
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.
|
150 | PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); |
400 |
1/2✓ Branch 0 taken 10 times.
✗ Branch 1 not taken.
|
150 | if (!rank) { |
401 |
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.
|
150 | PetscCall(VecGetArrayRead(x,&xx)); |
402 | 150 | sign = *xx/PetscAbsScalar(*xx); | |
403 |
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.
|
150 | PetscCall(VecRestoreArrayRead(x,&xx)); |
404 | } | ||
405 |
15/30✓ 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 taken 8 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.
✓ Branch 14 taken 2 times.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✓ Branch 17 taken 2 times.
✓ Branch 18 taken 2 times.
✗ Branch 19 not taken.
✓ Branch 20 taken 2 times.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 2 times.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✓ Branch 27 taken 2 times.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
|
300 | PetscCallMPI(MPI_Bcast(&sign,1,MPIU_SCALAR,0,PETSC_COMM_WORLD)); |
406 |
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.
|
150 | PetscCall(VecScale(x,1.0/sign)); |
407 |
5/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 not taken.
✓ Branch 9 taken 2 times.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
|
30 | PetscFunctionReturn(PETSC_SUCCESS); |
408 | } | ||
409 | |||
410 | /*TEST | ||
411 | |||
412 | build: | ||
413 | requires: !single | ||
414 | |||
415 | test: | ||
416 | suffix: 1 | ||
417 | args: -nep_target 4 | ||
418 | filter: sed -e "s/[0-9]\.[0-9]*e-\([0-9]*\)/removed/g" -e "s/ Number of NEP iterations = \([0-9]*\)/ Number of NEP iterations = /" | ||
419 | requires: !single | ||
420 | |||
421 | testset: | ||
422 | args: -nep_type nleigs -nep_target 10 -nep_nev 4 | ||
423 | test: | ||
424 | suffix: 2 | ||
425 | filter: sed -e "s/[0-9]\.[0-9]*e-\([0-9]*\)/removed/g" -e "s/0\.\([0-9]*\)/removed/g" -e "s/ Number of NEP iterations = \([0-9]*\)/ Number of NEP iterations = /" | ||
426 | args: -rg_interval_endpoints 4,200 | ||
427 | requires: !single !complex | ||
428 | test: | ||
429 | suffix: 2_complex | ||
430 | filter: sed -e "s/[+-]0.[0-9]*i//" -e "s/[0-9]\.[0-9]*e-\([0-9]*\)/removed/g" -e "s/0\.\([0-9]*\)/removed/g" -e "s/ Number of NEP iterations = \([0-9]*\)/ Number of NEP iterations = /" | ||
431 | output_file: output/ex20_2.out | ||
432 | args: -rg_interval_endpoints 4,200,-.1,.1 -nep_target_real | ||
433 | requires: !single complex | ||
434 | |||
435 | testset: | ||
436 | args: -nep_type nleigs -nep_target 10 -nep_nev 4 -nep_ncv 18 -nep_two_sided {{0 1}} -nep_nleigs_full_basis | ||
437 | test: | ||
438 | suffix: 3 | ||
439 | filter: sed -e "s/[0-9]\.[0-9]*e-\([0-9]*\)/removed/g" -e "s/0\.\([0-9]*\)/removed/g" -e "s/ Number of NEP iterations = \([0-9]*\)/ Number of NEP iterations = /" | ||
440 | output_file: output/ex20_2.out | ||
441 | args: -rg_interval_endpoints 4,200 | ||
442 | requires: !single !complex | ||
443 | test: | ||
444 | suffix: 3_complex | ||
445 | filter: sed -e "s/[+-]0.[0-9]*i//" -e "s/[0-9]\.[0-9]*e-\([0-9]*\)/removed/g" -e "s/0\.\([0-9]*\)/removed/g" -e "s/ Number of NEP iterations = \([0-9]*\)/ Number of NEP iterations = /" | ||
446 | output_file: output/ex20_2.out | ||
447 | args: -rg_interval_endpoints 4,200,-.1,.1 | ||
448 | requires: !single complex | ||
449 | |||
450 | test: | ||
451 | suffix: 4 | ||
452 | args: -n 256 -nep_nev 2 -nep_target 10 | ||
453 | filter: sed -e "s/[+-]0\.0*i//g" -e "s/[0-9]\.[0-9]*e-\([0-9]*\)/removed/g" -e "s/ Number of NEP iterations = \([0-9]*\)/ Number of NEP iterations = /" | ||
454 | requires: !single | ||
455 | |||
456 | TEST*/ | ||
457 |