From fb86b09c812197a13ec8eb550819116c50a004ad Mon Sep 17 00:00:00 2001 From: suzhaosenTim Date: Tue, 28 Oct 2025 15:09:04 -0400 Subject: [PATCH 1/9] Update kern.m --- chunkie/+chnk/+lap2d/kern.m | 47 ++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/chunkie/+chnk/+lap2d/kern.m b/chunkie/+chnk/+lap2d/kern.m index 248e32f..708d7b8 100644 --- a/chunkie/+chnk/+lap2d/kern.m +++ b/chunkie/+chnk/+lap2d/kern.m @@ -151,9 +151,54 @@ submat = coef(1)*reshape(permute(submat,[3,1,2]),2*nt,ns); submat = submat+coef(2)*reshape(permute(grad,[3,1,2]),2*nt,ns); + + + +if strcmpi(type,'sint') + %srcnorm = chnk.normal2d(srcinfo); + [s] = chnk.lap2d.green(src,targ); + rx = bsxfun(@minus,targ(1,:).',src(1,:)); + ry = bsxfun(@minus,targ(2,:).',src(2,:)); + nrt = rx.*targinfo.n(1,:).' + ry.*targinfo.n(2,:).'; + submat = nrt.*(s/2+1/(8*pi)); +end + +if strcmpi(type,'sintt') + %srcnorm = chnk.normal2d(srcinfo); + [s] = chnk.lap2d.green(src,targ); + rx = bsxfun(@minus,targ(1,:).',src(1,:)); + ry = bsxfun(@minus,targ(2,:).',src(2,:)); + nrt = rx.*srcinfo.n(1,:) + ry.*srcinfo.n(2,:); + submat = -nrt.*(s/2+1/(8*pi)); +end + +if strcmpi(type,'dint') + %srcnorm = chnk.normal2d(srcinfo); + [s] = chnk.lap2d.green(src,targ); + ntsx = bsxfun(@times,targinfo.n(1,:).',srcinfo.n(1,:)); + ntsy = bsxfun(@times,targinfo.n(2,:).',srcinfo.n(2,:)); + nts = ntsx+ntsy; + submat = -nts.*s; +end + +if strcmpi(type,'cint') + coef = ones(2,1); + if(nargin == 4); coef = varargin{1}; end + %srcnorm = chnk.normal2d(srcinfo); + [s] = chnk.lap2d.green(src,targ); + ntsx = bsxfun(@times,targinfo.n(1,:).',srcinfo.n(1,:)); + ntsy = bsxfun(@times,targinfo.n(2,:).',srcinfo.n(2,:)); + nts = ntsx+ntsy; + submat = -nts.*s; + + rx = bsxfun(@minus,targ(1,:).',src(1,:)); + ry = bsxfun(@minus,targ(2,:).',src(2,:)); + nrt = rx.*targinfo.n(1,:).' + ry.*targinfo.n(2,:).'; + submat = coef(1)*submat+coef(2)*(nrt.*(s/2+1/(8*pi))); +end + otherwise error('Unknown Laplace kernel type ''%s''.', type); end end - From 52ecbd93486db8dce0327e5b09185744d31b5a43 Mon Sep 17 00:00:00 2001 From: suzhaosenTim Date: Tue, 28 Oct 2025 15:20:46 -0400 Subject: [PATCH 2/9] add in tests on ellipse --- chunkie/+chnk/+lap2d/kern.m | 16 +++--- chunkie/demo/test_dint_kernel_ellipse.m | 58 ++++++++++++++++++++++ chunkie/demo/test_sint_kernel_ellipse.m | 66 +++++++++++++++++++++++++ 3 files changed, 131 insertions(+), 9 deletions(-) create mode 100644 chunkie/demo/test_dint_kernel_ellipse.m create mode 100644 chunkie/demo/test_sint_kernel_ellipse.m diff --git a/chunkie/+chnk/+lap2d/kern.m b/chunkie/+chnk/+lap2d/kern.m index 708d7b8..64f01e4 100644 --- a/chunkie/+chnk/+lap2d/kern.m +++ b/chunkie/+chnk/+lap2d/kern.m @@ -154,34 +154,32 @@ -if strcmpi(type,'sint') +case{'sint'} %srcnorm = chnk.normal2d(srcinfo); [s] = chnk.lap2d.green(src,targ); rx = bsxfun(@minus,targ(1,:).',src(1,:)); ry = bsxfun(@minus,targ(2,:).',src(2,:)); nrt = rx.*targinfo.n(1,:).' + ry.*targinfo.n(2,:).'; submat = nrt.*(s/2+1/(8*pi)); -end -if strcmpi(type,'sintt') + +case{'sintt'} %srcnorm = chnk.normal2d(srcinfo); [s] = chnk.lap2d.green(src,targ); rx = bsxfun(@minus,targ(1,:).',src(1,:)); ry = bsxfun(@minus,targ(2,:).',src(2,:)); nrt = rx.*srcinfo.n(1,:) + ry.*srcinfo.n(2,:); submat = -nrt.*(s/2+1/(8*pi)); -end -if strcmpi(type,'dint') + +case{'dint'} %srcnorm = chnk.normal2d(srcinfo); [s] = chnk.lap2d.green(src,targ); ntsx = bsxfun(@times,targinfo.n(1,:).',srcinfo.n(1,:)); ntsy = bsxfun(@times,targinfo.n(2,:).',srcinfo.n(2,:)); nts = ntsx+ntsy; submat = -nts.*s; -end - -if strcmpi(type,'cint') +case{'cint'} coef = ones(2,1); if(nargin == 4); coef = varargin{1}; end %srcnorm = chnk.normal2d(srcinfo); @@ -195,7 +193,7 @@ ry = bsxfun(@minus,targ(2,:).',src(2,:)); nrt = rx.*targinfo.n(1,:).' + ry.*targinfo.n(2,:).'; submat = coef(1)*submat+coef(2)*(nrt.*(s/2+1/(8*pi))); -end + otherwise error('Unknown Laplace kernel type ''%s''.', type); diff --git a/chunkie/demo/test_dint_kernel_ellipse.m b/chunkie/demo/test_dint_kernel_ellipse.m new file mode 100644 index 0000000..36f7770 --- /dev/null +++ b/chunkie/demo/test_dint_kernel_ellipse.m @@ -0,0 +1,58 @@ +clear + + +% test the volume integral of the double-layer in an ellipse +% + + +cparams = []; + +cparams.eps = 1e-6; +cparams.nover = 0; +cparams.maxchunklen = 0.5; % setting a chunk length helps when the + % frequency is known' + + + +chnkr = chunkerfunc(@(t) ellipse(t,4,1), cparams); + +figure(1) % plot the chunker-object (supposed to be a circle centered at 1 with radius 1) +clf +plot(chnkr, '-x') +hold on +quiver(chnkr) +axis equal + + +fkern = @(s,t) chnk.lap2d.kern(s,t,'d'); % double layer + +opts = []; +opts.sing = 'log'; + +mat = chunkermat(chnkr, fkern, opts); + +lhs = -(1/2).*eye(chnkr.npt) + mat ; + +nx = chnkr.n(1,:); ny = chnkr.n(2,:); + +rhs = chnkr.r(1,:).^2 - chnkr.r(2,:).^2; + + +rhs = rhs(:); + +rho = lhs\rhs; + + +kern_integral = @(s,t) chnk.lap2d.kern(s, t, 'dint'); % double-layer integration kernel + +kern_mat = chunkermat(chnkr, kern_integral, opts); +integrand = kern_mat*rho; + +numeric_result = chunkerintegral(chnkr, integrand); +analytic_result = 15*pi; + +abserr = abs(analytic_result - numeric_result); % absolute error +relerr = abs((numeric_result -analytic_result)/analytic_result); % rel error + +fprintf('absolute error %5.2e\n',abserr); +fprintf('relative error %5.2e\n',relerr); \ No newline at end of file diff --git a/chunkie/demo/test_sint_kernel_ellipse.m b/chunkie/demo/test_sint_kernel_ellipse.m new file mode 100644 index 0000000..a72c9f7 --- /dev/null +++ b/chunkie/demo/test_sint_kernel_ellipse.m @@ -0,0 +1,66 @@ +clear + + +% test the volume integral of the single-layer in an ellipse +% + +cparams = []; + +cparams.eps = 1e-6; +cparams.nover = 0; +cparams.maxchunklen = 0.5; + + + +chnkr = chunkerfunc(@(t) ellipse(t,2,1), cparams); + +figure(1) % plot the chunker-object (supposed to be a circle centered at 1 with radius 1) +clf +plot(chnkr, '-x') +hold on +quiver(chnkr) +axis equal + + +fkern = @(s,t) chnk.lap2d.kern(s,t,'sprime'); + +opts = []; +opts.sing = 'log'; + +mat = chunkermat(chnkr, fkern, opts); + +lhs = (1/2).*eye(chnkr.npt) + mat + onesmat(chnkr) ; + +nx = chnkr.n(1,:); ny = chnkr.n(2,:); + +rhs = 2.*chnkr.r(1,:).*nx - 2.*chnkr.r(2,:).*ny; + +rhs = rhs(:); + +rho = lhs\rhs; + +eval_kern = @(s,t) chnk.lap2d.kern(s,t, 's'); + +sol = chunkerkerneval(chnkr, eval_kern, rho,[0;0]); + + +true_sol = 0; + +uerr = sol - true_sol; % figuring out the extra constant in the interior Neumann problem + + + +kern_integral = @(s,t) chnk.lap2d.kern(s, t, 'sint'); % single layer integration kernel + +kern_mat = chunkermat(chnkr, kern_integral, opts); +integrand = kern_mat*rho; + +numeric_result = chunkerintegral(chnkr, integrand); +analytic_result = 3*pi/2 + uerr*2*pi; + +abserr = abs(analytic_result - numeric_result); % abs error + +relerr = abs((numeric_result -analytic_result)/analytic_result); % rel error + +fprintf('absolute error %5.2e\n',abserr); +fprintf('relative error %5.2e\n',relerr); From d26c5c0b24e39e898a1ae7d17c31bea0535b086f Mon Sep 17 00:00:00 2001 From: suzhaosenTim Date: Tue, 28 Oct 2025 15:24:37 -0400 Subject: [PATCH 3/9] Update test_sint_kernel_ellipse.m --- chunkie/demo/test_sint_kernel_ellipse.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chunkie/demo/test_sint_kernel_ellipse.m b/chunkie/demo/test_sint_kernel_ellipse.m index a72c9f7..0743ab7 100644 --- a/chunkie/demo/test_sint_kernel_ellipse.m +++ b/chunkie/demo/test_sint_kernel_ellipse.m @@ -14,7 +14,7 @@ chnkr = chunkerfunc(@(t) ellipse(t,2,1), cparams); -figure(1) % plot the chunker-object (supposed to be a circle centered at 1 with radius 1) +figure(1) % plot the chunker-object clf plot(chnkr, '-x') hold on From d790bff655057f0a77c0294cc5874af01e971d66 Mon Sep 17 00:00:00 2001 From: suzhaosenTim Date: Tue, 28 Oct 2025 15:25:16 -0400 Subject: [PATCH 4/9] Update test_dint_kernel_ellipse.m --- chunkie/demo/test_dint_kernel_ellipse.m | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/chunkie/demo/test_dint_kernel_ellipse.m b/chunkie/demo/test_dint_kernel_ellipse.m index 36f7770..344100c 100644 --- a/chunkie/demo/test_dint_kernel_ellipse.m +++ b/chunkie/demo/test_dint_kernel_ellipse.m @@ -9,14 +9,13 @@ cparams.eps = 1e-6; cparams.nover = 0; -cparams.maxchunklen = 0.5; % setting a chunk length helps when the - % frequency is known' +cparams.maxchunklen = 0.5; chnkr = chunkerfunc(@(t) ellipse(t,4,1), cparams); -figure(1) % plot the chunker-object (supposed to be a circle centered at 1 with radius 1) +figure(1) % plot the chunker-object clf plot(chnkr, '-x') hold on From b3448bf73759e4281d979563ed3e991518736717 Mon Sep 17 00:00:00 2001 From: suzhaosenTim Date: Tue, 28 Oct 2025 15:38:09 -0400 Subject: [PATCH 5/9] add in assert statements --- chunkie/demo/test_dint_kernel_ellipse.m | 5 +- chunkie/demo/test_sint_kernel_ellipse.m | 3 + .../dint_kernel_integration_ellipse_Test.m | 60 ++++++++++++++++ .../sint_kernel_integration_ellipse_Test.m | 69 +++++++++++++++++++ 4 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 devtools/test/dint_kernel_integration_ellipse_Test.m create mode 100644 devtools/test/sint_kernel_integration_ellipse_Test.m diff --git a/chunkie/demo/test_dint_kernel_ellipse.m b/chunkie/demo/test_dint_kernel_ellipse.m index 344100c..0147de4 100644 --- a/chunkie/demo/test_dint_kernel_ellipse.m +++ b/chunkie/demo/test_dint_kernel_ellipse.m @@ -54,4 +54,7 @@ relerr = abs((numeric_result -analytic_result)/analytic_result); % rel error fprintf('absolute error %5.2e\n',abserr); -fprintf('relative error %5.2e\n',relerr); \ No newline at end of file +fprintf('relative error %5.2e\n',relerr); + +assert(abserr<1e-9) +assert(relerr<1e-9) \ No newline at end of file diff --git a/chunkie/demo/test_sint_kernel_ellipse.m b/chunkie/demo/test_sint_kernel_ellipse.m index 0743ab7..c161334 100644 --- a/chunkie/demo/test_sint_kernel_ellipse.m +++ b/chunkie/demo/test_sint_kernel_ellipse.m @@ -64,3 +64,6 @@ fprintf('absolute error %5.2e\n',abserr); fprintf('relative error %5.2e\n',relerr); + +assert(abserr<1e-9) +assert(relerr<1e-9) diff --git a/devtools/test/dint_kernel_integration_ellipse_Test.m b/devtools/test/dint_kernel_integration_ellipse_Test.m new file mode 100644 index 0000000..0147de4 --- /dev/null +++ b/devtools/test/dint_kernel_integration_ellipse_Test.m @@ -0,0 +1,60 @@ +clear + + +% test the volume integral of the double-layer in an ellipse +% + + +cparams = []; + +cparams.eps = 1e-6; +cparams.nover = 0; +cparams.maxchunklen = 0.5; + + + +chnkr = chunkerfunc(@(t) ellipse(t,4,1), cparams); + +figure(1) % plot the chunker-object +clf +plot(chnkr, '-x') +hold on +quiver(chnkr) +axis equal + + +fkern = @(s,t) chnk.lap2d.kern(s,t,'d'); % double layer + +opts = []; +opts.sing = 'log'; + +mat = chunkermat(chnkr, fkern, opts); + +lhs = -(1/2).*eye(chnkr.npt) + mat ; + +nx = chnkr.n(1,:); ny = chnkr.n(2,:); + +rhs = chnkr.r(1,:).^2 - chnkr.r(2,:).^2; + + +rhs = rhs(:); + +rho = lhs\rhs; + + +kern_integral = @(s,t) chnk.lap2d.kern(s, t, 'dint'); % double-layer integration kernel + +kern_mat = chunkermat(chnkr, kern_integral, opts); +integrand = kern_mat*rho; + +numeric_result = chunkerintegral(chnkr, integrand); +analytic_result = 15*pi; + +abserr = abs(analytic_result - numeric_result); % absolute error +relerr = abs((numeric_result -analytic_result)/analytic_result); % rel error + +fprintf('absolute error %5.2e\n',abserr); +fprintf('relative error %5.2e\n',relerr); + +assert(abserr<1e-9) +assert(relerr<1e-9) \ No newline at end of file diff --git a/devtools/test/sint_kernel_integration_ellipse_Test.m b/devtools/test/sint_kernel_integration_ellipse_Test.m new file mode 100644 index 0000000..c161334 --- /dev/null +++ b/devtools/test/sint_kernel_integration_ellipse_Test.m @@ -0,0 +1,69 @@ +clear + + +% test the volume integral of the single-layer in an ellipse +% + +cparams = []; + +cparams.eps = 1e-6; +cparams.nover = 0; +cparams.maxchunklen = 0.5; + + + +chnkr = chunkerfunc(@(t) ellipse(t,2,1), cparams); + +figure(1) % plot the chunker-object +clf +plot(chnkr, '-x') +hold on +quiver(chnkr) +axis equal + + +fkern = @(s,t) chnk.lap2d.kern(s,t,'sprime'); + +opts = []; +opts.sing = 'log'; + +mat = chunkermat(chnkr, fkern, opts); + +lhs = (1/2).*eye(chnkr.npt) + mat + onesmat(chnkr) ; + +nx = chnkr.n(1,:); ny = chnkr.n(2,:); + +rhs = 2.*chnkr.r(1,:).*nx - 2.*chnkr.r(2,:).*ny; + +rhs = rhs(:); + +rho = lhs\rhs; + +eval_kern = @(s,t) chnk.lap2d.kern(s,t, 's'); + +sol = chunkerkerneval(chnkr, eval_kern, rho,[0;0]); + + +true_sol = 0; + +uerr = sol - true_sol; % figuring out the extra constant in the interior Neumann problem + + + +kern_integral = @(s,t) chnk.lap2d.kern(s, t, 'sint'); % single layer integration kernel + +kern_mat = chunkermat(chnkr, kern_integral, opts); +integrand = kern_mat*rho; + +numeric_result = chunkerintegral(chnkr, integrand); +analytic_result = 3*pi/2 + uerr*2*pi; + +abserr = abs(analytic_result - numeric_result); % abs error + +relerr = abs((numeric_result -analytic_result)/analytic_result); % rel error + +fprintf('absolute error %5.2e\n',abserr); +fprintf('relative error %5.2e\n',relerr); + +assert(abserr<1e-9) +assert(relerr<1e-9) From b20bb44c4ea7ca7a4c3b7f04edce0f5248df3fec Mon Sep 17 00:00:00 2001 From: suzhaosenTim Date: Tue, 28 Oct 2025 15:46:44 -0400 Subject: [PATCH 6/9] delete it --- chunkie/demo/test_dint_kernel_ellipse.m | 60 --------------------- chunkie/demo/test_sint_kernel_ellipse.m | 69 ------------------------- 2 files changed, 129 deletions(-) delete mode 100644 chunkie/demo/test_dint_kernel_ellipse.m delete mode 100644 chunkie/demo/test_sint_kernel_ellipse.m diff --git a/chunkie/demo/test_dint_kernel_ellipse.m b/chunkie/demo/test_dint_kernel_ellipse.m deleted file mode 100644 index 0147de4..0000000 --- a/chunkie/demo/test_dint_kernel_ellipse.m +++ /dev/null @@ -1,60 +0,0 @@ -clear - - -% test the volume integral of the double-layer in an ellipse -% - - -cparams = []; - -cparams.eps = 1e-6; -cparams.nover = 0; -cparams.maxchunklen = 0.5; - - - -chnkr = chunkerfunc(@(t) ellipse(t,4,1), cparams); - -figure(1) % plot the chunker-object -clf -plot(chnkr, '-x') -hold on -quiver(chnkr) -axis equal - - -fkern = @(s,t) chnk.lap2d.kern(s,t,'d'); % double layer - -opts = []; -opts.sing = 'log'; - -mat = chunkermat(chnkr, fkern, opts); - -lhs = -(1/2).*eye(chnkr.npt) + mat ; - -nx = chnkr.n(1,:); ny = chnkr.n(2,:); - -rhs = chnkr.r(1,:).^2 - chnkr.r(2,:).^2; - - -rhs = rhs(:); - -rho = lhs\rhs; - - -kern_integral = @(s,t) chnk.lap2d.kern(s, t, 'dint'); % double-layer integration kernel - -kern_mat = chunkermat(chnkr, kern_integral, opts); -integrand = kern_mat*rho; - -numeric_result = chunkerintegral(chnkr, integrand); -analytic_result = 15*pi; - -abserr = abs(analytic_result - numeric_result); % absolute error -relerr = abs((numeric_result -analytic_result)/analytic_result); % rel error - -fprintf('absolute error %5.2e\n',abserr); -fprintf('relative error %5.2e\n',relerr); - -assert(abserr<1e-9) -assert(relerr<1e-9) \ No newline at end of file diff --git a/chunkie/demo/test_sint_kernel_ellipse.m b/chunkie/demo/test_sint_kernel_ellipse.m deleted file mode 100644 index c161334..0000000 --- a/chunkie/demo/test_sint_kernel_ellipse.m +++ /dev/null @@ -1,69 +0,0 @@ -clear - - -% test the volume integral of the single-layer in an ellipse -% - -cparams = []; - -cparams.eps = 1e-6; -cparams.nover = 0; -cparams.maxchunklen = 0.5; - - - -chnkr = chunkerfunc(@(t) ellipse(t,2,1), cparams); - -figure(1) % plot the chunker-object -clf -plot(chnkr, '-x') -hold on -quiver(chnkr) -axis equal - - -fkern = @(s,t) chnk.lap2d.kern(s,t,'sprime'); - -opts = []; -opts.sing = 'log'; - -mat = chunkermat(chnkr, fkern, opts); - -lhs = (1/2).*eye(chnkr.npt) + mat + onesmat(chnkr) ; - -nx = chnkr.n(1,:); ny = chnkr.n(2,:); - -rhs = 2.*chnkr.r(1,:).*nx - 2.*chnkr.r(2,:).*ny; - -rhs = rhs(:); - -rho = lhs\rhs; - -eval_kern = @(s,t) chnk.lap2d.kern(s,t, 's'); - -sol = chunkerkerneval(chnkr, eval_kern, rho,[0;0]); - - -true_sol = 0; - -uerr = sol - true_sol; % figuring out the extra constant in the interior Neumann problem - - - -kern_integral = @(s,t) chnk.lap2d.kern(s, t, 'sint'); % single layer integration kernel - -kern_mat = chunkermat(chnkr, kern_integral, opts); -integrand = kern_mat*rho; - -numeric_result = chunkerintegral(chnkr, integrand); -analytic_result = 3*pi/2 + uerr*2*pi; - -abserr = abs(analytic_result - numeric_result); % abs error - -relerr = abs((numeric_result -analytic_result)/analytic_result); % rel error - -fprintf('absolute error %5.2e\n',abserr); -fprintf('relative error %5.2e\n',relerr); - -assert(abserr<1e-9) -assert(relerr<1e-9) From 246cc04d594485737d18022788f751f8cc65f9d4 Mon Sep 17 00:00:00 2001 From: suzhaosenTim Date: Tue, 28 Oct 2025 16:13:38 -0400 Subject: [PATCH 7/9] add in kernel explanation and clean up the tests --- chunkie/+chnk/+lap2d/kern.m | 7 ++++--- devtools/test/dint_kernel_integration_ellipse_Test.m | 8 ++++---- devtools/test/sint_kernel_integration_ellipse_Test.m | 8 ++++---- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/chunkie/+chnk/+lap2d/kern.m b/chunkie/+chnk/+lap2d/kern.m index 64f01e4..d6b22c9 100644 --- a/chunkie/+chnk/+lap2d/kern.m +++ b/chunkie/+chnk/+lap2d/kern.m @@ -153,7 +153,7 @@ - +% integral of the single layer case{'sint'} %srcnorm = chnk.normal2d(srcinfo); [s] = chnk.lap2d.green(src,targ); @@ -162,7 +162,7 @@ nrt = rx.*targinfo.n(1,:).' + ry.*targinfo.n(2,:).'; submat = nrt.*(s/2+1/(8*pi)); - +% ''adjoint'' of the previous one. case{'sintt'} %srcnorm = chnk.normal2d(srcinfo); [s] = chnk.lap2d.green(src,targ); @@ -171,7 +171,7 @@ nrt = rx.*srcinfo.n(1,:) + ry.*srcinfo.n(2,:); submat = -nrt.*(s/2+1/(8*pi)); - +% integral of the double layer case{'dint'} %srcnorm = chnk.normal2d(srcinfo); [s] = chnk.lap2d.green(src,targ); @@ -179,6 +179,7 @@ ntsy = bsxfun(@times,targinfo.n(2,:).',srcinfo.n(2,:)); nts = ntsx+ntsy; submat = -nts.*s; +% integral of the combined field (coef(1)* integral D + coef(2)*integral S) case{'cint'} coef = ones(2,1); if(nargin == 4); coef = varargin{1}; end diff --git a/devtools/test/dint_kernel_integration_ellipse_Test.m b/devtools/test/dint_kernel_integration_ellipse_Test.m index 0147de4..b1b33b8 100644 --- a/devtools/test/dint_kernel_integration_ellipse_Test.m +++ b/devtools/test/dint_kernel_integration_ellipse_Test.m @@ -1,9 +1,8 @@ -clear - - +dint_kernel_integration_ellipse_Test0(); % test the volume integral of the double-layer in an ellipse % +function dint_kernel_integration_ellipse_Test0() cparams = []; @@ -57,4 +56,5 @@ fprintf('relative error %5.2e\n',relerr); assert(abserr<1e-9) -assert(relerr<1e-9) \ No newline at end of file +assert(relerr<1e-9) +end \ No newline at end of file diff --git a/devtools/test/sint_kernel_integration_ellipse_Test.m b/devtools/test/sint_kernel_integration_ellipse_Test.m index c161334..c336402 100644 --- a/devtools/test/sint_kernel_integration_ellipse_Test.m +++ b/devtools/test/sint_kernel_integration_ellipse_Test.m @@ -1,9 +1,7 @@ -clear - - +sint_kernel_integration_ellipse_Test0(); % test the volume integral of the single-layer in an ellipse % - +function sint_kernel_integration_ellipse_Test0() cparams = []; cparams.eps = 1e-6; @@ -67,3 +65,5 @@ assert(abserr<1e-9) assert(relerr<1e-9) + +end From 81a4205cdbf157fa2bd00195d37b5ffcb3580872 Mon Sep 17 00:00:00 2001 From: suzhaosenTim Date: Tue, 28 Oct 2025 17:06:01 -0400 Subject: [PATCH 8/9] update the literal kernel function --- chunkie/@kernel/lap2d.m | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/chunkie/@kernel/lap2d.m b/chunkie/@kernel/lap2d.m index 62a95df..e5a2215 100644 --- a/chunkie/@kernel/lap2d.m +++ b/chunkie/@kernel/lap2d.m @@ -133,6 +133,35 @@ obj.sing = 'hs'; obj.opdims = [2,1]; + case {'sint', 's int'} + obj.type = 'sint'; + obj.eval = @(s,t) chnk.lap2d.kern(s, t, 'sint'); + obj.sing = 'log'; + obj.opdims = [1,1]; + + case {'sintt', 's int trans'} + obj.type = 'sint'; + obj.eval = @(s,t) chnk.lap2d.kern(s, t, 'sintt'); + obj.sing = 'log'; + obj.opdims = [1,1]; + + case {'dint', 'd int'} + obj.type = 'dint'; + obj.eval = @(s,t) chnk.lap2d.kern(s, t, 'dint'); + obj.sing = 'log'; + obj.opdims = [1,1]; + + case {'cint', 'c int'} + if ( nargin < 2 ) + warning('Missing combined layer parameter coefs. Defaulting to [1 1].'); + coefs = ones(2,1); + end + obj.type = 'cint'; + obj.params.coefs = coefs; + obj.eval = @(s,t) chnk.lap2d.kern(s, t, 'cint',coefs); + obj.sing = 'log'; + obj.opdims = [1,1]; + otherwise error('Unknown Laplace kernel type ''%s''.', type); From df3f3241c74c10ad717447b6e54571eb1abd2287 Mon Sep 17 00:00:00 2001 From: suzhaosenTim Date: Wed, 29 Oct 2025 14:31:29 -0400 Subject: [PATCH 9/9] add documentations at the top of kernel functions --- chunkie/+chnk/+lap2d/kern.m | 2 +- chunkie/@kernel/lap2d.m | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/chunkie/+chnk/+lap2d/kern.m b/chunkie/+chnk/+lap2d/kern.m index d6b22c9..83fcf40 100644 --- a/chunkie/+chnk/+lap2d/kern.m +++ b/chunkie/+chnk/+lap2d/kern.m @@ -162,7 +162,7 @@ nrt = rx.*targinfo.n(1,:).' + ry.*targinfo.n(2,:).'; submat = nrt.*(s/2+1/(8*pi)); -% ''adjoint'' of the previous one. +% transpose of the previous one. case{'sintt'} %srcnorm = chnk.normal2d(srcinfo); [s] = chnk.lap2d.green(src,targ); diff --git a/chunkie/@kernel/lap2d.m b/chunkie/@kernel/lap2d.m index e5a2215..3eedbb3 100644 --- a/chunkie/@kernel/lap2d.m +++ b/chunkie/@kernel/lap2d.m @@ -29,6 +29,21 @@ % % KERNEL.LAP2D('cg', coefs) or KERNEL.LAP2D('cgrad', coefs) constructs % the gradient of the combined-layer Laplace kernel with parameter coefs +% +% KERNEL.LAP2D('sint') or KERNEL.LAP2D('s int') constructs the volume +% integral of the single layer Laplace kernel +% +% KERNEL.LAP2D('sintt') or KERNEL.LAP2D('s int trans') constructs the transpose of the +% volume integral of the single layer Laplace kernel +% +% KERNEL.LAP2D('dint') or KERNEL.LAP2D('d int') constructs the volume +% integral of the double layer Laplace kernel +% +% KERNEL.LAP2D('cint', coefs) or KERNEL.LAP2D('c int', coefs) constructs the volume +% integral of the combined-layer Laplace kernel with parameter coefs, +% i.e. (coef(1)* KERNEL.LAP2D('dint') + coef(2)* KERNEL.LAP2D('sint')). If no +% value of coefs is specified the default is coefs = [1 1] +% % % See also CHNK.LAP2D.KERN.