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[] = "Solves a problem associated to the Brusselator wave model in chemical reactions, illustrating the use of shell matrices.\n\n" | ||
12 | "The command line options are:\n" | ||
13 | " -n <n>, where <n> = block dimension of the 2x2 block matrix.\n" | ||
14 | " -L <L>, where <L> = bifurcation parameter.\n" | ||
15 | " -alpha <alpha>, -beta <beta>, -delta1 <delta1>, -delta2 <delta2>,\n" | ||
16 | " where <alpha> <beta> <delta1> <delta2> = model parameters.\n\n"; | ||
17 | |||
18 | #include <slepceps.h> | ||
19 | |||
20 | /* | ||
21 | This example computes the eigenvalues with largest real part of the | ||
22 | following matrix | ||
23 | |||
24 | A = [ tau1*T+(beta-1)*I alpha^2*I | ||
25 | -beta*I tau2*T-alpha^2*I ], | ||
26 | |||
27 | where | ||
28 | |||
29 | T = tridiag{1,-2,1} | ||
30 | h = 1/(n+1) | ||
31 | tau1 = delta1/(h*L)^2 | ||
32 | tau2 = delta2/(h*L)^2 | ||
33 | */ | ||
34 | |||
35 | /* | ||
36 | Matrix operations | ||
37 | */ | ||
38 | PetscErrorCode MatMult_Brussel(Mat,Vec,Vec); | ||
39 | PetscErrorCode MatMultTranspose_Brussel(Mat,Vec,Vec); | ||
40 | PetscErrorCode MatGetDiagonal_Brussel(Mat,Vec); | ||
41 | |||
42 | typedef struct { | ||
43 | Mat T; | ||
44 | Vec x1,x2,y1,y2; | ||
45 | PetscScalar alpha,beta,tau1,tau2,sigma; | ||
46 | } CTX_BRUSSEL; | ||
47 | |||
48 | 115 | int main(int argc,char **argv) | |
49 | { | ||
50 | 115 | Mat A; /* eigenvalue problem matrix */ | |
51 | 115 | EPS eps; /* eigenproblem solver context */ | |
52 | 115 | EPSType type; | |
53 | 115 | PetscScalar delta1,delta2,L,h; | |
54 | 115 | PetscInt N=30,n,i,Istart,Iend,nev; | |
55 | 115 | CTX_BRUSSEL *ctx; | |
56 | 115 | PetscBool terse; | |
57 | 115 | PetscViewer viewer; | |
58 | |||
59 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
115 | PetscFunctionBeginUser; |
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.
|
115 | PetscCall(SlepcInitialize(&argc,&argv,NULL,help)); |
61 | |||
62 |
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.
|
115 | PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&N,NULL)); |
63 |
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.
|
115 | PetscCall(PetscPrintf(PETSC_COMM_WORLD,"\nBrusselator wave model, n=%" PetscInt_FMT "\n\n",N)); |
64 | |||
65 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
66 | Generate the matrix | ||
67 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ | ||
68 | |||
69 | /* | ||
70 | Create shell matrix context and set default parameters | ||
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.
|
115 | PetscCall(PetscNew(&ctx)); |
73 | 115 | ctx->alpha = 2.0; | |
74 | 115 | ctx->beta = 5.45; | |
75 | 115 | delta1 = 0.008; | |
76 | 115 | delta2 = 0.004; | |
77 | 115 | L = 0.51302; | |
78 | |||
79 | /* | ||
80 | Look the command line for user-provided parameters | ||
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.
|
115 | PetscCall(PetscOptionsGetScalar(NULL,NULL,"-L",&L,NULL)); |
83 |
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.
|
115 | PetscCall(PetscOptionsGetScalar(NULL,NULL,"-alpha",&ctx->alpha,NULL)); |
84 |
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.
|
115 | PetscCall(PetscOptionsGetScalar(NULL,NULL,"-beta",&ctx->beta,NULL)); |
85 |
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.
|
115 | PetscCall(PetscOptionsGetScalar(NULL,NULL,"-delta1",&delta1,NULL)); |
86 |
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.
|
115 | PetscCall(PetscOptionsGetScalar(NULL,NULL,"-delta2",&delta2,NULL)); |
87 | |||
88 | /* | ||
89 | Create matrix T | ||
90 | */ | ||
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.
|
115 | PetscCall(MatCreate(PETSC_COMM_WORLD,&ctx->T)); |
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.
|
115 | PetscCall(MatSetSizes(ctx->T,PETSC_DECIDE,PETSC_DECIDE,N,N)); |
93 |
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.
|
115 | PetscCall(MatSetFromOptions(ctx->T)); |
94 | |||
95 |
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.
|
115 | PetscCall(MatGetOwnershipRange(ctx->T,&Istart,&Iend)); |
96 |
2/2✓ Branch 0 taken 10 times.
✓ Branch 1 taken 10 times.
|
4665 | for (i=Istart;i<Iend;i++) { |
97 |
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.
|
4550 | if (i>0) PetscCall(MatSetValue(ctx->T,i,i-1,1.0,INSERT_VALUES)); |
98 |
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.
|
4550 | if (i<N-1) PetscCall(MatSetValue(ctx->T,i,i+1,1.0,INSERT_VALUES)); |
99 |
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.
|
4550 | PetscCall(MatSetValue(ctx->T,i,i,-2.0,INSERT_VALUES)); |
100 | } | ||
101 |
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.
|
115 | PetscCall(MatAssemblyBegin(ctx->T,MAT_FINAL_ASSEMBLY)); |
102 |
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.
|
115 | PetscCall(MatAssemblyEnd(ctx->T,MAT_FINAL_ASSEMBLY)); |
103 |
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.
|
115 | PetscCall(MatGetLocalSize(ctx->T,&n,NULL)); |
104 | |||
105 | /* | ||
106 | Fill the remaining information in the shell matrix context | ||
107 | and create auxiliary vectors | ||
108 | */ | ||
109 | 115 | h = 1.0 / (PetscReal)(N+1); | |
110 | 115 | ctx->tau1 = delta1 / ((h*L)*(h*L)); | |
111 | 115 | ctx->tau2 = delta2 / ((h*L)*(h*L)); | |
112 | 115 | ctx->sigma = 0.0; | |
113 |
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.
|
115 | PetscCall(VecCreateMPIWithArray(PETSC_COMM_WORLD,1,n,PETSC_DECIDE,NULL,&ctx->x1)); |
114 |
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.
|
115 | PetscCall(VecCreateMPIWithArray(PETSC_COMM_WORLD,1,n,PETSC_DECIDE,NULL,&ctx->x2)); |
115 |
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.
|
115 | PetscCall(VecCreateMPIWithArray(PETSC_COMM_WORLD,1,n,PETSC_DECIDE,NULL,&ctx->y1)); |
116 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
115 | PetscCall(VecCreateMPIWithArray(PETSC_COMM_WORLD,1,n,PETSC_DECIDE,NULL,&ctx->y2)); |
117 | |||
118 | /* | ||
119 | Create the shell matrix | ||
120 | */ | ||
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.
|
115 | PetscCall(MatCreateShell(PETSC_COMM_WORLD,2*n,2*n,2*N,2*N,(void*)ctx,&A)); |
122 |
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.
|
115 | PetscCall(MatShellSetOperation(A,MATOP_MULT,(PetscErrorCodeFn*)MatMult_Brussel)); |
123 |
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.
|
115 | PetscCall(MatShellSetOperation(A,MATOP_MULT_TRANSPOSE,(PetscErrorCodeFn*)MatMultTranspose_Brussel)); |
124 |
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.
|
115 | PetscCall(MatShellSetOperation(A,MATOP_GET_DIAGONAL,(PetscErrorCodeFn*)MatGetDiagonal_Brussel)); |
125 | |||
126 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
127 | Create the eigensolver and set various options | ||
128 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ | ||
129 | |||
130 | /* | ||
131 | Create eigensolver context | ||
132 | */ | ||
133 |
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.
|
115 | PetscCall(EPSCreate(PETSC_COMM_WORLD,&eps)); |
134 | |||
135 | /* | ||
136 | Set operators. In this case, it is a standard eigenvalue problem | ||
137 | */ | ||
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.
|
115 | PetscCall(EPSSetOperators(eps,A,NULL)); |
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.
|
115 | PetscCall(EPSSetProblemType(eps,EPS_NHEP)); |
140 | |||
141 | /* | ||
142 | Ask for the rightmost eigenvalues | ||
143 | */ | ||
144 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
115 | PetscCall(EPSSetWhichEigenpairs(eps,EPS_LARGEST_REAL)); |
145 | |||
146 | /* | ||
147 | Set other solver options at runtime | ||
148 | */ | ||
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.
|
115 | PetscCall(EPSSetFromOptions(eps)); |
150 | |||
151 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
152 | Solve the eigensystem | ||
153 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ | ||
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.
|
115 | PetscCall(EPSSolve(eps)); |
156 | |||
157 | /* | ||
158 | Optional: Get some information from the solver and display it | ||
159 | */ | ||
160 |
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.
|
115 | PetscCall(EPSGetType(eps,&type)); |
161 |
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.
|
115 | PetscCall(PetscPrintf(PETSC_COMM_WORLD," Solution method: %s\n\n",type)); |
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.
|
115 | PetscCall(EPSGetDimensions(eps,&nev,NULL,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.
|
115 | PetscCall(PetscPrintf(PETSC_COMM_WORLD," Number of requested eigenvalues: %" PetscInt_FMT "\n",nev)); |
164 | |||
165 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | ||
166 | Display solution and clean up | ||
167 | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ | ||
168 | |||
169 | /* show detailed info unless -terse option is given by user */ | ||
170 |
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.
|
115 | PetscCall(PetscOptionsHasName(NULL,NULL,"-terse",&terse)); |
171 |
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.
|
115 | if (terse) PetscCall(EPSErrorView(eps,EPS_ERROR_RELATIVE,NULL)); |
172 | else { | ||
173 | ✗ | PetscCall(PetscViewerASCIIGetStdout(PETSC_COMM_WORLD,&viewer)); | |
174 | ✗ | PetscCall(PetscViewerPushFormat(viewer,PETSC_VIEWER_ASCII_INFO_DETAIL)); | |
175 | ✗ | PetscCall(EPSConvergedReasonView(eps,viewer)); | |
176 | ✗ | PetscCall(EPSErrorView(eps,EPS_ERROR_RELATIVE,viewer)); | |
177 | ✗ | PetscCall(PetscViewerPopFormat(viewer)); | |
178 | } | ||
179 |
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.
|
115 | PetscCall(EPSDestroy(&eps)); |
180 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
115 | PetscCall(MatDestroy(&A)); |
181 |
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.
|
115 | PetscCall(MatDestroy(&ctx->T)); |
182 |
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.
|
115 | PetscCall(VecDestroy(&ctx->x1)); |
183 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
115 | PetscCall(VecDestroy(&ctx->x2)); |
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.
|
115 | PetscCall(VecDestroy(&ctx->y1)); |
185 |
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.
|
115 | PetscCall(VecDestroy(&ctx->y2)); |
186 |
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.
|
115 | PetscCall(PetscFree(ctx)); |
187 |
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.
|
115 | PetscCall(SlepcFinalize()); |
188 | return 0; | ||
189 | } | ||
190 | |||
191 | 161844 | PetscErrorCode MatMult_Brussel(Mat A,Vec x,Vec y) | |
192 | { | ||
193 | 161844 | PetscInt n; | |
194 | 161844 | const PetscScalar *px; | |
195 | 161844 | PetscScalar *py; | |
196 | 161844 | CTX_BRUSSEL *ctx; | |
197 | |||
198 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
161844 | PetscFunctionBeginUser; |
199 |
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.
|
161844 | PetscCall(MatShellGetContext(A,&ctx)); |
200 |
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.
|
161844 | PetscCall(MatGetLocalSize(ctx->T,&n,NULL)); |
201 |
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.
|
161844 | PetscCall(VecGetArrayRead(x,&px)); |
202 |
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.
|
161844 | PetscCall(VecGetArray(y,&py)); |
203 |
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.
|
161844 | PetscCall(VecPlaceArray(ctx->x1,px)); |
204 |
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.
|
161844 | PetscCall(VecPlaceArray(ctx->x2,px+n)); |
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.
|
161844 | PetscCall(VecPlaceArray(ctx->y1,py)); |
206 |
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.
|
161844 | PetscCall(VecPlaceArray(ctx->y2,py+n)); |
207 | |||
208 |
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.
|
161844 | PetscCall(MatMult(ctx->T,ctx->x1,ctx->y1)); |
209 |
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.
|
161844 | PetscCall(VecScale(ctx->y1,ctx->tau1)); |
210 |
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.
|
161844 | PetscCall(VecAXPY(ctx->y1,ctx->beta-1.0+ctx->sigma,ctx->x1)); |
211 |
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.
|
161844 | PetscCall(VecAXPY(ctx->y1,ctx->alpha*ctx->alpha,ctx->x2)); |
212 | |||
213 |
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.
|
161844 | PetscCall(MatMult(ctx->T,ctx->x2,ctx->y2)); |
214 |
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.
|
161844 | PetscCall(VecScale(ctx->y2,ctx->tau2)); |
215 |
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.
|
161844 | PetscCall(VecAXPY(ctx->y2,-ctx->beta,ctx->x1)); |
216 |
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.
|
161844 | PetscCall(VecAXPY(ctx->y2,-ctx->alpha*ctx->alpha+ctx->sigma,ctx->x2)); |
217 | |||
218 |
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.
|
161844 | PetscCall(VecRestoreArrayRead(x,&px)); |
219 |
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.
|
161844 | PetscCall(VecRestoreArray(y,&py)); |
220 |
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.
|
161844 | PetscCall(VecResetArray(ctx->x1)); |
221 |
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.
|
161844 | PetscCall(VecResetArray(ctx->x2)); |
222 |
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.
|
161844 | PetscCall(VecResetArray(ctx->y1)); |
223 |
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.
|
161844 | PetscCall(VecResetArray(ctx->y2)); |
224 |
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.
|
27172 | PetscFunctionReturn(PETSC_SUCCESS); |
225 | } | ||
226 | |||
227 | 2465 | PetscErrorCode MatMultTranspose_Brussel(Mat A,Vec x,Vec y) | |
228 | { | ||
229 | 2465 | PetscInt n; | |
230 | 2465 | const PetscScalar *px; | |
231 | 2465 | PetscScalar *py; | |
232 | 2465 | CTX_BRUSSEL *ctx; | |
233 | |||
234 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2465 | PetscFunctionBeginUser; |
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.
|
2465 | PetscCall(MatShellGetContext(A,&ctx)); |
236 |
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.
|
2465 | PetscCall(MatGetLocalSize(ctx->T,&n,NULL)); |
237 |
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.
|
2465 | PetscCall(VecGetArrayRead(x,&px)); |
238 |
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.
|
2465 | PetscCall(VecGetArray(y,&py)); |
239 |
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.
|
2465 | PetscCall(VecPlaceArray(ctx->x1,px)); |
240 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2465 | PetscCall(VecPlaceArray(ctx->x2,px+n)); |
241 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
|
2465 | PetscCall(VecPlaceArray(ctx->y1,py)); |
242 |
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.
|
2465 | PetscCall(VecPlaceArray(ctx->y2,py+n)); |
243 | |||
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.
|
2465 | PetscCall(MatMultTranspose(ctx->T,ctx->x1,ctx->y1)); |
245 |
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.
|
2465 | PetscCall(VecScale(ctx->y1,ctx->tau1)); |
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.
|
2465 | PetscCall(VecAXPY(ctx->y1,ctx->beta-1.0+ctx->sigma,ctx->x1)); |
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.
|
2465 | PetscCall(VecAXPY(ctx->y1,-ctx->beta,ctx->x2)); |
248 | |||
249 |
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.
|
2465 | PetscCall(MatMultTranspose(ctx->T,ctx->x2,ctx->y2)); |
250 |
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.
|
2465 | PetscCall(VecScale(ctx->y2,ctx->tau2)); |
251 |
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.
|
2465 | PetscCall(VecAXPY(ctx->y2,ctx->alpha*ctx->alpha,ctx->x1)); |
252 |
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.
|
2465 | PetscCall(VecAXPY(ctx->y2,-ctx->alpha*ctx->alpha+ctx->sigma,ctx->x2)); |
253 | |||
254 |
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.
|
2465 | PetscCall(VecRestoreArrayRead(x,&px)); |
255 |
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.
|
2465 | PetscCall(VecRestoreArray(y,&py)); |
256 |
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.
|
2465 | PetscCall(VecResetArray(ctx->x1)); |
257 |
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.
|
2465 | PetscCall(VecResetArray(ctx->x2)); |
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.
|
2465 | PetscCall(VecResetArray(ctx->y1)); |
259 |
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.
|
2465 | PetscCall(VecResetArray(ctx->y2)); |
260 |
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.
|
493 | PetscFunctionReturn(PETSC_SUCCESS); |
261 | } | ||
262 | |||
263 | 10 | PetscErrorCode MatGetDiagonal_Brussel(Mat A,Vec diag) | |
264 | { | ||
265 | 10 | Vec d1,d2; | |
266 | 10 | PetscInt n; | |
267 | 10 | PetscScalar *pd; | |
268 | 10 | MPI_Comm comm; | |
269 | 10 | CTX_BRUSSEL *ctx; | |
270 | |||
271 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
10 | PetscFunctionBeginUser; |
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.
|
10 | PetscCall(MatShellGetContext(A,&ctx)); |
273 |
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(PetscObjectGetComm((PetscObject)A,&comm)); |
274 |
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(MatGetLocalSize(ctx->T,&n,NULL)); |
275 |
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(VecGetArray(diag,&pd)); |
276 |
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(VecCreateMPIWithArray(comm,1,n,PETSC_DECIDE,pd,&d1)); |
277 |
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(VecCreateMPIWithArray(comm,1,n,PETSC_DECIDE,pd+n,&d2)); |
278 | |||
279 |
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(VecSet(d1,-2.0*ctx->tau1 + ctx->beta - 1.0 + ctx->sigma)); |
280 |
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(VecSet(d2,-2.0*ctx->tau2 - ctx->alpha*ctx->alpha + ctx->sigma)); |
281 | |||
282 |
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(VecDestroy(&d1)); |
283 |
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(VecDestroy(&d2)); |
284 |
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(VecRestoreArray(diag,&pd)); |
285 |
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.
|
2 | PetscFunctionReturn(PETSC_SUCCESS); |
286 | } | ||
287 | |||
288 | /*TEST | ||
289 | |||
290 | test: | ||
291 | suffix: 1 | ||
292 | args: -n 50 -eps_nev 4 -eps_two_sided {{0 1}} -eps_type {{krylovschur lapack}} -terse | ||
293 | requires: !single | ||
294 | filter: grep -v method | ||
295 | |||
296 | test: | ||
297 | suffix: 2 | ||
298 | args: -eps_nev 8 -eps_max_it 300 -eps_target -28 -rg_type interval -rg_interval_endpoints -40,-20,-.1,.1 -terse | ||
299 | requires: !single | ||
300 | |||
301 | test: | ||
302 | suffix: 3 | ||
303 | args: -n 50 -eps_nev 4 -eps_balance twoside -terse | ||
304 | requires: double | ||
305 | filter: grep -v method | ||
306 | output_file: output/ex9_1.out | ||
307 | |||
308 | test: | ||
309 | suffix: 4 | ||
310 | args: -eps_smallest_imaginary -eps_ncv 24 -terse | ||
311 | requires: !complex !single | ||
312 | |||
313 | test: | ||
314 | suffix: 4_complex | ||
315 | args: -eps_smallest_imaginary -eps_ncv 24 -terse | ||
316 | requires: complex !single | ||
317 | |||
318 | test: | ||
319 | suffix: 5 | ||
320 | args: -eps_nev 4 -eps_target_real -eps_target -3 -terse | ||
321 | requires: !single | ||
322 | |||
323 | test: | ||
324 | suffix: 6 | ||
325 | args: -eps_nev 2 -eps_target_imaginary -eps_target 3i -terse | ||
326 | requires: complex !single | ||
327 | |||
328 | test: | ||
329 | suffix: 7 | ||
330 | args: -n 40 -eps_nev 1 -eps_type arnoldi -eps_smallest_real -eps_refined -eps_ncv 42 -eps_max_it 300 -terse | ||
331 | requires: double | ||
332 | |||
333 | test: | ||
334 | suffix: 8 | ||
335 | args: -eps_nev 2 -eps_target -30 -eps_type jd -st_matmode shell -eps_jd_fix 0.0001 -eps_jd_const_correction_tol 0 -terse | ||
336 | requires: !single | ||
337 | filter: sed -e "s/[+-]0\.0*i//g" | ||
338 | timeoutfactor: 2 | ||
339 | |||
340 | test: | ||
341 | suffix: 9 | ||
342 | args: -eps_largest_imaginary -eps_ncv 24 -terse | ||
343 | requires: !single | ||
344 | |||
345 | TEST*/ | ||
346 |