Fix missing import in finiterectlat-scatter.py
[qpms.git] / tests / tbeyn.c
blob62117de9cb1f4a8c05873aa1f1f6cab64b9241e1
1 #include <qpms/beyn.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <stdlib.h>
6 // Matrix as in Beyn, section 4.11
7 int M_function(complex double *target, const size_t m, const complex double z, void *no_params) {
8 complex double d = 2*m - 4*z / (6*m);
9 complex double od = -((double)m) - z / (6*m);
11 memset(target, 0, m*m*sizeof(complex double));
12 for (int i = 0; i < m; ++i) {
13 target[i*m + i] = d;
14 if(i > 0) target[i*m + i-1] = od;
15 if(i < m - 1) target[i*m + i+1] = od;
17 target[m*(m-1) + m-1] = d/2 + z/(z-1);
19 return 0;
22 int main() {
23 complex double z0 = 150+2*I;
24 double Rx = 148, Ry = 148;
25 int L = 10, N = 50, dim = 400;
26 beyn_contour_t *contour = beyn_contour_ellipse(z0, Rx, Ry, N);
28 beyn_result_t *result =
29 beyn_solve(dim, L, M_function, NULL /*M_inv_Vhat_function*/, NULL /*params*/,
30 contour, 1e-4, 1, 1e-4);
31 printf("Found %zd eigenvalues:\n", result->neig);
32 for (size_t i = 0; i < result->neig; ++i) {
33 complex double eig = result->eigval[i];
34 printf("%zd: %g%+gj\n", i, creal(eig), cimag(eig));
36 free(contour);
37 beyn_result_free(result);
38 return 0;