|
7 | 7 |
|
8 | 8 | zk = norm(kvec);
|
9 | 9 |
|
10 |
| -cparams = []; cparams.maxchunklen = 2.0/real(zk); |
| 10 | +% define geometry and boundary conditions |
| 11 | +% (vertices defined by another function) |
| 12 | + |
| 13 | +cparams = []; cparams.eps = 1e-9; |
11 | 14 | chnkr = chunkerfunc(@(t) starfish(t),cparams);
|
| 15 | +chnkr = refine(chnkr,struct('nover',1)); |
12 | 16 |
|
13 | 17 | % solve and visualize the solution
|
14 | 18 |
|
15 | 19 | % build laplace dirichlet matrix
|
16 | 20 |
|
17 | 21 | % fkern = kernel('laplace','d');
|
18 |
| -fkern = kernel('helmholtz','c',zk,[1,-2i]); |
| 22 | +fkern = kernel('helmholtz','c',zk,[1.5,-2i]); |
19 | 23 | opts = [];
|
20 | 24 | start = tic; C = chunkermat(chnkr,fkern,opts);
|
21 | 25 | t1 = toc(start);
|
|
27 | 31 | sys = -0.5*eye(chnkr.npt) + C;
|
28 | 32 |
|
29 | 33 | % rhs = chnkr.data(1,:); rhs = rhs(:);
|
30 |
| -rhs = besselh(0,zk*abs((2+2.25*1i)-(chnkr.r(1,:)+1i*chnkr.r(2,:)))); rhs = rhs(:); |
| 34 | +rhs = besselh(0,zk*abs((1+1.25*1i)-(chnkr.r(1,:)+1i*chnkr.r(2,:)))); rhs = rhs(:); |
31 | 35 | start = tic; sol = gmres(sys,rhs,[],1e-14,100); t1 = toc(start);
|
32 | 36 |
|
33 | 37 | fprintf('%5.2e s : time for dense gmres\n',t1)
|
|
61 | 65 | t1 = toc(start);
|
62 | 66 | fprintf('%5.2e s : time for kerneval (Helsing-Ojala for near)\n',t1);
|
63 | 67 |
|
64 |
| -soltrue = besselh(0,zk*abs((2+2.25*1i)-(targets(1,in)+1i*targets(2,in)))); |
65 |
| - |
66 | 68 | start = tic;
|
67 | 69 | Csol = chunkerkerneval(chnkr,fkern,sol,targets(:,in)); t1 = toc(start);
|
68 | 70 | fprintf('%5.2e s : time for kerneval (adaptive for near)\n',t1);
|
69 | 71 |
|
70 | 72 | % Compare with reference solution Dsol
|
71 |
| -err = max(abs(Csol-Csolpquad))/max(abs(Csol)); |
72 |
| -err2 = max(abs(soltrue(:)-Csolpquad(:)))/max(abs(soltrue(:))); |
73 |
| -fprintf('%5.2e : Relative max error\n',err); |
| 73 | +rel_error = max(abs(Csol-Csolpquad))/max(abs(Csol)); |
| 74 | +fprintf('%5.2e : Relative max error\n',rel_error); |
74 | 75 | %
|
75 | 76 |
|
76 |
| -assert(err < 1e-10) |
| 77 | +assert(rel_error < 1e-10) |
| 78 | +% profile viewer |
0 commit comments