diff --git a/sumpy/tools.py b/sumpy/tools.py index 55f5540414a6ac8d3c6d40be51f061dea39dda74..14152d706b4f9f49ed61fadb1e5a42463f902350 100644 --- a/sumpy/tools.py +++ b/sumpy/tools.py @@ -933,74 +933,4 @@ def to_complex_dtype(dtype): # }}} - -# {{{ split_iname - -def split_iname( - kernel, iname, inner_length, *, - inner_tag=None, inner_iname=None, outer_iname=None): - """ - A custom split_iname that uses returns a kernel with two separate - domains for inner_iname and outer_iname with the domain for inner_iname - being independent of outer_iname and the domain for outer_iname being - dependent on inner_iname. - """ - from loopy.isl_helpers import make_slab - import islpy as isl - - orig_program = kernel - if not inner_iname: - inner_iname = iname + "_inner" - if not outer_iname: - outer_iname = iname + "_outer" - - program = lp.split_iname(kernel, iname, inner_length, inner_tag=inner_tag, - inner_iname=inner_iname, outer_iname=outer_iname) - knl = program.default_entrypoint - - replace_domains = None - - orig_domains = list(orig_program.default_entrypoint.domains) - for domain in orig_domains: - var_dict = domain.get_var_dict() - if iname not in var_dict: - continue - dim_type, _ = var_dict[iname] - if domain.get_var_names(dim_type) == [iname]: - s = domain - s = s.add_dims(dim_type, 1) - s = s.add_dims(isl.dim_type.param, 1) - s = s.set_dim_name(isl.dim_type.param, s.dim(isl.dim_type.param) - 1, - inner_iname) - s = s.set_dim_name(dim_type, s.dim(dim_type) - 1, outer_iname) - space = s.get_space() - s = s.add_constraint(isl.Constraint.eq_from_names(space, { - iname: 1, - inner_iname: -1, - outer_iname: -inner_length})) - dup_iname_dim_type, dup_name_idx = space.get_var_dict()[iname] - outer_domain = s.project_out(dup_iname_dim_type, dup_name_idx, 1) - - s = domain - s = s.set_dim_name(dim_type, s.dim(dim_type) - 1, inner_iname) - s = make_slab(s.get_space(), inner_iname, 0, inner_length) - inner_domain = s.drop_unused_params() - replace_domains = [outer_domain, inner_domain] - break - - new_domains = list(knl.domains) - for i, domain in enumerate(new_domains): - var_dict = domain.get_var_dict() - if inner_iname not in var_dict or outer_iname not in var_dict: - continue - dim_type, _ = var_dict[inner_iname] - if domain.get_var_names(dim_type) == [outer_iname, inner_iname]: - new_domains[i] = replace_domains[0] - new_domains.insert(i, replace_domains[1]) - break - - return orig_program.with_kernel(knl.copy(domains=new_domains)) - -# }}} split_iname - # vim: fdm=marker