def _create_boundary_region_from_boundary_layers(boundary_layers, gv): br = mp.boundary_region() for layer in boundary_layers: if isinstance(layer, Absorber): continue boundary_region_args = [ mp.boundary_region.PML, layer.thickness, layer.r_asymptotic, layer.mean_stretch, mp.py_pml_profile, layer.pml_profile, 1 / 3, # TODO(chogan): Call adaptive_integration instead of hard-coding integral 1 / 4, # TODO(chogan): Call adaptive_integration instead of hard-coding integral ] if layer.direction == -1: d = mp.start_at_direction(gv.dim) loop_stop_directi = mp.stop_at_direction(gv.dim) while d < loop_stop_directi: if layer.side == -1: b = mp.High loop_stop_bi = mp.Low while b != loop_stop_bi: br += mp.boundary_region(*(boundary_region_args + [d, b])) b = (b + 1) % 2 loop_stop_bi = mp.High else: br += mp.boundary_region(*(boundary_region_args + [d, layer.side])) d += 1 else: if layer.side == -1: b = mp.High loop_stop_bi = mp.Low while b != loop_stop_bi: br += mp.boundary_region(*(boundary_region_args + [layer.direction, b])) b = (b + 1) % 2 loop_stop_bi = mp.High else: br += mp.boundary_region(*(boundary_region_args + [layer.direction, layer.side])) return br
def _create_boundary_region_from_boundary_layers(boundary_layers, gv): br = mp.boundary_region() for layer in boundary_layers: if isinstance(layer, Absorber): continue boundary_region_args = [ mp.boundary_region.PML, layer.thickness, layer.R_asymptotic, layer.mean_stretch, mp.py_pml_profile, layer.pml_profile, 1 / 3, 1 / 4, ] if layer.direction == mp.ALL: d = mp.start_at_direction(gv.dim) loop_stop_directi = mp.stop_at_direction(gv.dim) while d < loop_stop_directi: if layer.side == mp.ALL: b = mp.High loop_stop_bi = mp.Low while b != loop_stop_bi: br += mp.boundary_region(*(boundary_region_args + [d, b])) b = (b + 1) % 2 loop_stop_bi = mp.High else: br += mp.boundary_region(*(boundary_region_args + [d, layer.side])) d += 1 else: if layer.side == mp.ALL: b = mp.High loop_stop_bi = mp.Low while b != loop_stop_bi: br += mp.boundary_region(*(boundary_region_args + [layer.direction, b])) b = (b + 1) % 2 loop_stop_bi = mp.High else: br += mp.boundary_region(*(boundary_region_args + [layer.direction, layer.side])) return br