Skip to content

Commit d3f168c

Browse files
committed
use the full double-layer in source-proxy skeletonization
1 parent 8b17002 commit d3f168c

File tree

3 files changed

+16
-16
lines changed

3 files changed

+16
-16
lines changed

pytential/linalg/direct_solver_symbolic.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,16 @@ def prepare_expr(places, exprs, auto_where=None):
5454
return _prepare_expr(places, exprs, auto_where=auto_where)
5555

5656

57-
def prepare_proxy_expr(places, exprs, auto_where=None):
57+
def prepare_proxy_expr(
58+
places, exprs,
59+
auto_where=None,
60+
remove_transforms: bool = True):
5861
def _prepare_expr(expr):
5962
# remove all diagonal / non-operator terms in the expression
6063
expr = IntGTermCollector()(expr)
6164
# ensure all IntGs remove all the kernel derivatives
62-
expr = KernelTransformationRemover()(expr)
65+
if remove_transforms:
66+
expr = KernelTransformationRemover()(expr)
6367
# ensure all IntGs have their source and targets set
6468
expr = DOFDescriptorReplacer(auto_where[0], auto_where[1])(expr)
6569

pytential/linalg/skeletonization.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -446,9 +446,11 @@ def make_skeletonization_wrangler(
446446

447447
exprs = prepare_expr(places, exprs, auto_where)
448448
source_proxy_exprs = prepare_proxy_expr(
449-
places, exprs, (auto_where[0], PROXY_SKELETONIZATION_TARGET))
449+
places, exprs, (auto_where[0], PROXY_SKELETONIZATION_TARGET),
450+
remove_transforms=False)
450451
target_proxy_exprs = prepare_proxy_expr(
451-
places, exprs, (PROXY_SKELETONIZATION_SOURCE, auto_where[1]))
452+
places, exprs, (PROXY_SKELETONIZATION_SOURCE, auto_where[1]),
453+
remove_transforms=True)
452454

453455
# }}}
454456

pytential/symbolic/matrix.py

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,6 @@ def map_int_g(self, expr):
474474
expr.target.geometry, expr.target.discr_stage)
475475

476476
actx = self.array_context
477-
target_base_kernel = expr.target_kernel.get_base_kernel()
478477

479478
result = 0
480479
for density, kernel in zip(expr.densities, expr.source_kernels):
@@ -488,12 +487,10 @@ def map_int_g(self, expr):
488487

489488
# {{{ generator
490489

491-
base_kernel = kernel.get_base_kernel()
492-
493490
from sumpy.p2p import P2PMatrixGenerator
494491
mat_gen = P2PMatrixGenerator(actx.context,
495-
source_kernels=(base_kernel,),
496-
target_kernels=(target_base_kernel,),
492+
source_kernels=(kernel,),
493+
target_kernels=(expr.target_kernel,),
497494
exclude_self=self.exclude_self)
498495

499496
# }}}
@@ -503,7 +500,7 @@ def map_int_g(self, expr):
503500
# {{{ kernel args
504501

505502
# NOTE: copied from pytential.symbolic.primitives.IntG
506-
kernel_args = base_kernel.get_args() + base_kernel.get_source_args()
503+
kernel_args = kernel.get_args() + kernel.get_source_args()
507504
kernel_args = {arg.loopy_arg.name for arg in kernel_args}
508505

509506
kernel_args = _get_layer_potential_args(
@@ -651,7 +648,6 @@ def map_int_g(self, expr):
651648
expr.target.geometry, expr.target.discr_stage)
652649

653650
actx = self.array_context
654-
target_base_kernel = expr.target_kernel.get_base_kernel()
655651

656652
result = 0
657653
for kernel, density in zip(expr.source_kernels, expr.densities):
@@ -672,12 +668,10 @@ def map_int_g(self, expr):
672668

673669
# {{{ generator
674670

675-
base_kernel = kernel.get_base_kernel()
676-
677671
from sumpy.p2p import P2PMatrixSubsetGenerator
678672
mat_gen = P2PMatrixSubsetGenerator(actx.context,
679-
source_kernels=(base_kernel,),
680-
target_kernels=(target_base_kernel,),
673+
source_kernels=(kernel,),
674+
target_kernels=(expr.target_kernel,),
681675
exclude_self=self.exclude_self)
682676

683677
# }}}
@@ -687,7 +681,7 @@ def map_int_g(self, expr):
687681
# {{{ kernel args
688682

689683
# NOTE: copied from pytential.symbolic.primitives.IntG
690-
kernel_args = base_kernel.get_args() + base_kernel.get_source_args()
684+
kernel_args = kernel.get_args() + kernel.get_source_args()
691685
kernel_args = {arg.loopy_arg.name for arg in kernel_args}
692686

693687
kernel_args = _get_layer_potential_args(

0 commit comments

Comments
 (0)